2011年 9月全国计算机等级考试二级笔试试卷
C语言程序设计
(考试时间90 分钟,满分100分)
一、选择题(每小题2分,共70分)
1.下列叙述中正确的是 D 。
A.算法就是程序 B.设计算法时只需要考虑数据结构的设计 C.设计算法时只需要考虑结果的可靠性 D.以上三种说法都不对
2.下列关于线性链表的叙述中,正确的是 C A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致
B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续 C.进行插入与删除时,不需要移动表中的元素 D.以上三种说法都不对
3.下列关于二叉树的叙述中,正确的是 B A.叶子结点总是比度为2的结点少一个 B.叶子结点总是比度为2的结点多一个
C.叶子结点数是度为2的结点数的两倍 D.度为2的结点数是度为1的结点数的两倍
4.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的
是 A
A.学生成绩管理系统 B.C语言编译程序 C.UNIX操作系统 D.数据库管理系统
5.某系统总体结构图如下图所示:
XY系统 功能1 功能2 功能3 功能2.1 功能2.2 功能2.3
该系统总体结构图的深度是 C A.7 B.6 C.3
D.2
6.程序调试的任务是 D A.设计测试用例 C.发现程序中的错误
B.验证程序的正确性
D.诊断和改正程序中的错误
7.下列关于数据库设计的叙述中,正确的是 C A.在需求分析阶段建立数据字典 B.在概念设计阶段建立数据字典
1
C.在逻辑设计阶段建立数据字典 D.在物理设计阶段建立数据字典
8.数据库系统的三级模式不包括 D A.概念模式 B.内模式 C.外模式
9.有三个关系R、S和T如下:
R A B C a 1 2 b 2 1 c 3 1
S A B C a 1 2 b 2 1 D.数据模式
T A B C c 3 1 则由关系R和S得到关系T的操作是 B A.自然连接 B.差 C.交
D.并
10.下列选项中属于面向对象设计方法主要特征的是 A A.继承 B.自顶向下 C.模块化 D.逐步求精
11.以下叙述中错误的是 C A.C语言编写的函数源程序,其文件名后缀可以是C B.C语言编写的函数都可以作为一个独立的源程序文件 C.C语言编写的每个函数都可以进行独立的编译并执行 D.一个C语言程序只能有一个主函数
12.以下选项中关于程序模块化得叙述错误的是 C A.把程序分成若干相对独立的模块可便于编码和调试
B.把程序分成若干相对独立,功能单一的模块,可便于重复使用这些模块 C.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序 D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序
13.以下选项中关于C语言常量的叙述错误的是: D A.所谓常量,是指在程序运行过程中,其值不能被改变的量
B.常量分为整型常量、实型常量、字符常量和字符串常量 C.常量可分为数值型常量和非数值型常量
D.经常被使用的变量可定义成常量
14.若有定义语句:int a=10;double b=3.14;,则表达式‘A’+a+b值得类型是 C A.char B.int C.double D.float
15.如有定义语句:int x=12,y=8,z;,在其后执行语句z=0.9+x/y,则z的值为 B A.1.9 B.1 C.2 D.2.4
2
16.若有定义:int a,b;,通过语句scanf(?%d;%d?,&a,&b);,能把整数3赋给变量a,5付给变量
b的输入数据是 C A.3 5 B.3,5 C.3;5 D.35
17.若有定义语句:int k1=10,k2=20;,执行表达式(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的
值分别为 B
A. 0和1 B.0和20 C.10和1 D. 10和20 18.有以下程序
#include
Main()
{ int a=1,b=0; If(--a) b++;
Else if(a==0) b+=2; Elseb+=3;
Printf(?%d\\n?,b); }
程序运行后的输出结果是 C A.0 B.1 C.2 D.3
19.下列条件语句中输出结果与其他语句不同的是 D 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.有以下程序:
#include
{ int a=7; While(a--);
Printf(?%d\\n?,a); }
程序运行后的输出结果是 A A.- 1 B.0 C.1 D.7
21.以下不能输出字符A的语句是 B (注:字符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);
3
22.有以下程序(注:字符a的ASCII码值为97)
#include
{ char *s={?abc?}; Do
{printf(?%d?,*s);++s;} While(*s); }
程序运行后的输出结果是 B A.abc B.789
C.7890
D.979898
23.若有定义语句:double a,*p&a;以下叙述中错误的是 A A.定义语句中的*号是一个地址运算符
B.定义语句中的*号只是一个说明符
C.定义语句中的p只能存放double类型变量的地址 D.定义语句中,*p=&a把变量a的地址作为初值赋给指针变量p
24.有以下程序:
#include
Main()
{ 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;}
程序运行后的输出结果是 A
A.503 B.401 C.500 D.1404
25.若定义语句:int year=2009,*p=&year;,以下不能使变量year中的值增至2010的语句是 D A.*p+=1; B.(*p)++; C.++(*p); D.*p++;
26.以下定义数组的语句中错误的是 C 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.有以下程序
#include
Void fun(int *p)
4
{printf(?%d\\n?,p[5]);} Main()
{int a[10]={1,2,3,4,5,6,7,8,9,10}; Fun(&a[3]); }
程序运行后的输出结果是 D A.5 B.6 C.8 D.9
28. 有以下程序
#include
Void fun(int a[][N],int b[]) { int i;
For(i=0;i Main() { 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 29.有以下函数 Int fun(char *x,char *y) ( int n=0; While((*x=*y)&&*x!=’\\0’){x++;y++;n++;} Return n; } 函数的功能是 B A.查找x和y所指字符串中是否有‘\\0‘ B.统计x和y所指字符串中最前面连续相同的字符个数 C.将y所指字符串赋给x所值存储空间 D.统计x和y所指字符串中相同的字符个数 程序运行后的输出结果是 B A.-12,-3,0,0, B.-3,-1,1,3, C.,0,1,2,3, D.-3,-3,-3,-3, 30.若有定义语句:char *s1=?OK?;*s2=?ok?;,以下选项中,能够输出?OK?的语句是 D A.if(stremp(s1,s2)==0) puts(s1); B.if(stremp(s1,s2)!=0) puts(s2); C.if(stremp(s1,s2)==1) puts(s1); D.if(stremp(s1,s2)!=0) puts(s1); 5