2011年9月17日全国计算机等级考试C语言笔试题
一、 选择题(⑴-(10)、(21)-(40)每题2分,(11)-(20)每题1分,共70分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题
卡相应位置上,答在试卷上不得分。
  (1)下列叙述中正确的是___________。
A)算法就是程序                  B)设计算法时只需考虑数据结构的设计
C) 设计算法时只需考虑结果的可靠性  D)以上三种说法都不对
(1)D  【解析】“软件的主体是程序,程序的核心是算法”,算法是解决问题的方法与步骤,
采用某种程序设计语言对问题的对象和解题的步骤进行描述的是程序。它与数据结构、运算
结果的状态无关。
  (2)下列关于线性链表的叙述中,正确的是___________。
A)各个数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致
B)各个数据结点的存储顺序与逻辑顺序或以不一致,但它们的存储空间必须连续
C)进行插入与删除时,不需要移动表中的元素
D)以上三种说法都不对
(2)C  【解析】线性数据结构有线性表、栈和队列等 ,而线性链表是数据的存储结构,它
全面地反映数据元素自身的信息和数据元素之间的关系,即每个元素存储有链接到下一个元
素的信息,所以插入与删除时毋须移动表中元素。
  (3)下列关于二叉树的叙述中,正确的是___________。
A)叶子结点总是比度为2的结点少一个  B) 叶子结点总是比度为2的结点多一个
C)叶子结点数是度为2的结点数的两倍  D)度为2的结点是度为1的结点数的两倍
(3)B  【解析】二叉树的结构定义:
叶子结点是指终端结点;非叶子结点是指分支结点;
二叉树的深度是指高度;若是完全二叉树,可由性质4公式计算而得;
结点的度:二叉树结点的度数指该结点所含子树的个数;度为2 就是有2个孩子结点的结
点;
二叉树的四大性质:
【性质1】:在二叉树的第i层上至多有2i-1 个结点。
【性质2】:深度为 k 的二叉树上至多含 2k-1 个结点。
【性质3】:对任何一棵二叉树T,若它含有n0 个叶子结点(0度节点)、度为 2 的结点数
为n2,则必有:n0=n2+1。
【性质4】:具有n个结点的完全二叉树的深度为 ?log2(n)? +1 。例:一棵完全二叉树共有
64个结点 ,深度为[log2(64)]+1=7
答案根据:叶子结点是指终端结点,当然比度为2的结点多一个
(4)软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件
的是___________。
A)学生成绩管理系统    B)C语言编译程序
 C)UNIX操作系统      D)数据库管理系统
(4)A  【解析】系统软件包括操作系统(UNIX)、程序编译程序、数据库
管理系统等三大大
部份,所以学生成绩管理系统是应用软件。
(5)某系统总体结构图如下所示:
该系统总体结构图的深度是___________。
 A)7      B)6  C)3    D)2
(5)C  【解析】这里的深度是指软件系统总体结构层次。
  (6)程序测试的任务是___________。
 A)设计测试用例            B)验证程序的正确性
 C)发现程序中的错误        D)诊断和改正程序中的错误
(6)D  【解析】程序测试包括模块测试、系统测试和验收测试三大部份。模块测试是分别测
试系统中每一模块功能是否满足设计要求;系统测试是确定子系统模块在联调时,能否协调
地完成预定的功能;验收测试是为系统投入前实际使用的证明。题目所问的主要是指模块测
试。
  (7)下列关于数据库设计的叙述中,正确的是___________。
 A)在需求分析阶段建立数据字典     B)在概念设计阶段建立数据字典
C)在逻辑设计阶段建立数据字典     D)在物理设计阶段建立数据字典
(7)正确答案为A;网上错误答案为C  【解析】根据“数据库系统概论”一书称,数据字
典在“数据分析”阶段中由收集到的数据着手编制数据字典。另据南大出版社“大学计算机
信息技术教程”(第三版)称,数据库设计分“系统规划”、“系统分析”、“系统设计(由概
念设计、逻辑设计和物理设计组成)”和“系统实施”组成。
编制数据流图(DFD)和数据字典(DD)是属于系统分析的任务。
  (8)数据库系统的三级模式不包括___________。
