20103-20119全国C语言真题及答案
2010年3月全国计算机二级C语言考试真题一、选择题1、下列叙述中正确的是A)对长度为n的有序链表进行查找,最坏情况下需要的比较次数为nB)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)C)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)D)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)2、算法的时间复杂度是指A)算法的执行时间B)算法所处理的数据量C)算法程序中的语句或指令条数D)算法在执行过程中所需要的基本运算次数3、软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是A)编辑软件B)操作系统C)教务管理系统D)浏览器4、软件(程序)调试的任务是A)诊断和改正程序中的错误B)尽可能多地发现程序中的错误C)发现并改正程序中的所有错误D)确定程序中错误的性质5、数据流程图(DFD图)是A)软件概要设计的工具B)软件详细设计的工具C)结构化方法的需求分析工具D)面向对象方法的需求分析工具6、软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于A)定义阶段B)开发阶段C)维护阶段C)上述三个阶段7、数据库管理系统中负责数据模式定义的语言是A)数据定义语言B)数据管理语言C)数据操纵语言D)数据控制语言8、在学生管理的关系数据库中,存取一个学生信息的数据单位是A)文件B)数据库C)字段D)记录9、数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的A)需求分析阶段B)逻辑设计阶段C)概念设计阶段D)物理设计阶段10、有两个关系R和T如下:RTABCa12b22c32d32ABCc32d32n则由关系R得到关系T的操作是A)选择B)投影C)交D)并11、以下叙述正确的是A)C语言程序是由过程和函数组成的B)C语言函数可以嵌套调用,例如:fun(fun(x))C)C语言函数不可以单独编译D)C语言中除了main函数,其他函数不可作为单独文件形式存在12、以下关于C语言的叙述中正确的是A)C语言中的注释不可以夹在变量名或关键字的中间B)C语言中的变量可以在使用之前的任何位置进行定义C)在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致D)C语言的数值常量中夹带空格不影响常量值的正确表示13、以下C语言用户标识符中,不合法的是A)_1B)AaBcC)a_bD)a--b14、若有定义:doublea=22;inti=0,k=18;,则不符合C语言规定的赋值语句是A)a=a++,i++;B)i=(a+k)<=(i+k);C)i=a%11;D)i=!a;15、有以下程序#include
main(){chara,b,c,d;scanf(“%c%c”,&a,&b);c=getchar();d=getchar;printf(“%c%c%c%cn”,a,b,c,d);}当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:回车也是一个字符)12<CR>34<CR>则输出结果是A)1234B)12C)12D)12 3 3416、以下关于C语言数据类型使用的叙述中错误的是A)若要准确无误差的表示自然数,应使用整数类型B)若要保存带有多位小数的数据,应使用双精度类型C)若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D)若只处理“真”和“假”两种逻辑值,应使用逻辑类型17、若a是数值类型,则逻辑表达式(a==I)||(a!=1)的值是A)1B)0C)2D)不知道a的值,不能确定18、以下选项中与if(a==1)a=b;elsea++;语句功能不同的switch语句是A)switch(a){case1:a=b;break;ndefault:a++;}B)switch(a==1){case0:a=b;break;case1:a++;}C)switch(a){default:a++;break;case1:a=b;}D)switch(a==1){case1:a=b;break;case0:a++;}19、有如下嵌套的if语句if(amain(){inti,j,m=1;for(i=1;i<3;i++){for(j=3;j>0;j--){if(i+j>3)break;m*=i*j;}}printf(“m=%dn”,m);}程序运行后的输出结果是A)m=6B)m=2C)m=4D)m=521、有以下程序#includemain()n{inta=1,b=2;for(;a<8;a++){b+=a;a+=2;}printf(“%d,%dn”,a,b);}程序运行后的输出结果是A)9,18B)8,11C)7,11D)10,1422、有以下程序,其中k的初值为八进制数#includemain(){intk=011;printf(“%dn”,k++);}程序运行后的输出结果是A)12B)11C)10D)923、下列语句组中,正确的是A)char*s;s="Olympic";B)chars[7];s="Olympic";C)char*s;s={"Olympic"};D)chars[7];s={"Olympic"};24、以下关于return语句的叙述中正确的是A)一个自定义函数中必须有一条return语句B)一个自定义函数中可以根据不同情况设置多条return语句C)定义成void类型的函数中可以有带返回值的return语句D)没有return语句的自定义函数在执行结束时不能返同到调用处25、下列选项中,能正确定义数组的语句是A)intnum[0..2008];B)intnum[];C)intN=2008;D)#defineN2008 intnum[N]; intnum[N];26、有以下程序#includevoidfun(char*c,intd){*c=*c+1;d=d+1;printf(“%c,%c”,*c,d);}main(){charb=‘a’,a=‘A’;fun(&b,a);printf(“%c,%cn”,b,a);}程序运行后的输出结果是A)b,B,b,AB)b,B,B,AC)a,B,B,aD)a,B,a,B27、若有定义int(*pt)[3];,则下列说法正确的是A)定义了基类型为int的三个指针变量B)定义了基类型为int的具有三个元素的指针数组ptC)定义了一个名为*pt、具有三个元素的整型数组D)定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组n28、设有定义doublea[10],*s=a;,以下能够代表数组元索a[3]的是A)(*s)[3]B)*(s+3)C)*s[3]D)*s+329、有以下程序#includemain(){inta[5]={1,2,3,4,5},b[5]={0,2,1,3,0},i,s=0;for(i=1;i<3;i++)s=s+a[b[i]];printf(“%dn”,s);}程序运行后的输出结果是A)6B)10C)11D)1530、有以下程序#includemain(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=1;i<3;i++)for(j=1;j<=1;j++)t+=b[i][b[j][i]];printf(“%dn”,t);}程序运行后的输出结果是A)1B)3C)4D)931、若有以下定义和语句chars1[10]="abcd!",s2="n123\";printf("%d%d\n",strlen(s1),strlen(s2));则输出结果是A)5 5B)10 5C)10 7D)5 832、有以下程序#include#defineN8voidfun(int*x,inti){*x=*x+i;}main(){inta[N]={1,2,3,4,5,6,7,8},i;fun(a,2);for(i=1;iintf(intt[],intn);main()n{inta[4]={1,2,3,4},s;s=f(a,4);printf(“%dn”,s);}intf(intt[],intn){if(n>0)returnt[n-1]+f(t,n-1);elsereturn0;}程序运行后的输出结果是A)4B)10C)14D)634、有以下程序#includeintfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=2;i++)s=fun();printf(“%dn”,s);}程序运行后的输出结果是A)0B)1C)4D)835、有以下程序#include#defineSUB(a)(a)-(a)main(){inta=2,b=3,c=5,d;d=SUB(a+b)*c;printf(“%dn”,d);}程序运行后的输山结果是A)0B)-12C)-20D)1036、设有定义:structcomplex{intreal,unreal;}data1={1,8},data2;则以下赋值语句中错误的是A)data2=data1;B)data2=(2,6);C)data2.real=data1.real;D)data2.real=data1.unreal;37、有以下程序#include#includestructA{inta;charb[10];doublec;};voidf(structAt);main(){structAa={1001,“ZhangDa”,1098.0};f(a);nprintf(“%d,%s,%6.1fn”,a.a,a.b,a.c);}voidf(structAt){t.a=1002;strcpy(t.b,“ChangRong”);t.c=1202.0;}输出结果是A)1001,ZhangDa,1098.0B)1002,ChangRong,1202.0C)1001,ChangRong,10980D)1002,ZhangDa,1202.038、有以下定义和语句structworkers{intnum;charname[20];charc;struct{intday;intmonth;intyear;}s};structworkersw,*pw;pw=&w;能给w中year成员赋1980的语句是A)pw.year=1980;B)w.year=1980;C)pw->year=1980;D)w.s.year=1980;39、有以下程序#includemain(){inta=2,b=a,c=2;printf(“%dn”,a/b&c);}程序运行后的输出结果是A)0B)1C)2D)340、有以下程序#includemain(){FILE*fp;charstr[10];fp=open(“myfile.dat”,“w”);fputs(“abc”,pf);close(pf);fp=open(“myfile.dat”,“a+”);fprintf(pf,“%d”,28);rewind(pf);fscanf(pf,“%s”,str);puts(str);close(pf);}程序运行后的输出结果是A)abcB)28cC)abc28D)因类型不一致而出错二、填空题(每空2分,共30分)请将每空的正确答案写在答题卡【1】~【15】序号的横线上,答在试卷上不得分。n(1)一个队列的初始状态为空。现将元素A,B,C,D,E,F,5,4,3,2,1依次入队,然后再依次退队,则元素退队的顺序为 【1】 。(2)设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列中共有 【2】 个元素。(3)设二叉树如下:ABCDFEGH对该二叉树进行后序遍历的结果为 【3】 。(4)软件是 【4】 数据和文档的集合。(5)有一个学生选课的关系,其中学生的关系模式为:学生(学号,姓名,班级,年龄),课程的关系模式为:课程(课号,课程名,学时),其中两个关系模式的键分别是学号和课号,则关系模式选课可定义为:选课(学号, 【5】 ,成绩)。(6)设x为int型变量,请写出一个关系表达式 【6】 ,用以判断x同时为3和7的倍数时,关系表达式的值为真。(7)有以下程序#includemain(){inta=1,b=2,c=3,d=0;if(a==1)if(b!=2)if(c==3)d=1;elsed=2;elseif(c!=3)d=3;elsed=4;elsed=5;printf(“%dn”,d);}程序远行后的输出结果是 【7】 。(8)有以下程序#includenmain(){intm,n;scanf(“%d%d”,&m,&n);while(m!=n){while(m>n)m=m-n;while(mmain(){inti,j,a[][3]={1,2,3,4,5,6,7,8,9};for(i=1;i<3;i++)for(j=1;j<3;i++)printf(“%d”,a[i][j]);printf(“n”);}程序运行后的输出结果是 【9】 (10)有以下程序#includemain(){inta[]={1,2,3,4,5,6},*k[3],i=0;while(i<3){k[i]=&a[2*i];printf(“%d”,*k[i]);i++;}}程序运行后的输出结果是 【10】 。(11)有以下程序#includemain(){inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};intb[3]={0},i;for(i=1;i<3;i++)b[i]=a[i][2]+a[2][i];for(i=1;i<3;i++)printf(“%d”,b[i]);printf(“n”);}程序运行后的输出结果是 【11】 。(12)有以下程序#include#includevoidfun(char*str){chartemp;intn,i;nn=strlen(str);temp=str[n-1];for(i=n-1;i>0;i--)str[i]=str[i-1];str[0]=temp;}main(){chars[50];scanf(“%s”,s);fun(s);printf(“%sn”,s);}程序运行后输入:abcdef<回车>,则输出结果是 【12】 (13)以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序拆分并输出。请填空。#includemain(){intx=256;printf(“%d-%d-%dn”,【13】,x/10%10,x/100);}(14)以下程序用以删除字符串中所有的空格,请填空。#includemain(){char[100]={“Ourteacherteachclanguage!”};inti,j;for(i=j=0;s[i]!=‘ ’;i++)if(s[i]!=‘’){s[j]=s[i];j++;}s[j]=【14】;printf(“%sn”,s);}(15)以下程序的功能是:借助指针变量找出数组元素中的最大值及其元素的下标值。请填空。#includemain(){inta[10],*p,*s;for(p=a;p-a<10;p++)scanf(“%d”,p);for(p=a,s=a;p-a<10;p++)if(*p>*s)s=【15】;printf(“index=%dn”s-a);}参考答案:一、选择题:1.CDBAC6.BADCA11.BADCC16.DABCA21.DDABD26.ADBCC31.ACBCB36.BADAC二、填空题:(1)ABCDEF54321(2)15(3)EDBGHFCA(4)程序(5)课号(6)(x%3==0)&&(x%7==0)(7)4(8)7(9)123569(10)135(11)101418(12)fabcde(13)x%10(14)' '(15)pn2010年9月全国计算机二级C语言笔试试题一、选择题(每小题2分,共70分)(1)下列叙述中正确的是 A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C)线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 D)上述三种说法都不对(2)下列叙述中正确的是 A)在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化 B)在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化 C)在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化 D)上述三种说法都不对(3)软件测试的目的是 A)评估软件可靠性B)发现并改正程序中的错误 C)改正程序中的错误D)发现程序中的错误(4)下面描述中,不属于软件危机表现的是 A)软件过程不规范B)软件开发生产率低 C)软件质量难以控制D)软件成本不断提高(5)软件生命周期是指 A)软件产品从提出、实现、使用维护到停止使用退役的过程 B)软件从需求分析、设计、实现到测试完成的过程 C)软件的开发过程 D)软件的运行维护过程(6)面向对象方法中,继承是指 A)一组对象所具有的相似性质 B)一个对象具有另一个对象的性质 C)各对象之间的共同性质 D)类之间共享属性和操作的机制(7)层次型、网状型和关系型数据库划分原则是 A)记录长度B)文件的大小 C)联系的复杂程度D)数据之间的联系方式(8)一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员、与实体计算机之间的联系是 A)一对一 B)一对多 C)多对多 D)多对一(9)数据库设计中反映用户对数据要求的模式是A)内模式 B)概念模式 C)外模式 D)设计模式(10)有三个关系R、S和T如下:n 则由关系R和S得到关系T的操作是 A)自然连接 B)交 C)投影 D)并(11)以下关于结构化程序设计的叙述中正确的是 A)一个结构化程序必须同时由顺序、分支、循环三种结构组成 B)结构化程序使用goto语句会很便捷 C)在C语言中,程序的模块化是利用函数实现的 D)由三种基本结构构成的程序只能解决小规模的问题(12)以下关于简单程序设计的步骤和顺序的说法中正确的是 A)确定算法后,整理并写出文档,最后进行编码和上机调试 B)首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档 C)先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档 D)先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构(13)以下叙述中错误的是 A)C程序在运行过程中所有计算都以二进制方式进行 B)C程序在运行过程中所有计算都以十进制方式进行 C)所有C程序都需要编译链接无误后才能运行 D)C程序中整型变量只能存放整数,实型变量只能存放浮点数(14)有以下定义:int a;long b;double x,y;则以下选项中正确的表达式是 A)a%(int)(x-y) B)a=x!=y; C)(a*y)%b D)y=x+y=x(15)以下选项中能表示合法常量的是 A)整数:1,200 B)实数:1.5E2.0 C)字符斜杠:‘’D)字符串:" 07"(16)表达式a+=a-=a=9的值是 A)9 B)_9 C)18 D)0(17)若变量已正确定义,在if(W)printf(“%dn,k”);中,以下不可替代W的是 A)a<>b+c B)ch=getchar() C)a==b+c D)a++(18)有以下程序 #include main() {int a=1,b=0; if(!a)b++; else if(a==0)if(a)b+=2; else b+=3; printf(”%d\n”,b); } 程序运行后的输出结果是 A)0 B)1 C)2 D)3(19)若有定义语句inta,b;doublex;则下列选项中没有错误的是 A)switch(x%2) B)switch((int)x/2.0 {case0:a++;break; {case0:a++;break; case1:b++;break; case1:b++;break; default:a++;b++; default:a++;b++; } n} C)switch((int)x%2) D)switch((int)(x)%2) {case0:a++;break; {case0.0:a++;break; case1:b++;break; case1.0:b++;break; default:a++;b++; default:a++;b++; } }(20)有以下程序 #include main() {inta=1,b=2; while(a<6){b+=a;a+=2;b%二10;} printf(”%d,%d\n”,a,b); } 程序运行后的输出结果是 A)5,11 B)7,1 C)7,11 D)6,1(21)有以下程序 #include<stdio.h> main() {inty=10; while(y--); printf(”Y=%d\n”,Y); } 程序执行后的输出结果是 A)y=0 B)y=-1 C)y=1 D)while构成无限循环(22)有以下程序 #include<stdio.h> main() {chars[」=”rstuv"; printf(”%c\n”,*s+2); } 程序运行后的输出结果是 A)tuv B)字符t的ASCII码值 C)t D)出错(23)有以下程序 #include<stdio.h> #include<string.h> main() {charx[]=”STRING”; x[0」=0;x[1]=’\0’;x[2」=’0’; printf(”%d %dn”,sizeof(x),strlen(x)); } 程序运行后的输出结果是 A)6 1 B)7 0 C)6 3 D)7 n1(24)有以下程序 #include<stdio.h> int f(int x); main() {int n=1,m; m=f(f(f(n)));printf(”%d\n”,m); } int f(int x) {return x*2;} 程序运行后的输出结果是 A)1 B)2 C)4 D)8(25)以下程序段完全正确的是 A)int*p; scanf("%d",&p); B)int*p; scanf(“%d”,p); C)intk,*p=&k; scanf("%d",p); D)intk,*p:; *p=&k; scanf(“%d”,p);(26)有定义语句:int*p[4];以下选项中与此语句等价的是 A)int p[4]; B)int **p; C)int *(p「4」); D)int(*p)「4」;(27)下列定义数组的语句中,正确的是 A)int N=10; B)#defineN10 int x[N]; intx[N]; C)int x[0..10]; D)intx[];(28)若要定义一个具有5个元素的整型数组,以下错误的定义语句是 A)int a[5]=﹛0﹜; B)int b[]={0,0,0,0,0}; C)int c[2+3]; D)int i=5,d[i];(29)有以下程序 #include<stdio.h> void f(int*p); main() {int a[5]={1,2,3,4,5},*r=a; f(r);printf(”%dn”;*r); } voidf(int*p) {p=p+3;printf(”%d,”,*p);} 程序运行后的输出结果是 A)1,4 B)4,4 C)3,1 D)4,1(30)有以下程序(函数fun只对下标为偶数的元素进行操作) #include<stdio.h> voidfun(int*a;intn) {inti、j、k、t; forn(i=0;i<n一1;1+=2) {k=i;‘ for(j=i;ja〔k])k=j; t=a〔i];a〔i]=a[k];a〔k]=t; } } main() {intaa「10」={1、2、3、4、5、6、7},i; fun(aa、7); for(i=0,i<7;i++)printf(”%d,”,aa[i])); printf(”\n”); } 程序运行后的输出结果是 A)7,2,5,4,3,6,1 B)1,6,3,4,5,2,7 C)7,6,5,4,3,2,1 D)1,7,3,5,6;2,1(31)下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST"要求的是 A)if(strcmp(s2,s1)==0)ST; B)if(sl==s2)ST; C)if(strcpy(sl,s2)==1)ST; D)if(sl-s2==0)ST;(32)以下不能将s所指字符串正确复制到t所指存储空间的是 A)while(*t=*s){t++;s++;} B)for(i=0;t[i]=s[i];i++); C)do{*t++=*s++;}while(*s); D)for(i=0,j=0;t[i++]=s[j++];);(33)有以下程序(strcat函数用以连接两个字符串) #include<stdio.h> #include<string.h> main() {chara[20]=”ABCD\OEFG\0”,b[]=”IJK”; strcat(a,b);printf(”%sn”,a); } 程序运行后的输出结果是 A)ABCDEOFGOIJK B)ABCDIJK C)IJK D)EFGIJK(34)有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母 #include<stdio.h> #include<ctype.h> void fun(char*p) {int i=0; while(p[i]) {if(p[i]==’’&&islower(p「i-1」))p[i-1]=p[i-1]-‘a’+‘A’; i++; } } main() {chars1[100]=”abcdEFG!”; fun(s1);printf(”%sn”,s1); } 程序运行后的输出结果是 A)ab cd EFG! B)Ab Cd EFg!C)aBcDEFG!D)abcd EFg!n(35)有以下程序 #include<stdio.h> void fun(intx) {if(x/2>1)fun(x/2); printf(”%d”,x); } main() {fun(7);printf(”n”);} 程序运行后的输出结果是 A)137 B)731 C)73 D)37(36)有以下程序 #include<stdio.h> intfun() {staticintx=1; x+=1;returnx; } main() {inti;s=1; for(i=1;i<=5;i++)s+=fun(); printf(”%d\n”,s); } 程序运行后的输出结果是 A)11 B)21 C)6 D)120(37)有以下程序 #inctude<stdio.h> #include<stdlib.h> Main() {int*a,*b,*c; a=b=c=(int*)malloc(sizeof(int)); *a=1;*b=2,*c=3; a=b; printf(“%d,%d,%d\n”,*a,*b,*c); } 程序运行后的输出结果是 A)3,3,3 B)2,2,3 C)1,2,3 D)1,1,3(38)有以下程序 #include<stdio.h> main() {ints,t,A=10;doublenB=6; s=sizeof(A);t=sizeof(B); printf(“%d,%d\n”,s,t); } 在VC6平台上编译运行,程序运行后的输出结果是 A)2,4 B)4,4 C)4,8 D)10,6(39)若有以下语句 TypedefstructS {intg;charh;}T; 以下叙述中正确的是 A)可用S定义结构体变量 B)可用T定义结构体变量 C)S是struct类型的变量 D)T是structS类型的变量(40)有以下程序 #include<stdio.h> main() {shortc=124; c=c_______; printf(“%d\n”、C); } 若要使程序的运行结果为248,应在下划线处填入的是 A)>>2 B)|248 C)&0248 D)<<1二、填空题(每空2分,共30分) (1)一个栈的初始状态为空。首先将元素5,4,3,2,1依次入栈,然后退栈一次,再将元素A,B,C,D依次入栈,之后将所有元素全部退栈,则所有元素退栈(包括中间退栈的元素)的顺序为【1】(2)在长度为n的线性表中,寻找最大项至少需要比较【2】次。(3)一棵二叉树有10个度为1的结点,7个度为2的结点,则该二叉树共有【3】个结点。(4)仅由顺序、选择(分支)和重复(循环)结构构成的程序是【4】程序。(5)数据库设计的四个阶段是:需求分析,概念设计,逻辑设计【5】。(6)以下程序运行后的输出结果是【6】。 #include<stdio.h> main() {inta=200,b=010; printf(”%d%dn”,a,b); }(7)有以下程序 #include<stdio.h> main() {int x,Y; scanf(”%2d%ld”,&x,&y);printf(”%d\n”,x+y); } 程序运行时输入:1234567程序的运行结果是【7】。(8)在C语言中,当表达式值为0时表示逻辑值“假”,当表达式值为【8】时表示逻辑值“真”。(9)有以下程序 #include<stdio.h> main() {intni,n[]={0,0,0,0,0}; for(i=1;i<=4;i++) {n[i]=n[i-1]*3+1;printf(”%d",n[i]);} } 程序运行后的输出结果是【9】。(10)以下fun函数的功能是:找出具有N个元素的一维数组中的最小值,并作为函数值返回。请填空。(设N已定义) intfun(intx[N]) {inti,k=0; for(i=0;i if(x[i] returnx[k]; } (11)有以下程序 #include<stdio.h> int*f(int*p,int*q); main() {intm=1,n=2,*r=&m; r=f(r,&n);printf(”%d\n”,*r); } int*f(int*p,int*q) {return(*p>*q)?p:q;} 程序运行后的输出结果是【11】 (12)以下fun函数的功能是在N行M列的整形二维数组中,选出一个最大值作为函数值返回,请填空。(设M,.N已定义) intfun(inta[N][M)) {inti,j,row=0,col=0; for(i=0;i for(j=0;j if(a[i][j]>a[row][col]){row=i;col=j;} return(【12】): }(13)有以下程序 #include<stdio.h> main() {int n[2],i,j; for(i=0;i<2;i++)n[i]=0; for(i=0;i<2;i++) for(j=0;j<2;j++)n[j]=n「i」+1; printf(”%dn”,n[1]); } 程序运行后的输出结果是【13】 (14)以下程序的功能是:借助指针变量找出数组元素中最大值所在的位置并输出该最大值。请在输出语句中填写代表最大值的输出项。 #include<stdio.h> main() {intna〔10],*p,*s; for(p=a;p-a<10;p++)scanf(”%d”,p); for(p=a,s=a;p-a<10;p++)if(*p>*s)S=P; printf("max=%dn”,【14】); } (15)以下程序打开新文件f.txt,并调用字符输出函数将a数组中的字符写入其中,请填空。 #include<stdio.h> main() {【15】*fp; chara[5]={’1’,’2’,’3’,’4’,’5’},i; fp=fopen(”f.txt”,”w”);选择题:BCCABDDBCACDBCC DACCDBDBDDDBADAACBCB BACBC 填空题 1:1DCAB2345 2:1 3:25 4:结构化 5:物理设计6:2008 7:3 8:非0 9:141340 10:i11:2 12:a[row][col]13:2 14:*s 15:FILE2011年3月全国计算机等级考试二级C语言笔试真题一、选择题(1)下列关于栈叙述正确的是 A)栈顶元素最先能被删除 B)栈顶元素最后才能被删除 C)栈底元素永远不能被删除D)以上三种说法都不对(2)下列叙述中正确的是 A)有一个以上根结点的数据结构不一定是非线性结构 B)只有一个根结点的数据结构不一定是线性结构 C)循环链表是非线性结构 D)双向链表是非线性结构(3)某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层) A)3B)4C)6D)7(4)在软件开发中,需求分析阶段产生的主要文档是 A)软件集成测试计划B)软件详细设计说明书C)用户手册D)软件需求规格说明书(5)结构化程序所要求的基本结构不包括 A)顺序结构B)GOTO跳转 C)选择(分支)结构D)重复(循环)结构(6)下面描述中错误的是 A)系统总体结构图支持软件系统的详细设计 B)软件设计是将软件需求转换为软件表示的过程 C)数据结构与数据库设计是软件设计的任务之一 D)PAD图是软件详细设计的表示工具n(7)负责数据库中查询操作的数据库语言是 A)数据定义语言 B)数据管理语言 C)数据操纵语言 D)数据控制语言(8)一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是A)1:1联系B)1:m联系 C)m:1联系D)m:n联系(9)有三个关系R、S和T如下:则由关系R和S得到关系T的操作是 A)自然连接B)交C)除D)并(10)定义无符号整数类为UInt,下面可以作为类UInt实例化值的是 A)-369B)369C)0.369D)整数集合{1,2,3,4,5}(11)计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是 A)C语言程序仅可以编译执行 B)C语言程序仅可以解释执行 C)C语言程序既可以编译执行又可以解释执行 D)以上说法都不对(12)以下叙述中错误的是 A)C语言的可执行程序是由一系列机器指令构成的 B)用C语言编写的源程序不能直接在计算机上运行 C)通过编译得到的二进制目标程序需要连接才可以运行 D)在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文件(13)以下选项中不能用作C程序合法常量的是 A)1,234B)'123' C)123D)"x7G"(14)以下选项中可用作C程序合法实数的是 A).1e0B)3.0e0.2 C)E9D)9.12E(15)若有定义语句:inta=3,b=2,c=1;,以下选项中错误的赋值表达式是 A)a=(b=4)=3;B)a=b=c+1;C)a=(b=4)+c;D)a=1+(b=c=4);(16)有以下程序段 charname[20]; intnum; scanf("name=%snum=%d",name;&num); 当执行上述程序段,并从键盘输入:name=Lilinum=1001<回车>后,name的值为 A)Lili B)name=Lili C)Lilinum= D)name=Lilinum=1001(17)if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是 A)必须是逻辑值B)必须是整数值 C)必须是正数D)可以是任意合法的数值(18)有以下程序 #includen main() {intx=011; printf("%dn",++x); } 程序运行后的输出结果是 A)12B)11C)10D)9(19)有以下程序 #include main() {ints; scanf("%d",&s); while(s>0) {switch(s) {case1:printf("%d",s+5); case2:printf("%d",s+4);break; case3:printf("%d",s+3); default:printf("%d",s+1);break; } scanf("%d",&s); } } 运行时,若输入123450<回车>,则输出结果是 A)6566456B)66656C)66666D)6666656(20)有以下程序段 inti,n; for(i=0;i<8;i++) {n=rand()%5; switch(n) {case1: case3:printf("%dn",n);break; case2: case4:printf("%dn",n);continue; case0:exit(0); } printf("%dn",n); } 以下关于程序段执行情况的叙述,正确的是 A)for循环语句固定执行8次 B)当产生的随机数n为4时结束循环操作 C)当产生的随机数n为1和2时不做任何操作 D)当产生的随机数n为0时结束程序运行(21)有以下程序 #includen main() {chars[]="012xy 8s34f4w2"; inti,n=0; for(i=0;s[i]!=0;i++) if(s[i]>='0'&&s[i]<='9')n++; printf("%dn",n); } 程序运行后的输出结果是 A)0B)3C)7D)8(22)若i和k都是int类型变量,有以下for语句 for(i=0,k=-1;k=1;k++)printf("*****n"); 下面关于语句执行情况的叙述中正确的是 A)循环体执行两次 B)循环体执行一次 C)循环体一次也不执行 D)构成无限循环(23)有以下程序 #include main() {charb,c;inti; b='a';c='A'; for(i=0;i<6;i++) {if(i%2)putchar(i+b); elseputchar(i+c); }printf("n"); } 程序运行后的输出结果是 A)ABCDEFB)AbCdEfC)aBcDeFD)abcdef(24)设有定义:doublex[10],*p=x;,以下能给数组x下标为6的元素读入数据的正确语句是 A)scanf("%f",&x[6]);B)scanf("%lf",*(x+6)); C)scanf("%lf",p+6);D)scanf("%lf",p[6]);(25)有以下程序(说明:字母A的ASCII码值是65) #include voidfun(char*s) {while(*s) {if(*s%2)printf("%c",*s); s++; } } main() {chara[]="BYTE"; fun(a);printf("n"); }n 程序运行后的输出结果是 A)BYB)BTC)YTD)YE(26)有以下程序段 #include main() {… while(getchar()!='n'); … } 以下叙述中正确的是 A)此while语句将无限循环 B)getchar()不可以出现在while语句的条件表达式中 C)当执行此while语句时,只有按回车键程序才能继续执行 D)当执行此while语句时,按任意键程序就能继续执行(27)有以下程序 #include main() {intx=1,y=0; if(!x)y++; elseif(x==0) if(x)y+=2; elsey+=3; printf("%dn",y); } 程序运行后的输出结果是 A)3B)2C)1D)0(28)若有定义语句:chars[3][10],(*k)[3],*p;,则以下赋值语句正确的是 A)p=s;B)p=k;C)p=s[0];D)k=s;(29)有以下程序 #include voidfun(char*c) {while(*c) {if(*c>='a'&&*c<='z')*c=*c-('a'-'A'); c++; } } main() {chars[81]; gets(s);fun(s);puts(s); } 当执行程序时从键盘上输入HelloBeijing<回车>,则程序的输出结果是A)hellobeijingB)HelloBeijingnC)HELLOBEIJINGD)hELLOBeijing(30)以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #include #defineN10 voidfun(intx[N]) {inti=0; while(i main() {chara[30],b[30]; scanf("%s",a); gets(b); printf("%sn%sn",a,b); } 程序运行时若输入: howareyou?Iamfine<回车> 则输出结果是 A)howareyou?B)how Iamfineareyou?Iamfine C)howareyou?IamfineD)howareyou?(32)设有如下函数定义 intfun(intk) {if(k<1)return0; elseif(k==1)return1; elsereturnfun(k-1)+1; } 若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是 A)2B)3C)4D)5(33)有以下程序 #include intfun(intx,inty) {if(x!=y)return((x+y)/2); elsereturn(x); } main() {inta=4,b=5,c=6; printf("%dn",fun(2*a,fun(b,c))); } 程序运行后的输出结果是 A)3B)6C)8D)12n(34)有以下程序 #include intfun() {staticintx=1; x*=2; returnx; } main() {inti,s=1; for(i=1;i<=3;i++)s*=fun(); printf("%dn",s); } 程序运行后的输出结果是 A)0B)10C)30D)64(35)有以下程序 #include #defineS(x)4*(x)*x+1 main() {intk=5,j=2; printf("%dn",S(k+j)); } 程序运行后的输出结果是 A)197B)143C)33D)28(36)设有定义:struct{charmark[12];intnum1;doublenum2;}t1,t2;,若变量均已正确赋初值,则以下语句中错误的是 A)t1=t2;B)t2.num1=t1.num1; C)t2.mark=t1.mark;D)t2.num2=t1.num2;(37)有以下程序 #include structord {intx,y;}dt[2]={1,2,3,4}; main() { structord*p=dt; printf("%d,",++(p->x));printf("%dn",++(p->y)); } 程序运行后的输出结果是 A)1,2B)4,1C)3,4D)2,3(38)有以下程序 #include structS {inta,b;}data[2]={10,100,20,200}; main() {structSp=data[1];n printf("%dn",++(p.a)); } 程序运行后的输出结果是 A)10B)11C)20D)21(39)有以下程序 #include main() {unsignedchara=8,c; c=a>>3; printf("%dn",c); } 程序运行后的输出结果是 A)32B)16C)1D)0(40)设fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项中正确的是 A)写操作结束后可以从头开始读B)只能写不能读C)可以在原有内容后追加写D)可以随意读和写二、填空题(1)有序线性表能进行二分查找的前提是该线性表必须是【1】存储的。(2)一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF,则后序遍历结果为【2】。(3)对软件设计的最小单位(模块或程序单元)进行的测试通常称为【3】测试。(4)实体完整性约束要求关系数据库中元组的【4】属性值不能为空。(5)在关系A(S,SN,D)和关系B(D,CN,NM)中,A的主关键字是S,B的主关键字是D,则称【5】是关系A的外码。(6)以下程序运行后的输出结果是【6】。 #includemain() {inta; a=(int)((double)(3/2)+0.5+(int)1.99*2); printf("%dn",a);}(7)有以下程序#include main() {intx; scanf("%d",&x); if(x>15)printf("%d",x-5); if(x>10)printf("%d",x); if(x>5)printf("%dn",x+5); } 若程序运行时从键盘输入12<回车>,则输出结果为【7】。(8)有以下程序(说明:字符0的ASCII码值为48) #includen main() {charc1,c2; scanf("%d",&c1);c2=c1+9; printf("%c%cn",c1,c2); } 若程序运行时从键盘输入48<回车>,则输出结果为【8】。(9)有以下函数 voidprt(charch,intn) {inti; for(i=1;i<=n;i++) printf(i%6!=0?"%c":"%cn",ch); } 执行调用语句prt('*',24);后,函数共输出了【9】行*号。(10)以下程序运行后的输出结果是【10】。 #include main() {intx=10,y=20,t=0; if(x==y)t=x;x=y;y=t; printf("%d%dn",x,y); }(11)己知a所指的数组中有N个元素。函数fun的功能是,将下标k(k>0)开始的后续元素全部向前移动一个位置。请填空。 voidfun(inta[N],intk) {inti; for(i=k;i 【12】; main() {doublex,y,(*p)(); scanf("%lf%lf",&x,&y); p=avg; printf("%fn",(*p)(x,y)); } doubleavg(doublea,doubleb){return((a+b)/2);}(13)以下程序运行后的输出结果是【13】。 #include main() {inti,n[5]={0}; for(i=1;i<=4;i++) {n[i]=n[i-1]*2+1;printf("%d",n[i]);} printf("n"); }(14)以下程序运行后的输出结果是【14】。n #include #include #include main() {char*p;inti; p=(char*)malloc(sizeof(char)*20); strcpy(p,"welcome"); for(i=6;i>=0;i--)putchar(*(p+i)); printf("n");free(p); }(15)以下程序运行后的输出结果是【15】。 #include main() {FILE*fp;intx[6]={1,2,3,4,5,6},i; fp=fopen("test.dat","wb"); fwrite(x,sizeof(int),3,fp); rewind(fp); fread(x,sizeof(int),3,fp); for(i=0;i<6;i++)printf("%d",x[i]); printf("n"); fclose(fp);ABDDBACDCBADAAAADCADBDBCDCDCCCBBBDBCDDCB【1】有序【2】DEBFCA【3】单元【4】主键【5】D【6】3【7】1217【8】09【9】4【10】200【11】i-1【12】doubleavg(double,double);或doubleavg(doublea,doubleb);【13】13715【14】emoclew【15】1234562011年9月全国计算机等级考试二级笔试试卷一、选择题(每小题2分,共70分)1.下列叙述中正确的是。A.算法就是程序B.设计算法时只需要考虑数据结构的设计C.设计算法时只需要考虑结果的可靠性D.以上三种说法都不对2.下列关于线性链表的叙述中,正确的是A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C.进行插入与删除时,不需要移动表中的元素D.以上三种说法都不对3.下列关于二叉树的叙述中,正确的是A.叶子结点总是比度为2的结点少一个B.叶子结点总是比度为2的结点多一个nC.叶子结点数是度为2的结点数的两倍D.度为2的结点数是度为1的结点数的两倍4.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是A.学生成绩管理系统B.C语言编译程序C.UNIX操作系统D.数据库管理系统5.某系统总体结构图如下图所示:该系统总体结构图的深度是A.7B.6C.3D.26.程序调试的任务是A.设计测试用例B.验证程序的正确性C.发现程序中的错误D.诊断和改正程序中的错误7.下列关于数据库设计的叙述中,正确的是A.在需求分析阶段建立数据字典B.在概念设计阶段建立数据字典C.在逻辑设计阶段建立数据字典D.在物理设计阶段建立数据字典8.数据库系统的三级模式不包括A.概念模式B.内模式C.外模式D.数据模式9.有三个关系R、S和T如下:RSTABCABCABCa12a12c31b21b21c31则由关系R和S得到关系T的操作是A.自然连接B.差C.交D.并10.下列选项中属于面向对象设计方法主要特征的是A.继承B.自顶向下C.模块化D.逐步求精11.以下叙述中错误的是A.C语言编写的函数源程序,其文件名后缀可以是CB.C语言编写的函数都可以作为一个独立的源程序文件C.C语言编写的每个函数都可以进行独立的编译并执行D.一个C语言程序只能有一个主函数12.以下选项中关于程序模块化得叙述错误的是nA.把程序分成若干相对独立的模块可便于编码和调试B.把程序分成若干相对独立,功能单一的模块,可便于重复使用这些模块C.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序13.以下选项中关于C语言常量的叙述错误的是:A.所谓常量,是指在程序运行过程中,其值不能被改变的量B.常量分为整型常量、实型常量、字符常量和字符串常量C.常量可分为数值型常量和非数值型常量D.经常被使用的变量可定义成常量14.若有定义语句:inta=10;doubleb=3.14;,则表达式‘A’+a+b值得类型是A.charB.intC.doubleD.float15.如有定义语句:intx=12,y=8,z;,在其后执行语句z=0.9+x/y,则z的值为A.1.9B.1C.2D.2.416.若有定义:inta,b;,通过语句scanf(“%d;%d”,&a,&b);,能把整数3赋给变量a,5付给变量b的输入数据是A.35B.3,5C.3;5D.3517.若有定义语句:intk1=10,k2=20;,执行表达式(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分别为A.0和1B.0和20C.10和1D.10和2018.有以下程序#includeMain(){inta=1,b=0;If(--a)b++;Elseif(a==0)b+=2;Elseb+=3;Printf(“%dn”,b);}程序运行后的输出结果是A.0B.1C.2D.319.下列条件语句中输出结果与其他语句不同的是A.if(a)printf(“%dn”,x);elseprintf(“%dn”,y);B.if(a==0)printf(“%dn”,y);elseprintf(“%dn”,x);C.if(a!=0)printf(“%dn”,x);elseprintf(“%dn”,y);D.if(a==0)printf(“%dn”,x);elseprintf(“%dn”,y);20.有以下程序:#includeMain(){inta=7;nWhile(a--);Printf(“%dn”,a);}程序运行后的输出结果是A.-1B.0C.1D.721.以下不能输出字符A的语句是(注:字符A的ASCII码值为65,字符a的ASCII码值为97)A.printf(“%cn”,’A’-32);B.printf(“%dn”,’A’);C.printf(“%cn”,65);D.printf(“%cn”,’B’-1);22.有以下程序(注:字符a的ASCII码值为97)#includeMain(){char*s={“abc”};Do{printf(“%d”,*s%10);++s;}While(*s);}程序运行后的输出结果是A.abcB.789C.7890D.97989823.若有定义语句:doublea,*p&a;以下叙述中错误的是A.定义语句中的*号是一个地址运算符B.定义语句中的*号只是一个说明符C.定义语句中的p只能存放double类型变量的地址D.定义语句中,*p=&a把变量a的地址作为初值赋给指针变量p24.有以下程序:#includeDoublef(doublex);Main(){doublea=0;intI;For(i=0;i<30;i+=10)a+=f((double)i);Printf(“%5.0fn”,a);}Doublef(doublex){returnx*x+1;}程序运行后的输出结果是A.503B.401C.500D.140425.若定义语句:intyear=2009,*p=&year;,以下不能使变量year中的值增至2010的语句是nA.*p+=1;B.(*p)++;C.++(*p);D.*p++;26.以下定义数组的语句中错误的是A.intnum[]={1,2,3,4,5,6};B.intnum[][3]={{1,2},3,4,5,6};C.intnum[2][4]={{1,2},{3,4},{5,6}};D.intnum[][4]={1,2,3,4,5,6};27.有以下程序#includeVoidfun(int*p){printf(“%dn”,p[5]);}Main(){inta[10]={1,2,3,4,5,6,7,8,9,10};Fun(&a[3]);}程序运行后的输出结果是A.5B.6C.8D.928.有以下程序#include#defineN4Voidfun(inta[][N],intb[]){inti;For(i=0;i