C语言(二级)笔试模拟试卷(考试时间120分钟,满分共100分)试卷I一、单项选择题(每小题1分,共20分)1.若N为整型变量,则for(N=10;N=1;N--);循环里的循环体被()。A)无限循环B)执行9次C)执行一次D)一次也不执行2.以下程序的输出结果是()(注:备选答案中,_代表空格)main(){printf(\n*s1=%15s*,chinabeijing);printf(\n*s2=%-5s*,chi);}A)*s1=chinabeijing___*B)*s1=chinabeijing___**s2=**chi*;*s2=chi__*C)*s1=*__chinabeijing*D)*s1=___chinabeijing**s2=__chi;*s2=chi__*;3.设有整型变量a,单精度型变量f,双精度型变量x,则表达式a+'b'+x*f值的类型为()。A)intB)floatC)doubleD)不能确定4.有以下说明语句,0=i10,则下面哪个是对数组元素的错误引用inta[]={1,2,3,4,5,6,7,8,9,0},*p,i;p=a;A.*(a+i)B.a[p-a]C.p+iD.*(&a[i])5.以下所列的各函数首部中,正确的是()。A.voidplay(var:Integer,varb:Integer)B.voidplay(inta,b)C.Subplay(aasinteger,basinteger)D.voidplay(inta,intb)6.下面程序运行情况是()。#includestdio.hvoidmain(){intx=3,y=-10,z=10;if(x=y+z)printf(####);elseprintf(****);}A)有语法错误不能通过编译B)输出####C)可以通过编译,但不能通过连接,因而不能运行D)输出****7.如下程序运行后x的值为()#includestdio.hvoidmain(){intx=5,b=3,x=10,y=20;(ab)&&(x++);printf(x=%d\n,x);}A)9B)10C)11D)128.表达式k=(1210)?4:1?2:3的值为()。A)1B)2C)3D)49.在下列程序中,调用fabona(8)的值是()intfabona(intn){if(n==1)return(1);elseif(n==2)return(2);elsereturn(fabona(n-1)+fabona(n-2));}A)13B)21C)55D)3410.C语言中,函数调用时若实参是数组名,则被调用函数对应形参()。A)可以是相应类型简单变量B)必须是相应类型的指针变量C)必须是相应类型数组名D)可以是相应类型的指针变量11.sizeof('a'+12)的值为()类型。A)intB)floatC)doubleD)char12.判断字符串a和b是否相等,应当使用()。A)if(a==b)B)if(a=b)C)if(strcpy(a,b))D)if(strcmp(a,b))13.以下对C语言函数的有关描述中,正确的是()。A)在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参B)C函数既可以嵌套定义又可以递归调用C)函数必须有返回值,否则不能使用函数D)C程序中有调用关系的所有函数必须放在同一个源程序文件中14.在文件包含预处理语句的使用形式中,当#include后面的文件名用(尖括号)括起时,找寻被包含文件的方式是()。A.仅仅搜索当前目录B.仅仅搜索源程序所在目录C.直接按系统设定的标准方式搜索目录D.先在源程序所在目录搜索,再按照系统设定的标准方式搜索15.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为()。(假设a[0][0]位于数组的第1个位置上。)A.i*m+jB.j*m+iC.i*m+j-1D.i*m+j+116.一个数据类型为void的函数中可以没有return语句,那么函数的被调用时()。A)没有返回值B)返回一个系统默认值C)返回只有用户临时决定D)返回一个不确定的值17.有定义:inty,*p=&y;,假定变量y在内存中所占地址为100~103。那么p的值为()。A)100B)101C)102D)10318.设有定义:structsk{inta;floatb;}data,*p;若有p=&data;,则对data中的a域的正确引用是()A)(*p).data.aB)(*p).aC)p->data.aD)p.data.a19.有定义:inta[10][10],*p=a[0],j,k;,其中j和k表示数组元素下标并在数组允许范围内,那么能够正确引用元素a[j][k]值的是()。A)*(a[j]+k)B)*((p+j)+k)C)*(p[j]+k)D)(a+j)+k20.有定义:char*s=\t\Name\\Address\\n;,那么strlen(s)等于()。A)15B)16C)17D)18二、不定项选择题(每小题1分,共10分,错选、漏选均不得分)1.在下面C语言的函数说明语句中,正确的是()。A)intfun(int,int);B)intfun(intx,y);C)intfun(x,y);D)intfun(intx;inty);E)intfun(intx,inty);2.C语言中,形式参数不能使用的存储类型说明为()。A)autoB)registerC)externD)staticE)staticregister3.在C语言中,对函数而言正确的概念有()。A)函数可以嵌套定义B)函数不能嵌套定义C)函数可以嵌套调用D)函数可以递归调用E)函数可以没有返回值4.有定义:inta[5][4],*p=a[0];,则能正确引用a[2][3]元素地址的有()。A)a[2]+3B)*((p+2)+3)C)*(p[2]+3)D)*(a+2)+3E)p+2*4+35.下列选项中,对变量的初始化定义正确的是()。A)inta,b,c=3;B)inta=3,b=3,c=3;C)inta=b=c=3;D)inta=3;b=3;c=3;E)inta,b=c=3;6.在下列语句所构成的程序结构中,break语句和continue语句均可使用的是()A)用goto语句和if语句构成的循环B)while循环C)do-while循环D)for循环E)switch语句构成的分支结构7.对结构类型不能进行的操作有()。A)赋值和存取B)复制C)作实际参数D)作函数的返回值类型E)&操作8.C语言中的语句中除了控制语句外,还应包括()。A)函数调用语句B)表达式语句C)空语句D)复合语句E)输入输出语句9下列关于文件的结论中正确的是()。A)对文件操作必须先关闭文件B)对文件操作必须先打开文件C)对文本文件只能顺序操作D)C语言不能操作二进制文件E)对文件操作结束后必须关闭文件10.以下说法中不正确的是()。A)宏名必须大写B)预处理时要检查宏定义中的拼写错误C)程序中所有与宏名相同的字符串都要进行置换D)可以用$undef命令终止宏定义的作用域E)宏定义有带参数和不带参数两种三、判断分析题(如正确,选择∨;如错误,选择×。每小题1分,共10分)1.在一个函数定义中,可以根据需要使用多个return语句。2.一个C程序无论有多少个源程序文件组成,在其中一个源程序文件中定义的全局变量的作用域默认为整个C程序。3.对任一变量一旦指定为某一确定类型后,该变量在程序运行时所占存储空间的多少和所能参加的运算类型便已确定了。4.可以将一个整型指针变量的值赋给一个实型指针变量,但可能引起符号位扩展。5.在程序的运行过程中,符号常量的值是可以改变的。6.函数返回值的数据类型取决于主调函数传递过来的实参的数据类型。7.表达式1282的值是32。8.用C语言编写的程序是一种需要经过编译和连接才能运行的程序。9.函数fseek(fp,10L,1)的作用是将fp指向的文件内部指针从当前位置后移10个字节的位置。10.C语言中,所有函数之间都可以互相调用。四、填空题。(每空2分,共20分)1.以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空。#includestdio.h#defineN3#defineM4voidLineMax(intx[N][M]){inti,j,p;for(i=0;i<N;i++){p=0;for(j=1;j<M;j++)if(x[i][p]<x[i][j])①;printf(″Themaxvalueinlineis%d\n″,②;}}voidmain(){intx[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};③;}2.以下程序的功能是:从整数10~99之间选出那些能被3整除、且有一位数字是5的数存放到x数组中,并输出这些数的个数。请填空。#includestdio.hvoidmain(){intx[100],k,a,b,i④,;for(k=10;k=99;k++){b=k/10;a=k-b*10;if(⑤)}{x[i]=k;i++;}}printf(″数据个数是:\n″,i);}3.函数hs的功能是根据下面的公式求出满足精度要求的值,请填空完成函数。71513114doublehs(doubleep){doubles=0.0,t=1.0;intn,fg=1;for(⑥;tep;n++){s=s+fg*t;t=1.0/(2*n+1);fg=-fg;}return⑦;}4.函数yh的功能是构成一个杨辉三角形,请填空完成该函数。#includestdio.h#defineN11voidyh(a[][N]){intj,k;}for(⑧;jN;j++)for(k=2;k=j-1;k++)a[j][k]=⑨+a[j-1][k];}5.下述程序用“辗转相除法”计算两个正整数m和n的最大公约数。请填空完成程序。#includestdio.hvoidmain(){intm,n,w;scanf(%5d,%d,&m,&n);while(n){w=⑩;m=n;n=w;}printf(%d,m);}五、阅读程序,写出运行结果(每小题4分,共20分)1.给出以下程序的运行结果()。#includestdio.hintx,y,a=15,b=10;voidnum(){x=a-b;y=a+b;}voidmain(){inta=7,b=5;x=x+a;y=y-b;num();printf(%d,%d\n,x,y);}2.以下程序的运行结果是()。#includestdio.hunsignedfun6(unsignednum){unsignedk=1;do{k*=num%10;num/=10;}while(num);return(k);}voidmain(){unsignedn=26;printf(%d\n,fun6(n));}3.下面程序的输出结果是()#includestdio.hvoidff(char*p1,char*p2){while(*p2++=*p1++);}voidmain(){char*p1=abcde,*p2=1234567;ff(p1,p2);printf(%s\n%s\n,p1,p2);}4.下列程序的运行结果是()。#includestdio.hvoidmain(){char*ay=abcdefghijk,*p;for(p=&ay[5];p=ay;p--)printf(%2c,*p);printf(\n);}5.#includestdio.hvoidmain(){intfun(inta);inta=2,j;for(j=0;j3;j++)printf(%d,fun(a));}intfun(inta){intb=0;staticintc=3;b++,c++;returna+b+c;}六