C语言复习资料网上编程作业(23题).doc

上传人:PIYPING 文档编号:10613798 上传时间:2021-05-26 格式:DOC 页数:33 大小:213.50KB
返回 下载 相关 举报
C语言复习资料网上编程作业(23题).doc_第1页
第1页 / 共33页
C语言复习资料网上编程作业(23题).doc_第2页
第2页 / 共33页
C语言复习资料网上编程作业(23题).doc_第3页
第3页 / 共33页
C语言复习资料网上编程作业(23题).doc_第4页
第4页 / 共33页
C语言复习资料网上编程作业(23题).doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《C语言复习资料网上编程作业(23题).doc》由会员分享,可在线阅读,更多相关《C语言复习资料网上编程作业(23题).doc(33页珍藏版)》请在三一文库上搜索。

1、2011-2012-1高级程序设计复习习题(初稿)第一部分:网上编程作业(23题)编程题1:sizeof测试字节数要求:编写程序,测试以下类型在内存中所占空间大小: char、int 、short 、long、unsigned int 、float 、double,输出时给出较清晰的提示信息。要求输出格式(GCC):sizeof(char)=1sizeof(int)=4sizeof(short)=2sizeof(long)=4sizeof(unsigned int)=4sizeof(float)=4sizeof(double)=8参考代码:#includeint main()printf(si

