您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 南京大学2004年C语言期末试卷(附答案)
1《C语言程序设计》期末笔试试卷(2004年6月4日上午,120分种,闭卷)系别学号姓名成绩一、单项选择1、以下关于C源程序的叙述中正确的是(1)。A.所有的变量声明只能出现在函数之内B.所有的预处理命令只能出现在函数之外C.在一个函数的定义体内允许定义另一个函数D.在一个函数的调用表达式内允许调用另一个函数2、以下标识符中除(2)外,其它都必须先声明后使用。A.变量B.数据类型C.语句标号D.枚举常量3、声明局部变量时若缺省存储类型说明符,则等同于使用了以下存储类型说明符中的(3)。A.autoB.registerC.staticD.extern4、已有声明:chara[4]=”Tom”,b[10]=”Tom”;以下表达式中只有(4)的值可以用于正确表示a数组和b数组中存储的字符串是相等的。A.strcmp(a,b)B.!strcmp(a,b)C.a==bD.a[4]==b[4]5、已有声明:“intx=1,y[10]={0};”以下表达式中除(5)外,其它都是错误的。A.*&x=1B.&x=0C.y=x++;D.++(x=y[0])6、已有声明“inta[3][3]={{1},{2,3},{4,5,6}},*p=&a[0][0];”,则以下表达式中除(6)外其它的值均为3。A.a[1][1]B.*(a[1]+1)C.*p+4D.p[4]7、声明“int*fp();”中出现的标识符fp是(7)。A.int型变量B.指向int型变量的指针变量C.指向返回“int*”类型值的函数的指针变量D.返回值为“int*”类型的函数8、以下对象中除(8)外,其它均在程序开始执行前获得存储空间并一直保持到程序终止运行。A.函数B.全局变量C.静态局部变量D.函数的形式参数9、已知有函数f的定义:voidf(intx[],intn){intj;for(j=0;jn;j++)scanf(“%d”,x++);},在以下包含了该函数调用的语句中,正确的是(9)。A.inta[10],y=10;f(a[10],y);B.inta[10],y=10;y=f(a,y);C.inta[10],y=10;f(a)D.inta[10],y=10;f(a+1,y-1);10、已知有函数f的定义:intf(floatx[][3],floaty[],intn){..},在以下四个f函数的声明选项中,正确的是(10)。A.intf(float[][3],float[],int);B.intf(floatx[][3],y[],int);C.intf(floatx[][],floaty[],intn);D.intf(floatx[][3],floaty[]);11、以下程序在编译时在第四行报错,如果决定修改该行声明中出现的局部变量a的名字,则下列选项中除(11)以外其它都可以用来替换变量名a。A.bB.cC.dD.e#definec2intb;voidd(inta){inta=1;2printf(%d,a);}main(){inte=1;d(e);}12、设有函数定义:intf(inta,intb){returnab?(a,b):(b,a);},则在调用函数f(2,3)后得到的返回值是(12)。A.2B.3C.2和3D.3和213、以下声明中完全正确(没有编译错误和警告错误)的是(13)。A.charn=2,p[n];B.char*p[2]={“a”,”b”,”c”};C.char(*p)[2]=”a”;D.char*p();14、已知有声明intj,a[][4]={1,2,3,4,5},*p=&a[0][0];执行了语句for(j=0;j6;j++)p[j]*=p[j];以后,a[1][0]的值是(14)。A.16B.25C.5D.015、已知有声明inta[]={1,2,3};以下选项中(15)是对a数组元素的正确引用。A.aB.&aC.*aD.*a[0]16、已知有如下的结构类型定义,下列说法中不正确的是(16)。A.允许将成员标识符“y”改为“x”B.允许将成员标识符“y”改为“z”C.允许将成员标识符“y”改为“w”D.标识符“x”可以缺省[结构定义]structx{inty;floatz;struct{doublew;}u;};17、已知有以下结构类型定义和数组的声明,在给出的四个选项语句中除(17)外,其它均输出“zhao”。A.puts(ps[0].name);B.puts((*ps).name);C.puts(p-name);D.puts((--p)-name);[结构定义与声明]structp{charname[20];struct{inty,m,d;}birthday;}ps[2]={“Zhao”,{1980,2,3},”Wang”,{1985,4,4}},*p=ps+1;18、以下语句中都可以包含由一对花括号组成的复合语句,break语句不可以放置在(18)语句所带的复合语句内。A.switchB.whileC.do/whileD.if/else19、若程序中需要调用库函数getchar(),则在函数调用之前必须出现预处理命令(19)。A.#includestdio.hB.#includemath.hC.#includestring.hD.#includectype.h20、若程序中需要对某个已经存在的文本文件中的原有部分数据直接做更新操作,则在调用fopen函数时所选用的文件打开模式应当是(20)。A.wB.r+C.w+D.a+二、填空1、表达式“(double)(int)1.5+1%2”的值是(1)。2、数学计算式“|sinex+y|”的C语言表达式是(2)。3、需要两个操作数并且其数据类型必须都是int、char或枚举型的运算符是(3)。34、与表达式“x==0”等价的表达式是(4)。5、在表达式*(s+e)中,操作数s的类型应为(5),e的类型应为(6)。6、除(7)外的其它c语言语句都必须用分号结束。7、如果函数体内的return语句中出现表达式(例如:returnx*x;),则定义函数时的返回值类型不能为(8)。8、当(9)函数中执行了return语句时,程序立即终止运行。9、调用函数strlen(“b\b\xbb”)后的返回值是(10)。10、在函数定义的形式参数表中的参数可以声明为除(11)类型外的任何已定义的合法数据类型。11、已知在一个程序的开始处有#includestdio.h,则程序中出现的语句“fprintf(stdout,”%d”,25);”可以用(12)替换。12、以下程序运行时输出结果第一行为(13),第二行为(14)。enum{ONE,TWO,THREE};#defineS(x)((x)*(x))#defineY(x)1/xmain(){printf(%d\n,S(ONE)+S(TWO));printf(%d,Y(TWO+THREE));}13、以下程序运行时输出结果的第一行为(15),第二行为(16)。#includestdio.hintf1(intn){ints=0;returns+=n;}intf2(intn){staticints;returns+=n;}main(){inti,sum1=0,sum2=0;for(i=1;i=4;i++){sum1+=f1(i);sum2+=f2(i);}printf(%d\n%d,sum1,sum2);}14、以下程序运行时输出结果第一行为(17),第二行为(18)。voidf(inty[],intn,intx){inti;x=x=2?++x:--x;for(i=0;in;i++)if(y[i]x)y[i]++;elseif(y[i]x)y[i]--;}main(){inti,a[5]={2,3,4,6,9},b=2;f(a,4,b);printf(%d\n,b);for(i=0;i5;i++)printf(%d,a[i]);}15、以下程序运行时输出结果第一行为(19),第二行为(20)。#includestdio.h#includectype.hmain(){chars[]=Thank;inti,j,k;4for(i=0;s[i]!=0;i++)if(islower(s[i]))s[i]=s[i]-'a'+'A';/*函数islower(c)功能:判断c是否小写字母的编码*/puts(s);for(j=i-1,k=s[j];j0;j--)s[j]=s[j-1];s[j]=k;puts(s);}16、以下程序运行时输出结果第一行是(21),第二行是(22)。voidf(intx[]){intj,s;if(x[0]=0){for(j=0,s=0;j4;j++)s=s*2+x[j];printf(%x\n,s);f(x+4);}}main(){inta[]={1,1,1,0,0,0,1,1,-1};f(a);}17、以下程序运行时若键盘输入3,则输出结果第一行为(23),第二行为(24),第三行为(25).voidm(int*s,intn){inti=n-1,j=n/2,k;s[i*n+j]=1;for(k=2;k=n*n;k++){if(i+1==n&&j+1n){i=0;j++;}elseif(i+1n&&j+1==n){i++;j=0;}elseif(i+1==n&&j+1==n||s[(i+1)*n+j+1]!=0)i--;else{i++;j++;}s[i*n+j]=k;}}main(){inti,j,n,*p,*q;scanf(%d,&n);p=(int*)malloc(n*n*sizeof(int));if(p==0)exit(1);q=p;for(i=0;in*n;i++)q[i]=0;m(p,n);for(i=0;in;i++){for(j=0;jn;j++)printf(%d,*q++);printf(\n);}}三、完善程序1、以下程序中函数f对x指向的数组中前n个不超过4位的正整数做数据加密。加密方法:将组成这5个正整数的每一位数字加上该位数在数据中位置的序号(序号规定:个位为1,十位为2,百位为3,千位为4),若某位数加上其序号的值大于9,则用该数除以10的余数替换。例如,原始数据为23,574,9815时,加密后的数据为44,895,3136。voidf(int(1),intn){inti,j,k,s,t[4];for(i=0;in;i++){for(j=0;(2);j++){t[j]=(x[i]%10+j+1)%10;x[i]=x[i]/10;}for(s=0,k(3);k=0;k--)s=s*10+t[k];x[i]=s;}}main(){inti,x[]={23,574,9815};f(x,3);for(i=0;i3;i++)printf(%d,,x[i]);}2、函数str_del功能:从s字符串中删除所有出现的t子串,程序正确时输出结果为Heastudent.Sheastudenttoo.。#includestring.h(4)str_del(chars[],chart[]){inti,j,k,u;for(i=0;(5);i++){for(j=i,k=0;t[k]!=’\0’;j++,k++)if(s[j]!=t[k])(6);if(t[k]==’\0’){for(u=0;s[j+u]!=0;u++)s[i+u]=(7);s[i+u]='\0';}}returns;}main(){charline[80]=Heisastudent.Sheisastudenttoo.,str[10]=is;puts(str_del(line,str));}3、以下程序中函数count统计形参a指向的结构数组的n个元素中(n为函数形参)不同的neme各自出现的次数,并将统计结果保存在s指向的结构数组中,函数返回s数组中有效数据的个数。例如,在main函数中调
本文标题:南京大学2004年C语言期末试卷(附答案)
链接地址:https://www.777doc.com/doc-4705423 .html