《南昌航空大学往年C语言期末精选样卷(含六卷)含答案解析.docx》由会员分享,可在线阅读,更多相关《南昌航空大学往年C语言期末精选样卷(含六卷)含答案解析.docx(75页珍藏版)》请在课桌文档上搜索。
1、往年C语言期末精选样卷(一)一、单项选择题(每小题2分,共40分)1、己知字母a的ascii码十进制值为97,则执行以下语句后的输出为yhgchara=,a;a;printf(,%d,%cn,a,2-0,a,3-0);A、b,cB、a-运算不合法,故有语法错C、98,cI)、格式描述和输出项不匹配,输出无定值2、执行语句5。武(刎,&111,酊);使111和11的值分别为1和2,正确输入是A、1B、12C、1,2I)、123、设a、b和、C都是int型变量,且a=3、b=4c=5,则下面的表达式中,值为0的表达式为()A、a&bBa0?1:*0?-1:0);的功能相同的1语句是。A、if(x0
2、)y=l;B、if(x)elseif(xO)y=l;elsey=0;elseif(x%O)y=-l;elsey=0;C、y=-lI)、y=0;if(x)if(x=O)if(xO)y=l;if(xi=O)y=l;elseif(x-0)y=0;elsey=-l;elsey=-l;5、以下叙述中正确的是oA、循环发生嵌套时,最多只能两层B、三种循环for,while,do-while可以互相嵌套C、循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误D、f。语句的圆括号中的表达式不能都省略掉6、若定义了以下函数:voidf()(*p=(double*)malloc(10*sizeof(double
3、);P是该函数的形参,要求通过P把动态分配存储单元的地址传回主调函数,则形参P的正确定义应当是OA、 double*pB、 float*pC、 double*pD、 float*p7、下列变量说明语句中,正确的是。A、 char:abc;B、 chara;b;c;C、 intx;z;D、intx,z;8、在下面的字符数组定义中,哪一个有语法错误。A、chara20=abcdefgw;B、chara=x+y=55.”;C、 chara15;D、 chara10=5;9、对说明语句inta10=6,7,8,9,10;的正确理解是OA、将5个初值依次al至a5B、将5个初值依次a0至a4C、将5个初
4、值依次a5至a9D、将5个初值依次a6至a1010、以下关于字符串的叙述中正确的是oA、C语言中有字符串类型的常量和变量B、两个字符串中的字符个数相同时才能进行字符串大小的比较C、可以用关系运算符对字符串的大小进行比较D、空串一定比空格打头的字符串小11、有以下定义chara10,*b=a;不能给数组a输入字符串的语句是Agets(a);Bgets(aO);C、gets(&aO);D、gets(b);12、关于c语言的符号常量,以下叙述中正确的是oA、符号常量的符号名是标识符,但必须大写B、符号常量是指在程序中通过宏定义用一个符号名来代表一个常量C、符号常量在整个程序中其值不能再被重新定义D、
5、符号常量的符号名必须是常量13、若有定义inta10,*p=a;则p+5表示的是。A、a5的值B、a6的值C、a5的地址D、a6的地址14、函数的形式参数隐含的存储类型说明是oAexternstaticC、registerD、auto15、以下程序的输出结果为oincludeintmain()(inti=l,j=l;printf(zz%d%dnzz,i,j+);)A、11B、12C、21D、2216、下面程序的运行结果是omain()(intcl=2,c2=0;while(!c2一)printf(,%d%d,cl-,c2);A、陷入死循环B、不输出任何内容C、输出2-1D、输出2017、以下关
6、于逻辑运算符两侧运算对象的叙述中正确的是A、可以是任意合法的表达式B、只能是整数0或非0整数C、可以是结构体类型的数据D、只能是整数0或118、以下程序的结果是ointa,b;voidsun()(a=100;b=200;)main()(inta=6,b=8;sun();printf(z,%d%dn”,a,b);A、100200B、68C、200100D、8619、不能把字符串hello!赋给数组b的语句是oA、charb10=,H,e,o,!,;B、charb10=h,e,l,l,o,!;C、charb10;StrCPy(b,Hello!”);D、charb10=,zHello!z,:20、下
7、列程序的输出结果是omain()(structst(inty,x,z;unionlongi;intj;chark;un;printfC%df%dn”,sizeof(structst),sizeof(un)2446A、6,B、6,C、8,D、8,二、判断题(每小题2分,共20分)()1、强制类型转换时,原来变量的类型不会改变。()2、若有定义intX=l,y=2;则表达式x=y是将y的值赋值给X。()3、在if语句中,else前一个语句可不加()4、在多层循环中,continue语句只结束本次循环,而不是终止整个循环的执行。()5、用PUtS和gets函数可以输入或输出多个字符串。()6、按照C
8、语言的规定,在参数传递过程中,既可以将实参的值传递给形参,也可以将形参的值传递给实参,这种参数传递是双向的。()7、若定义a2=l,2,3,4,5,6,7;则a数组中行的大小无法确定。()8、对于一个具体的函数来说,实参与形参不必一一对应。()9、数组名作为函数参数,传送的是地址.()10、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件。三、填空题(每小题4分,共20分)1、函数实参的传递分为2、以下程序的输出结果是Omain()(intx;printfC%dn*,(x=2*4,x+5);)3、结构化程序三种结构为O4、在定义函数时函数名后面括号中的变量名称为O5、一个变量的指
9、针是指O四、程序分析题(每小题5分,共20分)1、下列程序段的运行结果是O#definesub(x,y)-ymain()inta,b,s;A=5,b=6;S=sub(a,b);printf(zzs=%dnzz,s);2、以下程序的输出结果为omain()(charm,n;m=getchar();/*(输入d)*n=m-34;printf(%cn,n);)3、已有定义inta;floatb,x;charcl,c2;为使a=3,b=6.5,x=12.6,cl=a,tc2=ra,正确的函数调用语句是,输入数据的方式是o4、以下程序运行后的输出结果是includemain()(inta=l,b=7;d
10、o(b=b2;a+=b;)while(b1);printf(%dn”,a);五、编程题(每小题分,共50分)1、输出9*9乘法表。(本题12分)2、编写程序,从输入的一行字符串中抽取一部分(从第n个字符开始,抽取m个字符)构成一个新的字符串,并输出。其中n0且n二字符串的长度,否则打印“起始位置n越界”要求:n和DI都由用户输入。如果抽取的字符串长度不够,则按照实际长度抽取,例如,字符串为“abcde”,若n=2,m=3,则抽取结果为“bed;若n=3,m=5,则抽取结果为iicdeff;若n=0,m=4则输出:起始位置0越界;若n=6,m=2则输出:起始位置6越界(本题18分)3、编写程序:
11、本题为用结构体求学生的平均分和分数最高的学生对应课程以及分数。输入10个学生5门课的成绩,分别用函数实现以下功能:1、计算每个学生平均分2、计算每门课平均分3、找出所有50个分数中最高的分数所对应的学生和课程(本题20分)参考答案及解析一、单项选择题1、C2、C3、D4、B5、B【解析】A选项中,循环发生嵌套时,没有规定层数;C选项中,循环嵌套时,书写代码时没有要求必须缩进;D选项中,for语句的圆括号中的表达式都可以省略掉。因此B选项正确。6、C7、D8、D【解析】考点分析考查声明数组的语法格式。选项D的定义右语法错误。赋值号右边的字符应该是用双引号括起来。9、B10、D11、B12、B【解
12、析】在C语言中可以用一个标识符来代表一个常量称为符号常量。这个标识符必须在程序中进行特别的指定并符合标识符的命名规则。用作符号常量的标识符通常采用大写字母表示在主函数中其值不能再被定义。所以选择B选项。13、C【解析】P指的是a0,则p+5是指a5.14、D15、A16、C17、A【解析】C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A18、B19、B【解析】在C语言中,大写字母和小写字母被认为是两个不同的字符,因此,“hello!”和“Hello!”是两个不同的字符串。20、B二、判断题1、正确2、错误3、错误4、正确5、错误6、错误7、错误8、错
13、误9、正确10、正确三、填空题1、值传递和址传递2、133、选择,顺序,循环4、形参5、1该变量的地址四、程序分析题1、s=-l2、B3、SCanf&b,&cl,&c2),3l6.5l12.6aa。4、5五、编程题1、includevoidmain()(inti=l;for(i;i=9;i+)(intj=l;for(j;j=i;j+)(printf(z,%d*%d=%d”,i,j,i*j);)Printf(n);2、include#includeintmain()(intn,m,i;unsignedlong1;chars80;gets(s);scanf(%d%c,&n,&m);l=strlen
14、(s);if(n+m-ll)m=l+l-n;)if(n0Un=l)for(i=n-l;in+m-l;i+)Printf(%c,si);)elsePrintf(起始位置猊越界”,n);)return0;)3、#includetypedefstructstuintnum20;floatscore1;floatscore2;floatscore3;floatscore4;floatscore5;floataver;student;floata5;intmain()studentstu10;studentaverageScore(studentstu10);studentaverage5(studen
15、tstu10);studentmax(studentstu10);inti;for(i-0;i10;i+)scanf(*%d%f%f%f%f%fstui.num,stui.score1,&stui.score2,stui.score3,&stui.score4,stui.score5);)average5(stu);averageScore(stu);for(i=0;i5;i+)Printf(the%dscore,saverageis%f,i,ai);)max(stu);return0;)studentaverage5(studentstu10)inti;for(i=0;i10;i+)stui
16、.aver=(stui.scorel+stui.score2+stui.score3+stui.score4+stui.score5)5;Printf(the%dstudent*saveragescoreis%fn”,stui.num,stui.aver);)studentaverageScore(studentstu10)inti;floatsum=0;for(i=0;i10;i+)sum=sum+stui.score1;)a0=sum;sum=0;for(i=0;i10;i+)sum=sum+stui.score2;)al=sum;sum=0;for(i=0;i10;i+)sum-sum+
17、stui.score3;)a2=sum;sum-0;for(i=0;i10;i+)sum=sum+stui.score4;)a3=sum;sum-0;for(i=0;i10;i+)sum-sum+stui.score5;a4=sum;)studentmax(studentstu10)inti,j,n,r,d;floats50,max1=0;for(i=0;i50;i=i+5)si=stui.score1;si+l=stui.score2;si+2=stui.score3;si+3=stui.score4;si+4=stui.score5;)for(i=0;i50;i+)for(j=i+l;jm
18、axl)maxl=si;n=i;)Printf(%c,n);r=n%5;d=n%10;printf(*themaxscoreis%f,the%dthstudent*s%dthscore*,maxi,d+l,r);往年C语言期末精选样卷(二)一、单项选择题(每小题2分,共40分)1、关于异常的含义,下列描述中最正确的一个是0A、程序编译错误B、程序语法错误C、程序自定义的异常事件D、程序编译或者运行时发生的异常事件2、若有定义Charw;intx;floaty;doublez;则表达式w*x+z-y值的数据类型为。A、 floatB、 charC、intDndouble3、设有定义:floata
19、=2,b=4,h=3;,以下C语言表达式与代数式计算结果不相符的是OA、(a+b)*h2B、(l2)*(a+b)*hC、 (a+b)*h*l2D、 h2*(ab)4、c语言的if语句嵌套时,if与else的配对关系是。A、每个else总是与它上面的最近的并且尚未与其他else匹配的if配对每个else总是与最外层的if配对C、每个else与if的配对是任意的D、每个else总是与它上面的if配对5、要求通过while循环不断读人字符,当读入字母n时结束循环,若变量已正确定义,下列正确的程序段是OA、while(ch=getchar()!=,N,)printf(,%c”,ch);B、while(
20、ch=getchar()!=,N,)printf(,%c”,ch);Cwhile(ch=getchar()=,N,)rintf(,%c、ch);Dwhile(chgetchar0)=,N,)printf(,%c”、ch);6、C语言中函数返回值的类型是由决定的.A、函数定义时指定的类型B、return语句中的表达式类型C、调用该函数时的实参的数据类型D、形参的数据类型7、若pl、p2都是整型指针,pl己经指向变量x,要使p2也指向x,一是正确的。A、 p2=plB、 p2=*plC、 p2=fcplD、 p2=*pl8、若有如下定义和语句,且0=i,011,14、若有数组名作为函数调用的实参,
21、传递给形参的是A、数组的首地址B、数组第一个元素的值C、数组中全部元素的值D、数组元素的个数15、下列程序执行后的输出结果是OttdefineMA(x)x*(-l)main()(inta=l,b=2;Printf(%dn*MA(l+a+b);)A、6B、8C、10D、1216、有以下程序:includemain()(inti=0,a=0;while(i20)(for(;1)if(i%5)=0)break;elsei;)i+=13,a+=i;Printf(%dn”,a);)程序的输出结果是OA、62B、63C、23D、3617、以下关于C语言数据类型的叙述中正确的是oA、C基本数据类型包括:分为
22、整型、实型、浮点型、字符型四种B、实型常量的表达方式包括十进制形式、十六进制形式、二进制形式、八进制形式、指数形式C、若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D、若只处理“真”和“假”两种逻辑值,应使用逻辑类型18、有以下程序main()(char*p10=abc,aabdfg,dcdbe,abbd”,cd;printf(/%dnz,strlen(p4);)执行后输出结果是OA、2B、3C、4D、519、对于代码charcl8;scanfcl);Printf(“n%s”,cl);在程序运行时,输入了thisprettyboy,则对应的运行输出显示结果是A、 thisp
23、reB、 thisC、 thisprettyboyD、数组越界,不能显示20、有以下程序:includestructs(inta,b;)data2=10,100,20,200;main()(structsp=datal;printf(%dn”,+(p.a);程序运行后的输出结果是。A、10B、11C、20D、21二、判断题(每小题2分,共20分)()1、十进制转换成二进制可以采用除2取余的方式。()()2、条件运算式a?b:C中,b和C必须为同一类型()3、省略else的if语句的一般形式如下,若表达式的值为“真,则执行语句1;否则,就什么也不做。if(表达式)语句1()4、循环语句不能嵌套使
24、用。()5、C语言标准输入操作中,gets()函数一次只可读取一个字符。()6、函数的定义和函数的调用均可以嵌套。()7、对字符数组元素进行引用时,可以一次引用整个数组。()8、C语言标准格式输出函数printf()的参数表是由若干个表达式组成。()9、用SCanfo函数输入实型数时,可以指定宽度,但不能规定精度。()10、全局静态变量的作用域限制在定义它的源文件内,只能为该源文件内的函数公用。三、填空题(每小题4分,共20分)1、表达式2.8+3/4=o2、已知b=2,则表达式6+4-=3的值是O3、在C语言的循环语句for,while,do-while语句中,用于直接中断最内层循环的语句是
25、。我的答案:break4、设有如下宏定义defineMYSWAP(z,x,y)z=x;x=y;y=z;)以下程序段通过宏调用实现变量a、b内容交换,请填空。floata=5,b=16,c;MYSWAP(,a,b);5、若有定义:doublex35;则数组中列下标的上限为。四、程序分析题(每小题5分,共20分)1、下面程序的功能是求出用数字0至9可以组成多少个不重复的三位偶数。请分析程序填空。ttincludemain()intn=0,i,j,k;for(i=l;i=9;i+)for(k=0;k=8;1)if(k!=i)for(j=0;j4)break;printf(%dn”,m);3、以下程序
26、的运行结果是inti=0;main()(inti=5;reset(i2);printf(zzi=%dnzz,i);reset(i=i2);printfi=%dnzz,i);reset(i2);printf(zzi=%dnzz,i);workover(i);printf(zzi=%d11zz,i);)workover(inti)(i=(i%i)*(i*i)(2*i)+4);printf(zzi=%dnzz,i);returni;)reset(inti)i=i=2?5:0;returni;4、以下程序运行的结果为0includevoidfunl(int*a,int*b)(int*c;c=a;a=b
27、;b=c;voidfun2(int*a,int*b)intc;c=*a;*a=*b;*b=c;voidmain()intx=3,y=5,*p=&x,*q=&y;funl(p,q);printf%d,%d,*p,*q);fun2(p,q);printf%d,%dn”,*p,*q);五、编程题(每小题分,共50分)1、求s=a+aa+aaa+aaaa+aa.a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。参照P214例2(本题12分)2、输入一行字符,将所有的小写字母转换成大写字母,(本题18分)3、输入n个朋友的信息,包括姓名、生
28、日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。输入格式:输入第一行给出正整数n(10)o随后n行,每行按照“姓名生日电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。输出格式:按照年龄从大到小输出朋友的信息,格式同输出。输入样例:3zhang1985040313912345678wang19821020+86-0571-88018448qian1984061913609876543输出样例:wang1982102
29、0+86-0571-88018448qian1984061913609876543zhang1985040313912345678(本题20分)参考答案及解析一、单项选择题1、D【解析】异常是在程序编译或运行中所发生的可预料的或不可预料的异常事件,它会引起程序的中断,影响程序正常运行。2、D3、B4、A5、A6、A7、A8、A9、A【解析】int类型常量和byte类型常量做加法,首先byte类型常量自动转换为int类型,因此最后的结果应该是int类型的数值。10、B【解析】在C程序中,字符量可参与任何整数运算。字符参与运算时,首先要将字符转换为对应的ASCH码值再参与整数运算。字符1对应的AS
30、Cll码值是49,字符0对应的ASCIl码值是48,字符0是字符串结束标识符NULL,其对应的ASCIl码值是0。11、D12、B13、A14、A15、B16、D【解析】本题考查WhiIe循环。当iV20时,进入While循环体,循环体内的for循环实现的功能是,当i值是。或5的倍数时,执行“i+=13;a+=i;”这两条语句:若i值不是5的倍数则一直执行for循环。当i=0时,执行i+倍3;a+=i;i=13,a=13;判断i=1320,循环结束。17、C【解析】C基本数据类型包括:分为整型、实型、枚举型、字符型四种,实型就是浮点型,实型数据只有十进制,没有2,8,16进制表达,在C语言中没
31、有定义逻辑类型,而是一般用。代表假,用非零代表真。18、A19、B20、D【解析】声明data是结构S数组。初始化data0.a=10;,dataO.b=100;,datal.a=20:,datal.b=200主函数中p=datal;,即p.a=datal.a;,p.b=datal.b;。执行语句Printf(%dn”,+(p.a);打印输出时p.a先增1再打印,BPp.a=datal.a=20,先增1等于21。二、判断题1、正确2、错误3、正确4、错误5、错误【解析】gets从标准输入设备读字符串函数,可以无限读取,不会判断上限6、错误7、错误8、正确9、正确10、正确三、填空题1、2.82
32、、-23、填空题|14、c5、4四、程序分析题11k+=22i!=j&k!=j2、243、i=5i=2i=2i=0i=24、3,5,5,3五、编程题1、程序分析:关键是计算出每一项的值。程序源代码:main()(inta,n,count=l;longintsn=0,tn=O;printf(z,pleaseinputaandnn);scanf(z,%d,%d”,&a,&n);printfa=%d,n=%dn”,a,n);while(count=n)(tn=tn+a;sn=sn+tn;a=a*10;+count;)Printf(a+aa+=%ldn”,sn);2、大写字母转换成小写字母,其余字符不
33、变。输出转变后的这行字符。#include*stdio.hvoidmain()(charan;inti;SCanf(%s”,a);Printf(大写为:);for(i=0;i=n;i+)(if(a-a,)a=a-32;printf(*%c*,a);)Printf(n小写为:”);for(i=0;i=3;i+)(a=a+32;Printf(%c”,a);)3、includestructmessagecharnamel30;charname230;charname330;doubleprice;structmessaged10;intmain()intN;SCanf(%d,&N);inti,j;f
34、or(i=0;iN;i+)(scanf(z,%s%s%sz,di.namel,di.name2,di.name3);scanf(*%lf*,ftdi.price);intt,r;doublemax,min;max=min=d0.price;for(j=0;jdj.price)(min=dj.price;t=j;if(maxconstintx;x=5;intnumx;7、下列哪个赋值语句是正确的A、 chara=12;B、inta=12.0;Cinta=12.Of;D、inta=(inl2.0;8、数组名作为实参数传递给函数时,数组名被处理为OA、该数组的长度B、该数组的元素个数C、该数组的首地
35、址D、该数组中各元素的值9、设有定义语句:Chara=i72,;,则变量a。A、包含1个字符B、包含2个字符C、包含3个字符D、定义不合法10chara=*ThisisaProgram.”;输出前5个字符的语句是OoA、printf(%.5s,a);B、 puts(a);C、Printf(%s”,a);D、a5*2=Ojputs(a);11、若有定义:inta410;则以下选项中对数组元素aij引用错误的是O(0=i4,0=j10)A、*(&a00+10*i+j)B、*(a+i)+jC、*(*(a+i)+j)D、*(ai+12、以下叙述正确的是oA、C程序总是以ITIain()作为程序执行的起
36、始行B、IIIain()函数若不带参数,其后面的一对圆括号可省略C、函数体内的定义语句和可执行语句允许任意交替出现D、C语言中的语句之间必须用分号作为分隔符13、以下答案中不是C语言最基本数据类型的是oA、逻辑型B、整型C、字符型D、指针型14、C语言中数组下标的下限是oA、1B、0C、视具体情况而定D、无固定下限15、下面程序的输出结果是ml(intx)i11ty;y=x+x;return(y);)m2(inta,intb)(intz;z=ml(a*b);return(z);)main()(inta=3,b=6,c;c=m2(a,b);printf(%c,c);A、26B、18C、9D、36
37、16、C语言中while和dowhile循环的主要区别是A.While的循环控制条件比do-while的循环控制条件严格B、do-while的循环体至少无条件执行一次C、do-while允许从外部转到循环体内D、do-while循环体不能是复合语句17、以下选项中不能正确把Cl定义成结构体变量的是oA、 typedefstructintred;intgreen;intblue;COLOR;COLORcl;B、 structcolorclintred;intgreen;intblue;);C、 structcolor(intred;intgreen;intblue;cl;D、 struct(intred;intgreen;intblue;cl;18、有以下程序includemain()(chars=012xy”;inti,n=0;for(i=0;si!=0;i+)if(sia,&si设有如下定义:charaa220=abed,abed;则以下说法中错误的是.A、aa是个二维数组,可以存放2个19个字符以下的字符串