2010年3月全国计算机等级考试二级笔试试卷
C语言程序设计及参考答案
(考试时间90分钟,满分100分)
一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分。共70分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写 在答题卡上,答在试卷上不得分。 (1) 下列叙述中正确的是
A)对长度为n的有序链表进行查找,最坏情况下需要的比较次数为n B)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2) C)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n) D) 对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n) (2) 算法的时间复杂度是指
A)算法的执行时间 C)算法程序中的语句或指令条数
B)算法所处理的数据量
D)算法在执行过程中所需要的基本运算次数
(3) 软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是
A)编辑软件 B)操作系统 (4) 软件(程序)调试的任务是
A)诊断和改正程序中的错误 C)发现并改正程序中的所有错误 (5) 数据流程图(DFD图)是
A)软件概要设计的工具 C)结构化方法的需求分析工具
(6) 软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于 A)定义阶段 B)开发阶段 C)维护阶段 D)上述三个阶段
(7) 数据库管理系统中负责数据模式定义的语言是
A)数据定义语言 B)数据管理语言 C)数据操纵语言 D)数据控制语言
二级C语言程序设计试卷 第1页 (共12页)
C)教务管理系统 D)浏览器
B)尽可能多地发现程序中的错误 D)确定程序中错误的性质
B)软件详细设计的工具
D)面向对象方法的需求分析工具
(8) 在学生管理的关系数据库中,存取一个学生信息的数据单位是 A)文件
(9) 数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的
A)需求分析阶段 C)概念设计阶段
(10) 有两个关系R和T如下:
R T
A a b c
则由关系R得到关系T的操作是 选择
(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)_1 B)AaBc
(14) 若有定义:double a=22;int i=0,k=18;则不符合C语言规定的赋值语句是 A)a=a++,i++ B)i=(a+k)<=(i+k) C)i=a%11 D)i=!a (15)
#include 二级C语言程序设计试卷 第2页 (共12页) B)数据库 C)字段 D)记录 B)逻辑设计阶段 D)物理设计阶段 B 1 2 3 C 2 2 2 A c d B 3 3 C 2 2 B)投影 C)交 D)并 C)a_b D)a--b main() { char a,b,c,d; scanf("%c%c",&a,&b); c=getchar(); d=getchar(); printf("%c%c%c%c\\n",a,b,c,d); } 当执行程序时,按下列方式输入数据(从第一列开始, 16、以下关于C语言数据类型使用的叙述中错误的是: A、若要准确无误的表示自然数,应使用整数类型。 B、若要保存带有多位小数的数据,应使用双精度类型。 C、若要处理如"人员信息"等含有不同类型的相关数据,应自定义结构体类型。 D、若只处理"真"和"假"两种逻辑值,应使用逻辑类型。 17、若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是: A、1 18、以下选项中与if(a==1) a=b;else a++;语句功能不同的switch语句是: A、switch(a) B、switch(a==1) { case 1:a=b;break; { case 0 : a=b;break; default : a++; case 1 : a++; } } C、switch(a) D、switch(a==1) { default : a++;break; { case 1:a=b;break; case 1:a=b; case 0: a++; } } 19、有如下嵌套的if语句 if(aif(a B、12 C、12 D、12 3 34 B、0 C、2 D、不知道a的值,不能确定 以下选项中与上述if语句等价的语句是 k=(a(20)有以下程序 #include for(i=1;i<3;i++) { for(j=3;j>0;j--) { if(i*j>3) break; m*=i*j; } } printf("m=%d\\n",m) } 程序运行后的输出结果是 (A) m=6 (B)m=2 (C)m=4 (21)有以下程序 #includes for(;a<8;a++) {b+=a; a+=2;} printf ("%d,%d\\n",a,b); } 程序运行后的输出结果是 (A)9,18 (B)8,11 (C)7,11 (22)有以下程序,其中k的初值为八进制数 #include printf("%d\\n",k++); } 程序运行后的输出结果是 (A)12 (B)11 (C)10 二级C语言程序设计试卷 第4页 (D)m=5 D)10,14 (D)9 12页) (共 ( (23)下列语句中,正确的是 A) char *s ; s="Olympic"; C) char *s ; s={"Olympic"}; (24)以下关于return语句的叙述中正确的是 A)一个自定义函数中必须有一条return语句 B) 一个自定义函数中可以根据不同情况设置多条return语句 C)定义成viod类型的函数中可以有带返回值的return语句 D)没有return语句的自定义函数在执行结束时不能返回到调用处 (25)下列选项中,能够正确定义数组的语句是 A)int num[0..2008]; C) int N=2008; int num[N]; (26)有以下程序 #include printf("%c,%c,",*c,d); } main() {char b=’a’,a=’A’; } 程序运行后的输出结果是 A)b,B,b,A B)b,B,B,A C)a,B,B,a D)a,B,a,B (27)若有定义int(*pt)[3];,则下列说法正确的是 A)定义了基类型为int的三个指针变量 B)定义了基类型为int的具有三个元素的指针数组pt。 C)定义了一个名为*pt、具有三个元素的整型数组 D)定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组 (28)设有定义double a[10],*s=a;,一下能够代表数组元素a[3]的是 A)(*s)[3] B)*(s+3) C)*s[3] D)*s+3 (29)有以下程序 #include 二级C语言程序设计试卷 第5页 (共12页) B) char s[7] ; s="Olympic"; D) char s[7] ; s={"Olympic"}; B) int num[]; D) #define N 2008 int num[N] fun(&b,a); printf("%c,%c\\n",b,a); main() { int a[5]={1,2,3,4,5}, b[5]={0,2,1,3,0},is=0 for(i=0;i<5;i++) s=s+a[b[i]]; printf(\"%d\\n\} 程序运行后的输出结果是 A) 6 B) 10 C) 11 D)15 30)有以下程序 #include { int b[3] [3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0; i<3; i++) For(j=i;j<=i;j++) t+=b[i][b[j][i]]; Printf(\"%d\\n\} 程序运行后的输出结果是 A)1 B)3 C)4 D)9 (31)若有以下定义和语句 char sl[10]= \"abcd!\ printf(\"%d %d\\n\则输出结果是 A) 5 5 B)10 5 C)10 7 D)5 8 (32)有以下程序 #include void fun(int *x,int i) {*x=*(x+i);} main() { int a[N]={1,2,3,4,5,6,7,8},i; fun(a,2); for(i=0; i A)1 3 1 3 B) 2 2 3 4 C) 3 2 3 4 D)1 2 3 4 二级C语言程序设计试卷 第6页12页) (共 (33)有以下程序 #include {int a[4]={1,2,3,4},s; s=f{a,4}; printf("%d\\n",s); } int f(int t[], int n) { if (n>0) return t[n-1]+f(t,n-1); else return 0; } 程序运行后的输出结果是 A)4 B)10 C)14 D)6 (34)有以下程序 #include for (i=1;i<=2;i++) s=fun(); printf("%d\\n",s); } 程序运行后的输出结果是 A)0 B)1 C) 4 D)8 (35)以下程序 #include {int a=2,b=3,c=5,d; d=SUB(a+b)*c; printf("%d\\n",d); } 程序运行后的结果是 A)0 B)-12 C)-20 D)10 二级C语言程序设计试卷 第7页12页) (共 (36)没有定义 struct complex { int real, unreal ;} datal={1,8},data2; 则以下赋值语句中的错误的是 A)data2=data1; B)data2=(2,6); C)data2.real1=data1.real; D)data2.real=data1.unreal; (37)有以下程序 #include {int a; char b[10];double c;}; void f(struct A t); main() {struct A a={1001,"ZhangDa",1098.0}; f(a); pringt("%d,%s,%6.1f\\n",a.a,a.b,a.c); } void f(struct A t) {t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;} 程序运行后的输出结果是 A)1001,ZhangDa,1098.0 B)1002,ChangRong,1202.0 C)1001,ChangRong,1098.0 D)1002,ZhangDa,1202.0 (38)有以下定义和语句 struct workers {int num; char name[20];char c; srruct {int day;int month;intyear;} s; }; struct workers w,*pw; pw=&w 能给w中year成员赋1980的语句是 A)*pw.year=1980; B)w.year=1980; C)pw->year=1980; D)w.s.year=1980; (39)有以下程序 #include {int a=2,b=2,c=2; printf("%d\\n",a/b&c); } 程序运行后的结果是 二级C语言程序设计试卷 第8页 (共12页) A)0 B)1 C)2 D)3 (40)以下程序 #include { FILE *fp;char str[10]; fp=fopen("myfile.dat","w"); fputs("abc",fp); fclose(fp); fp=fopen("myfile.dat","a+"); rewind(fp,"gd",28); rewind(fp); fscanf(fp,"gs",str); puts(str); fclose(fp); } 程序运行后的输出结果是 A)abc B)28c C)abc28 D)因类型不一致而出错 二、填空题(每空2分,共30分) 请将每空的正确答案写在答题卡【1】至【15】序号的横线上,答在试卷上不得分。 (1)一个队列的初始状态为空,先将元素A,CB,C,D,E,F,5,4,3,2,1依次入队,然后再依次退队,则元素退队的顺序为___【1】__。 (2)设某循环列队的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列中共有___【2】__个元素。 (3)设二叉数如下: A □ B □C □ D □F □E □G □H □ 对该二叉树进行后序遍历的结果为【3】 (4)软件是 【4】 、数据和文档的集合。 二级C语言程序设计试卷 第9页 (共12页) (5)有一个学生选课的关系,其中学生的关系模式为:学生(学号,姓名,班级,年龄),课程的关系模式为:课程(课号,课程名,学时),其中两个关系模式的键分别是学好和课号,则关系模式选课可以定义为:选课(学号, 【5】 ,成绩)。 (6)设x为int型变量,请写出一个关系表达式 【6】 ,用以判断x同时为3和7的倍数时,关系表达式的值为真。 (7)有以下程序 #include < stdio.h > main() { int a=1,b=2,c=3,d=0; if (a==1) if (b!=2) if(c!=3) d=1; else d=2; else if(c!=3) d=3; else d=4; else d=5; printf("%d\\n",d); } 程序运行后的输出结果是: 【7】 。 (8)有以下程序 #include < stdio.h > main() { int m,n; scanf("%d%d",&m,&n); while (m!=n) { while(m>n) m=m-n; while(m 程序运行后,当输入14 63<回车>时,输出结果是 【8】 (9)有以下程序 #include { int I,j,a[][3]={1,2,3,4,5,6,7,8,9}; for (i=1;i<3;i++) for(j=I;j<3;j++) printtf("%d",a[i][j]); printf("\\n"); } 程序运行后的输出结果是 【9】 二级C语言程序设计试卷 第10页 (共12页) (10) 有以下程序 #include main() { int []={1,2,3,4,5,6},*k[3],i=0; while(i<3) { } 程序运行后的输出结果是__________ (11) 有以下程序 #include main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int b[3]={0},i; for(i=0;i<3;i++) b[i]=a[i][2]+a[2][i]; printf("\\n"); } 程序运行后的结果是____________ (12) 有以下程序 #include 二级C语言程序设计试卷 第11页 (共12页) k[i]=&a[2*i]; printf("%d",*k[i]); i++; } for(i=0;i<3;i++) printf("%d",b[i]); char temp; int n,i; n=strlen(str); temp=str[n-1]; for(i=n-1;i>0;i--) str[i]=str[i-1]; str[0]=temp; char s[50]; scanf("%s",s); fun(s); printf("%s\\n",s); 程序运行后输入:abcdef<回车>,则输出结果是____________ 13、以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序拆分并输出。请填空。 #include int x=256; printf("%d-%d-%d\\n", ,x/10%10,x/100); } 14、以下程序用以删除字符串中的所有的空格,请填空。 #include char s[100]={"our .tercher teach c language!"};int i,j; for( i=j=0;s[i]!=‘\\0’;i++) if(s[i]!=‘ ’) { s[j]=s[i];j++; } s[j]= ; printf("%s\\n",s); } (15)以下程序功能是:借助指针变量找出数组元素中的最大值及其元素的下标值。请填空。 #include 二级C语言程序设计试卷 第12页 (共12页) int a[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=_______________; printf("index=%d\\n",s-a); 参考答案 一、选择题: 01~05 ADBAC 06~10 BADCA 11~15 BADCC 16~20 DABCA 21~25 DDABD 26~30 ADBCC 31~35 ACBCC 36~37 BADAC 二、填空题: 1、A、B、C、D、E、F、5、4、3、2、1 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、‘\\0'或者填写 0 15、p 机密★启用前 2009年9月全国计算机等级考试二级笔试试卷 C语言程序设计 (考试时间90分钟,满分100分) 一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂 在答题卡相应位置上,答在试卷上不得分。 (1)下列数据结构中,属于非线性结构的是 二级C语言程序设计试卷 第13页 (共12页) A)循环队列 B)带链队列 C)二叉树 D)带链栈 (2)下列数据结构中,能够按照“先进后出”原则存取数据的是 A)循环队列 B)栈 C)队列 D)二叉树 (3)对于循环队列,下列叙述中正确的是 A)队头指针是固定不变的 B)队头指针一定大于队尾指针 C)队头指针一定小于队尾指针 D)队头指针可以大于队尾指针,也可以小于队尾指针 (4)算法的空间复杂度是指 A)算法在执行过程中所需要的计算机存储空间 B)算法所处理的数据量 C)算法程序中的语句或指令条数 D)算法在执行过程中所需要的临时工作单元数 (5)软件设计中划分模块的一个准则是 A)低内聚低耦合 C)低内聚高耦合 (6)下列选项中不属于结构化程序设计原则的是 A)可封装 B)自顶向下 C)模块化 D)逐步求精 (7)软件详细设计产生的图如下: 该图是 A)N-S图 (8)数据库管理系统是 A)操作系统的一部分 B)在操作系统支持下的系统软件 二级C语言程序设计试卷 第14页 (共12页) B)高内聚低耦合 D)高内聚高耦合 Y b=a begin X=0 N c=a end B)PAD图 C)程序流程图 D)E-R图 C) 一种编译系统 D)一种操作系统 (9)在E-R图中,用来表示实体联系的图形是 A)椭圆形 B)矩形 C)菱形 (10)有三个关系R,S和T如下: D)三角形 R S T A a b c 其中关系T由关系R和S通过某种操作得到,该操作为 A)选择 (11)以下叙述中正确的是 A)程序设计的任务就是编写程序代码并上机调试 B)程序设计的任务就是确定所用数据结构 C)程序设计的任务就是确定所用算法 D)以上三种说法都不完整 (12)以下选项中,能用作用户标识符的是 A)void (13)阅读以下程序 # include { int case ; float printF ; printf (\"请输入2个数:\" ) ; scanf (\"%d %f\ ) ; printf (\"%d %f\\n\ ) ; } 该程序在编译时产生错误,其出错原因是 A)定义语句出错,case是关键字,不能用作用户自定义标识符 B)定义语句出错,printF不能用作用户自定义标识符 C)定义语句无错,scanf不能作为输入函数使用 D)定义语句无错,printf不能输出case的值 (14)表达式:(int)((double)9/2)-(9)%2 的值是 二级C语言程序设计试卷 第15页 (共12页) B 1 2 3 C 2 1 1 A d B 3 C 2 A A B C D B 1 2 3 3 C 2 1 1 2 B)投影 C)交 D)并 B)8_8 C)_0_ D)unsigned A)0 B)3 C)4 D)5 (15)若有定义语句:int x=10; ,则表达式x-=x+x的值为 A)-20 (16)有以下程序 # include { int a=1, b=0 ; printf (\"%d, \printf (\"%d \\n\} 程序运行后的输出结果是 A)0,0 17)设有定义:int a=1,b=2,c=3;,以下语句中执行效果与其它三个不同的是 A)if(a>b) c=a,a=b,b=c; C)if(a>b) c=a;a=b;b=c; (18)有以下程序 # include for ( k=1; k<3; k++) B)if(a>b) {c=a,a=b,b=c;} D)if(a>b) {c=a;a=b;b=c;} B)1,0 C)3,2 D)1,2 B)-10 C)0 D)10 二级C语言程序设计试卷 第16页 (共12页) switch ( k ) { default : c+=k; case 2 : c++ ; break; case 4 : c+=2 ; break ; } printf (\"%d\\n\ } 程序运行后的输出结果是 A)3 (19)以下程序段中,与语句:k=a>b?(b>c ? 1 : 0) : 0;功能相同的是 A)if((a>b) && (b>c)) k=1; C)if(a<=b) k=0; B)if((a>b)||(b>c)) k=1; D)if(a>b) k=1; else k=0; else k=0; else if(b<=c) k=1; else if(b>c) k=1; else k=0; (20)有以下程序 # include { char s[] = {\"012xy\ int i , n=0 ; for ( i=0 ; s[i] !=0 ; i++) if (s[i] >= 'a' && s[i] <= 'z' ) n++ ; printf (\" %d\\n \} 程序运行后的输出结果是 A)0 (21)有以下程序 # include { int n=2, k=0; while (k++ && n++>2) ; printf (\"%d %d\\n\" , k , n ) ; } 程序运行后的输出结果是 A)0 2 (22)有以下定义语句,编译时会出现编译错误的是 二级C语言程序设计试卷 第17页 (共12页) B)5 C)7 D)9 B)2 C)3 D)5 B)1 3 C)5 7 D)1 2 A)char a='a'; (23)有以下程序 B)char a='\\n'; C)char a='aa'; D)char a='\\x2d'; # include { char c1, c2 ; c1='A' + '8' - '4' ; c2='A' + '8' - '5' ; printf ( \"%c, %d\\n\" , c1, c2); } 已知字母A的ASCII码为65,程序运行后的输出结果是 A)E,68 B)D,69 C)E,D D)输出无定值 (24)有以下程序 #include p=d++; printf(\"%d\main () { int a=1; fun (a) ; printf (\"%d\\n\" , a) ; } 程序运行后的输出结果是 A)32 B)12 (25)以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致 不能实现预定功能。 # define MIN -2147483647 int findmax (int x[ ], int n) { int i, max; for ( i=0 ; i 造成错误的原因是 A)定义语句int i,max;中max 未赋初值 B)赋值语句max=MIN;中,不应给max 赋MIN值 C)语句if(max 二级C语言程序设计试卷 第18页 (共12页) C)21 D)22 # include { int m=1, n=2, *p=&m, *q=&n, *r ; r=p; p=q; q=r; printf (\"%d, %d, %d, %d\\n\} 程序运行后的输出结果是 A)1,2,1,2 (27)若有定义语句:int a[4][10],*p,*q[4];且0≤i<4,则错误的赋值是 A)p=a (28)有以下程序 # include { char str[ ][20]={ \"One*World\" , \"One*Dream!\ printf (\"%d, \ printf (\"%s\\n\} 程序运行后的输出结果是 A)9,One*World (29)有以下程序 # include { int a[]={2, 3, 5, 4} , i ; for ( i=0 ; i<4 ; i++) switch ( i%2 ) { case 0 : switch ( a[i]%2 ) {case 0 : a[i]++; break ; case 1 : a[i]-- ; }break ; case 1 : a[i]=0 ; } for ( i=0 ; i<4 ; i++) printf (\"%d \ printf(\"\\n\") ; } 程序运行后的输出结果是 A)3 3 4 4 (30)有以下程序 二级C语言程序设计试卷 第19页 (共12页) B)1,2,2,1 C)2,1,2,1 D)2,1,1,2 B)q[i]=a[i] C)p=a[i] D)p=&a[2][1] B)9,One*Dream! C)10,One*Dream! D)10,One*World B)2 0 5 0 C)3 0 4 0 D)0 3 0 4 # include { char a[10]= \"abcd\" ; printf (\"%d, %d\\n\} 程序运行后的输出结果是 A)7,4 (31)下面是有关C语言字符数组的描述,其中错误的是 A)不可以用赋值语句给字符数组名赋字符串 B)可以用输入语句把字符串整体输入给字符数组 C)字符数组中的内容不一定是字符串 D)字符数组只能存放字符串 (32)下列函数的功能是 fun(char * a,char * b) { while((*b=*a)!= '\\0') {a++; b++;} } A)将a所指字符串赋给b所指空间 B)使指针b指向a所指字符串 C)将a所指字符串和b所指字符串进行比较 D)检查a和b所指字符串中是否有'\\0' (33)设有以下函数 void fun(int n,char *s) { „„ } 则下面对函数指针的定义和赋值均是正确的是 A)void (*pf)(); pf=fun; C)void *pf(); *pf=fun; (34)有以下程序 # include s=f (a) ; s=s+f(a) ; printf (\"%d\\n\} int f (int n) { static int a=1; n+=a++; return n; } 二级C语言程序设计试卷 第20页 (共12页) B)4,10 C)8,8 D)10,10 B)void *pf(); pf=fun; D)void (*pf)(int,char) ; pf=&fun; 程序运行后的输出结果是 A)7 (35)有以下程序 # include { int a=3, s, t ; s=f (a+1) ; t=f ((a+1)) ; printf (\"%d, %d\\n\ } 程序运行后的输出结果是 A)10,64 (36)下面结构体的定义语句中,错误的是 A)struct ord {int x;int y;int z;}; struct ord a; B)struct ord {int x;int y;int z;} struct ord a; C)struct ord {int x;int y;int z;} a; D)struct {int x;int y;int z;} a; (37)设有定义:char *c;,以下选项中能够使字符型指针c正确指向一个字符串的是 A)char str[ ]= \"string\"; c=str; (38)有以下程序 # include { int a; char b[10]; double c; } ; struct A f (struct A t) ; main () { struct A a={1001, \"ZhangDa\ a=f (a) ; printf (\"%d, %s, %6.1f\\n\} struct A f (struct A t ) { t.a=1002; strcpy(t.b, \"ChangRong\") ; t.c=1202.0 ; return t ; } 程序运行后的输出结果是 A)1001,ZhangDa,1098.0 B)1002,ZhangDa,1202.0 D)1002,ChangRong,1202.0 C)1001,ChangRong,1098.0 B)scanf(\"%s\ D)*c=\"string\"; C)c=getchar( ); B)10,10 C)64,10 D)64,64 B)8 C)9 D)10 二级C语言程序设计试卷 第21页 (共12页) (39)若有以下程序段 int r=8; printf(\"%d\\n\ 输出结果是 A)16 B)8 (40)下列关于C语言文件的叙述中正确的是 A)文件由一系列数据依次排列组成,只能构成二进制文件 B)文件由结构序列组成,可以构成二进制文件或文本文件 C)文件由数据序列组成,可以构成二进制文件或文本文件 D)文件由字符序列组成,其类型只能是文本文件 二、填空题(每空2分,共30分) 请将每空的正确答案写在答题卡【1】至【15】序号的横线上,答在试卷上不得分。 (1)某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树中共有 【1】 个 结点。 (2)程序流程图中的菱形框表示的是 【2】 。 (3)软件开发过程主要分为需求分析、设计、编码与测试四个阶段,其中 【3】 阶段 产生“软件需求规格说明书”。 (4)在数据库技术中,实体集之间的联系可以是一对一或一对多或多对多的,那么“学生” 和“可选课程”的联系为 【4】 。 (5)人员基本信息一般包括:身份证号,姓名,性别,年龄等。其中可以作为主关键字的 是 【5】 。 (6)若有定义语句:int a=5;,则表达式:a++的值是 【6】 。 (7)若有语句double x=17;int y;,当执行y=(int)(x/5)%2;之后y的值为 【7】 。 (8)以下程序运行后的输出结果是 【8】 。 # include printf (\"%d \ ) ; 二级C语言程序设计试卷 第22页 (共12页) C)4 D)2 printf (\"%d\\n\" , 0 # include { int a=1, b=7 ; do { b=b/2 ; a+=b ; } while (b>1) ; printf (\"%d\\n\ (10)有以下程序 # include { int f, f1, f2, i ; f1=0; f2=1; printf (\"%d %d\" , f1, f2 ); for ( i=3; i<=5; i++) { f=f1+f2; printf (\"%d\ f1=f2 ; f2=f ; } printf (\"\\n\") ; } 程序运行后的输出结果是 【10】 。 (11)有以下程序 # include void fun ( int b ) { int a=10; a+=b; printf (\"%d\} main () { int c=20; fun (c) ; a+=c; printf (\"%d\\n\} 程序运行后的输出结果是 【11】 。 (12)设有定义: struct person { int ID; char name[12];} p; 请将scanf(\"%d\【12】 ); 语句补充完整,使其能够为结构体变量p的成员ID正确读 二级C语言程序设计试卷 第23页 (共12页) 入数据。 (13)有以下程序 # include { char a[20]= \"How are you?\scanf(\"%s\ printf (\"%s %s\\n\} 程序运行时从键盘输入:How are you?<回车> 则输出结果为 【13】 。 (14)有以下程序 # include { int num; double s; }REC; void fun1( REC x ) {x.num=23; x.s=88.5; } main () { REC a={16, 90.0 }; fun1(a) ; printf (\"%d\\n\ ) ; } 程序运行后的输出结果是 【14】 。 (15)有以下程序 # include { if (x/2 > 0) fun(x/2) ; printf (\"%d \} main () { fun (6) ; printf (\"\\n\" ) ; } 程序运行后的输出结果是 【15】 。 2009年9月全国计算机等级考试二级笔试试卷 C语言程序设计答案和解析 一、 选择题 (1)【答案】C 【解析】对于一个非空的数据结构,如果同时满足下列两个条件:(1)有且只有一个根结 二级C语言程序设计试卷 第24页 (共12页) 点;(2)每一个结点最多有一个前件,也最多有一个后件,即为线性结构(如线性表、栈、队列和链表),而二叉树的结点可能存在两个后件,所以是非线性结构。 (2)【答案】B 【解析】在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即栈是按照“先进后出”或“后进先出”的原则组织数据的。 (3)【答案】D 【解析】所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑 上的环状空间,供队列循环使用。在循环队列结构中,当存储空间的最后一个位置己被使用而再要进行入队运算时,只要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾。如果队头指针大于队尾指针说明队列已经循环存放数据了,如果队头指针小于队尾指针说明没有进行循环存放。 (4)【答案】A 【解析】算法的空间复杂度是指执行算法所需要的内存空间,包括算法程序所占空间,输入 的初始数据所占空间和执行过程中所需要的额外空间。 (5)【答案】B 【解析】耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程 序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。 (6)【答案】A 【解析】结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句等。 (7)【答案】C 【解析】程序流程图是由起始框、判别框、执行框和结束框等组成。 【解析】数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、(8)【答案】B 数据操纵、数据维护、控制及保护和数据服务等。 (9)【答案】C 【解析】在E-R图中,实体联系用菱形表示,矩形表示实体集,椭圆表示属性。 【解析】T由属于关系R以及关系S的元组组成,简单来说,就是S和R的元组之和,(10)【答案】D 是并运算。 (11)【答案】D 【解析】程序设计包括五部分:(1)确定数据结构;(2)确定算法;(3)编码;(4)在计算机上调试程序;(5)整理并写出文档资料。 (12)【答案】C 【解析】在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。由用户根据需要定义的标识符称为用户标识符,又称自定义标识符。如果用户标识符与关键字相同,则在对程序进行编译时系统将给出出错信息。 二级C语言程序设计试卷 第25页 (共12页) (13)【答案】A 【解析】case是关键字,不可以作为标识符。 【解析】(int)((double)9/2)的值为4,9%2的值为1,则整个表达式的值为3。 【解析】x-=x+x,即x=x-(x+x),初值x=10,将其代入运算最终x=-10。 (14)【答案】B (15)【答案】B (16)【答案】D 【解析】执行第一个输出语句时,b的值为1,故执行第2个输出语句时a=2×1=2。 (17)【答案】C 【解析】if(a>b) c=a;a=b;b=c;的执行结果为a=2,b=3,c=3。其他三个选项a、b、c的值均为2、1、1。 (18)【答案】A 【解析】k=1时,执行default和case 2语句,执行case 2语句时,遇到break语句跳出switch循环(此时c=2),继续判断for条件而不是执行printf(\"%d\\n\)语句(因为此输出语句是for循环之外的语句);k=2时,执行case 2语句,这时c=3并跳出switch循环,继续判断for条件,此时条件不满足跳出for循环执行printf(\"%d\\n\),输出结果为3。 (19)【答案】A 【解析】k=a>b?(b>c? 1:0):0的功能是:若a>b且b>c,则k=1,否则k=0。 【解析】字符串s中只有'x'、'y'符合if的条件表达式,故n的值为2。 【解析】n=2,k=0时,判断while条件,第一次判断while条件不成立,不执行空语句,(20)【答案】B (21)【答案】D 而是退出循环,执行printf(\"%d %d\\n\,但是经过条件判断后, k的值自加变为1,而n的值没有变,因为在逻辑与运算中,只要第一个表达式不成立,不再计算第二个表达式。 (22)【答案】C 【解析】关键字char用来定义字符变量只能接收单引号括起来的单个字符,'aa'不合法。 【解析】c1='A'+'8'-'4'='A'+4='E';c2='A'+'8'-'5'='A'+3='D',D对应的ASCII码值为68。c1(23)【答案】A 按字符格式输出为E,c2按整型格式输出为68。 (24)【答案】C 【解析】在fun函数中,p=d++;即p=d,d=d+1,输出p的值为2;主函数中调用fun(),主函数中a的值并没有改变,故printf(\"%d\\n\输出结果为1。 (25)【答案】D 【解析】赋值语句max=MIN放错了位置,它应放在int findmax()函数之前或for循环之上。 【解析】定义了整型变量m并赋值为1,整型变量n赋值为2;并定义了整型指针变量p(26)【答案】B 指向m,q指向n;接着交换p和q指针,让p指向n,q指向m,所以*p中是n的值2,*q中是m的值1,这只是改变了指针的指向,并没有改变变量m和n中的内容,所以输出值是1、2、2、1。 (27)【答案】A 二级C语言程序设计试卷 第26页 (共12页) 【解析】a是一个二维数组,若想用指针指向它,则需要用二级指针。 【解析】*p=str[1]= \"one*Dream\",strlen是计算字符串长度的函数,不包括结束符。 【解析】i=0时:i%2=0,执行第一个switch的case 0,a[0]%2=0,执行第2个switch的 (28)【答案】C (29)【答案】C case 0,a[0]=a[0]+1=3; i=1时:i%2=1,执行第一个switch的case 1,a[1]=0; i=2时:i%2=0,执行第一个switch的case 0,a[2]%2=1,执行第2个switch的case 1,a[2]=a[2]-1=4; i=3时:i%2=1,执行第一个switch的case 1,a[3]=0; i=4时,跳出for循环。输出数组a中每个元素的最后值。 (30)【答案】B 【解析】strlen是计算字符串长度的函数,返回字符串长度,不包括结束符;sizeof返回的是字符串所占内存的字节数。字符数组a共分配了10个字节,使用了5个字节(包括结束符)。 (31)【答案】D 【解析】字符数组不仅可以存放字符串,还可以存放字符的ASCII码值。 【解析】此题是陷阱题,在函数中:while的条件是中用的是=(赋值号)而不是==(等(32)【答案】A 号),而且通过循环语句可以看出指针a和b是同时移动的,所以就是将a所指字符串的每个字符赋给b所指的空间,即b中存储a的内容。 (33)【答案】A 【解析】函数指针的定义形式是:数据类型标识符(*指针变量名)();。void(* pf)()定义了一个没有返回值的函数指针pf。在给函数指针变量赋值时,只需要给出函数名而不必给出参数。所以给pf赋值时,只把函数名fun赋给pf即可。 (34)【答案】C 【解析】本题主要考查静态局部变量。静态局部变量保存在全局数据区,每次的值保持到下一次调用,直到下次被赋新值。第一次调用f(a)后,将主函数中的变量a的值3传递给函数f中的n,f中定义了一个静态局部变量a初始值为1,执行n+=a++;后,n=n+a++=3+1=4,然后a的值为2,将n的值返回到主函数中赋给s,此时s为4;第二次再调用f(a),静态局部变量a中保留上一次调用后的结果为2,所以再执行n+=a++;后n=n+a++=3+2=5,然后a变为3;本次返回的值为5,所以最后结果是4+5=9。 (35)【答案】A 【解析】本题主要考查宏的使用。f(a+1)=a+1×a+1×a+1=3a+1,所以s=10;f((a+1))=(a+1)×(a+1)×(a+1),所以t=4×4×4=64。 (36)【答案】B 【解析】定义结构体类型的变量的方法有4种。其中A项是先说明结构体类型,再单独定义变量;C项是紧跟在结构体类型说明之后进行变量定义;D项是在说明一个无名结构体类型的同时,直接进行定义。这三种方法都是正确的,只有B选项是错误的。 (37)【答案】A 【解析】选项A是先定义一个字符数组后,再使用指针变量指向该数组。选项B和D中 二级C语言程序设计试卷 第27页 (共12页) 字符指针没有被赋值,所以指向一个不确定的区域,这个区域可能存放有用的指令或数据,在 这个不确定的区域重新存放字符串,可以会发生无法预知的错误,选项C中getchar()函数输入一个字符给字符型变量,而不是字符指针。所以A正确。 (38)【答案】D 【解析】本题考查结构体变量的赋值。通过f(a)函数,将1001、ZhangDa、1098.0一一对应赋值给函数f的形参,在函数中将a的值改为1002,b的值改为ChangRong,c的值改为1202.0,并将t返回赋给a,所以输出结果为1002,ChangRong,1202.0。 (39)【答案】C 二、 填空题 (1)【答案】【1】14 【解析】二叉树具有如下性质:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。度为2的个数为5,所以度为0的个数为6。二叉树的总结点=度为1的个数+度为2的个数+叶子结点个数。所以总结点为14。 (2)【答案】【2】逻辑条件 【解析】程序流程图中的菱形框代表分支结构或循环结构的条件判断(或逻辑条件),应该具有两个分支出口,分别表示条件满足和条件不满足的时候程序的流向。 (3)【答案】【3】需求分析 【解析】本题考查需求分析的过程。需求分析阶段的工作,可以概括为需求获取、需求分析、编写需求规格说明书和需求评审4个方面。其中,需求规格说明书是需求分析阶段的成果,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进程的依据。 (4)【答案】【4】多对多 【解析】本题考查实体集之间的联系。实体集之间的联系有3种:一对一、一对多和多对多。因为一个学生可以选多门课程,而一门课程可以被多个学生选择,所以“学生”与“可选课程”两个实体集之间的联系一般是“多对多”联系。 (5)【答案】【5】身份证号 【解析】主关键字是被挑选出来,作表的行的惟一标识的候选关键字,主关键字要求值不重复,身份证号代表一个人,即不可能有相同的身份证号代表多个人。 (6)【答案】【6】5 【解析】在自增运算中,当++在变量前时,先将变量值加1再引用值,而++在变量之后时,先引用值再将变量值加1。 (7)【答案】【7】1 【解析】在进行数据运算时,小括号内的表达式优先计算,所以先执行x/5,x是double类型,所以x/5的运算结果必定是double类型,又因为使用(int)将x/5的结果强转为整型,所以(int)(x/5)的值为3,3%2结果为1。 (8)【答案】【8】10 二级C语言程序设计试卷 第28页 (共12页) 【解析】本题考查右移运算符的赋值。每右移一位相当于移位对象除以2。 【解析】C语言中根据数据的组织形式。分为二进制文件和ASCII码文本文件。一个C文 (40)【答案】C 件是一个字节序列或者二进制序列。 【解析】“<” 运算符结合从左至右,所以0 【解析】程序执行到do循环体时,b=b/2结果为3;a+=b结果为4,判断while条件b>1条件成立,继续执行while循环体,此时b=b/2结果为1;a+=b结果为5,判断while条件b>1条件不成立,跳出循环,执行printf(\"%d\\n\输出a的值为5。 (10)【答案】【10】01123 【解析】程序执行到printf(\"%d%d\语句,输出结果为01,遇到for循环,初值是3,3小于5,执行循环体,f=f1+f2,即f的结果为1,程序执行printf(\"%d\语句,输出结果为1,f1=f2表示将f2的值赋给f1,即f1的值为1,f2=f表示将f的值赋给f2,即f2的值为1,程序遇到},继续判断for条件,此时i的值为4小于5,执行循环体,f=f1+f2,即f的结果为2,程序执行printf(\"%d\语句,输出结果为2,f1=f2表示将f2的值赋给f1,即f1的值为1,f2=f表示将f的值赋给f2,即f2的值为2,程序遇到},继续判断for条件,此时i的值为5等于5,执行过程如上,所以最后一次输出的值为3。此程序是求斐波那契数列。 (11)【答案】【11】3025 【解析】程序运行从main函数开始,当执行到fun(c)时,调用fun函数,形参的值为20,a+=b的结果为30,执行printf(\"%d\语句,输出结果为30,遇到}返回函数调用处,此时函数中所有变量都会释放,执行a+=c语句,a的值为25,执行printf(\"%d\\n\语句,输出结果为25。 (12)【答案】【12】&p.ID 【解析】要访问结构体中的成员,可以通过以下3种形式: (1) 结构体变量名.成员名 (2) 结构体指针变量->成员名 (3) (*结构体指针变量).成员名 使用scanf函数输入数据时,使用&是获得变量的内存地址,向内存地址中输入数据。 (13)【答案】【13】How are you? How 【解析】在printf语句中,输出字符数组名会将整个字符串输出,通过键盘输入字符串时,scanf是以空格,制表符,换行符作为分隔符, 忽略输入字符串中的多余信息,也是受空白字符的限制。所以scanf只接收了How。 (14)【答案】【14】16 【解析】形参的改变不会影响实参的改变,被调函数中变量的改变不会影响主函数中的变量改变。 (15)【答案】【15】136 【解析】本题考查递归调用的知识。程序从main函数执行,执行fun(6),转去执行fun函数,判断if条件,x/2>0成立,执行fun(x/2)即fun(6/2)。递归调用fun函数,此时x的值为3,判断if条件,x/2>0成立,执行fun(x/2)即fun(3/2)。递归调用fun函数,此时x的值为1,判断if条件,x/2>0不成立,执行printf(\"%d\)语句,输出结果为1,遇到}程序返回上一调用处,即fun(3/2),输出结果为3,遇到}程序返回上一调用处,即fun(6/2),输出结果为6。 二级C语言程序设计试卷 第29页 (共12页) 因篇幅问题不能全部显示,请点此查看更多更全内容