2011 年 9 月 17 日全国计算机等级考试 C 语言笔试题 一 选择题 (⑴-(10) (21)-(40) 每题 2 分,(11)-(20) 每题 1 分, 共 70 分 ) 下列各题 A) B) C) D) 四个选项中, 只有一个选项是正确的, 请将正确选项填涂在答题卡相应位置上, 答在试卷上不得分 (1) 下列叙述中正确的是 A) 算法就是程序 B) 设计算法时只需考虑数据结构的设计 C) 设计算法时只需考虑结果的可靠性 D) 以上三种说法都不对 (2) 下列关于线性链表的叙述中, 正确的是 A) 各个数据结点的存储空间可以不连续, 但它们的存储顺序与逻辑顺序必须一致 B) 各个数据结点的存储顺序与逻辑顺序或以不一致, 但它们的存储空间必须连续 C) 进行插入与删除时, 不需要移动表中的元素 D) 以上三种说法都不对 (3) 下列关于二叉树的叙述中, 正确的是 A) 叶子结点总是比度为 2 的结点少一个 B) 叶子结点总是比度为 2 的结点多一个 C) 叶子结点数是度为 2 的结点数的两倍 D) 度为 2 的结点是度为 1 的结点数的两倍 (4) 软件按功能可以分为应用软件 系统软件和支撑软件 ( 或工具软件 ) 下面属于应用软件的是 A) 学生成绩管理系统 B)C 语言编译程序 C)UNIX 操作系统 D) 数据库管理系统 (5) 某系统总体结构图如下所示 : XY 系统 功能 1 功能 2 功能 3 功能 2.1 功能 2.2 功能 2.3 该系统总体结构图的深度是 A)7 B)6 C)3 D)2 (6) 程序测试的任务是 第 1 页共 13 页
A) 设计测试用例 B) 验证程序的正确性 C) 发现程序中的错误 D) 诊断和改正程序中的错误 (7) 下列关于数据库设计的叙述中, 正确的是 A) 在需求分析阶段建立数据字典 B) 在概念设计阶段建立数据字典 C) 在逻辑设计阶段建立数据字典 D) 在物理设计阶段建立数据字典 (8) 数据库系统的三级模式不包括 A) 概念模式 B) 内模式 C) 外模式 D) 数据模式 (9) 有三个关系 R S 和 T 如下 : R S T A B C A B C A B C a 1 2 a 1 2 c 3 1 b 2 1 b 2 1 C 3 1 则由关系 R 和 S 得到关系 T 的操作是 A) 自然连接 B) 差 C) 交 D) 并 (10) 下列选项中属于面向对象设计方法主要特征的是 A) 继承 B) 自顶向下 C) 模块化 D) 逐步求精 (11) 以上叙述中错误的是 A)C 语言编写的函数源程序, 其文件名后缀可以是 C B) C 语言编写的函数都可以作为一个独立的源程序文件 C) C 语言编写的每个函数都可以进行独立的编译并执行 D) 一个 C 语言程序只能有一个主函数 (12) 以下选项中关于程序模块化的叙述错误的是 A) 把程序分成若干相对独立的模块, 便于编码和调试 B) 把程序分成若干相对独立 功能单一的模块, 可便于重复使用这些模块 C) 可采用自底向上 逐步细化的设计方法把若干独立模块组装成所要求的程序 D) 可采用自顶向下 逐步细化的设计方法把若干独立模块组装成所要求的程序 (13) 以下选项中关于 C 语言常量的叙述错误的是 A 所谓常量, 是指在程序运行过程中, 其值不能被改变的量 第 2 页共 13 页
B)' 常量分为整型常量 实型常量 字符常量和字符串常量 C) 常量可分为数值型常量和非数值型常量 D) 经常被使用的变量可以定义成常量 (14) 若有定义语句 :int a=10; double b=3.14;, 则表达式 'A'+a+b 值的类型是 A).char B)int C) double D)float (15) 若有定义语句 :int x=12,y=8,z;, 在其后执行语句 z=0.9+x/y;, 则 z 的值为 A)1.9 B)1 C)2 D)2.4 (16) 若有定义 :int a,b;, 通过语句 scanf("%d;%d",&a,&b);, 能把整数 3 赋给 a,5 赋给 b 的输入数据是 A)3 5 B)3,5 C)3;5 D)35 (17)i 若有定义语句 :int k1=10,k2=20;, 执行表达式 (k1=k1>k2)&&(k2=k2>k1) 后,k1 和 k2 的值分别为 A)0 和 1 B)0 和 20 C)10 和 1 D)10 和 20 (18) 有以下程序 { int a=1,b=0; if(- -a) b++; else if(a==0) b+=2; else b+=3; printf("%d\n",b); 程序运行后的输出结果是 A)0 B)1 C)2 D)3 (19) 下列条件语句中, 输出结果与其他语句不同的是 A) if(a) printf("%d\n",x); else printf("%d\n",y); B) if(a==0) printf("%d\n",y); else printf("%d\n",x); C) if(a!=0) printf("%d\n",x); else printf("%d\n",y); D) if(a==0) printf("%d\n",x); else printf("%d\n",y); (20) 有以下程序段 第 3 页共 13 页
{ int a=7; while(a- -); printf("%d\n",a); 程序运行后的输出结果是 A)-1 B)0 C)1 D)7 (21) 以下不能输出字符 A 的语句是 ( 注 : 字符 A 的 ASCII 码值为 65, 字符 a 的 ASCII 码值为 97) A) printf("%c\n",'a'-32); B) printf("%d\n",'a'); C) printf("%c\n",65); D) printf("%c\n",'b'-1); (22) 有以下程序 ( 注 : 字符 a 的 ASCII 码值为 97) { char *s={"abc"; do { printf("%d",*s%10); ++s; while(*s); 程序运行后的输出结果是 A)abc B)789 C)7890 D)979899 (23) 若有定义语句 :double a, *p=&a; 以下叙述错误的是 A) 定义语句 :* 号是一个简址运算符 B) 定义语句 :* 号是一个说明符 C) 定义语句中的 p 只能存放 double 类型变量的地址 D) 定义语句中,*p=&a 把变量 a 的地址作为初始值赋给指针变量 p (24) 有以下程序 double f(double x); 第 4 页共 13 页
{ double a=0; int i; for(i=0;i<30;i+=10) a+=f((double)i); printf("%5.0f\n",a); double f(double x) { return x*x+1; A)503 B)401 C)500 D)1404 (25) 若有定义语句 :int year=2009, *p=&year;, 以下不能使变量 year 中的值增至 2010 的语句是 A)*p+=1; B)(*p)++; C)++(*p); D) *p++; (26) 以下定义数组的语句错误的是 A) int num[]={1,2,3,4,5,6; B) int num[][3]={{1,2,3,4,5,6; C) int num[2][4]={{1,2,{3,4,{5,6; D) int num[][4]={1,2,3,4,5,6; (27) 有以下程序 void fun(int *p) { printf("%d\n",p[5]); { int a[10]={1,2,3,4,5,6,7,8,9,10; fun(&a[3]); A)5 B)6 C)8 D) 9 (28) 有以下程序 #define N 4 void fun(int a[][n], int b[]) { int i; for(i=0;i<n;i++) b[i]=a[i][i]-a[i][n-1-i]; 第 5 页共 13 页
{ int x[n][n]={{1,2,3,4,{5,6,7,8,{9,10,11,12,{13,14,15,16,y[n],i; fun(x,y); for(i=0;i<n;i++) printf("%d",y[i]); printf("\n"); A)-12,-3,0.0, B)-3,-3,1,3 C)0,1,2,3 D)-3,-3,-3,-3 (29) 有以下函数 int fun(char *x, char *y) { int n=0; while((*x==*y)&&*x!= '\0') {x++; y++; n++; return n; 函数的功能是 A) 查找 x 和 y 所指字符串中有否有 '\0' B) 统计 x 和 y 所指字符串中最前面连续相同的字符个数 C) 将 y 所指字符串中赋给 x 所指的存储空间 D) 统计 x 和 y 所指字符串中相同的字符个数 (30) 若有定义语句 :char *s1="ok", *s2="ok";, 以下选项中, 能够输出 "OK" 的语句是 A) if(strcmp(s1,s2)==0) puts(s1); B) if(strcmp(s1,s2)!=0) puts(s2); C) if(strcmp(s1,s2)==1) puts(s1); D) if(strcmp(s1,s2)!=0) puts(s1); ( (31) 以下程序的主函数中调用了在其前面定义的 fun 函数 { double a[15], k; k=fun(a); 第 6 页共 13 页
则以下选项中错误的 fun 函数的首部是 A) double fun( double a[15]) B) double fun( double *a) C) double fun( double a[]) D) double fun( double a) (32) 有以下程序 #include <string.h> { char a[5][10]={ "china","beijing","you","tiananmen","welcome"; int i,j; char t[10]; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(strcmp(a[i],a[j])>0) {strcpy(t,a[i]); strcpy(a[i],a[j]); strcpy(a[j],t); puts(a[3]); A)beijing B)china C)welcome D)tiananmen (33) 有以下程序 int f(int m) { static int n=0; n+=m; return n; { int n=0; printf("%d,",f (++n)); printf("%d\n",f (n++)); 第 7 页共 13 页
A)1,2 B)1,1 C)2,3 D)3,3 (34) 有以下程序 { char ch[3][5]={ "AAAA","BBB","CC"; printf("%s\n",ch[1]); A)AAAA B)CC C)BBBCC D)BBB (35) 有以下程序 #include <string.h> void fun(char *w, int m) { char s, *p1, *p2; p1=w; p2=w+m-1; while(p1<p2) {s=*p1; *p1=*p2; *p2=s; p1++; p2--; { char a[]="123456"; fun(a,strlen(a)); puts(a); A)654321 B)116611 C)161616 D)123456 (36) 有以下程序 #include <string.h> typedef struct {char name[9]; char sex; int score[2]; STU; STU f(stu a) { STU b={"zhao",'m',85,90; int i; 第 8 页共 13 页
strcpy(a.name,b.name); a.sex=b.sex; for(i=0;i<2;i++) a.score[i]=b. score[i]; return a; { STU c={"qian",'f',95,92, d; d=f(c); printf("%s,%c,%d,%d,",d.name, d.sex, d.score[0], d.score[1]); printf("%s,%c,%d,%d\n",c.name, c.sex, c.score[0], c.score[1]); A) Zhao,m,85,90,Qian,f,95,92 B) Zhao,m,85,90, Zhao,m,85,90 C) Qian,f,95,92, Qian,f,95,92 D) Qian,f,95,92, Zhao,m,85,90 (37) 有以下程序 { struct node { int n; struct node *next; *p; struct node x[3]={{2, x+1,{4, x+2,{6, NULL; p=x; printf("%d,",p->n); printf("%d,",p->next->n); A)2,3 B)2,4 C)3,4 D)4,6 (38) 有以下程序 { int a=2,b; b=a<<2; printf("%d,\n",b); 第 9 页共 13 页
A)2 B)4 C)6 D)8 (39) 以下选项中叙述错误的是 A)C 语言函数中定义的赋有初值的静态变量, 每调用一次函数, 赋一次初值 B) 在 C 程序的同一函数中, 各复合语句内可以定义变量, 其作用域仅限于本复合语句内 C)C 程序函数中定义的自动变量, 系统不自动赋确定的初值 D)C 程序函数的形参不可以说明为 ststic 型变量 (40) 有以下程序 { FILE *fp; int k,n,i,a[6]={1,2,3,4,5,6; fp=fopen("d2.dat","w"); for(i=0;i<6;i++) fprintf(fp, "%d,",a[i]); fclose(fp); fp=fopen("d2.dat","r"); for(i=0;i<3;i++) fscanf(fp, "%d%d",&k,&n); fclose(fp); printf("%d,%d\n",k,n); A)1,2 B)3,4 C)5,6 D)123,456 二 填空题 ( 每空 2 分, 共 30 分 ) 请将每空的正确答案写在答题卡 1 至 15 序号的横线上, 答在试卷上不得分 (1) 数据结构分为线性结构和非线性结构, 带链的栈属于 1 (2) 在长度为 n 的顺序存储的线性表中插入一个元素, 最坏情况下需要移动表中 2 个元素 (3) 常见的软件开发方法有结构化方法和面向对象方法 对某应用系统经过需求分析建立数据流图 (DFD), 则应采用 3 方法 第 10 页共 13 页
(4) 数据库系统的核心是 4 (5) 在进行关系数据库的逻辑设计时,E-R 图中的属性常被转换为关系中的属性, 联系通常被转换为 5 (6) 若程序中已给整型变量 a 和 b 赋值 10 和 20, 请写出按以下格式输出 a b 值的语句 6 (7) 以下程序运行后输出结果是 7 { int a=37; a%=9; printf("%d\n",a); (8) 以下程序运行后输出结果是 8 { int i, j; for(i=6;i>3;i--) j=i; printf("%d%d\n",i,j); (9) 以下程序运行后输出结果是 9 { int i,n[]={0,0,0,0,0; for(i=1;i<=2;i++) { n[i]=n[i-1]*3+1; printf("%d ",n[i]); printf("\n"); (10) 以下程序运行后的输出结果是 10 第 11 页共 13 页
{ char a; for(a=0;a<15;a+=5) { putchar(a+'a'); printf("\n"); (11) 以下程序运行后输出结果是 11 void fun(int x) { if(x/5>0) fun(x/5); printf("\%dn",x); { fun(11); printf("\n"); (12) 有以下程序 { int c[3]={0, k,i; while((k=getchar()!='\n') c[k-'a']++; for(i=0;i<3;i++) printf("%d",c[i]); printf("\n"); 若程序运行时从键盘输入 ABCACC< 回车 >, 则输出结果为 12 (13) 以下程序运行后的输出结果是 13 { 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("%d\n",n[1]); 第 12 页共 13 页
(14) 以下程序调用 fun 函数把 x 中的值插入到 a 数组下标为 k 的数组元素中 主函数中,n 存放 a 数组中数据的个数 请填空 void fun( int s[], int *n, int k, int x) { int i; for(i=*n-1; i>=k; i- -) s[ 14 ]=s[i]; s[k]=x; *n=*n+ 15 ; { int a[20]={1,2,3,4,5,6,7,8,9,10,11, i, x=0, k=6, n=11; fun(a, &n, k,x); for(i=0;i<n;i++) printf("%4d",a[i]); printf("\n"); 参考答案 一 选择题 : (1)D (2)C (3)B (4)A (5)C (6)D (7)A (8)D (9)B (10)A (11)C (12)C (13)D (14)C (15)B (16)C (17)B (18)C (19)D (20)A (21)B (22)B (23)A (24)A (25)D (26)C (27)D (28)B (29)B (30)D (31)D (32)C (33)A (34)D (35)A (36)A (37)B (38)D (39)A (40)C 二 填空题 1 线性结构 2 n 3 结构化 4 数据库管理系统 5 关系 6 print( ****a=%d,b=%d**** ); 7 1 8 34 9 14 10 AFK 11 211 12 213 13 3 14 i+1 15 1 第 13 页共 13 页