A)概念模式    B)内模式    C)外模式    D)数据模式
(8)D  【解析】数据库系统的三级模式结构是指数据库系统是由模式、外模式和内模式三级
构成的。其中模式也称逻辑模式或概念模式,是数据库中全体数据的逻辑结构和特征的描述,
是所有用户的公共数据视图。外模式也称用户模式,它是数据库用户能够看见和使用的局部
数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑
表示。内模式也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的
描述,是数据在数据库内部的表示方式,所以正确答案为D。
(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)并
(9)B  【解析】关系运算中传统运算有并、差、交和笛卡尔积;专门关系运算有选择、投
影连接和除法运算。根据题意R关系减去S得T
关系为差运算,选B。
并              差              交            选择                  投影
  (10)下列选项中属于面向对象设计方法主要特征的是___________。
A)继承    B)自顶向下    C)模块化    D)逐步求精
(10)A  【解析】开发信息系统有结构化生命周期法(自顶向下、逐层分解、逐步求精分析
系统和分模块实施)、原型法、面向对象开发设计方法(突出的是需求分析、可维护性和可
靠性有突破,主要特征是继承性)和CASE法(Computer Aided Software Engineering)。
  (11)以上叙述中错误的是___________。
A)C语言编写的函数源程序,其文件名后缀可以是C
B) C语言编写的函数都可以作为一个独立的源程序文件
C) C语言编写的每个函数都可以进行独立的编译并执行
D)一个C语言程序只能有一个主函数
(11)C  【解析】C语言编写的某些函数是依附于主调函数而存在的,它不能独立编译并执
行的。
  (12)以下选项中关于程序模块化的叙述错误的是___________。
A)把程序分成若干相对独立的模块,便于编码和调试
B) 把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块
C)可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序
D)可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序
(12)C  【解析】根据开发软件的生命周期法原则,是采用可采用自顶向下、逐步细化的设
计方法把若干独立模块组装成所要求的程序,来完成程序模块化设计的。
  (13)以下选项中关于C语言常量的叙述错误的是___________。
A所谓常量,是指在程序运行过程中,其值不能被改变的量
B)'常量分为整型常量、实型常量、字符常量和字符串常量
C)常量可分为数值型常量和非数值型常量
D)经常被使用的变量可以定义成常量
(13)D  【解析】常量是指在程序中不变的量,既然程序中已定义为变量,则不可能再定义
为常量。
  (14)若有定义语句:int a=10; double b=3.14;,则表达式'A'+a+b值的类型是___________。
A).char      B)int      C) double        D)float
(14)C  【解析】根据表达式运算规则,所有数据在混合运算中,一律向上一级换算原则。
本题最高级是双精度,所以最后表达式类型应是double。(清华大学出版社“C程序设计”
P54)
  (15)若有定义语句:int x=12,y=8,z;,在其后执行语句z=0.9+x/y;,则z的值为___________。
A)1.9    B)1    C)2      D)2.4
(15)B  【解析】如第(14) 解析所述,C语言对于表达式运算0.9+x/y后的值是1.9,但给整
型量z值,则去掉小数为1。
  (16)若有定义:int a,b;,通过语句scanf("%d;%d",&a,&b);,能把整数3赋给a,5赋给b
的输入数据是___________。
A)3 5    B)3,5    C)3;5      D)35
(16)C  【解析】根据清华大学出版社“C程序设计”P84“使用scanf函数时应注意的问题
(2)规定:如果在格式控制字符串中除了格式说明以外还有其他字符,则在输入数据时在对
应位置应输入与这些字符相同的字符”,所以选C。
  (17)i若有定义语句:int k1=10,k2=20;,执行表达式(k1=k1>k2)&&(k2=k2>k1)后,k1和
k2的值分别为___________。
A)0和1      B)0和20      C)10和1    D)10和20
(17)B  【解析】根据清华大学出版社“C程序设计”P94关于逻辑表达式运算规定(1),
a&&b&&c,只要a为0,则不必判别b和c;若a为1才判别b;若b为0,则不必判别c。
现题目逻辑表达式左边(k1=k1>k2)为0,右边不再判别,所以答案是a为0;b仍为原值20。
(18)有以下程序
  #include <stdio.h>
  main()
  {  int a=1,b=0;
if(- -a) b++;
else if(a==0) b+=2;
else b+=3;
    printf("%d\n",b);
  }
  程序运行后的输出结果是
