2008年4月全国计算机等级考试二级笔试试卷 C语言程序设计 (考试时间90分钟,满分100分) 一、选择题((1)一(10)、(21)一(40)每题2分,(11)一(20)每题1分,共70分)下列各题A、B)、0) D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题相应位置上,答在试卷上不得分 (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)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)2的排序方法是 A)快速排序 B)冒泡排序 C)直接插入排序 D)堆排序 (7)下列关于栈的叙述正确的是 A)栈按“先进先出”组织数据B)栈按“先进后出”组织数 C)只能在栈底插入数据 )不能删除数据 8)在数据库设计中,将ER图转换成关系数据模型的过程属于 A)需求分析阶段 B)概念设计阶段 C)逻辑设计阶段 D)物理设计阶段 9)有三个关系R、S和T如下 R m。 0k1 由关系R和S通过运算得到关系T,则所使用的运算为 A)并 B)自然连接 C)笛卡儿积 D)交 10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课 SC(学号,课号,成绩),则表SC的关键字(键或码)为 A)课号,成绩 B)学号,成绩 C)学号,课号 D)学号,姓名,成绩 11)以下叙述中正确的是 A)C程序中的注释只能出现在程序的开始位置和语句的后面 B)C程序书写格式严格,要求一行内只能写一个语句 C)C程序书写格式自由,一个语句可以写在多行上 D)用C语言编写的程序只能放在一个程序文件中 12)以下选项中不合法的标识符是 A) print B) FOR c)&a D)00 3)以下选项中不属于字符常量的是
1 2008 年 4 月全国计算机等级考试二级笔试试卷 C 语言程序设计 (考试时间 90 分钟,满分 100 分) 一、选择题((1)-(10)、(21)-(40)每题 2 分,(11)-(20)每题 1 分,共 70 分)下列各题 A)、B)、C)、 D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题相应位置上,答在试卷上不得分。 (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)对长度为 n 的线性表排序,在最坏情况下,比较次数不是 n(n-1)/2 的排序方法是 A)快速排序 B)冒泡排序 C)直接插入排序 D)堆排序 (7)下列关于栈的叙述正确的是 A)栈按“先进先出”组织数据 B)栈按“先进后出”组织数据 C)只能在栈底插入数据 D)不能删除数据 8)在数据库设计中,将 E-R 图转换成关系数据模型的过程属于 A)需求分析阶段 B)概念设计阶段 C)逻辑设计阶段 D)物理设计阶段 9)有三个关系 R、S 和 T 如下: R S T 由关系 R 和 S 通过运算得到关系 T,则所使用的运算为 A)并 B)自然连接 C)笛卡儿积 D)交 10)设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号),课程 C(课号,课名),选课 SC(学号,课号,成绩),则表 SC 的关键字(键或码)为 A)课号,成绩 B)学号,成绩 C)学号,课号 D)学号,姓名,成绩 11)以下叙述中正确的是 A)C 程序中的注释只能出现在程序的开始位置和语句的后面 B)C 程序书写格式严格,要求一行内只能写一个语句 C)C 程序书写格式自由,一个语句可以写在多行上 D)用 C 语言编写的程序只能放在一个程序文件中 12)以下选项中不合法的标识符是 A)print B)FOR C)&a D)_00 13)以下选项中不属于字符常量的是 B C D a 0 k1 b 1 n1 B C D f 3 h2 a 0 k1 n 2 x1 B C D a 0 k1
B)"C" D)"072 14)设变量已正确定义并赋值,以下正确的表达式是 A)x=y*5=X+zB)int(15.8%5)C)x=y+2+5,+yD)x=25%5.0 15)以下定义语句中正确的是 A) int a=b=0 B)char A=65+1. b=b C) float a1, *b=&a, *c=&b d) double a=0.0: b=1.1 16)有以下程序段 char ch int k. ch=a. k=12 printf("%c, %d, ",ch, ch, k): printf("k=%d\n", k); 已知字符a的ASCI十进制代码为97,则执行上述程序段后输出结果是 A)因变量类型与格式描述符的类型不匹配输出无定值 B)输出项与格式描述符个数不符,输出为零值或不定值 C)a,97,12k=12 D)a,97,k=12 17)已知字母A的ASCⅢ代码值为65,若变量k为char型,以下不能正确判断出kk中的值为大写字母的表达 式是 A) kk>=A&&kk=A|k=2&&c=2&&c=2&&cb)a=b, c=a, printf("%d, %d, %d\n", a, b, c) 其输出结果是 A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7 20)有以下程序 #include <stdio. h maino intx=1,y=0,a=0,b=0 i case I switch(y) case 1: b++. break case 2 a++ b++ break printf("a=%d, b=%dIn", a, b); 程序的运行结果是 A)a=1.b=0 D)a=2,b=1 21)有以下程序 #include <stdio. h maino i int x=8
2 A)'C' B)"C" C)'\Xcc' D)'\072' 14)设变量已正确定义并赋值,以下正确的表达式是 A)x=y*5=x+z B)int(15.8%5) C)x=y+z+5,++y D)x=25%5.0 15)以下定义语句中正确的是 A)int a=b=0; B)char A=65+1,b='b'; C)float a=1,*b=&a,*c=&b; D)double a=0.0;b=1.1; 16)有以下程序段 char ch; int k; ch='a'; k=12; printf("%c,%d,",ch,ch,k); printf("k=%d\n",k); 已知字符 a 的 ASCII 十进制代码为 97,则执行上述程序段后输出结果是 A)因变量类型与格式描述符的类型不匹配输出无定值 B)输出项与格式描述符个数不符,输出为零值或不定值 C)a,97,12k=12 D)a,97,k=12 17)已知字母 A 的 ASCII 代码值为 65,若变量 kk 为 char 型,以下不能正确判断出 kk 中的值为大写字母的表达 式是 A)kk>='A'&&kk='A'||kk='a'&&(kk+32)=2&&c=2&&c=2&&cb) a=b; c=a; if(c!=a) c=b; printf("%d,%d,%d\n",a,b,c); 其输出结果是 A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7 20)有以下程序 #include main() { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2: a++;b++;break; case 3: a++;b++; } printf("a=%d,b=%d\n",a,b); } 程序的运行结果是 A)a=1,b=0 B)a=2,b=2 C)a=1,b=1 D)a=2,b=1 21)有以下程序 #include main() { int x=8;
i if(x%3)(printf("%d, "x--): continue: i printf("d 程序的运行结果是 A)7,4,2 B)8,7,5,2 C)9,7,6,4 D)8,5,4,2 22)以下不构成无限循环的语句或语句组是 B)n=0 do ( ++n, while(n2] 27)有定义语句: char sl10],若要从终端给s输入5个字符,错误的输入语句是 A)gets( &s[O]); B)scanf("%s" S++); C)gets(s); D) scanf("%s"s[1D; 28)以下叙述中错误的是 A)在程序中凡是以“#”开始的语句行都是预处理命令行 B)预处理命令行的最后不能以分号表示结束 C)# define mAX是合法的宏定义命令行 D)C程序对预处理命令行的处理是在程序执行的过程中进行的 29)以下结构体类型说明和变量定义中正确的是 A) typedef struct b) struct rEc f int n; char c; REC fint n; char c REC tI C) typedef struct REC D) struct f int n; char c, REC REC tlt2 30)以下叙述中错误的是 A)gets函数用于从终端读入字符串 B) getchar函数用于从磁盘文件读入字符
3 for( ; x>0; x--) { if(x%3) {printf("%d,",x--); continue; } printf("%d,",--x); } } 程序的运行结果是 A)7,4,2 B)8,7,5,2, C)9,7,6,4 D)8,5,4,2 22)以下不构成无限循环的语句或语句组是 A)n=0; B)n=0; do {++n;} while(n main( ) { int a[ ]={1,2,3,4},y,*p=&a[3]; --p; y=*p; printf("y=%d\n",y); } 程序的运行结果是 A)y=0 B)y=1 C)y=2 D)y=3 24)以下错误的定义语句是 A)int x[ ][3]={{0},{1},{1,2,3}}; B)int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; C)int x[4][ ]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; D)int x[ ][3]={1,2,3,4}; 25)设有如下程序段 char s[20]="Beijing",*p; p=s; 则执行 p=s;语句后,以下叙述正确的是 A)可以用*p 表示 s[0] B)s 数组中元素的个数和 p 所指字符串长度相等 C)s 和 p 都是指针变量 D)数组 s 中的内容和指针变量 p 中的内容相同 26)若有定义:int a[2][3];,以下选项中对 a 数组元素正确引用的是 A)a[2][!1] B)a[2][3] C)a[0][3] D)a[1>2][!1] 27)有定义语句:char s[10];,若要从终端给 s 输入 5 个字符,错误的输入语句是 A)gets(&s[0]); B)scanf("%s",s++); C)gets(s); D)scanf("%s",s[1]); 28)以下叙述中错误的是 A)在程序中凡是以“#”开始的语句行都是预处理命令行 B)预处理命令行的最后不能以分号表示结束 C)#define MAX 是合法的宏定义命令行 D)C 程序对预处理命令行的处理是在程序执行的过程中进行的 29)以下结构体类型说明和变量定义中正确的是 A)typedef struct B)struct REC; { int n; char c;} REC; {int n; char c;}; REC t1,t2; REC t1,t2; C)typedef struct REC; D)struct { int n=0; char c='A';}t1,t2; { int n; char c;} REC; REC t1,t2; 30)以下叙述中错误的是 A)gets 函数用于从终端读入字符串 B)getchar 函数用于从磁盘文件读入字符
C) fputs函数用于把字符串输出到文件 D) fwrite函数用于以二进制形式输出数据到文件 31)有以下程序 #include main( ints[l2]={1,2,34,43,2,1,1,1,2,3},c{5{0}J for(i=0;i void fun(int*s, int nl, int n2) i int i,j, t; while(ii([i; s[=sI; s[=t; 1++j--, inta[10}={1,2,34,56,7,8,90}k, fun(a,0,3);fun(a4,9);fun(a0,9), for(k=0; k void fun(char *s[, int n char *t: Int 1,J for(i=0; istrlen(sD)(t=s[i]; s[]=s[k: s0I=t main( ss=f"bcc", "bbcc", " xy","aaaacc", aabcc") fun(ss, 5): printf("%S, %sIn", ss[OL, Ss[4): 程序的运行结果是 B) aaaacc, xy c) bcc. aabcc D) aabcc bcc 34)有以下程序 #include if(x==Olx=1)return(3) y=x*x-f(x-2) return maino
4 C)fputs 函数用于把字符串输出到文件 D)fwrite 函数用于以二进制形式输出数据到文件 31)有以下程序 #include main( ) { int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i; for(i=0;i void fun(int *s,int n1,int n2) { int i,j,t; i=n1; j=n2; while(i #include void fun(char *s[ ],int n) { char *t; int i,j; for(i=0;istrlen(s[j])) {t=s[i];s[i]=s[j];s[j]=t;} } main( ) { char *ss[ ]={"bcc","bbcc","xy","aaaacc","aabcc"}; fun(ss,5); printf("%s,%s\n",ss[0],ss[4]); } 程序的运行结果是 A)xy,aaaacc B)aaaacc,xy C)bcc,aabcc D)aabcc,bcc 34)有以下程序 #include int f(int x) { int y; if(x= =0||x= =1) return(3); y=x*x-f(x-2); return y; } main()
z=f(3) 程序的运行结果是 A)0 B)9 D)8 35)有以下程序 #include void fun( char *a, char *b) while(*b=*a)(b++ a++ maino char*s="”***a*b**t{80]; fun(s, t): puts(t); 程序的运行结果是 A)***a*b b)a*b c) a*bi D) ab 36)有以下程序 #include typedef struct i char name 9; char sex, float score[2];, STU void f(STU a i STU b=f"Zhao",'m, 85.0,90.01; int strcpy (a name, b name) for(i=0; 1<2; 1++) ascorei=b score STUc={"Qian","f,95.0,92.0)} f(c): printf("%s, %c, %2. 0f, %2.0f\n", c name, c sex, c score[0],c score[ lD); 程序的运行结果是 A)Qian, f, 95, 92 B) Qian, m, 85, 90 C) Zhao, f, 95, 92 D) Zhao, m, 85, 90 37)有以下程序 <stdio h i File 'fp; int a[ 10=11, 2, 3), i,n fp=fopen("dl. dat","w") for(i=0; i<3; i++) fprintf(fp, %d", aiD fprintf(fp, n"); fclose(fp): fp=fopen("dl. dat","r") fscanf(fp, %d", &n) close(fp); printf("%dIn"n 程序的运行结果是 A)12300 B)123 D)321 38)变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是111000若吉要 求将a的高4位取反,低4位不变,所要执行的运算是
5 { int z; z=f(3); printf("%d\n",z); } 程序的运行结果是 A)0 B)9 C)6 D)8 35)有以下程序 #include void fun(char *a,char *b) { while(*a= ='*') a++; while(*b=*a) {b++;a++;} } main() { char *s="*****a*b****",t[80]; fun(s,t); puts(t); } 程序的运行结果是 A)*****a*b B)a*b C)a*b**** D)ab 36)有以下程序 #include #include typedef struct { char name[9]; char sex; float score[2]; } STU; void f(STU a) { STU b={"Zhao",'m',85.0,90.0}; int i; strcpy(a.name,b.name); a.sex=b.sex; for(i=0;i main() { FILE *fp; int a[10]={1,2,3},i,n; fp=fopen("d1.dat","w"); for(i=0;i<3;i++) fprintf(fp,"%d",a[i]); fprintf(fp,"\n"); fclose(fp); fp=fopen("d1.dat","r"); fscanf(fp,"%d",&n); fclose(fp); printf("%d\n",n); } 程序的运行结果是 A)12300 B)123 C)1 D)321 38)变量 a 中的数据用二进制表示的形式是 01011101,变量 b 中的数据用二进制表示的形式是 11110000,若要 求将 a 的高 4 位取反,低 4 位不变,所要执行的运算是
A)a∧b a&b D)a void swap(int *a, int *b) i int i=3, j=5, * p=&i, *q=&j swap(p, q); printf("%d %d\n"*p, *q); (11)以下程序的输出结果是【12】。 #include ma inta[5S}={2,4,6,8,10},*p p-a, p++, printf("%d", "p)
6 A)a∧b B)a|b C)a&b D)a main() { int x[ ]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i; for(i=0;i void swap(int *a,int *b) { int *t; t=a;a=b;b=t; } main() { int i=3,j=5,*p=&i,*q=&j; swap(p,q); printf("%d %d\n",*p,*q); } (11)以下程序的输出结果是___【12】__。 #include main() { int a[5]={2,4,6,8,10},*p; p=a;p++; printf("%d",*p); }
(12)以下程序的输出结果是【13】 void fun(int x) i if(x/2>0) fun(x/2) printf("%d,X) maino i fun(3); printf(""):i (13)以下程序中函数fun的功能是:统计 person所指结构体数组所有性别(sex)为M的记录的个数,存入变 量n中,并作为函数值返回,请填空。 #include #define n 3 typedef struct t int num; char nam[ 10]: char sex; ,SS int fun(Ss person(D f int i, n=0 for(i-0; K maino f FILE *fp; char ch fp= fopen(【15】 ch=fgetc(fp) while( feof(fp)) putchar(ch); ch=fgetc(fp); putchar(\n); fclose(fp) 2008年4月等级考试二级C笔试真题参考答案 选择题 1-10 CABBA DBCDC 11-20 CCBCB DBBBD 21-30 DADCA DDDAB 31-40 CCACC ABAAB 填空题: (1)输出(2)16(3)24(4)关系(5)数据定义语言(6)0(7)3(8)#2#4 (10)2468(11)35(12)4(13)13 (14)person. sex (15)"filea. dat","r
7 (12)以下程序的输出结果是___【13】__。 #include void fun(int x) { if(x/2>0) fun(x/2); printf("%d",x); } main() { fun(3); printf("\n"); } (13)以下程序中函数 fun 的功能是:统计 person 所指结构体数组所有性别(sex)为 M 的记录的个数,存入变 量 n 中,并作为函数值返回,请填空。 #include #define N 3 typedef struct { int num; char nam[10]; char sex;} SS; int fun(SS person[ ]) { int i,n=0; for(i=0;i main() { FILE *fp; char ch; fp=fopen(___【15】__); ch=fgetc(fp); while(!feof(fp)) { putchar(ch);ch=fgetc(fp);} putchar('\n'); fclose(fp); } 2008 年 4 月等级考试二级 C 笔试真题参考答案 选择题: 1-10 CABBA DBCDC 11-20 CCBCB DBBBD 21-30 DADCA DDDAB 31-40 CCACC ABAAB 填空题: (1)输出 (2)16 (3)24 (4)关系 (5)数据定义语言 (6)0 (7)3 (8)##2##4 (9)2 (10)2468 (11)3 5 (12)4 (13)13 (14)person.sex (15)"filea.dat","r