一、选择题
1以下函数实现按每行8个输出W所指数组中的数据:

在横线处应填人的语句是( )。
A.if(i/8==0)printf(”\n”);
B.if(i/8==O)continue;
C.if(i%8==0)prinff(’’\n”)
;D.if(i%8==0)continue;
参考答案:C
%参考解析:要按照每行8个输出数据的话,横线处语句的功能应该为:当i是8的倍数时(即i%8==0),输出一个换行符。因此C选项正确。
2有以下程序:

在VC 6.0平台上编译运行,程序运行后的输出结果是( )。
A.10,6B.4,4C.2,4D.4。8
参考答案:D
参考解析:C语言中利用sizeof()函数判断数据类型长度,在VC 6.0平台中,整型int占有4个字节,doable型数据占有8个字节。
3有以下函数:

以下关于aaa函数功能叙述正确的是( )。
A.将串s复制到串t
B.比较两个串的大小
C.求字符串s的长度
D.求字符串s所占字节数
参考答案:C
参考解析:本题重点考察的知识点while循环语句的应用。一()函数中,首先定义了一个字符指针t指向形参s,然后通过一个while循环让指针t不断递增,直到t指向字符串结束标识处。当t指向结束标识处时,由于后缀++运算符的原因,它还会被再递增1,所以接下来的t一一;语句让它回到结束标识处。最后返回t—s,s还是指向字符串第l个字符处,而t指向了字符串结尾,故返回值为字符串的长度值。因此C选项正确。
4在以下给出的表达式中,与while(E)中的(E)不等价的表达式是( )。

参考答案:B
参考解析:while语句中条件表达式E的值不为0即为真,认为满足条件,所以与B选项中表达式的含义正好相反,选择B选项。
5有以下程序:

程序运行后的输出结果是( )。
A.7B.10C.8D.9
参考答案:D
参考解析:调用f(a,b)函数返回3,调用f(a,c)函数返回6,所以外层调用f(f(a,b),f(a,c));即调用f(3,6)函数返回9。
6有以下程序:

程序运行后的输出结果是( )。
A.1,1,2,0B.0,0,0,3C.编译有错D.0,1,2,0
参考答案:C
参考解析:本题中ff(a=1)b=1;与else d=3;之间多了语句c=2;所以会出现else语句的位置错误的编译失败提示。
7已知字符‘A’的ASCII代码值是65,字符变量cl的值是‘A’,c2的值是‘D’。则执行语句printf(”%d,%d”,cl,c2—2);的输出结果是( )。
A.65,68B.A,68C.A,BD.65,66
参考答案:D
参考解析:打印时以%d整型格式打印输出,所以字符标量cl的值打印出来就是65,从c2—2的值打印出来就是68—2,即66。所以选择D。
8下列叙述中正确的是( )。
A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的
B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构
C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构
D.线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性
参考答案:B
参考解析:线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。
9以下选项中正确的定义语句是( )。
A.double,a,b;
B.double a=b=7;
C.double a;b;
D.double a=7,b=7;
参考答案:D
参考解析:A选项中变量类型符double后面不能有逗号。B选项中变量b不能先使用再定义,应该写成选项D中的格式。C选项中变量a后面应该是逗号而不是分号。
10以下关于C语言数据类型使用的叙述中错误的是( )。
A.若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型
B.若要保存带有多位小数的数据,可使用双精度类型
C.若只处理“真”和“假”两种逻辑值,应使用逻辑类型
D.整数类型表示的自然数是准确无误差的
参考答案:C
参考解析:C语言中没有逻辑类型,所以c错误。若要保存带有多位小数的数据,可以用单精度类型也可以用双精度类型。处理包含不同类型的相关数据可以定义为结构体类型。整数类型可以无误差的表示自然数。
11下列关于栈的叙述正确的是( )。
A.栈按“先进先出”组织数据,
B.栈按“先进后出”组织数据C.只能在栈底插入数据D.不能删除数据
参考答案:B
参考解析:栈是按“先进后出”的原则组织数据的,数据的插入和删除都在栈顶进行操作。
12以下叙述中正确的是( )。
A.c语言规定必须用main作为主函数名,程序将从此开始执行
B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C.c语言程序将从源程序中第一个函数开始执行、
D.main的各种大小写拼写形式都可以作为主函数名,如MAIN,Main等
参考答案:A
参考解析:C语言中的主函数只能是main()函数,不能任意指定,所以B选项错误。C语言从主函数main()开始,到主函数main()结束,所以C选项错误。主函数必须写成小写的main,不能混淆大小写,所以D选项错误。
13有以下程序:

