2009 年 3 月 全 国 计 算 机 等 级 考 试 二 级 C 语 言 程 序 设 计 试 题 及 答 案 ( 考 试 时 间 90 分 钟, 满 分 100 分 )((1) (10) 每 小 题 2 分,(11) (50) 每 题 1 分, 共 60 分 ) 一 下 列 各 题 A B C D 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的, 请 将 正 确 选 项 涂 写 在 答 题 卡 相 应 位 置 上, 答 在 试 卷 上 不 得 分 (1) 下 列 叙 述 中 正 确 的 是 A. 栈 是 先 进 先 出 的 线 性 表 B. 队 列 是 先 进 先 出 的 线 性 表 C. 循 环 队 列 是 非 线 性 结 构 D. 有 序 性 表 既 可 以 采 用 顺 序 存 储 结 构, 也 可 以 采 用 链 式 存 储 结 构 (2) 支 持 子 程 序 调 用 的 数 据 结 构 是 A. 栈 B. 树 C. 队 列 D. 二 叉 树 (3) 某 二 叉 树 有 5 个 度 为 2 的 结 点, 则 该 二 叉 树 中 的 叶 子 结 点 数 是 A.10 B.8 C.6 D.4 (4) 下 列 排 序 方 法 中, 最 坏 情 况 下 比 较 次 数 最 少 的 是 A. 冒 泡 排 序 B. 简 单 选 择 排 序 C. 直 接 插 入 排 序 D. 堆 排 序 (5) 软 件 按 功 能 可 以 分 为 : 应 用 软 件 系 统 软 件 和 支 撑 软 件 ( 或 工 具 软 件 ) 下 面 属 于 应 用 软 件 的 是 A. 编 译 软 件 B. 操 作 系 统 C. 教 务 管 理 系 统 D. 汇 编 程 序
(6) 下 面 叙 述 中 错 误 的 是 A. 软 件 测 试 的 目 的 是 发 现 错 误 并 改 正 错 误 B. 对 被 调 试 的 程 序 进 行 错 误 定 位 是 程 序 调 试 的 必 要 步 骤 C. 程 序 调 试 通 常 也 称 为 Debug D. 软 件 测 试 应 严 格 执 行 测 试 计 划, 排 除 测 试 的 随 意 性 (7) 耦 合 性 和 内 聚 性 是 对 模 块 独 立 性 度 量 的 两 个 标 准 下 列 叙 述 中 正 确 的 是 A. 提 高 耦 合 性 降 低 内 聚 性 有 利 于 提 高 模 块 的 独 立 性 B. 降 低 耦 合 性 提 高 内 聚 性 有 利 于 提 高 模 块 的 独 立 性 C. 耦 合 性 是 指 一 个 模 块 内 部 各 个 元 素 间 彼 此 结 合 的 紧 密 程 度 D. 内 聚 性 是 指 模 块 间 互 相 连 接 的 紧 密 程 度 (8) 数 据 库 应 用 系 统 中 的 核 心 问 题 是 A. 数 据 库 设 计 B. 数 据 库 系 统 设 计 C. 数 据 库 维 护 D. 数 据 库 管 理 员 培 训 (9) 有 两 个 关 系 R,S 如 下 : R A B C a 3 2 b 0 1 c 2 1 S A B a 3 b 0 c 2 由 关 系 R 通 过 运 算 得 到 关 系 S, 则 所 使 用 的 运 算 为 A. 选 择 B. 投 影 C. 插 入 D. 连 接
(10) 将 E-R 图 转 换 为 关 系 模 式 时, 实 体 和 联 系 都 可 以 表 示 为 A. 属 性 B. 键 C. 关 系 D. 域 (11) 以 下 选 项 中 合 法 的 标 识 符 是 A.1-1 B.1 1 C.-11 D.1-- (12) 若 函 数 中 有 定 义 语 句 :int k;, 则 A. 系 统 将 自 动 给 k 赋 初 值 0 B. 这 时 k 中 值 无 定 义 C. 系 统 将 自 动 给 k 赋 初 值 -1 D. 这 时 k 中 无 任 何 值 (13) 以 下 选 项 中, 能 用 作 数 据 常 量 的 是 A.0115 B.0118 C.1.5e1.5 D.115L (14) 设 有 定 义 :int x=2;, 以 下 表 达 式 中, 值 不 为 6 的 是 A.x*=x+1 B.x++,2*x C.x*=(1+x) D.2*x,x+=2 (15) 程 序 段 :int x=12; double y=3.141593; printf( %d%8.6f,x,y); 的 输 出 结 果 是 A.123.141593 B.123.141593 C.12,3.141593 D.123.141593 (16) 若 有 定 义 语 句 :double x,y,*px,*py, 执 行 了 px=&x, py=&y; 之 后, 正 确 的 输 入 语 句 是 A.scanf( %f%f,x,y);
B.scanf( %f%f,&x,&y); C.scanf( %lf%le,px,py); D.scanf( %lf%lf,x,y); (17) 以 下 是 if 语 句 的 基 本 形 式 : if( 表 达 式 ) 语 句 其 中 表 达 式 A. 必 须 是 逻 辑 表 达 式 B. 必 须 是 关 系 表 达 式 C. 必 须 是 逻 辑 表 达 式 或 关 系 表 达 式 D. 可 以 是 任 意 合 法 的 表 达 式 (18) 有 以 下 程 序 {int x; scanf( %d,&x); if(x<=3); else if(x!=10) printf( %d\n,x); 程 序 运 行 时, 输 入 的 值 在 哪 个 范 围 才 会 有 输 出 结 果 A. 不 等 于 10 的 整 数 B. 大 于 3 且 不 等 于 10 的 整 数 C. 大 于 3 或 等 于 10 的 整 数 D. 小 于 3 的 整 数 (19) 有 以 下 程 序 Main() { int a=1,b=2,c=3,d=0; if(a= =1 &&b++= =2) if(b!=2 c--!=3) printf( %d,%d,%d\n,a,b,c.; else printf( %d,%d,%d\n,a,b,c.;
else printf( %d,%d,%d\n,a,b,c.; 程 序 运 行 后 的 输 出 结 果 是 A.1,2,3 B.1,3,2 C.1,3,3 D.3,2,1 (20) 以 下 程 序 中 的 变 量 已 正 确 定 义 for(i=0;i<4;i++,i++ for(k=1;k<3;k++);printf(* ); 程 序 段 的 输 出 结 果 是 A.******** B.**** C.** D.* (21) 有 以 下 程 序 {char *s=( ABC.; do {printf( %d,*s%10);s++; while(*s); 注 意, 字 母 A 的 ASCII 码 值 为 65 程 序 运 行 后 的 输 出 结 果 是 A.5670 B.656667 C.567 D.ABC (22) 设 变 量 已 正 确 定 义, 以 下 不 能 统 计 出 一 行 中 输 入 字 符 个 数 ( 不 包 含 回 车 符 ) 的 程 序 段 是 A.n=0;while(( ch=getchar())!= \n )n++; B.n=0;while(getchar()!= \n )n++; C.for(n=0; getchar()!= \n ;n++);
D.n=0;for(ch=getchar();ch!= \n ;n++); (23) 有 以 下 程 序 { int a1,a2;char c1,c2; scanf( %d%c%d%c,&a1,&c1,&a2,&c2); printf( %d,%c,%d,%c,&1,c1,a2,c2); 若 想 通 过 键 盘 输 入, 使 得 a1 的 值 为 12,a2 的 是 为 34,c1 的 值 为 字 符 a,c2 的 值 为 字 符 b, 程 序 输 出 结 果 是 :12,a,34,b, 则 正 确 的 输 入 格 式 是 ( 以 下 代 表 空 格, 代 表 回 车 ) A.12a34b B.12a34b C.12,a,34,b D.12a34b (24) 有 以 下 程 序 int f(int x,int y) {return()y-x)*x); {int a=3,b=4,c=5,d; d=f(f(a,b.,f(a,c.) ; printf( %d\n,d.; 程 序 运 行 后 的 输 出 结 果 是 A.10 B.9 C.8 D.7 (25) 有 以 下 程 序 void fun(char *s) {while(*s)
{ if(*s%2==0) printf( %c,*s); s++; { char a[]={ good ; fun(a.;printf( \n ); 注 意 : 字 母 a 的 ASCⅡ 码 值 为 97, 程 序 运 行 后 的 输 出 结 果 是 A.d B.go C.god D.good (26) 有 以 下 程 序 void fun( int *a,int *B. {int *c; c=a;a=b;b=c; {int x=3,y-5,*p=&x,*q=&y; fun(p,q);printf( %d,%d,,*p,*q); fun(&x,&y);printf( %d,%d\n,*p,*q); 程 序 运 行 后 的 输 出 结 果 是 A.3,5,5,3 B.3,5,3,5 C.5,3,3,5 D.5,3,5,3 (27) 有 以 下 程 序 viod f(int *p,int *q);
{ int m=1,n=2,*r=&m; f(r,&n);printf( %d,%d,m,n); void f(int *p,int *q) {p=p+1;*q=*q+1; 程 序 运 行 后 输 出 的 结 果 是 A.1,3 B.2,3 C.1,4 D.1,2 (28) 以 下 函 数 按 每 行 8 个 输 出 数 组 中 的 数 据 void fun( int *w,int n) { int i; for(i=0;i<n;i++) { printf( %d,w); printf( \n ); 下 划 线 处 应 填 入 的 语 句 是 A.if(i/8==0)print( \n ); B.if(i/8==0)continue; C.if(i%8==0)print( \n ); D.if(i%8==0)continue; (29) 若 有 以 下 定 义 int x[10],*pt=x; 则 对 x 数 组 元 素 的 正 确 应 用 是 A.*&x[10] B.*(x+3) C.*(pt+10) D.pt+3 (30) 设 有 定 义 :char s[81];int i=10;, 以 下 不 能 将 一 行 ( 不 超 过 80 个 字 符 ) 带 有 空 格 的 字 符 串 真 确 读 入 的 语 句 或 语 句 组 是
A gets(s) B.while(( s[i++]=getchar())!= \n ;s= \0 ; C.scanf( %s,s); D.do{scanf( %c,&s);while(s[i++]!= \n );s= \0 ;</n;i++) (31) 有 以 下 程 序 { char *a[ ]={ abcd, ef, gh, ijk ;int I; for(i=0;i<4;i++) printf( %c,*a.; 程 序 运 行 后 输 出 的 结 果 是 A.aegi B.dfhk C.abcd D.abcdefghijk (32) 以 下 选 项 中 正 确 的 语 句 组 是 A.char s[];s= BOOK! ; B.char *s;s={ BOOK! ; C.char s[10];s= BOOK! ; D.char *s;s= BOOK! ; (33) 有 以 下 程 序 int fun{int x,int y { if(x==y) return(x); else returen(( x+y)/2) { 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) 设 函 数 中 有 整 型 变 量 n, 为 保 证 其 在 未 赋 值 的 情 况 下 初 值 为 0, 应 选 择 的 存 储 类 别 是 A.auto B.register C.static D.auto 或 register (35) 有 以 下 程 序 int b=2; int fun(int *k) { b=*k+b;return(b.; { int a[10]={1,2,3,4,5,6,7,8,i; for(i=2;i<4;i++) {b=fun(&a.+b;printf( %d,b.; printf( \n ); 程 序 运 行 后 输 出 的 结 果 是 A.1012 B.810 C.1028 D.1016 (36) 有 以 下 程 序 #define PT 3.5; #define S(x) PT*x*x; mian() { int a=1, b=2; printf( %4.1f\n,S(a+B.) ; 程 序 运 行 后 输 出 的 结 果 是 A.14.0 B.31.5 C.7.5 D. 程 序 有 错 无 输 出 结 果
(37) 有 以 下 程 序 struct ord { int x,y; dt[2]={1,2,3,4; { struct ord *p=dt; printf( %d,,++p->x); printf( %d\n,++p->y); 程 序 的 运 行 结 果 是 A.1,2 B.2,3 C.3,4 D.4,1 (38) 设 有 宏 定 义 : IsDIV(k,n) (( k%n==1)?1:0 且 变 量 m 已 正 确 定 义 并 赋 值, 则 宏 调 用 :IsDIV(m,5)&& IsDIV(m,7) 为 真 时 所 要 表 达 的 是 A. 判 断 m 是 否 能 被 5 或 者 7 整 除 B. 判 断 m 是 否 能 被 5 和 7 整 除 C. 判 断 m 被 5 或 者 7 整 除 是 否 余 1 D. 判 断 m 被 5 和 7 整 除 是 否 余 1 (39) 有 以 下 程 序 { int a=5,b=1,t; t=(a<<2 B.; printf( %d\n,t) 程 序 运 行 后 的 输 出 结 果 是 A.21 B.11 C.6 D.1 (40) 有 以 下 程 序
{ EILE *f; f=fopen( filea.txt, w ); fprintf(f, abc ); fclose(f); 若 文 本 文 件 filea.txt 中 原 有 内 容 为 :hello, 则 运 行 以 上 程 序 后, 文 件 filea.txt 中 的 内 容 为 A.helloabc B.abclo C.abc D.abchello 二 填 空 题 ( 每 空 2 分, 共 30 分 ) 请 将 每 一 个 空 的 正 确 答 案 写 在 答 题 卡 1 至 15 序 号 的 横 线 上, 答 在 试 卷 上 不 得 分 (1) 假 设 一 个 长 度 为 50 的 数 组 ( 数 组 元 素 的 下 标 从 0 到 49) 作 为 栈 的 存 储 空 间, 栈 底 指 针 bottom 指 向 栈 底 元 素, 栈 顶 指 针 top 指 向 栈 顶 元 素, 如 果 bottom=49,top=30( 数 组 下 标 ), 则 栈 中 具 有 1 个 元 素 (2) 软 件 测 试 可 分 为 白 盒 测 试 和 黑 盒 测 试 基 本 路 径 测 试 属 于 2 测 试 (3) 符 合 结 构 化 原 则 的 三 种 基 本 控 制 结 构 是 : 选 择 结 构 循 环 结 构 和 3 (4) 数 据 库 系 统 的 核 心 是 4 (5) 在 E-R 图 中, 图 形 包 括 矩 形 框 菱 形 框 椭 圆 框 其 中 表 示 实 体 联 系 的 是 5 框 (6) 表 达 式 (int)((double)( 5/2)+2.5) 的 值 是 6 (7) 若 变 量 x y 已 定 义 为 int 类 型 且 x 的 值 为 99,y 的 值 为 9, 请 将 输 出 语 句 printf ( 7, x/y); 补 充 完 整, 使 其 输 出 的 计 算 结 果 形 式 为 :x/y=11 (8) 有 以 下 程 序 main( ) { char c1,c2; scanf( &c,&c1); while(c1<65 c1>90) scanf( &c,&c1); c2=c1+32; printf( &c, &c\n,c1,c2);
程 序 运 行 输 入 65 回 车 后, 能 否 输 出 结 果 结 束 运 行 ( 请 回 答 能 或 不 能 ) 8 (9) 以 下 程 序 运 行 后 的 输 出 结 果 是 9 main( ) {int k=1,s=0; do{ if{(( k&2)! =0)continue; s+=k;k++; while(k)10); printf( s=&d/n,s); (10) 下 列 程 序 运 行 时, 若 输 入 labced12df< 回 车 > 输 出 结 果 为 10 main( ) {char a =0,ch; while((ch=getchar())!= \n ) {if(a&2!=0&&(ch> a &&ch<= z )) ch=ch- a + A ; a++;putchar(ch); printf( \n ); (11) 有 以 下 程 序, 程 序 执 行 后, 输 出 结 果 是 11 void fun (int *a) {a[0=a[1];] {int a[10]={10,9,8,7,6,5,4,3,2,1,i; for(i=2;i>=0;i--) fun{&a; for(i=0;i<10;i++) printf( &d,a); printf( \n ); (12) 请 将 以 下 程 序 中 的 函 数 声 明 语 句 补 充 完 整
int 12 ; main( ) {int x,y,(*p)(); p=max; printf( &d\n,&x,&y); Int max(int a,int b) {return (a>b/a:b); (13) 以 下 程 序 用 来 判 断 指 定 文 件 是 否 能 正 常 打 开, 请 填 空 main( ) {FILE *fp; if (((fp=fopen( test.txt, r ))== 13 )) printf( 未 能 打 开 文 件!\n ); else printf( 文 件 打 开 成 功!\n ); (14) 下 列 程 序 的 运 行 结 果 为 14 struct A {int a;char b[10];double c;; void f (struct A *t); {struct A a=(1001, ZhangDa,1098,0); f(&a);printf( &d,&s,&6,if\n,a.a,a.b,a.c); void f(struct A
*t) {strcpy(t->b, ChangRong ); (15) 以 下 程 序 把 三 个 NODETYPE 型 的 变 量 链 接 成 一 个 简 单 的 链 表, 并 在 while 循 环 中 输 出 链 表 结 点 数 据 域 中 的 数 据, 请 填 空 struct node {int data; struct node *next;; typedef struct node NODETYPE; {NODETYPE a,b,c,*h,*p; a. data=10;b.data=20;c.data=30;h=&a; b. next=&b;b.next=&c;c.next= \0 ; p=h; while(p){printf( &d,p->data); 15 ; 真 题 园 (http://www.zhentiyuan.com) 参 考 答 案 选 择 题 : 1~10: DACDCABABC 11~20:CBDDACDBCB 21~30:CDABABACBC 31~40:ADBCCCBDAC 填 空 题 : (1)19(2) 白 盒 (3) 顺 序 结 构 (4) 数 据 库 管 理 系 统 (DBMS)( 5) 菱 形 (6)4(7)"x/y=%d"(8) 能 (9)s=0(10)1AbCeDf2dF (11)7777654321(12)max(int a,int b)(13)null (14)1001,ChangRong,1098.0(15)p=p >next