2007 年 9 月全国计算机二级 C 语言考试真题及答案
本卷共分为 3 大题 66 小题,作答时间为 120 分钟,总分 100 分,60 分及格。
选择题一:(1)-(10)每题 2 分
1 软件是指()。
A.程序
B.程序和文档
C.算法加数据结构
D.程序,数据和相关文档的完整集合
2 软件调试的目的是( )。
A.发现错误
B. 改正错误
C. 改善软件性能
D. 验证软件正确性
3 在面向对象方法中,实现信息隐蔽是靠( )。
A.对象的继承
B. 对象的多态
C. 对象的封装
D. 对象的分类
4 下列叙述中,不符合良好程序设计风格的是( )。
A.程序的效率第一,清晰第二
B.程序的可读性好
C.程序中要有必要的注释
D.输入数据前要有提示信息
5 下列叙述中正确的是( )。
1
A.程序执行效率与数据的存储结构密切相关
B. 程序执行效率只取决于程序的控制结构
C. 程序的执行效率只取决于所处理的数据量
D. 以上三种说法都不对
6 下列叙述中正确的是( )。
A.数据的逻辑结构与存储结构必定是一一对应的
B.由于计算机存储空间是向量式存储结构,因此,数据的存储结构一定是线性结构
C.程序设计语言中的数组一般是顺序存储结构,因此,利用数组只能处理线性结构
D.以上三种说法都不对
7 冒泡排序在最坏的情况下比较次数是( )。
A.n(n+1)/2
B.nlog2n
C.n(n-1)/2
D.n/2
8 一颗二叉树中共有 70 个叶子结点与 80 个度为 1 的结点,则该二叉树中的总结点数为( )。
A.219
B.221
C.229
D.231
9 下列叙述中正确的是( )。
A.数据库系统是一个独立的系统,不需要操作系统的支持
B. 数据库技术的根本目标是要解决数据的共享问题
C. 数据库管理系统就是数据库系统
D. 以上三种说法都不对
10 下列叙述中正确的是( )。
2
A.为了建立一个关系,首先要构造数据的逻辑关系
B.表示关系的二维表中各元组的每一个分量还可以分成若干数据项
C.一个关系的属性名表称为关系模式
D.一个关系可以包括多个二维表
选择题二:(11)-(50)每题 1 分
11 C 语言源程序名的后缀是( )。
A..exe
B. .C
C. .obj
D. .cp
12 可在 C 程序中用作用户标志符的一组是( )。
A. and
B. Date
C. Hi
D. case
_2007 y-m-d Dr.Tom Big1
13 以下选项中,合法的一组 C 语言数值常量是( )。
A.028
B.12.
C..177
D.0x8A
.5e-3
0Xa23
4e1.5
10,000
-0xf 4.5e0
0abc
3.e5
14 以下叙述中正确的是( )。
A.C 语言程序将从源程序中第一个函数开始执行
3
B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C.C 语言规定必须用 main 作为主函数名,程序从此开始执行,在此结束。
D.main 可作为用户标志符,所以命名任意一个函数作为主函数
15 若在定义语句:int a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的
语句是( )。
A.scanf(“%d”,a,b,
B.scanf(“%d%d%d”,a,b,
C.scanf(“%d”,p);
D.scanf(“%d”,&p);
16 以下关于 long,int 和 short 类型数据占用内存大小的叙述中正确的是( )。
A.均占 4 个字节
B.根据数据的大小来决定所占内存的字节数
C.由用户自己定义
D.由 C 语言编译系统决定
17 若变量均已正确定义并赋值,以下合法的 C 语言赋值语句是( )。
A.x=y==5;
B.x=n%2.5
C.x+n=I;
D.x=5=4+1;
18 有以下程序段 int j; float y; char name[50]; scanf(“-%f%s”,&j,&y,name); 当
执行上述程序段是,从键盘输入 55566 7777abc 后,y 的值为( )。
A.55566.0
B.566.0
C.7777.0
D.566777.0
4
19 若变量已正确定义,有以下程序段 i=0; do printf(“%d,”,i); while(i++); printf
(“%d”,i); 其输出结果为( )。
A.0,0
B.0,1
C.1,1
D.程序进入无险循环
x 的平方根 x>=0
20 有以下计算公式 y= -x 的平方根 x<0 若程序前面已在命令中包含 math.h 文件,不能正
确计算上述公式的是( )。
A.if(x>=0) y=sqrt(x);
B.y=sqrt(x);
else y=sqrt(-x);
if(x<0) y=sqrt(-x);
C.if(x>=0) y=sqrt(x);
D.y=sqrt(x>=0?x:-x);
if(x<0) y=sqrt(-x);
21 设有条件表达式:(EXP)?i++:j--,则以下表达式中与(EXP)完全等价的是( )。
A.(EXP==0)
B.(EXP!=0)
C.(EXP==1)
D.(EXP!=1)
22 有以下程序 #include main() { int y=9; for( ; y>0; y--) if(y%3==0) printf
(“%d”,--y); } 程序运行结果是( )。
A.741
B.963
C.852
D.875421
5
23 已有定义,char c; ,程序前面已在命令行中包含 ctype.h 文件,不能用于判断 c 中的
字符是否为大写字母的表达式是( )。
A.isupper(
B.’A’<=c<=’Z’
C.’A’<=c&&c<=’Z’
D.c<=(‘z’-32)&&(‘a’-32)<=c
24 有以下程序 #include main() { int i,j,m=55; for(i=1;i<=3;i++) for
(j=3;j<=i;j++) m=m%j; printf(“%d”,m); } 程序的运行结果是( )。
A.0
B.1
C.2
D.3
25 若函数调用时的实参为变量,以下关于函数形参和实参的叙述正确的是( )。
A.函数的实参和其对应的形参共占同一个存储单元
B.形参只是形式上的存在,不占存储单元
C.同名的实参和形参占同一存储单元
D.函数的形参和实参分别占不同的存储单元
26 已知字符’A’的 ASCII 码值是 65,字符变量 c1 的值是’A’,c2 的值是’D’。执行语
句 printf(“%d,%d”,c1,c2-2);后输出结果是( )。
A.A,B
B.A,68
C.65,66
D.65,68
27 以下叙述中错误的是( )。
A.改变函数形参的值,不会改变对应的实参的值
B.函数可以返回地址值
6
C.可以给指针变量赋一个整数作为地址值
D.当在程序的开头包含头文件 stdih 时,可以给指针变量赋 NULL
28 以下正确的字符串常量是( )。
A.”\\\”
B.’abc’
C.Olympic
Games
D.””
29 设有定义:char p[]={‘1’,’2’,’3’},*q=p;以下不能计算出一个 char 型数据所占
字节数的表达式是( )。
A.sizeof(p)
B.sizeof(char)
C.sizeof(*q)
D.sizeof(p[0])
30 有以下函数 int aaa(char *s) { char *t=s; while(*t++); t--; return(t-s); }
以下关于 aaa 函数的功能的叙述正确的是( )。
A.求字符串 s 的长度
B.比较两个串的大小
C.将串 s 复制到串 t
D.求字符串 s 所占字节数
31 若有定义语句:int a[3][6];按在内存中的存放顺序,a 数组的第 10 个元素是( )。
A.a[0][4]
B.a[1][3]
C.a[0][3]
D.a[1][4]
32 有以下程序 #include void fun(char **p) { ++p; printf(“%s\n”,*p); }
7
main() { char *a[]={“Morning”,”Afternoon”,”Evening”,”Night”}; fun( A.; }
程序的运行结果是( )。
A.Afternoon
B.fternoon
C.Morning
D.Orning
33 若有定义语句,int a[2][3],*p[3];则以下语句中正确的是( )。
A.p=a;
B.p[0]=a;
C.p[0]=&a[1][2];
D.p[1]=&a;
34 有以下程序 #include void fun(int *a,int n)/*fun 函数功能是将 a 所指
的数组元素从大到小排序*/ { int t,i,j; for(i=0;i int fun(char s[]) { int n=0; while(*s<=’9’
&&*s>=’0’) { n=10*n+*s-‘0’;s++; } return(n); } main() { char s[10]={‘6’,’
1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’}; printf(“%d\n”,fun(s)); } 程
序的运行结果是( )。
A.9
B.61490
C.61
8