程序运行后的输出结果是( )。
A.let=4B.m=2C.m=6D.m=5
参考答案:C
参考解析:第一次外循环i的值为l,第一次内循环j的值为3,不满足条件执行in}=i}j即m的值为3;第二次j的值为2,不满足条件执行m·=i*j,即m的值为6;第三次j的值为1,不满足条件执行nl*=i*j,即m的值仍为6。第二次外循环i的值为2,j的值为3,满足条件,执行break语句,跳出循环。
14对于一个正常运行的C程序,以下叙述中正确的是( )。
A.程序的执行总是从main函数开始,在程序的最后一个函数中结束
B.程序的执行总是从程序的第一个函数开始,在main函数结束.
C.程序的执行总是从main函数开始、
D.程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束
参考答案:C
参考解析:任何一个c程序都是从主函数main开始,至主函数main结束,所以选择c选项。
15下列选项中属于面向对象设计方法主要特征的是( )。
A.继承B.自顶向下C.模块化D.逐步求精
参考答案:A
参考解析:面向对象基本方法的基本概念有对象、类和实例、消息、继承与多态性,所以选择A。
16有以下程序:


程序运行后的输出结果是( )。
A.1,2,3,0,0,0,0,0,0,0,
B.1,2,3,1,2,3,0,0,0,0,
C.123,0,0,0,0,123,0,0,0,0,
D.1,2,3,0,0,1,2,3,0,0,
参考答案:D
参考解析:本题考查文件操作函数,两次fwrite后,币文件中已经写入l,2,3,O,0,l,2,3,0,0然后将文件币中的内容重新写人数组a中,最后输出a为1。2,3,0,0,1,2,3,0,0,所以选项D正确。
17有三个关系R、S和T如下:

则由关系R和s得到关系T的操作是( )。
A.自然连接B.并C.交D.差
参考答案:D
参考解析:关系T中的元组是关系R中有面关系s中没有的元组的集合,即从关系R中除去与关系s中相同元组后得到的关系T。所以做的是差运算。
18有三个关系R、S和T如下:

则由关系R和s得到关系T的操作是( )。
A.自然连接B.交C.投影D.并
参考答案:A
参考解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T中元组可以判断R和s做的是自然连接操作。
19对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是( )。
A.快速排序B.冒泡排序C.直接插入排序D.堆排序
参考答案:D
参考解析:除了堆排序算法的比较次数是O(nlog2n),其他的都是n(n-1)/2。
20以下叙述中正确的是( )。;
A.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖
C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据
D.c语言中的文件是流式文件,因此只能顺序存取数据
参考答案:A
参考解析:B选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。C选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第l个数据,可以用fseek()函数进行重新定位即可。D选项中,C语言中的文件可以进行随机读写。
21有以下程序:


程序运行后的输出结果是( )。
A.4B.34C.31D.32
参考答案:C
参考解析:本题重点考察二维数组名作为实参进行参数传递,在主函数中调用了fun函数,实参为二维数组名a和两个整数4.0,这样对应定义fun函数首部有三种形式,这里采用了第一种形式——行指针,这样在fun函数对s[i][j]进行操作实际上就是对主函数中的a[i][j]进行操作,再分析fun函数的作用便可知,是求二维数组第0列中最大的那个元素。因此C选项正确。
22下列叙述中正确的是( )。
A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化
B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化
C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化
D.以上说法都不正确
参考答案:C
参考解析:栈是先进后出的数据结构,在整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针的变化来操作,所以选择C。
23设文件指针fp已定义,执行语句fp=fopen(”61e”,”W”);后,以下针对文本文件file操作叙述的选项中正确的是( )。
A.只能写不能读
B.写操作结束后可以从头开始读
C.可以在原有内容后追加写
D.可以随意读和写
参考答案:A
参考解析:考查文件操作函数fopen的基础知识, 以”W”方式打开文件,只能写不能读。选项A正确。
24读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中buffer代表的是( )。
A.一个内存块的字节数
B.一个整型变量,代表待读取的数据的字节数
C.一个文件指针,指向待读取的文件
D.一个内存块的首地址,代表读人数据存放的地址
参考答案:D
参考解析:fread(void}buffer,size—t size,size—tcount,FILE}stream);功能是从一个文件流中读数据,读取count个元素。每个元素size字节,如果调用成功返回count。buffer:用于接收数据的内存地址,大小至少是size * count字节;size:单个元素的大小,单位是字节;count:元素的个数,每个元素是size字节;Stream:输人流。
25若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。
A.函数的形参和实参分别占用不同的存储单元
B.形参只是形式上的存在,不占用具体存储单元
C.同名的实参和形参占同一存储单元
D.函数的实参和其对应的形参共占同一存储单元
参考答案:A
参考解析:本题重点考察的是函数的形参和实参。I在定义函数时函数名后面括弧中的变量名称为“形式参数”l(简称形参),在主调函数中调用一个函数时,函数名后面括弧1中的参数(可以是—个表达式)称为“实际参数”(简称实参)。f C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。因此A选项正确。
26下列排序方法中,最坏情况下比较次数最少的是( )。
A.冒泡排序B.简单选择排序C.直接插入排序D.堆排序
参考答案:D
参考解析:冒泡排序与简单插入排序与简单选择排序法在最坏情况下均需要比较n(n-1)/2次,而堆挥序在最坏情况下需要比较的次数是nlog2n。
27下列关于数据库设计的叙述中,正确的是( )。
A.在需求分析阶段建立数据字典
B.在概念设计阶段建立数据字典
C.在逻辑设计阶段建立数据字典
D.在物理设计阶段建立数据字典
参考答案:A
参考解析:数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实和完善的。
28有以下程序:

