
计算机
2010年9月全国
计算机等级考试二级C语言笔试试题及答案 一、选择题((1)-(10)每题2分,(11)-(50)每题1分.共60分)) (1)下列选项中不属于软件生命周期开发阶段任务的是 A)详细设计 B)概要设计 C)软件维护 D)软件测试 (2)树是结点的集合,它的根结点数目是 A)有且只有1 B)1或多于1 C)0或1 D)至少2 (3)在面向对象方法中,实现信息隐蔽是依靠 A)对象的继承 B)对象的多态 C)对象的封装 D)对象的分类 (4)程序设计语言的基本成分是数据成分、运算成分、控制成分和 A)语句成分 B)变量成分 C)对象成分 D)传输成分 (5)冒泡排序在最坏情况下的比较次数是 A)n/2 B)nlog2n C)n(n-1)/2 D)n(n+1)/2 (6)下列叙述中,不属于软件需求规格说明书的作用的是 都界问地块导降排草决A)作为确认测试和验收的依据 B)反映出用户问题的结构,可以作为软件开发工作的基础和依据 C)便于用户、开发人员进行理解和交流 D)便于开发人员进行需求分析 (7)下列叙述中错误的是 A)一个C语言刚歌究谈放厚凯程序只能实现一种算法 B)C程序可以由多个程序文件组成 C)C程序可以由一个或多个函数组成 D)一个函数可单独作为一个C程序文件存在 (8)下列不属于软件工程的3个要素的是 A)方法 B)过程 C)工具 D)环境 号时持代肥探远(9)下列叙述中正确的是 A)数据库系统是一个独立的系统,不需要操作系统的支持 B)数据库技术的根本目标是要解讲神决数据的共享问题 C)数据库管理系统就是数据库系统 及纸蛋蛋扩绍布果刚就D)以上三种说法都不对 (10)下列叙述中正确的是 A)每个C程序文件中都必须有一个m
AIn()函数 B)在C程序的函数中不能定义另一个函数 C)C程序可以由一个或多个函数组成 D)在C程序中m
AIn()函数的位曲征江重阳住小亚置是固定的 (11)将E-R图转换到关系模式时,实体与联系都可以表示成 A)属性 B)关系 C)键 D)域 (12)下列定义变量的语句中错误的是 A)double int_; B)int _int; C)char For D)float USS (13)下列叙述中正确的是 A)C语言编译时不检查语法 B)C语言的子程序有过程和函数两种 C)C语言的函数可以嵌套定义 D)C语言的函数可以嵌套调用 (14)以下选项中,合法的一组C语言数值常量是 A) 0x8A B)12 C).177 D) 028 (15)以下叙述中正确的是 A)构成C程序的基本单位是函数 B)可以在一个函数中定义另一个函数 C)m
AIn()函数必须放在其他函数之前 D)所有被调用的函数一定要在调用之前进行定义 (16)若在定义语句:int a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是 A)scanf(%d,&p); B)scanf(%d%d%d,a,b,c); C)scanf(%d,p); D) scanf(%d,a,b,c); (17) 有以下程序 m
AIn() {int x,y,z; x=y=1; z=x++,y++,++y; printf(%d,%d,%d\n,x,y,z); } 程序运行后的输出结果是 A)2,2,3 B)2,2,2 C)2,3,1 D)2,1,1 (18) 若已定义:int a=25,b=14,c=19;以下三目运算符(?:)所构成语句的执行后a=25&&b--=2&&c?printf(
*a=%d,b=%d,c=%d\n,a,b,c):printf(a=%d,b=%d,c=%d ,a,b,c);程序输出的结果是 A)*a=25,b=13,c=19 B)***a=26,b=14,c=19 C) a=25,b=13,c=19 D) a=26,b=14,c=19 (19)下列程序段的输出结果是 int a=1234; float b=123.456; double c=12345.54321; printf(-,%2.1f,%2.1f,a,b,c); A)无输出 B)12,123.5,12345.5 C)1234,123.5,12345.5 D)1234,123.4,1234.5 (20)有以下程序 m
AIn() {int a=0,b=0; a=10; /*给a赋值 b=20; 给b赋值 */ printf(a+b=%d\n,a+b); /* 输出计算结果 */ } 程序运行后输出结果是 A)30 B)a+b=30 C)a+b=0 D)出错 (21)若运行以下程序时,从键盘输入 ADescriptor(表示回车),则下面程序的运行结果是 #include m
AIn() { char c; int v0=1,v1=0,v2=0; do{ switch(c=g
etchar()) { case ′a′:case ′A′: case ′e′:case ′E′: case ′i′:case ′I′: case ′o′:case ′O′: case ′u′:case ′U′:v1+=1; default:v0+=1;v2+=1; } } while(c!=′ ′); printf(v0=%d,v1=%d,v2=%d ,v0,v1,v2); } A)v0=11,v1=4,v2=11 B)v0=8,v1=4,v2=8 C)v0=7,v1=4,v2=7 D)v0=13,v1=4,v2=12 (22) 有以下程序 #include m
AIn() {int y=9;for( y0;y--)if(y%3= =0) printf(%d,--y);} 程序的运行结果是 A)732 B)433 C)852 D)874 (23) 设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x; printf(%d,s); 则 A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次 (24)有以下程序 fun(int x,int y){return(x+y);} m
AIn() {int a=1,b=2,c=3,sum; sum=fun((a++,b++b,a+b),
C++); printf(%d\n,sum); } 执行后的输出结果是 A)5 B)7 C)8 D)3 (25)执行下面的程序段后,变量k中的值为 int k=3, s[2]; s[0]=k; k=s[1]*10; A)不定值 B)35 C)31 D)20 (26)以下叙述中错误的是 A)改变函数形参的值,不会改变对应实参的值 B)函数可以返回地址值 C)可以给指针变量赋一个整数作为地址值 D)当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL (27)以下程序段的描述,正确的是 x=-1; do {x=x*x;} while(!x); A)是死循环 B)循环执行两次 C)循环执行一次 D)有语法错误 (28)有以下程序 fun(int x,int y) {static int m=0,i=2; i+=m+1;m=i+x+y; return m; } m
AIn() {int j=1,m=I,k; k=fun(j,m); printf(%d,k); k=fun(j,m); printf(%d\n,k) } 执行后的输出结果是 A)5,5 B)5,11 C)11,11 D)11,5 (29)有以下程序 fun(int x) {int p; if(x==0║x= =1) return(3); p=x-fun(x=2); retum p; }m
AIn() { prinf(%d\n,fun(7));} 执行后的输出结果是 A)7 B)3 C)3 D)0 (30)在16位编译系统上,右有定义int a[ ]={10,20,30},*p=&a;,当执行p++;后,下列说法错误的是 A)p向高地址移了一个字节 B)p抽高地址移了一个存储单元 C)p向高地址移了两个字节 D)p与a+1等价 (31)有以下程序 m
AIn() {int a=1,b=3,c=5; int *p1=&a,*p2=&b,*p=&c; *p=*p1*(*p2); printf(%d\n,c); } 执行后的输出结果是 A)1 B)2 C)3 D)4 (32)下列程序执行后的输出结果是 void func1(int i); void func2(int i); char st[]=hello,friend!; void func1(int i) { printf(%c,st[i]); if(i3){i+=2;func2(i);} } void func2(int i) { printf(%c,st[i]); if(i3){i+=2;func1(i);} } m
AIn() { int i=0; func1(i); printf( );} A)hello B)hel C)hlo D)hlm (33)在下述程序中,判断ij共执行的次数是 m
AIn() { int i=0, j=10, k=2, s=0; for (;;) { i+=k; if(ij) { printf(%d,s); break; } s+=i; } } A)4 B)7 C)5 D)6 (34)以下函数返回a所指数组中最大值所在的下标值 fun(int *a,int n) { int i,j=0,p; p=j; for(i=j;iif(a[i]a[p]); return(p); } 在下划线处应填入的内容是 A)i=p B)a[p]=a[i] C)p=j D)p=i (35)下列程序执行后的输出结果是 m
AIn() { int a[3][3], *p,i; p=&a[0][0]; for(i=1; i9; i++)p[i]=i+1; printf(%d ,a[1][2]); } A)3 B)6 C)9 D)随机数 (36) 有以下程序 #include void fun(int *a,int n)/*fun函数的功能是将a所指数组元素从大到小排序*/ {int t,i,j;for(i=0;ifor(j=i+1;jif (a} m
AIn() {int c[10]={1,2,3,4,5,6,7,8,9,0},i; fun(c+4,6); for (i=0;i10;i++) printf(%d,,c); printf(\n); } 程序运行的结果是 A)1,2,3,4,5,6,7,8,9,0, B)0,9,8,7,6,5,1,2,3,4, C) 0,9,8,7,6,5,4,3,2,1, D)1,2,3,4,9,8,7,6,5,0, (37)以下程序的输出结果是#include void prt (int *x, int*y, int*z) { printf(%d,%d,%d ,++*x,++*y,*(z++));} m
AIn() { int a=10,b=40,c=20; prt (&a,&b,&c); prt (&a,&b,&c); } A)11,42, 31 12,22,41 B)11,41,20 12,42,20 C)11,21,40 11,21,21 D)11,41,21 12,42,22 (38) 有以下程序: #include void fun(char *t,char *s) { while(*t!=0)t++; while((*t++=*s++)!=0); } m
AIn() { char ss[10]=”acc”,aa[10]=”bbxxyy”; fun(ss,aa); printf(“%s,%s\n”,ss,aa); } 程序运行结果是 A) accxyy , bbxxyy B) acc, bbxxyy C) accxxyy,bbxxyy D) accbbxxyy,bbxxyy (39) 有以下程序 #include m
AIn() { FILE *fp; int i=20,j=30,k,n; fp=fopen(d1.dat,w); fprintf(fp,%d ,i);fprintf(fp,%d ,j); fclose(fp); fp=fopen(d1.dat,r); fscanf(fp,%d%d,&k,&n); printf(%d %d ,k,n); fclose(fp); } 程序运行后的输出结果是 A)20 30 B)20 50 C)30 50 D)30 20 (40) 有以下程序 m
AIn() {int x[3][2]={0},I; for(I=0;I3;I++) scanf(%d,x[i]); printf(%3d%3d%3d\n,x[0][0],x[0][1],x[1][0]); } 若运行时输入:246回车,则输出结果为 A)2 0 0 B)2 0 4 C)2 4 0 D)2 4 6 (41)有以下程序 int add(int a,int b){return+b};} m
AIn() {int k,(*f)(),a=5,b=10; f=add; … } 则以下函数调用语句错误的是 A)k=(*f)(a,b); B)k=add(a,b); C)k=*f(a,b); D)k=f(a,b); (41)有以下程序 #include string.h m
AIn(int argc,char *argv[]) {int i=1,n=0; while(iarge){n=n+strlen(argv[i]);i++;} printf(“%d\n”,n); } 该程序生成的可执行文件名为:proc.exe。若运行时输入命令行: proc 123 45 67 则程序的输出结果是 A)3 B)5 C)7 D)11 (42)有以下程序 void fun2(char a, char b){printi(“%b%c”,a,b);} char a= ‘A’,b= ‘B’; void fun1( ){ a= ‘C’l b= ‘D’; } m
AIn( ) { fun1( ) printf( “%c%c”,a,b); fun2(‘E’, ‘F’); } 程序的运行结果是 A)CDEF B)ABEF C)ABCD D)CDAB (43)有以下程序 #include stdio.h #define N 5 #define M N+1 #define f(x) (x*M) m
AIn() {int i1,i2; i1=f(2); i2=f(1+1); printf(“%d %d\n”,i1,i2); } 程序的运行结果是 A)12 12 B)11 7 C)11 11 D)12 7 (44)设有以下语句 typedef struct TT {char c; int a[4];}CIN; 则下面叙述中正确的是 A)可以用TT定义结构体变量 B)TT是struct类型的变量 C)可以用CIN定义结构体变量 D)CIN是struct TT类型的变量 (45)有以下结构体说明、变量定义和赋值语句 struct STD {char name[10]; int age; char sex; }s[5],*ps; ps=&s[0]; 则以下scanf函数调用语句中错误引用结构体变量成员的是 A)scanf(“%s”,s[0].name); B)scanf(“%d”,&s[0].age); C)scanf(“%c”,&(pssex)); D)scanf(“%d”,psage); (46)若有以下定义和语句 union data { int i; char c; float f;}x; int y; 则以下语句正确的是 A)x=10.5; B)x.c=101; C)y=x; D)printf(“%d\n”,x); (47)若变量已正确定义,则以下语句的输出结果是 s=32; s^=32;printf(“%d”,s); A)-1 B)0 C)1 D)32 (48) 若程序中有宏定义行:#define N 100 则以下叙述中正确的是 A)宏定义行中定义了标识符N的值为整数100 B)在编译程序对C源程序进行预处理时用100替换标识符N C) 对C源程序进行编译时用100替换标识符N D)在运行时用100替换标识符N (49)以下叙述中正确的是 A)C语言中的文件是流式文件,因此只能顺序存取数据 B)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖 C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据 D)当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失 (50)有以下程序 #include stdio.h m
AIn() {FILE *fp; int i; char ch[]=”abcd”,t; fp=fopen(“abc.dat”,”wb+”); for(i=0;i4;i++)fwriter&ch[],1,1fp; fseek(fp,-2L,SEEK_END); fread(&t,1,1,fp); fclose(fp); printf(“%c\n”,t); } 程序执行后的输出结果是 A)d B)c C)b D)a 二、填空题(每空2分,共40分) (1)在面向对象方法中,类之间共享属性和操作的机制称为 【1】 。 (2)一个关系表的行称为 【2】 。 (3)耦合和内聚是评价模块独立性的两个主要标准,其中 【3】 反映了模块内各成分之间的联系。 (4)线性表的存储结构主要分为顺序存储结构和链式存储结构.队列是一种特殊的线性表,循环队列是队列的【4】存储结构. (5) 【5】 的任务是诊断和改正程序中的错误。 (6) 以下程序的输出结果是【6】. #include m
AIn() { int n=12345,d; while(n!=0){ d=n%10; printf(%d,d); n/=10;} } (7)以下程序运行后的输出结果是 【7】 。 m
AIn() { int m=011,n=11; printf(%d %d\n,++m,n++); } (8)有以下程序,若运行时从键盘输入:18,11回车,则程序输出结果是 【8】 。 m
AIn() { int a,b; printf(Enter a,b:);scanf(%d,%d,&a,&b); while(a!=b) { while(ab) a-=b; while(ba) b-=a; } printf(%3d%3d\n,a,b); } (9) 有以下程序段,且变量已正确定义和赋值 for(s=1.0,k=1;k=n;k++) s=s+1.0/(k*(k+1)); printf(s=%f\n\n,s); 请填空,使下面程序段的功能为完全相同 s=1.0;k=1; while(_【9】_______){ s=s+1.0/(k*(k+1)); _【10】_______;} printf(s=%f\n\n,s); (10)执行以下程序的输出结果是【11】______. #include m
AIn() { int i,n[4]={1}; for(i=1;i=3;i++) { n=n[i-1]*2+1; printf(%d,n); } } (11)以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换.请填空. #include viod f(int x[],int n) { int p0,p1,i,j,t,m; i=j=x[0]; p0=p1=0; for(m=0;m{ if(x[m]i) {i=x[m]; p0=m;} else if(x[m]} t=x[p0]; x[p0]=x[n-1]; x[n-1]=t; t=x[p1];x[p1]= _【12】_______; 【13】______=t; } m
AIn() { int a[10],u; for(u=0;u10;u++) scanf(%d,&a); f(a,10); for(u=0;u10;u++) printf(%d,a); printf(\n); } (12)下列程序中的函数strcpy2()实现字符串两次复制,即将t所指字符串复制两次到s所指内存空间中,合并形成一个新的字符串。例如,若t所指字符串为efgh,调用strcpy2后,s所指字符串为efghefgh。请填空。 #include stdio.h #include string.h void strcpy2(char *s,char *t) { char *p=t; while(*s++=*t++); s= 【14】 ; while( 【15】 =*p++); } m
AIn() { char str1[100]=abcd,str2[]=efgh; strcpy2(str1 ,str2); printf(%s\n,str1); } (13)以下程序统计从终端输入的字符中大写字母的个数,num[0]中统计字母A的个数,num[1]中统计字母B的个数,其它依次类推.用#号结束输入,请填空. #include #include m
AIn() { int num[26]={0},i; char c; while((_【16】_______)!='#') if(isupper(c)) num[c-‘A’]+= 【17】_______; for(i=0;i26;i++) Printf(%c:%d\n,i+'A',num); } (14)以下程序中,函数fun的功能是计算x2-2x+6,主函数中将调用fun函数计算: y1=(x+8)2-2(x+8)+6 y2=sin2(x)-2sin(x)+6 请填空。 #include math.h double fun(double x) { return(x*x-2*x+6); } m
AIn() { double x,y1,y2; printf(Enter x:); scanf(%lf,&x); y1=fun( 【18】 ); y2=fun( 【19】 ); printf(y1=%lf,y2=%lf\n,y1,y2); } (15) 以下程序的输出结果是_【20】______. #include #define M 5 #define N M+M m
AIn() { int k; k=N*N*5; printf(%d\n,k); } 一、选择题答案: 1-10:CACDC DADBA 11-20:BDDBA CCCCB 21-30:DCBCA CCBCA 31-40:CCDAB DCDAB 41-50:CABCD BBBDB 二、填空题答案: 1.继承 2. 元组 3.内聚 4.顺序 5. 程序调试 6. 54321 7.10 11 8. 1 9.k=n k++ 10. 3 7 5 11.x[0] x[0] 12.s--,*s++ 13.c=g
etchar() 14. (x+8),sin(x) 15.55 希望对你有所帮助