《C程序设计》期末复习练习题及参考标准答案.docx
C程序设计期末复习练习题及参考答案一、单项选择题1 .若有定义int(*p)4,则标识符p是一个oA)指向整型变量的指针变量B)指向函数的指针变量C)指向有四个整型元素的一维数组的指针变量D)指针数组名,有四个元素,每个元素均为一个指向整型变量的指针2 .下列对字符串的定义中,错误的是:oA)charstr7=nFORTRAN"B) charstr="FORTRAN"C) char*str="FORTRAN"D) charstr11=,F,O7R',T,R'A',N',0);3 .针对下面程序段,下面哪些说法是正确的?#include<stdio.h>voidS*x,int*y);main() inta,b;a=5;b=9;S,&b);Printf("a=%d,b=%d”,a,b);IvoidS*x,int*y) int*pTemp;* pTemp=*x;* x=*y;* y=*pTemp;)A)程序运行结果为乱码;B)程序运行后将导致程序崩溃;C)程序编译时出错导致程序无法运行;D)程序执行了危险的操作;4.已知学生记录描述为:structstudentintno;charname20;charsex;structintyear;charmonth15;intday;birth;);structstudents;设变量S中的生日是1984年11月11日,下列对生日的正确赋值方式是A) s.birth.year=1984;s.birth.month=',11',;s.birth.day=11;B) s.birth.year=1984;s.birth.month=11;s.birth.day=11;yC)s.birth.year=1984;strcpy(s.birth.month,"11");s.birth.day=11;D)s.birth.year=1984;strcpy(s.birth.month,11);s.birth.day=11;5 .要使下面程序的输出1,2,34,则从键盘输入的数据格式应为#include<stdio.h>main()chara,b;intc;scanf("%c%c%d'&a,&b,&c);printf("%c,%c,%dn,1,a,b,c);1A)1234B)1,2,34C)T,'2',34D)12346 .以下选项中为合法整型常量的是()。A)-080B)-80C)-8el.0D)-80.0e7 .若x,i,j和k都是int型变量,则计算表达式x=(i=4,j=16,k=32)后,X的值为(八)4B)16C)32D)528 .下列程序执行后的输出结果是()o#include<stdio.h>voidfunc(int*a,intb)b0=*a+6;)main()inta,bl5;a=0;b0=3;func(&a,b);printf("%dn",b01);)A)6B)7C)8D)99 .设有定义Chargrade=W;则以下给出的程序运行结果或说法正确的是()。switch(grade)case'A,:case'B':case'C,:printf(,>=60pass!n");case'D,:printf(',<60n");defaultprintf(,error!n");)A)>=60pass!B)<60C)error!D)以上结果都不正确10 .以下程序执行后的输出结果是()。#include<stdio.h>intmain()(inti=1,j=1,k=2;if(j+Ilk+)&&i+÷)Printf("%d,%d,%dn",i,j,k);return0;)D)2,2,3A)1,1,2B)2,2JC)2,2,211 .执行完循环语句for(i=l;i<10;i+);后,以下关于变量i的值及循环体的执行次数的说法正确的是().A)i的值是9,循环体执行9次B)i的值是9,循环体执行10次C)i的值是10,循环体执行9次D)i的值是10,循环体执行10次12 .以下程序的运行结果是()。#include<stdio.h>intmain()intm,n;fbr(m=0,n=10;m<n;m+=3,n);prinlf(,%d,%dn",m,n);return0;)A)6,7B)7,6C)9,7D)7,913 .以下程序的运行结果是()。#include<stdio.h>intmain()inti;inta33=l,2,3,4,5,6,79);for(i=0;i<3;i+)printf(,%d",a2-ii);return0;)A)159B)753C)357D)59114 .下列可用于C语言用户标识符的一组是()。A)void,define,WORD)a3.3,-123,CarC)For,-abc,IFCaseD)2a,DO,sizeof15 .若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为()。.A)a<>0B)!aC)a=0D)a!=016 .以下程序的输出结果是()o#include<stdio.h>voidmain()intx=10,y=10;printf("%d%dn'x-,-y);A)99B)109C)910D)101017 .若有定义:char*name="Followme"BASIC","GreatWal',11FORTRAN",则name2的值是()oA)字符GB)字符串"GrealWall”C)字符串"GreatWan”的首地址D)不确定18 .有以下程序,程序执行后的输出结果是()o#include<stdio.h>voidfun(char*p)char*q=p;while(*q!=,0')(*q)+;q+;)intmain()chara="Program"),*p;p=&a31;fun(p);printf("%sn",a);return0;'A)ProhsbnB)PrphsbnC)ProgsbnD)Program19 .下面列出的C语言提供的合法的数据类型关键字是()。A)DoubleB)shortC)integerD)Char20 .字符ghar)型数据在微机内存中的存储形式是()oA)反码B)补码C)EBCDIC码D)ASCII码21.设inta=12,A)552)。则执行完语句a+=a-=a*a后,a的值是(B)264C)144D)-26423.能够完成如下函数计算的程序段是()。B)if(x>=O)if(x>O)y=l;elsey=0;elsey=-l;D)y=-l;if(x>O)y=l;elsey=0;(-1x<0Y=<0x=0I1x>0A)y=l;if(x!=O)if(x>O)y=l;elsey=0;C)y=0;if(x>=O)if(x>O)y=l;elsey=-l;24.有如下程序#include<stdio.h>voidmain()(intx=l,a=0,b=0;switch(x)(case0:b+;1 ase1:a+;2 ase2:a+;b+;)prinlf("a=%d,b=%dn",a,b);)该程序的输出结果是()oA)a=2,b=lB)a=l,b=lC)a=1,b=0D)a=2,b=225 .下面程序的输出结果是(#include<stdio.h>voidmain()inti;for(i=l;i<6;i+)if(i%2!=0)printf("#");continue;)Printf("*");printf("n,');)A)#*#*#B)#C)*D)*#*#*26 .C语言中WhiIe和do-while循环的主要区别是()。.A)do-while的循环体至少无条件执行一次B) while的循环控制条件比do-while的循环控制条件严格C) do-while允许从外部转到循环体内D) do-whiIe的循环体不能是复合语句27 .当对两个字符串进行比较时,应该使用的函数是()oStrlenA)strcat<B)StrcmpC)StrcpyD)28 .以下程序的运行结果是()。#include<stdio.h>voidmain()int*p,a=l;p=&a;*p=10;printf(,%dn",a);A)lB)10C)不能确定D)1129 .设有定义inla=l,5,7,9,ll,13,*p=a+3;则*(p-2),*(a+4)的值是()。A)511B)19059D)有错误30 .若i为整型变量,则以下循环的次数是()。fbr(i=2j=0;)Primft%d",i-);A)无限次B)O次C)I次D)2次二、填空题1. C语言标识符由字母、数字和下划线来构造。2 .设有定义:FI1.E*fp;,请将以下打开文件的语句补充完整,以便可以向文本文件readme.txt的最后续写内容。fp=fopen("readme.txt,ty);3 .若有说明和语句:ima=25,b=60;b=+a;则b的值是2604 .若intx=5;while(x>0)Printfd%d”,x-);的循环执行次数为W。5 .若有inta5,*p=a;则d+2表示第三个元素的地址。6 .若有说明和语句:inta=5,b=6,y=6;b-=a;y=a+则b和Y的值分别是1、5。7 .已知整型变量a=3,b=4,c=5,写出逻辑表达式a|b+c>c&&b.c的值是°8 .在C语言中,变量的存储类别有四种,它们是:自动(auto)、寄存器(register)、静态(SIalic)、外部(extern)o9 .如果一个变量在某个范围内是有效的,该范围就称为变量的作用域。自动(auto)存储类别的局部变量,其作用域为:从定义的位置起,到函数体(或复合语句)结束为止10 .设有定义inta,b;写出满足条件“a是3的倍数,或者b不是5的倍数”的逻辑表达式:a%3=Ob%5!=O。三、程序运行结果分析题1.main()(inti,j,x=0;for(i=0;i<2;i+)x+;for(j=0<3j+)(if(j%2)continue;x+;1x+;Iprintf(,x=%dn',x);)程序运行结果是:x=6#include<stdio.h>structdateintyear;intmonth;intday;;structdatefunc(structdatep)p.year=2000;p.month=5;p.day=22;returnp;)main()(structdated;d.year=1999;d.month=4;d.day=23;printf("%d%d%dn",d.year,d.month,d.day);d=func(d);printf("%d%d%dn",d.year,d.month,d.day);)程序的运行结果是:1999/4/232000/5/223.#include<stdio.h>main()(chara="Hello"char*p=NU1.1.;for(p=a;p<a+5;p+÷)printf("%sn11,p);程序运行结果是:HelloelloIloIoO4.#include<stdio.h>intfun(intx,inty)returnx>y?x:y;(main()inta=2,b=5,c=8;printf("%dn'fun(fun(a+c,b),a-c);)程序运行结果是:105.#include<stdio.h>voidFunc(void);main()inti;for(i=0;i<5;i+)(FUne();J)voidFunc(void)staticinta=1;intb=2,c;c=a+b;a+;b+;prinlf(,%dn,c);)程序运行结果是:345676.当运行以下程序时,从键盘输入如下内容并回车:ADeSCriDlor,则下面程序的运行结果是VO=13v。=4,v2=12e#include<sldio.h>intmain()charc;intv=1,vl=0,v2=0;do(switch(c=getchar()(case'a'xase'A':case'e'xase'E':case,i'xase':case,o'case'O,:case,u'case'U':vl+=1;default:v+=1;v2+=1;)while(c!=rn');prinlf(,v=%d,v1=%d,v2=%dn",v,v1,v2);printf(,n");return0;17 .当运行以下程序时,运行结果是。#include<stdio.h>voidfun(char*t,char*s)while(*t!=0)t+;while(*t+=*s+)!=0);)intmain()charss32O=,I,don,t,know',;inti;for(i=2;i>0;i-)fun(ssi-1,ssi);fr(i=0;i<3;i+)printf("%sn,ssi);return0;)Idon,tknowdon'tknowknow8 .当运行以下程序时,运行结果是153.8。#include<stdio.h>intmain()inta4=2,9,1,8),(8,92),4,3,2,1),1,55),i,j,k,t;for(i=0;i<4;i+)for(j=0;j<3;j+)(for(k=j+l;k<4;k+)if(ajl11l>afkli)t=aji;aj11i=akil;akil=t;)for(i=0;i<4;i+)printf("%d,aii);return0;9 .有以下程序#include<stdio.h>#include<string.h>typedefstructcharname91;charsex;floatscore2;JSTU;voidf(STUa)STUb=11Zhao,7m85.0,90.0);inti;strcpy(a.name,b.name);a.sex=b.sex;fbr(i=0;i<2;i+)a.scorei=b.scorei;1main()STUc=,Qian,7f,95.0,92.0;f(c);prinlf(,%s,%c,%2.0f,%2.01n",c.name,c.sexc.score0,c.scorel);)程序的运行结果是Qianf95,92。四、程序填空题阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。1 .先按学号由小到大的顺序从键盘输入学生的学号和成绩,然后从键盘任意输入一个学生的学号,查找并打印具有该学号的学生的成绩。#include<stdio.h>#defineARR_SIZE40intBinSearCh(IOngal.ininJongx);main()floatscoreARR_SIZE;intn,i,pos;longnumARR_S!ZE,x;prinlf("Pleaseentertotalnumber:");scanf(,%d",&n);printf(',PleaseenterthenumberandSCOre:rT);for(i=0;i<n;i+)(scanf(',%ld%f',&numi,<fescorei);)printf(',Pleaseenterthesearchingnumber:'*);scanf(',%ld'&x);pos=BinSearCh(num,n.x):if(pos!=-1)Iprintf(',score=%4.0fn",scorepos);1else(printf(,Notfound!n11);intBinSearch(longa,intn,longx)intlow,high,mid;low=0;high=n-1;while(low<=high)(mid=(high+low)/2;if(x>amid)(low=mid+1:)elseif(x<amid)(high=mid-1;)else(return(mid):)1return(-l);2.输入一行字符,统计其中的英文字符、数字字符、空格及其它字符的个数。#include<stdio.h>#include<string.h>#defineARR.SIZE80main()(charstrARR-SIZE;intlen,i,Ietter=O,digit=O,space=0,others=0;gets(str);for(i=0:strlil!=>O,:i+)(if(stri>='a'&&StrlilV='z'Il“r|i|>='A'&&st>il<='Z')letter+;elseif(slHH>='0'&&SlHiIV='9')digit+÷elseif(stril=*l)space+;elseothers+;)printf("Englishcharacter:%dn11,letter);printf("digitcharacter:%dn11,digit);printf("space:%dn11,space);printf("othercharacter:%dn",others);3.以下程序为求出并打印100O以内所有水仙花数,请补齐代码。所谓水仙花数是指一个3位正整数,其各位数字的立方和等于该正整数。例如407=4*4*4+0*0*0+7*7*7,故407是一个水仙花数.#include<stdio.h>intmain()intx,y,z,a100,m,i=0J=0;printf("Thespecialnumbersare(inthearrangeof1000).n11);fbr(m=100;m<I(MM);m+÷)(x=m/100;y=m/10%10;z=m%10;if(x*100+y*10+z=x*x*x+y*y*y+z*z*z)ai=m;i+;1for(j=0;j<i;j+)printf(',%6d",aj);printf("%n");return0;