您好,欢迎访问三七文档
2011-2012-1高级程序设计复习习题(初稿)第一部分:网上编程作业(23题)编程题1:sizeof测试字节数要求:编写程序,测试以下类型在内存中所占空间大小:char、int、short、long、unsignedint、float、double,输出时给出较清晰的提示信息。要求输出格式(GCC):sizeof(char)=1sizeof(int)=4sizeof(short)=2sizeof(long)=4sizeof(unsignedint)=4sizeof(float)=4sizeof(double)=8参考代码:#includestdio.hintmain(){printf(sizeof(char)=%d\n,sizeof(char));printf(sizeof(int)=%d\n,sizeof(int));printf(sizeof(short)=%d\n,sizeof(short));printf(sizeof(long)=%d\n,sizeof(long));printf(sizeof(unsignedint)=%d\n,sizeof(unsignedint));printf(sizeof(float)=%d\n,sizeof(float));printf(sizeof(double)=%d\n,sizeof(double));return0;}编程题2:输入输出练习要求:编写程序,定义一个int型变量a,一个float型变量b,一个double型变量c。a变量初始化,值为20;b变量赋值,值为3.1415f,c变量的值从键盘输入,调用printf函数输出三个变量的值,输出时给出较清晰的提示信息。如输入:123.4回车则输出:valueofais:20valueofbis:3.141500valueofcis:123.400000参考代码:#includestdio.hintmain(){inta=20;floatb;doublec;b=3.1415f;scanf(%lf,&c);printf(valueofais:%d\n,a);printf(valueofbis:%f\n,b);printf(valueofcis:%f\n,c);return0;}编程题3:用if语句求解分段函数要求:分段函数求解:输入x,计算并输出y的值:y=x+100(当x<20)y=x(当20≤x≤100)y=x-100(当x>100)测试用例的输入及输出结果如下:测试用例:输入测试用例:输出-9回车x=-9.000000,y=91.00000078.97回车x=78.970000,y=78.970000235.98回车x=235.980000,y=135.980000参考代码:#includestdio.hintmain(){doublex,y;scanf(%lf,&x);if(x20)y=x+100;elseif(x=100)y=x;elsey=x-100;printf(x=%f,y=%f\n,x,y);return0;}编程题4:打印每月有几天要求:读入一个年份和月份,打印出该月有多少天(考虑闰年),用switch语句实现选择结构。说明:(1)scanf之前无需用printf给提示信息。测试用例的输入及输出结果如下:测试用例:输入测试用例:输出200910回车2009-10-3120092回车2009-2-2820082回车2008-2-29参考代码:#includestdio.hvoidmain(){inti,j;{scanf(%d%d,&i,&j);switch(j){case1:case3:case5:case7:case8:case10:case12:printf(%d-%d-31\n,i,j);break;case2:if(i%400==0||(i%4==0&&i%100!=0))printf(%d-%d-29\n,i,j);elseprintf(%d-%d-28\n,i,j);break;case4:case6:case9:case11:printf(%d-%d-30\n,i,j);break;default:printf(您的输入有误,请重新1-12之间的月份:\n);break;}}}编程题5:输出所有的3位数字的质数要求:以每行5个的形式输出所有的3位数字的质数。说明:(1)每个质数按”%6d”格式输出。(2)最后一个质数后面要输出一个换行符。参考代码:#includestdio.h#includemath.hintmain(){intx,y,n=0;doublek;for(x=100;x1000;x++){k=sqrt(x);for(y=2;y=k;y++){if(x%y==0)break;}if(yk){n++;printf(%6d,x);if(n%5==0)printf(\n);}}printf(\n);return0;}编程题6:数列求和要求:输入一个双精度实数x,计算并输出下式的值,直到最后一项的绝对值小于10-5(保留两位小数),s=x-x2/2!+x3/3!-x4/4!+…说明:(1)scanf之前无需用printf给提示信息。(2)求和结果用%.2f控制输出格式。测试用例的输入及输出结果如下:测试用例:输入测试用例:输出1回车sum=0.633.5回车sum=0.975.0回车sum=0.99参考代码:#includestdio.h#includemath.hintmain(){doublex,t=1,i=1,sum=0;intsign=1;scanf(%lf,&x);do{t=t*x/i;sum+=sign*t;sign=-sign;i++;}while(fabs(t=1e-5));printf(sum=%.2f\n,sum);return0;}编程题7:求平均值要求:编程从键盘上输入20个整数,求去掉最大值和最小值以后那些元素的平均值。说明:(1)scanf之前无需用printf给提示信息。测试用例的输入及输出结果如下:测试用例:输入测试用例:输出1234567891011121314151617181920回车count=18,average=10.500000908070100506070100758585908070655060708090回车count=16,average=76.250000参考代码:#includestdio.hintmain(){inti,a[20],max,min,sum=0,count=0;for(i=0;i20;i++)scanf(%d,&a[i]);max=min=a[0];for(i=0;i20;i++)if(a[i]max)max=a[i];elseif(a[i]min)min=a[i];for(i=0;i20;i++)if(a[i]!=max&&a[i]!=min){sum+=a[i];count++;}printf(count=%d,average=%f\n,count,sum*1.0/count);return0;}编程题8:用数组实现Fibonacci数列要求:编程首先计算Fibonacci数列1,1,2,3,5,8,13,21,......的前n项(n不超过40)存入一维整型数组f中,再按%12d的格式输出每项的值,每6项换一行。说明:(1)输入数列项n,在scanf前不能用printf输出提示信息。测试用例:输入测试用例:输出5回车1123510回车11235813213455参考代码:#includestdio.hintmain(){inti,n,f[39],count=0;scanf(%d,&n);f[0]=1;f[1]=1;for(i=2;in;i++)f[i]=f[i-1]+f[i-2];for(i=0;in;i++){printf(%12d,f[i]);count++;if(count%6==0)printf(\n);}printf(\n);return0;}编程题9:删除所有相同值的元素要求:从键盘输入整型一维数组中a中的各元素(以元素0结束,0是最后一个有效果元素,元素个数不超过20个),再输入一个待删除的整数。先输出删除前的所有数组元素。从数组中删除所有的元素值等于该整数的元素,如果元素不存在,则输出提示信息:doesnotexist,nooperating!否则输出删除后的所有数组元素说明:(1)数组的定义:inta[20];(2)应该用一个变量存储实际有效果的元素个数(含0)(3)元素的输出用%5d的格式控制(4)scanf之前不能用printf输出提示信息测试用例:输入测试用例:输出2345320回车4回车Beforedelete,elementsare:2345320Afterdelete,elementsare:23532023420回车5回车Beforedelete,elementsare:23420doesnotexist,nooperating!233435370回车3回车Beforedelete,elementsare:233435370Afterdelete,elementsare:24570参考代码:intmain(){inta[20],b[20];inti,k=0,x,j,m=0,h=0;for(i=0;i20;i++){scanf(%d,&a[i]);k++;if(a[i]==0)break;}printf(Beforedelete,elementsare:\n);for(i=0;ik;i++)printf(%5d,a[i]);printf(\n);scanf(%d,&x);for(i=0;ik&&a[i]!=x;i++);if(i==k){printf(doesnotexist,nooperating!\n);return0;}for(i=0;ik;i++){if(a[i]==x){h++;b[m]=i;m++;}}for(m=0;mh;m++){for(j=b[m];jk;j++)a[j-m]=a[j-m+1];}printf(Afterdelete,elementsare:\n);for(i=0;ik-h;i++)printf(%5d,a[i]);printf(\n);return0;}编程题10:动态一维数组的定义与实现要求:在main()函数中定义指针变量int*array用来实现动态一维数组,数组的元素个数由从键盘输入的整数n决定;分别用两个函数实现产生数组的元素及输出元素,最后释放动态数组空间说明:①定义函数voidcreate(inta[],intn),生成数组a中n个元素,元素值依次为1,2,3…n②定义函数voidprint(inta[],intn),输出元素的语句为:printf(%d,,a[i]);,输出所有的元素结束后用printf(\n);换行。测试用例:输入测试用例:输出5回车1,2,3,4,5,8回车1,2,3,4,5,6,7,8,参考代码:#includestdio.h#includemath.h#includestdlib.hvoidcreate(inta[],intn);voidprint(inta[],intn);intmain(){int*array,n;scanf(%d,&n);array=(int*)malloc(n*4);create(array,n);print(array,n);printf(\n);return0;}voidcreate(inta[],intn){inti,j=1;for(i=0;in;i++,j++)a[i]=j;}voidprint(inta[],intn){inti;for(i=0;in;i++)printf(%d,,
本文标题:C语言编程题复习
链接地址:https://www.777doc.com/doc-2909623 .html