程序执行后的输出结果是( )。
A.y=OS)y=一1B.0C.y=1D.while构成无限循环
参考答案:B
参考解析:执行Y一一直到值为0,由于Y一一是先用再减,所以退出循环时,y的值为一l。
29在黑盒测试方法中,设计测试用例的主要根据是( )。
A.程序内部逻辑B.程序外部功能C.程序数据结构D.程序流程图
参考答案:B
参考解析:黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证,黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只根据程序的需求和功能规格说明,检查程序的功能是否符合它的功能说明,所以本题选择B。
30支持子程序调用的数据结构是( )。
A.栈B.树C.队列D.二叉树
参考答案:A
参考解析:栈支持子程序调用。栈是-种只能在-端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为A。
31有三个关系R、s和T如下:

由关系R和s通过运算得到关系T,则所使用的运算为( )。
A.并B.自然连接C.笛卡尔积D.交
参考答案:D
参考解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以8错误。笛卡尔积是用R集合中元素为第一元素,s集合中元素为第二元素构成的有序对,所以c错误。根据关系T可以很明显地看出是从关系R与关系s中取得相同的关系组所以取得是交运算,选择D。
32以下选项中,能用作用户标识符的是( )。
A.-0-B.8-;8C.voidD.unsigned
参考答案:A
参考解析:C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。另外,关键字不能作为标识符。8中以数字8开头,所以错误。c与D中用的是关键字void与unsigned,所以错误。
33若有定义语句:int X=10;,则表达式x-=x+x的值为( )。
A.0B.-20C.-10D.10
参考答案:C
参考解析:算术运算符+的优先级高于-=.且-=的结合方向为自右向左,所以表达式x-=x+x可以表示成;=x-(x+x)=10-(10+10)=-10,选择C。
34有以下计算公式

若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是( )。

参考答案:C
参考解析:本题重点考查的知识点是:s叫()函数。s叫()函数的作用是计算平方根,要求输出的参数x必须大于等于0。题目公式的要求是无论x大于等于0还是小于0,Y的值都为x绝对值的开方。选项c中调用了sqrt(x)函数,而没有判断X的正负,则Y=m-(x)会出错。
35在c语言中,只有在使用时才占用内存单元的变量,其存储类型是( )。
A.auto和staticB.extern和registerC.auto和registerD.static和register
参考答案:C
参考解析:auto:函数中的局部变量,动态地分配存储空间,数据存储在动态存储区中,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空问。register:为了提高效率,C语言允许将局部变量的值放在cPU中的寄存器中,这种变量叫“寄存器变量”,只有局部自动变量和形式参数可以作为寄存器变量。extem:#1’部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。static:静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。
36有以下程序:

程序执行后的输出结果是( )。
A.55.B.50C.45D.60
参考答案:D
参考解析:内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。m(a,5)的值是15,再次调用后Ⅲm=15,所以fun(b,4)=45,s=45+15=60。因此D选项正确。
37下列函数的功能是( )。

