《C语言程序设计》习题集习题一一、语言基础(共20分,每题2分)(一)设x为一数字字符,则其所对应的十进制数值为。A)xB)x-‘0’C)*xD)&x(二)说明语句chars=‘\t’,使s包含了几个字符?。A)1B)2C)3D)说明有错(三)设a=6,b=4,则表达式b*=a+3的值为。A)3B)18C)27D)36(四)若给定表达式(m)?a++:a--,则其中表达式m和等价。A)m==0B)m!=0C)m=0D)m=1(五)设有说明语句inta[10],则数组a包括了个数组元素。A)1B)9C)10D)20(六)以下函数test返回值类型为。test(intx){printf(“%f\n”,(float)x);}A)intB)floatC)voidD)不确定或错误(七)C语言规定,main函数的参数。A)只能有0个B)只能有0个或一个C)只能有0个或2个D)可有任意个(八)设x为整型变量,p基类型为整型的指针变量,则正确的赋值表达式是。A)p=&xB)p=xC)*p=&xD)*p=*x(九)TurboC中,int型数据在存储器中占二个字节,则以下类型数据在存储器中占的字节数为:。structtest{intx;floaty;charz;};A)2B)3C)6D)7(十)rewind()函数的作用是。A)重新打开文件B)使文件位置指针重新回到文件的开始C)使文件位置指针重新回到文件的末D)返回文件长度值二、阅读下列程序,写出运行结果(共18分,每题3分)[程序1]#includestdio.hvoidmain(){inta=1,b=4,c=2;运行结果:1a=(a+b)/c;printf(“%d\n”,--a);}[程序2]voidmain(){charc1=67;/*‘A’的ASCII码值为65*/if(‘A’=c1&&c1=’Z’)运行结果:67,Dprintf(“%d,%c”,c1,c1+1);elseprintf(“%c”,c1);}[程序3]viodmain(){inta=0,n=5;运行结果:1,5,4,3,2,0for(;;){a++;n--;printf(“%d,”,a);a=n;if(n==0)break;}printf(“%d”,a);}[程序4]main(){inti,j;运行结果:1,2,4,8,16,32,64,128,256,512staticinta[10]={1,1,1,1,1,1,1,1,1,1};for(i=0;i10;i++)for(j=0;ji;j++)a[i]=a[i]+a[j];for(i=0;i10;i++)printf(“%d,”,a[i]);}[程序5]intk=2;f(intm)运行结果:6,8{m+=k;k+=m;5,9printf(“%d,%d\n”,m,k++);}main(){inti=4;for(i++);printf(“%d,%d\n”,i,k);}[程序6]voidmain(){staticinta[10],i;运行结果:13579for(i=0;i10;i++)a[i]=i+1;for(i=0;i10;i=i+2)printf(“%d”,*(a+i));}三、阅读分析下列程序,在处填上适当的内容使程序(或函数)完整(共21分,每空3分)(一)以下程序输出所有大写字母和其对应的ASCII码值。voidmain(){intch;for(ch=’A’;ch=’Z’;ch++)printf(“字母%c的ASCII码值是:%d\n”,ch,1);}答案:ch(二)以下函数的功能是将一个字符串S的内容颠倒过来。voidreserve(2)答案:chars[]{inti,j,k;for(i=0,j=strlen(s)-1;3;i++,j--)答案:ij{k=s[i];s[i]=s[j];s[j]=k;}}(三)由键盘输入三个数a,b,c,计算以这三个数为边长的三角形面积。#includemath.hvoidmain(){floata,b,c,s,s1;scanf(“%f%f%f”,4);答案:&a,&b,&cif((a+b)c&&(a+c)b&&(b+c)a){s=(a+b+c)/2;s1=s*(s-a)*(s-b)*(s-c);s=5;答案:sqrt(s1)printf(“\n三角形面积为:%f\n”,s);}elseprintf(“\n不是三角!\n”);}(四)从键盘输入一个字符串,把它输出到文件中,文件名由键盘输入。#includestdio.hvoidmain(){FILE*fp;charch,*fn;scanf(“%s”,fn);if((fp=fopen(fn,6))==NULL)答案:“w”{printf(“打开文件出错\n”);exit(1);}while((ch=getchar())!=EOF){fputc(7);答案:ch,fpputchar(ch);}fclose(fp);}四、编程题(共21分)1.从键盘输入3个整数,输出其中最大数。(5分)main(){inti=0,x,mx=-32768;while(i++3){scanf(“%d”,&x);if(xmx)mx=x;}printf(“\n%d\n”,mx);}2.编写一函数uf(s),将字符串s中的第一个和最后一个字母改写成大写字母(如原来不是字母或已是大写字母,则不变)。(5分)#includestdio.huf(char*s){inti;i=strlen(s);if(i==0)return;if(s[0]=’a’&&s[0]=’z’)s[0]+=’A’-‘a’;if(s[i-1]=’a’&&s[i-1]=‘z’)s[i-1]+=’A’–‘a’;}main(){chars[]=”asdfgh”;uf(s);printf(“\n%s\n”,s);}3.从键盘输入10个浮点数,输出其平均值及所有低于平均值的数。(5分)#includestdio.hmain(){floata[10],ave=0;inti;for(i=0;i10;i++){scanf(“%f”,&a[i]);ave+=a[i];}ave/=10;for(i=0;i10;i++)if(a[i]ave)printf(“%f\t”,a[i]);}习题二一、语言基础(共20分,每题2分)(一)若a为float类型变量,且a=4.6785,则表达式(int)(a*100+0.5)/100.0的值为4.68。(二)设有intx=11,y=10;则以下表达式的值为10。x--y?10:11y++?’a’:’z’(三)若所有变量都已正确定义为int型则执行下列程序段后x的值为79。x=80;a=10b=16;y=9;z=0;if(ab)if(b!=15)if(!y)x=81;elseif(!z)x=79;(四)i,j为int型的变量,则下面程序中的循环体的执行次数为5。i=1;j=0;while(i+j=10){if(ijj=j+2);elsei=i+2;}(五)若有数组a[10],类型为int型,元素及值如下所示:数组元素:a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]元素中的值:9483267015则*(a+a[9])的值为6。(六)以下函数调用语句中实参的个数为3.Sub((x1,x2),(x3,x4,x5),x6)(七)若有以下函数定义:int(*hs)(){……/*函数体*/}则函数hs返回的值是整形。(八)某C编译程序规定,int型数据存储占2个字节,float型数据存储占4个字节,char型数据存储占1个字节,现有记录描述如下:structstu{union{charbj[5];intbh[2];}class;charxm[8];floatcj;}xs;则sizseof(xs)的值为17。(九)设有以下定义:#definea6#defineba+4则执行语句c=b*10(c为int型数据)后,c的值为46。(十)在C中,文件指针变量的类型只能是FILE。二、阅读下列程序,写出运行结果(共20分,每题4分)[程序1]#includestdio.hmain(){inti;运行结果:i=18,J=29.44floatj;i=18;j=29.4361;printf(“i=%4d,j=%2.2f”,i,j);}[程序2]main(){intk=10;charc=’b’;doswith(c++)运行结果:12{case‘a’:k++;case‘b’:k--;case‘c’:k+=3;break;case‘d’:k=k%4;}while(c!=’c’);printf(“%d\n”,k);}[程序3]main(){chara[]=”computer”;chart;inti,j=0;运行结果:utrpomecfor(i=0;I8;I++)for(j=i+1;j8;j++)if(a[i]a[j]){t=a[i];a[i]=a[j];a[j]=t;}printf(“%s”,a);[程序4]main(){char*p,s[]=”abcdefg”;for(p=s;*p!=’\0’);运行结果:abcdefg{printf(“%s\n”,p);p++;if(*p!=’\0’)p++;elsebreak;}}5、以下程序的输出结果为___hellowellcom______。main(){chars1[40]=hello,s2[20]=wellcom;inti=0,j=0;while(s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]=0;printf(%s\n,s1);}6、#includestdio.hmain(){inti,j,x=0;for(i=0;i2;i++){x++;for(j=0;j3;j++){if(j%2)break;x++;}x++;}printf(x=%d\n,x);}程序运行结果是:x=6三、阅读下列程序,在线处填上合适的内容使程序(或函数)完整(共18分,每空2分)1.以下程序的功能是求三个数的最小公倍数。max(intx,inty,intz){if(xy&&xz)return(x);elseif(y=x&&yz)return(y);elsereturn(z);}main(){inta,b,c,I=1,j,s;scanf(“%d%d%d”,&a,&b,&c);s=max(a,b,c);while(1){j=s*i;if((j%a==0)&&(j%b==0)&&(j%c==0))break;i++;}prinf(“%d”,j);}2.下面程序是判断输入的字符是否中心对称,(如”xyzzyx”和”xyzyx”都中心对称#includestring.hmain(){chars[100],*p1,p2;intn;gets(s);n=strlen(s);p1=s;p2=s+n-1;while(p1p2)if(*p1!=*p2)break;else{p1++;p2--;}if(p1p2)printf(“NO\n”);elseprintf(“YES\N”);}3.结构数组中有4人的姓名和年龄,以下程序输入四人中年龄最大的人的姓名和年龄。#defineNULL0staticstructnode{charname[20];intage;}person[]={“lihong”,18,“wangjun”,19,“zhangwei”,20,“zhaofeng”,19};main(){structnode*p,*q;intold=0;q=NULL;p=person;for(;p!=NULL;p++)if(oldp-age){q=p;old=p-age;}printf(“%s,%d\n”,q-name,q-age);}四、编程题(共22分