C程序设计试卷一、单选题(本题共20分,每小题2分)(1)以下C语言常量中,表达错误的是___(1)___。[A]0FF[B]3.2e0.5[C]5.6[D]‘\n’(2)C程序的基本结构有___(2)___。[A]选择、重复和模块[B]顺序、选择和模块[C]顺序、选择和循环[D]逻辑、物理和程序(3)在C语言程序中,关于字符串的描述正确的是___(3)___。[A]可定义一个字符串变量存储字符串;[B]可定义一个字符变量存储任意字符串;[C]可定义一个字符数组存储字符串;[D]可定义一个字符指针存储字符串;(4)在C语言中,用关键字___(4)___定义双精度类型变量。[A]single[B]double[C]float[D]int(5)下面叙述中不正确的是___(5)___。[A]不同函数中可以使用相同名字的变量[B]形式参数是局部变量[C]在一个函数内部的复合语句中定义的变量在本函数范围内有效[D]在一个函数内部定义的变量只能在本函数范围内有效(6)下面程序段的输出结果是___(6)___。inti=100;while(i120)i=i+1;printf(″%d″,i);[A]100[B]101[C]120[D]121(7)以下定义语句中正确的是___(7)___。[A]chara='A'b='B';[B]floata=b=10.0;[C]inta=10,*b=&a;[D]float*a,b=&a;(8)已有定义:inti,a[10],*p;,则合法的赋值语句是___(8)___。[A]p=100;[B]p=a[5];[C]p=a[2]+2;[D]p=a+2;(9)设有定义:inta,*p1=&a;以下scanf语句中能正确为变量a读入数据的是___(9)___。[A]scanf(“%d”,p1);[B]scanf(“%d”,a);[C]scanf(“%d”,&p1);[D]scanf(“%d”,*p1);(10)以下程序段中与语句=ab?(bc?10)0;功能等价的是___(10)___。[A]if((ab)&&(bc))=1else=0;[B]if((ab)||(bc))=1else=0;[C]if(a=b)=0;[D]if(ab)=1;二、程序填空题(本题共30分,每小题2分)阅读下列程序说明和程序代码,在每小题提供的若干可选项中,挑选一个最佳的选项。(1)【程序说明】输入整数n,输出共有n层的金字塔图形。例如:【程序代码】#includestdio.hvoidmain(){inti,j,n;charc='*';printf(输入层数:);scanf(%d,&n);for(i=1;(11);i++){for(j=1;j=n-i;(12))printf();for(j=1;(13);j++){printf((14),c);}printf(\n);//换行,在内嵌循环结束后执行(15)}【选项】(11)[A]i=n+1[B]i=n[C]in[D]i=n(12)[A]i++[B]j=i+1[C]j++[D]i=j+1(13)[A]j=2*i-1[B]j=2*i-1[C]j=2*n-1[D]j=n(14)[A]%d[B]%s[C]%c[D]%f(15)[A]}[B])[C]};[D]以上选项都不正确(2)【程序说明】输入年份判断是否闰年。【程序代码】#includestdio.hmain(){intyear,leap;scanf(%d,(16));if(year%4==0){if(year%100==0){if(year%400==0)leap=1;(17)leap=0;}elseleap=1;}else(18);if((19))printf(%dis,(20));elseprintf(%disnot,year);printf(aleapyear.\n);}【选项】(16)[A]year[B]&year[C]&n[D]&leap(17)[A]elseif[B]else;[C]else[D]elseif(leap==1)(18)[A]leap=0[B]leap=1[C]year=0[D]year=1(19)[A]year=1[B]leap[C]leap=0[D]以上选项都不正确(20)[A]leap[B]&leap[C]year[D]&year(3)【程序说明】输入十个整数并保存在一维数组中,使数组中每个元素都增加10。【程序代码】#includestdio.hmain(){inta[10],i;(21)p=a;for(i=0;i10;i++){scanf(%d,(22));(23);}for(p=a;p(a+10);p++)(24)printf(\n);(25);for(;p(a+10);p++)printf(%d,*p);}【选项】([A]intp[10][B]int*p;[C]intp;[D]inta;21)(22)[A]a++[B]a[p][C]*p[D]p(23)[A]p++[B]a++[C]*p++[D]*a++(24)[A]*a=*a+10;[B]*p=*(p+10);[C]*p=*p+10;[D]*a=*(a+i);(25)[A]p=a[0][B]p=*a[C]p=a[D]*p=&a三、程序阅读题(本题共20分,每小题2分)阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确的答案。(1)【程序说明】运行程序并回答问题。【程序代码】#includestdio.h#includemath.hvoidmain(){intn,s=0;scanf(%d,&n);n=fabs(n);while(n1){s=s+n%10;n=n/10;}printf(%d\n,s);}【选项】(26)程序运行时输入312,输出___(26)__。[A]213[B]6[C]312[D]3为。(27)程序运行时输入-5104,输出___(27)__。[A]-5104[B]–4015[C]10[D]51.04(2)【程序说明】运行程序并回答问题。【程序代码】#includestdio.hvoidmain(){inta,b,c,temp;a=5;b=12;c=6;printf(a=%d,b=%d,c=%d\n,a,b,c);if(ab)swap(&a,&b);if(ac)swap(&a,&c);printf(a=%d,b=%d,c=%d\n,a,b,c);if(bc)swap(&b,&c);printf(a=%d,b=%d,c=%d\n,a,b,c);}voidswap(int*,int*y){inttemp;temp=*;*=*y;*y=temp;}【选项】(28)程序运行时,第1行输出___(28)__。[A]a=5,b=12,c=6[B]a=%d,b=%d,c=%d[C]a=5.0,b=12.0,c=6.0[D]a=12,b=5,c=6(29)程序运行时,第2行输出___(28)__。[A]a=5,b=12,c=6[B]a=6,b=12,c=5[C]a=12,b=5,c=6[D]a=12,b=6,c=5(30)程序运行时,第3行输出___(30)__。[A]a=5,b=12,c=6[B]a=6,b=12,c=5[C]a=12,b=5,c=6[D]a=12,b=6,c=5(3)【程序说明】运行程序并回答问题。【程序代码】#includestdio.hvoidmain(){chars1[40];inti=0;printf(\nInputastring);scanf(%s,s1);while(s1[i]!='\0'){if(s1[i]='A'&&s1[i]='')s1[i]=s1[i]+32;i++;}printf(\n%s\n,s1);}【选项】(31)程序运行时,输入abc30DCA,输出___(31)__。[A]62[B]abc30dca[C]abc[D]DCA(32)程序运行时,输入Face,输出___(32)__。[A]Face32[B]FACE[C]face[D]f(4)【程序说明】运行程序并回答问题。【程序代码】#includestdio.hvoidmain(){FILE*fp;inti,j,,,y;scanf(%d%d,&i,&j);fp=fopen(t.dat,w);fprintf(fp,%d\n,i);if(ij)=j;elseif(ij)=i;else=i+j;fprintf(fp,%d\n,);fclose(fp);fp=fopen(t.dat,r);fscanf(fp,%d%d,&,&y);printf(=%d,y=%d\n,,y);fclose(fp);}【选项】(33)程序运行时,输入2012输出___(33)__。[A]=20,y=20[B]=20,y=12[C]=12,y=20[D]=12,y=12(34)程序运行时,输入1035输出___(34)__。[A]=45,y=45[B]=10,y=10[C]=10,y=35[D]=35,y=35(35)程序运行时,输入1212输出___(35)__。[A]=24,y=24[B]=12,y=12[C]=24,y=12[D]=12,y=24四、程序设计题(本题共30分,每小题10分)(1)编写程序,要求从键盘上输入一个数给,计算并输出分段函数y的值。+101015xexx0≤≤105-30提示:平方根函数为:sqrt(),指数函数为:ep(),正切函数为:tan(),正弦函数为:sin(),所有这些函数在math.h头文件中。(2)从键盘输入一个正整数n,编写程序计算1/1!+1/2!+1/3!+……+1/n!的值并输出结果,要求定义和调用函数fact(n)计算n的阶乘。(3)随机产生20个大于等于1小于等于100的数,并按从大到小排序。请输出排序后的数,要求每行输出5个数。浙江理工大学2005/2006下学期期末考试---C程序设计试题参考答案与评分标准一、单选题(本题共20分,每小题2分)题号12345678910答案BCCBCACDAA二、程序填空题(本题共30分,每小题2分)题号11121314151617181920答案BCBCABCABC题号2122232425答案BDACC三、程序阅读题(本题共20分,每小题2分)题号26272829303132333435y=答案BCACDBCACD四、编程题(本题共30分,每小题10分)1、#includestdio.h#includemath.hvoidmain(){float,y;scanf(%f,&);if(10)y=+10;elseif(=0)y=(sqrt(5*)+ep())/(+1);elsey=tan()*sin();printf(y=%f\n,y);}2、#includestdio.hfloatfact(intn){floatt=1.0;inti=1;while(i=n)t=t*i++;return(t);}voidmain(){intn,i;floatsum=1.0;scanf(%d,&n);for(i=2;i=n;i++)sum=sum+1.0/fact(i);printf(%f\n,sum);}3、#includestdio.h#includestdlib.hvoidmain(){inti,j,n=0,temp,[20];srand(time(NULL));printf(原始数据:\n);for(i=0;i=19;i++){[i]=rand()%100+1;//产生20个随机数if(i%5==0)printf(\n);printf(%-6d,[i]);}printf(\n);for(i=0;i19;i++){//从大到小排序for(j=0;j19-i;j++)if([j][j+1]){temp=[j];[j]=[j+1];[j+1]=t