A.将a所指字符串赋给b所指空间
B.使指针b指向a所指字符串
C.将a所指字符串和b所指字符串进行比较
D.检查a和b所指字符串中是否有‘、O’
参考答案:A
参考解析:While循环条件为:(_h=}a)f-‘、0’,执行时先把指针a所指向的字符赋给指针b所在内存单元,如果该字符不是结束标识‘\0’,执行循环体a++;b++;,指针a.b分别指向下一个字符单元。再判断循环条件,如果成立,继续把指针a所指向的字符赋给指针b所在内存单元,直到遇到结束标识为止。因此A选项正确。
38下面描述中错误的是( )。
A.系统总体结构图支持软件系统的详细设计
B.软件设计是将软件需求转换为软件表示的过程
C.数据结构与数据库设计是软件设计的任务之一
D.PAD图是软件详细设计的表示工具
参考答案:A
参考解析:详细设计的任务是为软件结构图中而非总体结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节,所以A错误。
39有以下程序:

程序运行后的输出结果是( )。
A.0B.9C.6D.8
参考答案:C
参考解析:主函数中调用f函数,同时将数值3传递给变量x,执行条件不满足条件if(x==0IlX==1);跳过re—turn(3);,直接执行语句Y=X}X—f(x一2);这里f(x一2)为函数的递归调用,再次诃用f函数,此时x=1,判断条件成立,返回3给f(1),Y=3}3—3=6,最后将6返回主函数,并进行输出。因此c选项正确。
40有以下程序:

程序运行后的输出结果是( )。
A.500B.401C.503D.1404
参考答案:C
参考解析:本题重点考察函数的定义和调用,第一次循环,a=0,i=0,返回值a=0*0+1+0=1;第二次循环,a=1,i=10,返回值a=10*10+1+1=102;第三次循环,a=102,i-20,返回值a=20*20+1十102=503;第四次循环,a=503,i=30;不符合i<30,跳出循环,最后结果输出a=503。
二、程序填空题
41下列给定程序中,函数fun的功能是:将形参n中个位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。
例如,输入一个整数27638496,函数返回值为64862。
请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。
不得增行或删行,也不得更改程序的结构!#include
unsigned long fun(unsigned long n){unsigned long x=0;int t;

参考解析:
(1)0
(2)10*x
(3)n/10
【考点分析】
本题考查:已知某数,如何求该数各个位数值,已知各个位数值,如何表示该数;除法运算。
【解题思路】
填空1:定义变量t用来存放某数的各个位数值,此处判断t是否为偶数,即对2求余结果是否为0。
填空2:将t作为x的个位数,原来x的各个位上升l位,即x=10{x+1。
填空3:每循环一次,通过除法运算,去掉数值最后一位。
三、程序改错题
42下列给定程序中函数fun的功能是:将P所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。
例如,若给a输入字符串:ABCDEFGKHHK,调用函数后,字符数组b中的内容为:ABC DEF GHI JK。请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODll.C中,不得增行或删行,也不得更改程序的结构。

参考解析:
(1)b[k]=+p;
(2)b[k]=“;k++;
【考点分析】
本题考查:指针类型变量作为函数的参数,函数的参数不仅可以是整型、实型、字符型等数据类型,还可以是指针类型。它的作用是将一个变量的址传送到另一个函数中。
【解题思路】
(1)JllN中p是指针型变量作函数参数,因此给b[k]赋值时出现错误0
(2)题目要求赋值3个字符后加一个空格,所以应该是先给b[k]赋值空格,然后变量k再加1。
【解题宝典】
C语言中为了表示指针变量和它所指向的变量之间的关系,在程序中用“*’’符号表示“指向”,例如,pointer代表指针变量,而* pointer是pointer所指向的变量。
四、程序设计题
43编写函数fun,其功能是:将所有大于1小于整数m的非素数存人XX所指数组中,非素数的个数通过k返回。
例如,若输入17,则应输出:4 6 8 9 10 12 14 15 16。注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

参考解析:

【考点分析】
本题考查:如何判断非素数;循环判断结构;数组的引用。
【解题思路】
题目要求将l—m之问的非素数存人数组中,应使用循环判断结构。循环语句用来遍历1一m之间的每个数,判断语句用来判断该数是否为素数,若不是素数,则将其存人数组中。这道题目是考查—个数是否为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决。
【解题宝典】
判定一个数是否为素数,即该数除了能被l和它本身外,不能被任何数整除。
代码实现为:
for(j=2;j
此语句需要熟记,很多判断素数的题目也可通过此法解决。