2、zeof(char)=%dn,sizeof(char);printf(sizeof(int)=%dn,sizeof(int);printf(sizeof(short)=%dn,sizeof(short);printf(sizeof(long)=%dn,sizeof(long);printf(sizeof(unsigned int)=%dn,sizeof(unsigned int);printf(sizeof(float)=%dn,sizeof(float);printf(sizeof(double)=%dn,sizeof(double);return 0;编程题2:输入输出练习要求:编写程序,

3、定义一个 int 型变量 a ,一个 float 型变量 b ,一个 double 型变量 c 。a 变量初始化,值为20; b 变量赋值,值为3.1415f, c 变量的值从键盘输入,调用 printf 函数输出三个变量的值,输出时给出较清晰的提示信息 。如输入:123.4则输出:value of a is: 20value of b is: 3.141500value of c is: 123.400000参考代码:#include int main() int a=20; float b; double c; b=3.1415f; scanf(%lf,&c); printf(value

4、of a is: %dn,a); printf(value of b is: %fn,b); printf(value of c is: %fn,c); return 0; 编程题3:用if语句求解分段函数要求:分段函数求解:输入 x ,计算并输出 y 的值: y=x+100 ( 当 x 20) y= x ( 当 2 0 x 100) y=x-100 ( 当 x 100) 测试用例的输入及输出结果如下: 测试用例:输入 测试用例:输出 -9 x=-9.000000, y=91.000000 78.97 x=78.970000, y=78.970000 235.98 x=235.980000,

5、y=135.980000 参考代码:#include int main() double x,y; scanf(%lf,&x); if(x20) y=x+100; else if(x=100) y=x; else y=x-100; printf(x=%f, y=%fn,x,y); return 0; 编程题4:打印每月有几天要求:读入一个年份和月份,打印出该月有多少天(考虑闰年),用 switch 语句实现选择结构。 说明:( 1 ) scanf 之前无需用 printf 给提示信息 。 测试用例的输入及输出结果如下 : 测试用例:输入 测试用例:输出 2009 10 2009-10-31 2

6、009 2 2009-2-28 2008 2 2008-2-29 参考代码:#include void main() int i,j; scanf(%d%d,&i,&j); switch(j) case 1: case 3: case 5: case 7: case 8: case 10: case 12:printf(%d-%d-31n,i,j);break; case 2:if(i%400=0|(i%4=0&i%100!=0) printf(%d-%d-29n,i,j); else printf(%d-%d-28n,i,j);break; case 4: case 6: case 9: c

7、ase 11:printf(%d-%d-30n,i,j);break; default:printf(您的输入有误,请重新1-12之间的月份:n);break; 编程题5:输出所有的3位数字的质数要求:以每行 5 个的形式输出所有的 3 位数字的质数。 说明:( 1 )每个质数按 ”%6d” 格式输出。 ( 2 )最后一个质数后面要输出一个换行符。 参考代码:#include #include int main() int x,y,n=0; double k; for(x=100; x1000; x+) k=sqrt(x); for(y=2; yk) n+; printf(%6d,x); if

8、(n%5=0) printf(n); printf(n); return 0; 编程题6:数列求和要求:输入一个双精度实数x,计算并输出下式的值,直到最后一项的绝对值小于10-5(保留两位小数),s=x-x2/2!+x3/3!-x4/4!+ 说明:(1)scanf之前无需用printf给提示信息。 (2)求和结果用%.2f控制输出格式。 测试用例的输入及输出结果如下: 测试用例:输入 测试用例:输出 1 sum=0.63 3.5 sum=0.97 5.0 sum=0.99 参考代码:#include #include int main() double x,t=1,i=1,sum=0; int

9、 sign=1; scanf(%lf,&x); do t=t*x/i; sum+=sign*t; sign=-sign; i+; while(fabs(t=1e-5); printf(sum=%.2fn,sum); return 0; 编程题7:求平均值要求:编程从键盘上输入 20 个整数,求去掉最大值和最小值以后那些元素的平均值。 说明:( 1 ) scanf 之前无需用 printf 给提示信息。 测试用例的输入及输出结果如下 : 测试用例:输入 测试用例:输出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 count=18,aver

10、age=10.500000 90 80 70 100 50 60 70 100 75 85 85 90 80 70 65 50 60 70 80 90 count=16,average=76.250000 参考代码:#include int main() int i,a20,max,min,sum=0,count=0; for(i=0;i20;i+) scanf(%d,&ai); max=min=a0; for(i=0;imax)max=ai; else if(aimin)min=ai; for(i=0;i20;i+) if(ai!=max&ai!=min) sum+=ai; count+;

11、printf(count=%d,average=%fn,count,sum*1.0/count); return 0; 编程题8:用数组实现Fibonacci数列要求:编程首先计算Fibonacci数列1,1,2,3,5,8,13,21,.的前n项(n不超过40)存入一维整型数组f中,再按%12d的格式输出每项的值,每6项换一行。 说明:(1)输入数列项n ,在scanf前不能用printf输出提示信息。 测试用例:输入 测试用例:输出 5 1 1 2 3 5 10 1 1 2 3 5 8 13 21 34 55 参考代码:#include int main() int i,n,f39,cou

12、nt=0; scanf(%d,&n); f0=1; f1=1; for(i=2;in;i+) fi=fi-1+fi-2; for(i=0;in;i+) printf(%12d,fi); count+; if(count%6=0) printf(n); printf(n); return 0; 编程题9:删除所有相同值的元素要求:从键盘输入整型一维数组中a中的各元素(以元素0结束,0是最后一个有效果元素,元素个数不超过20个),再输入一个待删除的整数。先输出删除前的所有数组元素。从数组中删除所有的元素值等于该整数的元素,如果元素不存在,则输出提示信息:does not exist,no oper

13、ating! 否则输出删除后的所有数组元素说明:(1)数组的定义:int a20;(2)应该用一个变量存储实际有效果的元素个数(含0)(3)元素的输出用%5d的格式控制(4)scanf之前不能用printf输出提示信息测试用例:输入 测试用例:输出 2 3 4 5 3 2 04Before delete,elements are:2 3 4 5 3 2 0After delete,elements are: 2 3 5 3 2 02 3 4 2 05Before delete,elements are:2 3 4 2 0does not exist,no operating!2 3 3 4 3

14、 5 3 7 03Before delete,elements are: 2 3 3 4 3 5 3 7 0After delete,elements are:2 4 5 7 0参考代码:int main( ) int a20,b20; int i,k=0,x,j,m=0,h=0; for(i=0;i20;i+) scanf(%d,&ai); k+; if(ai=0) break; printf(Before delete,elements are:n); for(i=0;ik;i+) printf(%5d,ai); printf(n); scanf(%d,&x); for(i=0;ik&ai

15、!=x;i+); if(i=k) printf(does not exist,no operating!n); return 0; for(i=0;ik;i+) if(ai=x) h+; bm=i; m+; for(m=0;mh;m+) for(j=bm;jk;j+) aj-m=aj-m+1; printf(After delete,elements are:n); for(i=0;ik-h;i+) printf(%5d,ai); printf(n); return 0; 编程题10:动态一维数组的定义与实现要求:在 main ()函数中定义指针变量 int *array 用来实现动态一维数组

16、,数组的元素个数由从键盘输入的整数 n 决定;分别用两个函数实现产生数组的元素及输出元素,最后释放动态数组空间 说明: 定义函数 void create ( int a , int n ),生成数组 a 中 n 个元素 , 元素值依次为 1,2,3n 定义函数 void print ( int a , int n ),输出元素的语句为: printf(%d,ai); ,输出所有的元素结束后用printf(n);换行。测试用例:输入 测试用例:输出 5 1,2,3,4,5, 8 1,2,3,4,5,6,7,8, 参考代码:#include #include #include void creat

17、e (int a,int n); void print (int a,int n); int main() int *array,n; scanf(%d,&n); array=(int*)malloc(n*4); create (array,n); print (array,n); printf(n); return 0; void create (int a,int n) int i,j=1; for(i=0;in;i+,j+) ai=j; void print (int a,int n) int i; for(i=0;in;i+) printf(%d,ai); #include #incl

18、ude #include void create (int a,int n); void print (int a,int n); int main() int *array,n; scanf(%d,&n); array=(int*)malloc(n*4); create (array,n); print (array,n); printf(n); return 0; void create (int a,int n) int i,j=1; for(i=0;in;i+,j+) ai=j; void print (int a,int n) int i; for(i=0;in;i+) printf

19、(%d,ai); #include#includevoid Find(int *a,int *max,int *maxPos,int *min,int *minPos);main()int array10=23,45,90,-9,43,90,4,2,-9;int *a=array;int max,min,maxPos,minPos;Find(array,&max,&maxPos,&min,&minPos);printf(max=%d, maxPos=%d, min=%d, minPos=%dn,max,maxPos,min,minPos);return 0;void Find(int *a,i

20、nt *max,int *maxPos,int *min,int *minPos) int i;*max=*min=a0;*maxPos=*minPos=0;for(i=1;i*max)*max=ai; *maxPos=i; else if(ai100101;测试用例:输入 测试用例:输出 045 100101 145 110010110171000001111参考代码:#includeint octtobin(int n,int*p) int i,r,k=0;while(n) r=n%8; for(i=1;i=0;i-) printf(%d,arrayi); printf(n); retur

21、n 0;编程题13:最大公约数。要求:实现求两个正整数的最大公约数。说明:(1)从键盘输入两个正整数; (2)输出这两个正整数的最大公约数;测试用例:输入 测试用例:输出 345 258 gcd=333 33 gcd=3324 72gcd=24参考代码:#includeint main()int a,b,c;scanf(%d%d,&a,&b);if (a=0|b=0)printf(error input!n);return 0;c=a%b;while(c)a=b;b=c;c=a%b;printf(gcd=%dn,b);return 0;编程题14:三角形面积。要求:任意 三角形 的 面积 求解

22、公式 为 : Area= sqrt(s(s-a)(s-b)(s-c)(sqrt ()是求根公式 ) , 其中 s =(a+b+c)/2 。写程序,在程序中用带实参的宏名来求面积 area 。 说明:( 1 )从键盘输入三角形的三条边; ( 2 )输出保留小数点后三位; 测试用例:输入 测试用例:输出 3 4 5 Area=6.000 1 4 5 Error!Please input again. 5.5 6.4 9 Area=17.429 -1 0 2 Error!Please input again. 参考代码:#include#includeint main() double a, b,

23、c, p, s; scanf(%lf%lf%lf, &a, &b, &c); if(a+bc&a-bc) p = (a+b+c)/2; s = sqrt( p*(p-a)*(p-b)*(p-c); printf(Area=%.3fn, s); else printf(Error!Please input again.n); return 0;编程题15:带参宏定义。要求:给年份year定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y。 说明:(1)从键盘输入四位数的年份;(2)输出该年份是否是闰年;测试用例:输入 测试用例:输出 2005 2005 is no

24、t a leap year!2008 2008 is a leap year!158Input error!11159Input error!1900 1900 is not a leap year!参考代码:#include#define LEAP_YEAR(y)(y)%400=0|(y)%4=0&(y)%100!=0int main() int year; scanf(%d,&year); if(year=1000&year=3000) if(LEAP_YEAR(year) printf(%d is a leap year!n,year); else printf(%d is not a

25、leap year!n,year); else printf(Input error!n); return 0;编程题16:求平均值和最大值要求:某学习小组有3个人,每个人的信息包括:学号、姓名和成绩。要求从键盘上输入他们的信息,并求出平均成绩以及最高成绩者的信息。 说明:1学生结构体类型typedef struct Student int num;char name20;int score;STU; 2平均值保留2位小数; 3输出最高成绩者信息时各项之间用“t”隔开。测试用例:输入 测试用例:输出 1 hangsan 86 2 lisi 84 3 wanger 93The average s

26、core=87.67The student who has the highest score is:3 wanger 93参考代码:#includetypedef struct studentint num;char name10;int score;st;void input(st*t,int n)int i;for(i=0;in;i+)scanf(%d,&ti.num);getchar();scanf(%s,ti.name);scanf(%d,&ti.score); st*average(st*t,int n,double*av) int i,sum=0; st*best; for (i

27、=0;in;i+) sum+=ti.score; best=t; for(i=0;ibest-score) best=t+i; *av=sum*1.0/n; return best; int main() st team3,*best=NULL; double av; input(team,3); best=average(team,3,&av); printf(The average score=%.2fn,av); printf(The student who has the highest score is:n); printf(%dt%st%dn,best-num,best-name,

28、best-score); return 0; 编程题17:根据输入日期输出对应季节要求:定义一个表示一年四季的枚举类型,然后从键盘上输入一年中的日期(包括年、月、日信息),输出对应的季节。 说明:1 季节枚举类型enum Seasons Spring,Summer,Autumn,Winter;2 日期结构体struct Dateint year,month,day;3 根据月份信息判断相应季节。测试用例:输入 测试用例:输出 2009 10 28Now it is Autumn参考代码:#includeenum season Spring,Summer,Autumn,Winter;struct

29、 Dateint year,month,day;int main()struct Date d;enum season s; scanf(%d%d%d,&d.year,&d.month,&d.day);if(d.month=3&d.month=6&d.month=9&d.month=11) s=Autumn; else if(d.month=12|d.month=1|d.month=2)s=Winter;switch(s)case Spring:printf(Now it is Springn);break; case Summer:printf(Now it is Summern);brea

30、k; case Autumn:printf(Now it is Autumnn);break; case Winter:printf(Now it is Wintern);break;return 0;编程题18:进制转换要求:编写程序,以字符形式输入一个四位十六进制数,将其变换为一个十进制整数后输出。 说明:1 以字符串方式存储一个四位十六进制数,其中的每一个字符都必须是十六进制数中合法的字符,应有相应语句做出判断;2 十六进制转换为十进制,要考虑0-9,A-F,a-f之间相应的表示和转换;测试用例:输入 测试用例:输出 6D3fThe dec data is:2796745fsOrigin

31、al data error参考代码:#includeint input(char*s)int i=0;char c;doc=getchar();if(c=0&c=A&c=a&c=f)si+=c;elsereturn 0;while(i=0&si=A&si=a&si=q时表明交换结束。测试用例:输入 测试用例:输出 abcdefggfedcba参考代码:#include#includevoid reverse(char*s)char*p=s,*q,t;int len=strlen(s);q=p+len-1;while(pq)t=*p;*p=*q;*q=t;p+;q-;int main()char s100;gets(s); reverse(s);puts(s);return 0;编程题20:字符串转换 要求:输入一个字符串(长度小于50),然后过滤掉所有的非数字字符,得到由数字字符组成的字符串,将其转化为double型结果输出。 测试用例:输入 测试用例:输出 !1 2 #3 $4 %5 6 &7 *8 (9 )01234567890.0000abcdEFGHthe digital string is empty!987aaa654bbb321ccc987654321.0000000

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1