2011 年 9 月 全 国 计 算 机 等 级 考 试 二 级 笔 试 试 卷 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) 叶 子 结 点 总 是 比 度 为 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) 程 序 调 试 的 任 务 是 ( ) A) 设 计 测 试 用 例 B) 验 证 程 序 的 正 确 性 C) 发 现 程 序 中 的 错 误 D) 诊 断 和 改 正 程 序 中 的 错 误 (7) 下 列 关 于 数 据 库 设 计 的 叙 述 中, 正 确 的 是 ( ) A) 在 需 求 分 析 阶 段 建 立 数 据 字 典 B) 在 概 念 设 计 阶 段 建 立 数 据 字 典 C) 在 逻 辑 设 计 阶 段 建 立 数 据 字 典 D) 在 物 理 设 计 阶 段 建 立 数 据 字 典 (8) 数 据 库 系 统 的 三 级 模 式 不 包 括 ( ) A) 概 念 模 式 B) 内 模 式 C) 外 模 式 D) 数 据 模 式 2011 年 9 月 笔 试 真 卷 及 答 案 详 解 第 1 页 ( 共 12 页 )
(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) 所 谓 常 量, 是 指 在 程 序 运 行 过 程 中, 其 值 不 能 被 改 变 的 量 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)l.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) 若 有 定 义 语 句 :int kl=10,k2=20;, 执 行 表 达 式 (kl=kl>k2)&& (k2=k2>k1) 后,kl 和 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); 2011 年 9 月 笔 试 真 卷 及 答 案 详 解 第 2 页 ( 共 12 页 )
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) 有 以 下 程 序 { int a=7; while(a--); printf("%d\n",a); A)-1 B)0 C)l 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); { 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; 2011 年 9 月 笔 试 真 卷 及 答 案 详 解 第 3 页 ( 共 12 页 )
A)503 B)401 C)500 D)1404 (25) 若 有 定 义 语 句 :int year=2009,*p=&year;, 以 下 不 能 使 变 量 year 中 的 值 增 至 2010 的 语 句 是 ( ) A)*p+=l; 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]; void { 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,-1,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(sl,s2)==0) puts(sl); B)if(strcmp(s1,s2)!=0) puts(s2); C)if(strcmp(s1,s2)==1) puts(sl,); D)if(strcmp(sl,s2)!=0) puts(s1); (31) 以 下 程 序 的 主 函 数 中 调 用 了 在 其 前 面 定 义 的 fun 函 数 2011 年 9 月 笔 试 真 卷 及 答 案 详 解 第 4 页 ( 共 12 页 )
{ double a[15], k; k=fun(a); 则 以 下 选 项 中 错 误 的 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++)); 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) 有 以 下 程 序 2011 年 9 月 笔 试 真 卷 及 答 案 详 解 第 5 页 ( 共 12 页 )
#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; 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={"qiam",'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,",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\n",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); 2011 年 9 月 笔 试 真 卷 及 答 案 详 解 第 6 页 ( 共 12 页 )
A)2 B)4 C)6 D)8 (39) 以 下 选 项 中 叙 述 错 误 的 是 ( ) A)C 程 序 函 数 中 定 义 的 赋 有 初 值 的 静 态 变 量, 每 调 用 一 次 函 数, 赋 一 次 初 值 B) 在 C 程 序 的 同 一 函 数 中, 各 复 合 语 句 内 可 以 定 义 变 量, 其 作 用 域 仅 限 本 复 合 语 句 内 C)C 程 序 函 数 中 定 义 的 自 动 变 量, 系 统 不 自 动 赋 确 定 的 初 值 D)C 程 序 函 数 的 形 参 不 可 以 说 明 为 static 型 变 量 (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\n",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)l,2 B)3,4 C)5,6 D)123,456 二 填 空 题 ( 每 空 2 分, 共 30 分 ) 请 将 每 空 的 正 确 答 案 写 在 答 题 卡 1 至 15 序 号 的 横 线 上, 答 在 试 卷 上 不 得 分 (1) 数 据 结 构 分 为 线 性 结 构 与 非 线 性 结 构, 带 链 的 栈 属 于 1 (2) 在 长 度 为 n 的 顺 序 存 储 的 线 性 表 中 插 入 一 个 元 素, 最 坏 情 况 下 需 要 移 动 表 中 2 个 元 素 (3) 常 见 的 软 件 开 发 方 法 有 结 构 化 方 法 和 面 向 对 象 方 法 对 某 应 用 系 统 经 过 需 求 分 析 建 立 数 据 流 图 (DFD), 则 应 采 用 3 方 法 (4) 数 据 库 系 统 的 核 心 是 4 (5) 在 进 行 关 系 数 据 库 的 逻 辑 设 计 时,E-R 图 中 的 属 性 常 被 转 换 为 关 系 中 的 属 性, 联 系 通 常 被 转 换 为 5 (6) 若 程 序 中 已 给 整 型 变 量 a 和 b 赋 值 l0 和 20, 请 写 出 按 以 下 格 式 输 出 a b 值 的 语 句 6 ****a=10,b=20**** (7) 以 下 程 序 运 行 后 的 输 出 结 果 是 7 { int a=37; a%=9; printf("%d\n",a); (8) 以 下 程 序 运 行 后 的 输 出 结 果 是 8 2011 年 9 月 笔 试 真 卷 及 答 案 详 解 第 7 页 ( 共 12 页 )
{ 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 { 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("%d",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]); (14) 以 下 程 序 调 用 fun 函 数 把 x 中 的 值 插 入 到 a 数 组 下 标 为 k 的 数 组 元 素 中 主 函 数 中,n 存 放 2011 年 9 月 笔 试 真 卷 及 答 案 详 解 第 8 页 ( 共 12 页 )
a 数 组 中 数 据 的 个 数 请 填 空 void fun(int s[],int *n,int k,int x) { int i; for(i=*n-1;i>=k;i--) s[ 14 s[k]=x; *n=*n+ 15 ; ]=s[i]; { 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"); 2011 年 9 月 笔 试 真 卷 及 答 案 详 解 第 9 页 ( 共 12 页 )