2011 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 公 共 基 础 知 识 和 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) 某 二 叉 树 共 有 7 个 结 点, 其 中 叶 子 结 点 只 有 1 个, 则 该 二 叉 树 的 深 度 为 ( 假 设 根 结 点 在 第 1 层 )( ) A)3 B)4 C)6 D)7 (4) 在 软 件 开 发 中, 需 求 分 析 阶 段 产 生 的 主 要 文 档 是 ( ) A) 软 件 集 成 测 试 计 划 B) 软 件 详 细 设 计 说 明 书 C) 用 户 手 册 D) 软 件 需 求 规 格 说 明 书 (5) 结 构 化 程 序 所 要 求 的 基 本 结 构 不 包 括 ( ) A) 顺 序 结 构 B)GOTO 跳 转 C) 选 择 ( 分 支 ) 结 构 D) 重 复 ( 循 环 ) 结 构 (6) 下 面 描 述 中 错 误 的 是 ( ) A) 系 统 总 体 结 构 图 支 持 软 件 系 统 的 详 细 设 计 B) 软 件 设 计 是 将 软 件 需 求 转 换 为 软 件 表 示 的 过 程 C) 数 据 结 构 与 数 据 库 设 计 是 软 件 设 计 的 任 务 之 一 D)PAD 图 是 软 件 详 细 设 计 的 表 示 工 具 (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 A B C a 1 2 c 3 1 b 2 1 c 3 1 则 由 关 系 R 和 S 得 到 关 系 T 的 操 作 是 A) 自 然 连 接 B) 交 C) 除 D) 并 (10) 定 义 无 符 号 整 数 类 为 UInt, 下 面 可 以 作 为 类 UInt 实 例 化 值 的 是 ( ) A)-369 B)369 C)0.369 D) 整 数 集 合 1,2,3,4,5 (11) 计 算 机 高 级 语 言 程 序 的 运 行 方 法 有 编 译 执 行 和 解 释 执 行 两 种, 以 下 叙 述 中 正 确 的 是 ( ) 2011 年 3 月 笔 试 真 卷 及 答 案 详 解 第 1 页 ( 共 12 页 )
A)C 语 言 程 序 仅 可 以 编 译 执 行 B)C 语 言 程 序 仅 可 以 解 释 执 行 C)C 语 言 程 序 既 可 以 编 译 执 行 又 可 以 解 释 执 行 D) 以 上 说 法 都 不 对 (12) 以 下 叙 述 中 错 误 的 是 ( ) A)C 语 言 的 可 执 行 程 序 是 由 一 系 列 机 器 指 令 构 成 的 B) 用 C 语 言 编 写 的 源 程 序 不 能 直 接 在 计 算 机 上 运 行 C) 通 过 编 译 得 到 的 二 进 制 目 标 程 序 需 要 连 接 才 可 以 运 行 D) 在 没 有 安 装 C 语 言 集 成 开 发 环 境 的 机 器 上 不 能 运 行 C 源 程 序 生 成 的.exe 文 件 (13) 以 下 选 项 中 不 能 用 作 C 程 序 合 法 常 量 的 是 ( ) A)1,234 B)'\123' C)123 D)"\x7G" (14) 以 下 选 项 中 可 用 作 C 程 序 合 法 实 数 的 是 ( ) A).1e0 B)3.0e0.2 C)E9 D)9.12E (15) 若 有 定 义 语 句 :int a=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) 有 以 下 程 序 段 char name[20]; int num; scanf("name=%s,num=%d",name,&num); 当 执 行 上 述 程 序 段, 并 从 链 盘 输 入 :name=lili num=1001< 回 车 > 后,name 的 值 为 ( ) A)Lili B)name=Lili C)Lili num= D)name=Lili num=1001 (17)if 语 句 的 基 本 形 式 是 :if( 表 达 式 ) 语 句, 以 下 关 于 表 达 式 值 的 叙 述 中 正 确 的 是 ( ) A) 必 须 是 逻 辑 值 B) 必 须 是 整 数 值 C) 必 须 是 正 数 D) 可 以 是 任 意 合 法 的 数 值 (18) 有 以 下 程 序 int x=011; printf("%d\n",++x); A)12 B)11 C)10 D)9 (19) 有 以 下 程 序 : int s; scanf("%d",&s); while(s>0) switch(s) case 1:printf("%d",s+5); case 2:printf("%d",s+4);break; case 3:printf("%d",s+3); default:printf("%d",s+1);break; scanf("%d",&s); 运 行 时, 若 输 入 1 2 3 4 5 0< 回 车 >, 则 输 出 结 果 是 ( ) A)6566456 B)66656 C)66666 D)6666656 (20) 有 以 下 程 序 段 : int i,n; 2011 年 3 月 笔 试 真 卷 及 答 案 详 解 第 2 页 ( 共 12 页 )
for(i=0;i<8;i++) n=rand()%5; switch(n) case 1: case 3:printf("%d\n",n);break; case 2: case 4:printf("%d\n",n);continue; case 0:exit(0); printf("%d\n",n); 以 下 关 于 程 序 段 执 行 情 况 的 叙 述, 正 确 的 是 ( ) A)for 循 环 语 句 固 定 执 行 8 次 B) 当 产 生 的 随 机 数 n 为 4 时 结 束 循 环 操 作 C) 当 产 生 的 随 机 数 n 为 1 和 2 时 不 做 任 何 操 作 D) 当 产 生 的 随 机 数 n 为 0 时 结 束 程 序 运 行 (21) 有 以 下 程 序 char s[]="012xy\08s34f4w2"; int i,n=0; for(i=0;s[i]!=0;i++) if(s[i]>='0'&&s[i]<='9') n++; printf("%d\n",n); A)0 B)3 C)7 D)8 (22) 若 i 和 k 都 是 int 类 型 变 量, 有 以 下 for 语 句 for(i=0,k=-1;k=1;k++) printf("*****\n"); 下 面 关 于 语 句 执 行 情 况 的 叙 述 中 正 确 的 是 A) 循 环 体 执 行 两 次 B) 循 环 体 执 行 一 次 C) 循 环 体 一 次 也 不 执 行 D) 构 成 无 限 循 环 (23) 有 以 下 程 序 : char b,c;int i; b='a';c='a'; for(i=0;i<6;i++) if(i%2)putchar(i+b); else putchar(i+c); printf("\n"); 程 序 运 行 后 的 输 出 结 果 是 ( ) A)ABCDEF B)AbCdEf C)aBcDeF D)abcdef (24) 设 有 定 义 :double x[10],*p=x; 以 下 能 给 数 组 x 下 标 为 6 的 元 素 读 入 数 据 的 正 确 语 句 是 ( ) A)scanf(''%f'',&x[6]); B)scanf(''%1f'',*(x+6));` C)scanf(''%1f'',p+6); D)scanf(''%1f'',p[6]); (25) 有 以 下 程 序 ( 说 明 : 字 母 A 的 ASCII 码 值 是 65) void fun(char *s) while(*s) if(*s%2) printf("%c",*s); 2011 年 3 月 笔 试 真 卷 及 答 案 详 解 第 3 页 ( 共 12 页 )
s++; char a[]="byte"; fun(a);printf("\n"); A)BY B)BT C)YT D)YE (26) 有 以 下 程 序 : main() while(getchar()!='\n'); 以 下 叙 述 中 正 确 的 是 A) 此 while 语 句 将 无 限 循 环 B)getchar() 不 可 以 出 现 在 while 语 句 的 条 件 表 达 式 中 C) 当 执 行 此 while 语 句 时, 只 有 按 回 车 键 程 序 才 能 继 续 执 行 D) 当 执 行 此 while 语 句 时, 按 任 意 键 程 序 就 能 继 续 执 行 (27) 有 以 下 程 序 : int x=1,y=0; if(!x)y++; else if(x==0) if(x)y+=2; else y+=3; printf("%d\n",y); A)3 B)2 C)1 D)0 (28) 若 有 定 义 语 句 :char s[3][10],(*k)[3],*p;, 则 以 下 赋 值 语 句 正 确 的 是 ( ) A)p=s; B)p=k; C)p=s[0]; D)k=s; (29) 有 以 下 程 序 : void fun(char *c) while(*c) if(*c>='a'&&*c<='z')*c=*c-('a'-'a'); c++; char s[81]; gets(s);fun(s);puts(s); 当 执 行 程 序 时 从 键 盘 上 输 入 Hello Beijing< 回 车 >, 则 程 序 的 输 出 结 果 是 ( ) A)hello beijing B)Hello Beijing C)HELLO BEIJING D)HELLO Beijing (30) 以 下 函 数 的 功 能 是 : 通 过 键 盘 输 入 数 据, 为 数 组 中 的 所 有 元 素 赋 值 #define N 10 2011 年 3 月 笔 试 真 卷 及 答 案 详 解 第 4 页 ( 共 12 页 )
void fun(int x[n]) int i=0; While(i<N) scanf("%d", ); 在 程 序 中 下 划 线 处 应 填 入 的 是 A)x+i B)&x[i+1] C)x+(i++) D)&x[++i] (31) 有 以 下 程 序 : char a[30],b[30]; scanf("%s",a); gets(b); printf("%s\n%s\n",a,b); 程 序 运 行 时 若 输 入 : how are you? I am fine< 回 车 > 则 输 出 结 果 是 A)how are you? B)how I am fine are you? I am fine C)how are you? I am fine D)how are you? (32) 设 有 如 下 函 数 定 义 int fun(int k) if(k<1) return 0; else if(k==1) return 1; else return fun(k-1)+1; 若 执 行 调 用 语 句 :n=fun(3);, 则 函 数 fun 总 共 被 调 用 的 次 数 是 ( ) A)2 B)3 C)4 D)5 (33) 有 以 下 程 序 int fun(int x,int y) if(x!=y)return ((x+y)/2); else return (x); int a=4,b=5,c=6; printf("%d\n",fun(2*a,fun(b,c))); A)3 B)6 C)8 D)12 (34) 有 以 下 程 序 int fun() static int x=1; x*=2; return x; int i,s=1; for(i=1;i<=3;i++) s*=fun(); printf("%d\n",s); 2011 年 3 月 笔 试 真 卷 及 答 案 详 解 第 5 页 ( 共 12 页 )
A)0 B)10 C)30 D)64 (35) 有 以 下 程 序 #define S(x) 4*(x)*x+1 int k=5,j=2; printf("%d\n",s(k+j)); A)197 B)143 C)33 D)28 (36) 设 有 定 义 :struct char mark[12]; int num1; double num2; t1,t2; 若 变 量 均 已 正 确 赋 初 值, 则 以 下 语 句 中 错 误 的 是 ( ) A)t1=t2; B)t2.num1=t1.num1; C)t2.mark=t1.mark; D)t2.num2=t1.num2; (37) 有 以 下 程 序 struct ord int x,y; dt[2]=1,2,3,4; struct ord *p=dt; printf("%d,",++(p->x));printf("%d,",++(p->y)); A)1,2 B)4,1 C)3,4 D)2,3 (38) 有 以 下 程 序 : struct S int a,b;data[2]=10,100,20,200; struct S p=data[1]; printf("%d\n",++(p.a)); 程 序 运 行 后 的 输 出 结 果 是 A)10 B)11 C)20 D)21 (39) 有 以 下 程 序 unsigned char a=8,c; c=a>>3; printf("%d\n",c); 程 序 运 行 后 的 输 出 结 果 是 A)32 B)16 C)1 D)0 (40) 设 fp 已 定 义, 执 行 语 句 fp=fopen( file, w ); 后, 以 下 针 对 文 本 文 件 file 操 作 叙 述 的 选 项 中 正 确 的 是 A) 写 操 作 结 束 后 可 以 从 头 开 始 读 B) 只 能 写 不 能 读 C) 可 以 在 原 有 内 容 后 追 加 写 D) 可 以 随 意 读 和 写 二 填 空 题 ( 每 空 2 分, 共 30 分 ) 请 将 每 空 的 正 确 答 案 写 在 答 题 卡 1 至 15 序 号 的 横 线 上, 答 在 试 卷 上 不 得 分 (1) 有 序 线 性 表 能 进 行 二 分 查 找 的 前 提 是 该 线 性 表 必 须 是 1 存 储 的 (2) 一 颗 二 叉 树 的 中 序 遍 历 结 果 为 DBEAFC, 前 序 遍 历 结 果 为 ABDECF, 则 后 序 遍 历 结 果 为 2 2011 年 3 月 笔 试 真 卷 及 答 案 详 解 第 6 页 ( 共 12 页 )
(3) 对 软 件 设 计 的 最 小 单 位 ( 模 块 或 程 序 单 元 ) 进 行 的 测 试 通 常 称 为 3 测 试 (4) 实 体 完 整 性 约 束 要 求 关 系 数 据 库 中 元 组 的 4 属 性 值 不 能 为 空 (5) 在 关 系 A(S,SN,D) 和 关 系 B(D,CN,NM) 中,A 的 主 关 键 字 是 S,B 的 主 关 键 字 是 D, 则 称 5 是 关 系 A 的 外 码 (6) 以 下 程 序 运 行 后 的 输 出 结 果 是 6 int a; a=(int)((double)(3/2)+0.5+(int)1.99*2); printf("%d\n",a); (7) 有 以 下 程 序 int x; scanf("%d",&x); if(x>15) printf("%d",x-5); if(x>10) printf("%d",x); if(x>5) printf("%d",x+5); 若 程 序 运 行 时 从 键 盘 输 入 12< 回 车 >, 则 输 出 结 果 为 7 (8) 有 以 下 程 序 ( 说 明 : 字 符 0 的 ASCII 码 值 为 48) char c1,c2; scanf("%d",&c1); c2=c1+9; printf("%c%c\n",c1,c2); 若 程 序 运 行 时 从 键 盘 输 入 48< 回 车 >, 则 输 出 结 果 为 8 (9) 有 以 下 函 数 void prt(char ch,int n) int i; for(i=1;i<=n;i++) printf(i%6!=0?"%c":"%c\n",ch); 执 行 调 用 语 句 prt('*',24); 后, 函 数 共 输 出 了 9 行 * 号 (10) 以 下 程 序 运 行 后 的 输 出 结 果 是 10 int x=10,y=20,t=0; if(x==y)t=x;x=y;y=t; printf("%d %d\n",x,y); (11) 已 知 a 所 指 的 数 组 中 有 N 个 元 素 函 数 fun 的 功 能 是, 将 下 标 k(k>0) 开 始 的 后 续 元 素 全 部 向 前 移 动 一 个 位 置 请 填 空 void fun(int a[n], int k) int i; for(i=k;i<n;i++) a[ 11 ]=a[i]; 2011 年 3 月 笔 试 真 卷 及 答 案 详 解 第 7 页 ( 共 12 页 )
(12) 有 以 下 程 序, 请 在 12 处 填 写 正 确 语 句, 使 程 序 可 正 常 编 译 运 行 #include <stdio,h> 12 ; main() double x,y,(*p)(); scanf("%1f%1f",&x,&y); p=avg; printf("%f\n",(*p)(x,y)); double avg(double a,double b) return((a+b)/2); (13) 以 下 程 序 运 行 后 的 输 出 结 果 是 13 int i,n[5]=0; for(i=1;i<=4;i++) n[i]=n[i-1]*2+1;printf("%d",n[i]); printf("\n"); (14) 以 下 程 序 运 行 后 的 输 出 结 果 是 14. #include <stdlib.h> #include <string.h> char *p; int i; p=(char *)malloc(sizeof(char)*20); strcpy(p,"welcome"); for(i=6;i>=0;i--) putchar(*(p+i)); printf("\n");free(p); (15) 以 下 程 序 运 行 后 的 输 出 结 果 是 15. FILE *fp; int x[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); 2011 年 3 月 笔 试 真 卷 及 答 案 详 解 第 8 页 ( 共 12 页 )
2011 年 3 月 全 国 计 算 机 等 级 考 试 二 级 笔 试 试 卷 C 语 言 程 序 设 计 参 考 答 案 一 选 择 题 (1)A) (2)B) (3)D) (4)D) (5)B) (6)A) (7)C) (8)D) (9)C) (10)B) (11)A) (12)D) (13)A) (14)A) (15)A) (16)A) (17)D) (18)C) (19)A) (20)D) (21)B) (22)D) (23)B) (24)C) (25)D) (26)C) (27)D) (28)C) (29)C) (30)C) (31)B) (32)B) (33)B) (34)D) (35)B) (36)C) (37)D) (38)D) (39)C) (40)B) 二 填 空 题 (1) 1 顺 序 (2) 2 DEBFCA (3) 3 单 元 (4) 4 主 键 (5) 5 D (6) 6 3 (7) 7 1217 (8) 8 09 (9) 9 4 (10) 10 20 0 (11) 11 i-1 (12) 12 double avg(double a, double b) (13) 13 13715 (14) 14 emoclew (15) 15 123456 2011 年 3 月 笔 试 真 卷 及 答 案 详 解 第 9 页 ( 共 12 页 )