A)0    B)1    C)2    D)3
(18)C  【解析】此题非常简单,变量a运算前自减1,变为0,所以只执行了b+=2语句就
输出为2。
  (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);
(19) D  【解析】当a为0时A)逻辑判断值为0,输出y;B) 逻辑判断值为1,输出y;C) 逻
辑判断值为0,输出y;D) 逻辑判断值a==0为1,输出x
  (20)有以下程序段
#include <stdio.h>
main()
{  int a=7;
二叉树公式while(a- -);
printf("%d\n",a);
}
    程序运行后的输出结果是___________。
A)-1    B)0    C)1    D)7
(20) A  【解析】while(a--);是一句无执行句的循环语句,且变量a是变为 0后跳出循环,并
且又自减1 为-1。
  (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);
(21) B  【解析】输出字符取决于输出语句的格式说明符,显然B)输出是数值65。
(22)有以下程序(注:字符a的ASCII码值为97)
  #include <stdio.h>
main()
{  char  *s={"abc"};
do
{ printf("%d",*s%10); ++s; } while(*s);
}
  程序运行后的输出结果是___________。
A)abc      B)789    C)7890      D)979899
(22) B  【解析】本题是考查考生能否区别“指针变量”与“指针变量的值”。前者是地址;
后者是指针变量所指地址内的量。此题指针变量s指向“字符串数组”的起始地址,*s是s
指向的字
符,例如,刚开始时*s值为字符“a”,即数值97,++s后指针移向“b”,即数值
98,当s移向字符c后面一个字符为”\0”,则其值为0,退出循环结束。
  (23)若有定义语句:double a, *p=&a;  以下叙述错误的是___________。
    A)定义语句:*号是一个简址运算符
B)定义语句:*号是一个说明符
C)定义语句中的p只能存放double类型变量的地址
D) 定义语句中,*p=&a把变量a的地址作为初始值赋给指针变量p
(23) A  【解析】*号是一种、表示单目运算的指针运算符,简称“简接访问运算符”
(24)有以下程序
#include <stdio.h>
double f(double x);
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)503    B)401  C)500      D)1404
(24) A  【解析】主函数循环为1.0+101.0+401.0=503.0,即a显示为503
  (25)若有定义语句:int year=2009, *p=&year;,以下不能使变量year中的值增至2010的
语句是_______。
A)*p+=1;  B)(*p)++;    C)++(*p);    D) *p++;
(25) D  【解析】此题测试考生对运算符优先级判别和表达式运算法则中结合方向的判断:
根据运算符优先级规定,*是2级,+=j是14级;++是2级。
A) *p+=1; 等效于year=year+1    B)(*p)++等效于year++  (“C语言程序设计”P224)
C)++(*p) 等效于year++    D) *p++; 由于两个运算符处于同一级别,且结合方向自右而
左,等效于*(p++),这样p不指向year了,year维持不变,p指向year 下一个地址的值,
上机调试下一个地址的值为1245120。详见“C语言程序设计”P224。
  (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};
(26) C  【解析】首先是测试数组下标的定义正确性,应该都是正确的;其次测试对数组赋
值的正确性:
A)赋值后一维数组下标自动取6;
B) 赋值后二维数组下标取为3行3列{{1,2,0},{3,4,0},{5,6,0}};
C) 二维数组是二行四列,但赋了三行四列的值,调试时出现如下:error C2078: too many
initializers
D) 赋值后二维数组下标取为2行4列:{{1,2,3,4},{5,6,0,0}}是正确的。
(27)有以下程序
#include <stdio.h>
void fun(int *p)
{  printf("%d\n",p[5]);  }
main()
{  int a[10]={1,2,3,4,5,6,7,8,9,10};
  fun(&a[3]);
}
  程序运行后的输出结果是_______。
A)5    B)6    C)8    D) 9
(27) D  【解析】本题考核考核学生掌握指针变量与数组之间关系,主函数将a[3]地址传给
函数fun,此时函数fun中的*p接收的是以首地址值为4的数组p[7],故p[5]数组元素值应
是9。
(28)有以下程序
#include <stdio.h>
#define  N  4
void fun(int a[][N], int b[])

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。