2008 年 4 月 全 国 计 算 机 等 级 考 试 二 级 C 语 言 真 题 ( 含 答 案 ) 一 选 择 题 ( 共 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 图 转 换 成 关 系 数 据 模 型 的 过 程 属 于 [C] A) 需 求 分 析 阶 段 B) 概 念 设 计 阶 段 C) 逻 辑 设 计 阶 段 D) 物 理 设 计 阶 段 1
(9) 有 三 个 关 系 R S 和 T 如 下 : T B C D a 0 k1 R S B C D a 0 k1 b 1 n1 B C D f 3 h2 a 0 k1 n 2 x1 有 关 系 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) 以 下 选 项 中 不 属 于 字 符 常 量 的 是 A)'C' B)"C" C)'\xCC0' D)'\072' (14) 设 变 量 已 正 确 定 义 并 赋 值, 以 下 正 确 的 表 达 式 是 2
A)x=y*5=x+z C)x=y+z+5,++y B)int(15.8%5) D)x=25%5.0 (15) 以 下 定 义 语 句 中 正 确 的 是 A)int a=b=0 ; C)float a=1,*b=&a,*c=&b ; B)char A=65+1,b='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 的 ASCll 十 进 制 代 码 为 97, 则 执 行 上 述 程 序 段 后 输 出 结 果 是 A) 因 变 量 类 型 与 格 式 描 述 符 的 类 型 不 匹 配 输 出 无 定 值 B) 输 出 项 与 格 式 描 述 符 个 数 不 符, 输 出 为 零 值 或 不 定 值 C)a,97,12k=12 D)a,97,k=12 (17) 已 知 字 母 A 的 ASCⅡ 代 码 值 为 65, 若 变 量 kk 为 char 型, 以 下 不 能 正 确 判 断 出 kk 中 的 值 为 大 写 字 母 的 表 达 式 是 A) kk>='a'&&kk<='z' B)!(kk>='A' kk<='z') C)(kk+32)>='a'&&(kk+32)<='z' D)isalpha(kk)&&(kk<91) (18) 当 变 量 c 的 值 不 为 2 4 6 时, 值 也 为 真 的 表 达 式 是 A)(c==2) (c==4) (c==6) C)(c>=2&&c<=6)&&!(c%2) B)(c>=2&&c<=6) (c!=3) (c!=5) D)(c>=2&&c<=6)&&(c%2!=1) (19) 若 变 量 已 正 确 定 义, 有 以 下 程 序 段 int a=3,b=5,c=7; if(a> B ) 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) 有 以 下 程 序 3
{ 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 C)a=1,b=1 B)a=2,b=2 D)a=2,b=1 (21) 有 以 下 程 序 { int x=8; for( ; x>0; x--) { if(x%3) {printf( %d,,x--); continue;} printf( %d,,--x); }} A)7,4,2 C)9,7,6,4 B)8,7,5,2 D)8,5,4,2 (22) 以 下 不 构 成 无 限 循 环 的 语 句 或 者 语 句 组 是 A)n=0; do{++n;}while(n<=0); B)n=0;while(1){n++;} C)n=10; while(n); D)for(n=0,i=1; ;i++) n+=i;{n--;} 4
(23) 有 以 下 程 序 { 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]= Bejing,*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]); C)gets(s); B)scanf( %s,s+1); D)scanf( %s,s[1]); (28) 以 下 叙 述 中 错 误 的 是 A) 在 程 序 中 凡 是 以 # 开 始 的 语 句 行 都 是 预 处 理 命 令 行 B) 预 处 理 命 令 行 的 最 后 不 能 以 分 号 表 示 结 束 5
C)#define MAX 是 合 法 的 宏 定 义 命 令 行 D)C 程 序 对 预 处 理 命 令 行 的 处 理 是 在 程 序 执 行 的 过 程 中 进 行 的 (29) 以 下 结 构 体 类 型 说 明 和 变 量 定 义 中 正 确 的 是 A)typedef struct {int n; char c;}rec; REC t1,t2; B)struct REC; {int n; char c;};rec t1,t2; C)typedef struct REC ; {int n=0; char c= A ;}t1,t2; D)struct {int n;char c;}rec t1,t2; (30) 以 下 叙 述 中 错 误 的 是 A)gets 函 数 用 于 从 终 端 读 入 字 符 串 B)getchar 函 数 用 于 从 磁 盘 文 件 读 入 字 符 C)fputs 函 数 用 于 把 字 符 串 输 出 到 文 件 D)fwrite 函 数 用 于 以 二 进 制 形 式 输 出 数 据 到 文 件 (31) 有 以 下 程 序 { int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i; for(i=0;i<12;i++) c[s[i]]++; for(i=1;i<5;i++) printf( %d,c[i]); printf( \n );} A)1 2 3 4 B)2 3 4 4 C)4 3 3 2 D )1 1 2 3 (32) 有 以 下 程 序 void fun(int *s,int nl,int n2) { int i,j,t; i=nl; j=n2; while(i<j) {t=s[i];s[i]=s[j];s[j]=t;i++;j--;}} { int a[10]={1,2,3,4,5,6,7,8,9,0},k; 6
fun(a,0,3); fun(a,4,9); fun(a,0,9); for(k=0;k<10;k++)printf( %d,a[k]); printf( \n ); } 程 序 运 行 的 结 果 是 A)0987654321 B)4321098765 C)5678901234 D)0987651234 (33) 有 以 下 程 序 #include <string.h> void fun(char *s[ ],int n) { char *t; int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strlen(s[i])>strlen(s[j])) {t=s[i];s[i]=s[j];s[j]=t;}} {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) 有 以 下 程 序 int f(int x) {int y; if(x==0 x==1) return (3); y=x*x-f(x-2); return y; } {int z; z=f(3); printf( %d\n,z);} 7
A)0 B)9 C)6 D)8 (35) 有 以 下 程 序 void fun(char *a,char * B) {while(*a== * ) a++; while(*b=*a) {b++;a++;} } {char *s= ****a*b****,t[80]; fun(s,t); puts(t); } A)*****a*b B) a*b C) a*b**** D) ab (36) 有 以 程 序 #include <string.h> 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<2;i++) a.score[i]=b.score[i]; } { STU c={ Qian, p,95.0,92.0}; f( C); printf( %s,%c,%2.0f,%2.0f\n,c.name,c.sex,c.score[0],c.score[1]); } A)Qian,f,95,92 B) Qian,m,85,90 C) Zhao,f,95,92 D) Zhao,m,85,90 (37) 有 以 下 程 序 8
{FILE *fp; int a[10]={1,2,3},i,n; fp=fopen( dl.dat, w ); for(i=0;i<3;i++) fprintf(fp, %d,a[i]); fprintf(fp, \n ); fclose(fp); fp=fopen( dl.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 B)a b C)a&b D)a<<4 (39) 在 C 语 言 中, 只 有 在 使 用 时 才 占 用 内 存 单 元 的 变 量, 其 存 储 类 型 是 A)auto 和 register B)extern 和 register C) auto 和 static D) static 和 register (40) 设 有 定 义 语 句 int(*f)(int);, 则 以 下 叙 述 正 确 的 是 A)f 是 基 类 型 为 int 的 指 针 变 量 B)f 是 指 向 函 数 的 指 针 变 量, 该 函 数 具 有 一 个 int 类 型 的 形 参 C)f 是 指 向 int 类 型 一 维 数 组 的 指 针 变 量 D)f 是 函 数 名, 该 函 数 的 返 回 值 是 基 类 型 为 int 类 型 的 地 址 二. 填 空 题 请 将 每 一 个 空 的 正 确 答 案 些 在 答 题 卡 1 至 15 序 号 的 横 线 上, 答 在 试 卷 上 不 得 分 (1) 测 试 用 例 包 括 输 入 值 集 和 1 值 集 (2) 深 度 为 5 的 满 二 叉 树 有 2 个 叶 子 结 点 9
(3) 设 某 循 环 队 列 的 容 量 为 50, 头 指 针 front=5( 指 向 队 头 元 素 的 前 一 位 置 ), 尾 指 针 rear=29( 指 向 队 尾 元 素 ), 则 该 循 环 队 列 中 共 有 3 个 元 素 (4) 在 关 系 数 据 库 中, 用 来 表 示 实 体 之 间 联 系 的 是 4 (5) 在 数 据 库 管 理 系 统 提 供 的 数 据 定 义 语 言 数 据 操 纵 语 言 和 数 据 控 制 语 言 中, 5 负 责 数 据 的 模 式 定 义 与 数 据 的 物 理 存 取 构 建 (6) 已 有 定 义 :char c= ;int a=1,b;( 此 处 c 的 初 值 为 空 格 字 符 ), 执 行 b=!c&&a; 后 b 的 值 为 6 (7) 设 变 量 已 正 确 定 义 为 整 型, 则 表 达 式 n=i=2,++i,i++ 的 值 为 7 (8) 若 有 定 义 :int k;, 以 下 程 序 段 的 输 出 结 果 是 8 for(k=2;k<6;k++,k++) printf( ##%d,k); (9) 以 下 程 序 段 的 定 义 语 句 中,x[1] 的 初 值 是 9, 程 序 运 行 后 输 出 的 内 容 是 10 #include<stdio.h> { 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<4;i++) { p[i]=&x[2*i+1]; printf( %d,p[i][0]); } printf( \n ); } (10) 以 下 程 序 的 输 出 结 果 是 11 #include<stdio.h> void swap(int *a,int * B) { int *t; t=a; a=b; b=t;} { int i=3,j=5,*p=&i,*q=&j; swap(p,q); printf( %d %d\n,*p,*q); } (11) 以 下 程 序 的 输 出 结 果 是 12 #include<stdio.h> 10
{ int a[5]={2,4,6,8,10}, *p; p=a; p++; printf( %d,*p); } (12) 以 下 程 序 的 输 出 结 果 是 13 #include<stdio.h> void fun(int x) { if(x/2>0) fun(x/2); printf( %d,x);} {fun(3); printf( \n );} (13) 以 下 程 序 中 函 数 fun 的 功 能 是 : 统 计 person 所 指 结 构 体 数 组 中 所 有 性 别 (sex) 为 M 的 记 录 的 个 数, 存 入 变 量 n 中, 并 做 为 函 数 值 返 回 请 填 空 : #include<stdio.h> #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<n;i++) if( 14 == M ) n++; return n; } {SS W[N]={{1, AA, F },{2, BB, M },{3, CC, M }}; int n; n=fun(w); printf( n=%d\n,n); } (14) 以 下 程 序 从 名 为 filea.dat 的 文 本 文 件 中 逐 个 读 入 字 符 并 显 示 在 屏 幕 上 请 填 空 : #include<stdio.h> 11
{FILE *fp; char ch; fp=fopen( 15 ); ch=fgetc(fp); whlie(!feof(fp)) { putchar(ch); ch=fgetc(fp);} putchar( \n ); fclose(fp); } 参 考 答 案 : 一 选 择 题 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 2 4 6 8 11 3 5 12 4 13 1 3 12