国家二级C语言程序设计机试(选择题)模拟试卷3

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

国家二级C语言程序设计机试(选择题)模拟试卷3
(总分:80.00,做题时间:90分钟)
一、选择题(总题数:40,分数:80.00)
1.下列数据结构中,属于非线性结构的是( )。

(分数:2.00)
A.循环队列
B.带链队列
C.二叉树√
D.带链栈
解析:解析:线性结构的特点:①有且只有一个根结点;②每一个结点最多有一个前驱,也最多有一个后继。

不满足线性结构条件的称为非线性结构,二叉树的非叶子结点最多可以用两个后继结点,属于非线性结构。

2.算法的空间复杂度是指( )。

(分数:2.00)
A.算法在执行过程中所需要的计算机存储空间√
B.算法所处理的数据量
C.算法程序中的语句或指令条数
D.算法在执行过程中所需要的临时工作单元数
解析:解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,因此本题答案为A。

3.下列数据结构中,能够按照“先进后出”原则存取数据的是( )。

(分数:2.00)
A.循环队列
B.栈√
C.队列
D.二叉树
解析:解析:栈是按“先进后出”的原则组织数据的;队列是按“先进先出”的原则组织数据的,因此本题答案为B。

4.软件设计中划分模块的一个准则是( )。

(分数:2.00)
A.低内聚、低耦合
B.高内聚、低耦合√
C.低内聚、高耦合
D.高内聚、高耦合
解析:解析:一般较优秀的软件设计应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性,因此本题答案为B。

5.结构化程序的三种基本控制结构是( )。

(分数:2.00)
A.顺序、选择和重复(循环) √
B.过程、子程序和分程序
C.顺序、选择和调用
D.调用、返回和转移
解析:解析:结构化程序设计中三种基本控制结构为顺序、选择和重复(循环),故正确答案为A。

6.软件需求规格说明书在软件开发中的作用不包括( )。

(分数:2.00)
A.软件设计的依据
B.软件可行性分析的依据√
C.软件验收的依据
D.用户和开发人员对软件要做什么的共同理解
解析:解析:需求分析就是分析软件用户的需求是什么,描述需求的文档称为软件需求规格说明书。

软件需求规格说明书是需求分析阶段的最后成果。

需求规格说明书是使开发人员获得设计和实现这些功能所需的所有必要信息,是软件设计的依据,A选项正确;软件需求规格说明书是软件测试和验收的依据,通过检查每项需求是否能通过设计测试用例或其他的验证方法,来确定产品是否确实按需求实现了,C选项正确;软件需求规格说明书对所有需求说明的用户和开发人员都只能有一个明确统一的解释,是用户和开发人员对软件要做什么的共同理解,D选项正确。

可行性分析是项目立项阶段要做的工作,虽然也需要对用户需求进行调研,但此阶段不会形成软件需求规格说明书。

故正确答案为B。

7.程序测试的目的是( )。

(分数:2.00)
A.为被测程序设计正确的测试用例
B.发现并改正程序中的错误
C.发现程序中的错误√
D.改正程序中的错误
解析:解析:程序测试是使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别,即为发现错误而执行程序的过程,而不是改正错误。

故正确答案为C。

8.数据库管理系统是( )。

(分数:2.00)
A.操作系统的一部分
B.在操作系统支持下的系统软件√
C.一种编译系统
D.一种操作系统
解析:解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和提供数据服务等,是一种在操作系统支持下的系统软件,因此本题答案为B。

9.设数据元素的集合D={1,2,3,4,5},则满足下列关系R的数据结构中为线性结构的是( )。

(分数:2.00)
A.R={(1,2),(3,2),(5,1),(4,5)}
B.R={(1,3),(4,1),(3,2),(5,4)} √
C.R={(1,2),(2,4),(4,5),(2,3)}
D.R={(1,3),(2,4),(3,5),(1,2)}
解析:解析:A选项2的前面有1和3两个数值,带有不确定性;c选项2的后面有4和3两个数值;D选项1的后面有3和2两个数值,所以只有B选项是线性结构。

10.以下叙述中正确的是( )。

(分数:2.00)
A.转义字符要用双引号括起来,以便与普通的字符常量区分开
B.字符常量在内存中占2个字节
C.字符常量需要用单引号括起来√
D.字符常量是不能进行关系运算的
解析:解析:A选项中,转义字符是以反斜线“\”开头,后跟1个或几个字符;B选项中,字符常量在内存中占1个字节;D选项中,字符常量可以进行关系运算,不能参与数值运算。

因此C选项正确。

11.以下关于结构化程序设计的叙述中正确的是( )。

(分数:2.00)
A.由三种基本结构构成的程序只能解决小规模的问题
B.结构化程序使用goto语句会很便捷
C.一个结构化程序必须同时由顺序、分支、循环三种结构组成
D.在C语言中,程序的模块化是利用函数实现的√
解析:解析:D选项正确,c语言允许对函数单独进行编译,从而可以实现模块化。

A选项错误,使用三种基本结构组成的程序可以解决复杂的问题;B选项错误,使用goto语句会使程序混乱,程序中应该尽量避免使用goto语句;C选项错误,一个结构化程序没有必要同时由顺序、分支、循环三种结构组成。

12.以下叙述中正确的是( )。

(分数:2.00)
A.计算机只接收由0和1代码组成的二进制指令或数据√
B.计算机只接收由0和1代码组成的十进制指令或数据
C.计算机可直接接收并运行C源程序
D.计算机可直接接收并运行任意高级语言编写的源程序
解析:解析:二进制数中只有两个字符0和1,表示具有两个不同稳定状态的元器件。

例如,电路中有无电流,有电流用1表示,无电流用0表示。

类似的还比如电路中电压的高低,晶体管的导通和截止等。

二进制数运算简单,大大简化了计算中运算部件的结构,故选项A正确。

13.关于C语言标识符,以下叙述中错误的是( )。

(分数:2.00)
A.标识符可全部由数字组成√
B.标识符可全部由下画线组成
C.标识符可全部由小写字母组成
D.标识符可全部由大写字母组成
解析:解析:c语言标识符只能由字母、数字、下画线构成,且只能以字母、下画线开头,故选项A不正确。

14.若有c语言表达式2+3*4+7/3,则以下选项中叙述正确的执行顺序是( )。

(分数:2.00)
A.先执行3*4得12,再执行2+12得14,再执行7/3得2,最后执行14+2得16 √
B.先执行3*4得12,再执行7/3得2.5,最后执行2+12+2.5得16.5
C.先执行7/3得2,再执行3*4得12,再执行12+2得14,最后执行2+14得16
D.先执行2+3得5,再执行5*4得20,再执行20+7得27,最后执行27/3得9
解析:解析:c语言表达式的执行顺序是从左向右,当遇到优先级高的表达式组分时,先执行优先级高的表达式,故选项A正确。

15.以下定义语句中正确的是( )。

(分数:2.00)
A.int a=b=0:
B.char A=65+1,b='b';√
C.float a=1,*b=&;a,*c=&;b;
D.double a=0.0;b=1.1;
解析:解析:定义变量时不能用连等,所以A选项错误;C选项中,b是指针,c定义为指向指针的指针才可以接受&b,所以C选项错误;D选项,b=1.1前没有类型名,所以错误。

16.有以下程序:#include main() { int k=一17:prinff(“%d,%0,%x\n”,k,1一k,1一k);} 程序的运行结果是( )。

(分数:2.00)
A.一17,22,12 √
B.一17,12,22
C.一17,一22,一12
D.17,22,12
解析:解析:整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法。

十进制整常量没有前缀,输出格式控制符为%d;八进制整常量以0作为前缀,输出格式控制符为%0;十六进制整常量以0X或0x作为前缀,输出格式控制符为%x。

1一k=18,整型常量18用八进制表示为22,十六进制表示为12,故A选项正确。

17.若有以下程序:#include main() { int a=0,b=0,c=0;c=(a一=++a),(a+=b,b+=4);printf(“%d,%d,%d\n”,a,b,c); } 则程序的输出结果是( )。

(分数:2.00)
A.0,4,0 √
B.0,4,4
C.1,4,1
D.1,4,4
解析:解析:逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计算。

另外逗号运算符的优先级最低,所以先计算c=(a一=++a)这部分。

其中,赋值运算符从右往左计算,先执行++a,a自增1后再赋值,所以a的值为1,执行a=a一1,即a=1—1,a的值为0,并将0赋给变量c。

第二部分(a+=b,b+=4),先执行a=a+b,a=0+0,即a的值为0,然后执行b+=4,b=0+4,即bl的值为4。

所以输出结果为0,4,0,故选项A正确。

18.有以下程序: #include double fun(double a) { double x; x=a一(int)a; return x; } main() { double a=3.1415;printf(“%f\n”,fun(a)); } 程序的运行结果是( )。

(分数:2.00)
A.0.141500 √
B.3.141500
C.30000000
D.0.000000
解析:解析:这里考查了强制转换的概念。

在fun函数中,x=a一(int)a,表示x取值为a的小数部分,因此,输入a为3.1415,输出x=0.141500,故A选项正确。

19.有以下程序: #include main() { int i,j; for(i=1;i
(分数:2.00)
A.1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 3*1=3
B.1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9 √
C.1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9
D.1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9
解析:解析:考查for循环及其嵌套。

第一个for循环用来控制输出行数,第二个for循环用来控制每行输出的表达式个数。

当i=1,j=1时,第一行输出3个表达式: 1*1=1:1 1*2=2 1*3=3 当i-2,j=2时,第二行输出2个表达式: 2*2=4 2*3=6 当i=3,j=3时,第三行输出1个表达式: 3*3=9 当i=4时,第一个for循环中4<4条件不成立,循环结束,整个程序执行完毕。

因此答案选B。

20.有以下程序:#include main() { char x=2,y=2,z;z=(Y<<1)&(x>>1);prinff(“%d\n”,z);} 程序的输出结果是( )。

(分数:2.00)
A.1
B.0 √
C.4
D.8
解析:解析:本题考查位运算<<和&。

y<>1为1,二者与运算后为0,故B选项正确。

21.有以下程序#include main() { int a=一1,b=一1;for(;++a;)++b;p rinff(“%d%d\n”,a,
b); } 程序运行后的输出结果是( )。

(分数:2.00)
A.0—1 √
B.0 0
C.一1 —1
D.结果不确定
解析:解析:这是对for循环的基本考查。

其中++a是判断条件,并且是a先自增1,再参与运算。

a初值为一1,经++a后,a值为0,0相当于false,判断条件不成立,跳过for循环后面的语句++b,直接执行printf语句,所以最后输出a的值为0,b的值没变,还是一1。

22.有以下程序: #include main() { char c; c=getchar();
do{ putchar(C++); }while((C=getchar())!='#'); } 程序运行时从第一列开始输入abcdefg##,则输出结果是( )。

(分数:2.00)
A.abcdefg √
B.bcdefgh
C.abcdefg#
D.bcdefgh#
解析:解析:运算符“++”放在变量后面时,先参与其他操作,再对变量+1。

putchar(c++)表示先输出当前c值,再对c值+1。

当输入abcde##时,在while语句中,程序输入#时循环退出。

因此输出为abcd吨,故A选项正确。

23.以下叙述中正确的是( )。

(分数:2.00)
A.结构化程序必须包含所有三种基本结构,缺一不可
B.在C语言程序设计中,所有函数必须保存在一个源文件中
C.只要包含了三种基本结构的算法就是结构化程序
D.在算法设计时,可以把复杂任务分解成一些简单的子任务√
解析:解析:c语言可以包含一个到多个源文件,每个源文件可以包含一个到多个函数,选项B错误;结构化的程序可以包含三种基本结构中的一种或者几种,除此之外还要遵循一些重要的原则:自顶向下、逐步求精、模块化和限制使用goto语句,选项A、C错误;把复杂任务分解成一些简单的子任务是程序模块化的思想,答案选D。

24.有以下程序:#include char f(char x) { return x*x%10+'0':} main() { char a;int b=0;for(a=0;a
(分数:2.00)
A.014916
B.01234
C.01496 √
D.00000
解析:解析:该题目中x*x%10,即x和x相乘后,结果再对10求余操作。

主函数中通过for语句使变量a从0到4进行取值,当a=0时,调用函数f后,返回值为0,赋给b,并且进行字符输出;当a=1时,返回值为1赋给b,并且进行字符输出;当a=2时,返回值为4赋给b,并且进行字符输出;当a=3时,返回值为9赋给b,并且进行字符输出;当a=4时,返回值为6赋给b,并且进行字符输出。

故C选项正确。

25.字符数组a和b中存储了两个字符串,判断字符串a和b是否相等,应当使用的是( )。

(分数:2.00)
A.if(strcmp(a,b)==0) √
B.if(strcpy(a,b))
C.if(a==b)
D.if(a=b)
解析:解析:考查字符串比较函数strcmp的功能。

26.有以下程序:#include #include main() { char a[]=“1234”,*b=“ABC”;printf(“%d%d%d%d\n”,strlen(a),sizeof(a),strlen(b),sizeof(b)); } 程序运行后的输出结果是( )。

(分数:2.00)
A.4 5 3 4 √
B.4 3 2 1
C.4 5 3 3
D.4 5 1 3
解析:解析:对于字符数组a,含有4个元素,所以strlen为4,而sizeof包括最后隐藏的\0,故sizeof 有5个。

对于字符串b,strlen为3,关键是sizeof,这里的sizeof不再是指数组的长度,因为b是一个地址值,整型数据,所以占用了4个字节。

27.在源程序的开始处加上#include进行文件引用的原因,以下叙述正确的是( )。

(分数:2.00)
A.stdio.h文件中包含标准输入/输出函数的函数说明,通过引用此文件以便能正确使用printf、scanf 等函数√
B.将stdio.h中标准输入/输出函数链接到编译生成的可执行文件中,以便能正确运行
C.将stdio.h中标准输入/输出函数的源程序插入到引用处,以便进行编译链接
D.将stdio.h中标准输入/输出函数的二进制代码插入到引用处,以便进行编译链接
解析:解析:stdio.h包含标准库函数头文件,很多库函数的声明都在stdio.h这个文件中,包含之后就可以用其中的库函数,例如printf函数,scanf函数等。

28.若用数组名作为函数调用时的实参,则实际上传递给形参的是( )。

(分数:2.00)
A.数组的第一个元素值
B.数组元素的个数
C.数组中全部元素的值
D.数组首地址√
解析:解析:形参是在函数的定义中,放在括号里声明的变量;实参是调用函数时,传入的参数。

数组在进行形参实参结合的,就是传递数组的首地址,并不是把整个数组复制一份放入函数里运行。

故D选项正确。

29.设有某函数的说明为:int*fune(int a[10],int n);则下列叙述中,正确的是( )。

(分数:2.00)
A.形参a对应的实参只能是数组名
B.说明中的a[10]写成a[]或*a效果完全一样√
C.func的函数体中不能对a进行移动指针(如a++)的操作
D.只有指向10个整数内存单元的指针,才能作为实参传给a
解析:解析:考查数组名作为函数参数。

传递给形参的实参可以是数组名,还可以是指向该数组的指针变量,选项A错误;a[10]、a[]、*a做形参都是接受实参数组首地址,效果一样,选项B正确;数组名可以看作一个指针常量,对其进行自加自减运算相当于指针变量的自加自减,选项C错误;数组名作为函数参数时,只传递数组的首地址而不检查形参数组的长度,所以形参表中可以不给出形参数组的长度,形参数组和实参数组长度也可以不同,选项D错误。

故答案选B。

30.有以下程序: #include<stdio.h> int fun(int x,int y) { if(x!=y)retum((x+y)/2); else return(x); } main() { int a=4,b=5,c=6;prinff(“%d\n”,fun(2*a,fun(b,c))); }程序运行后的输出结果是( )。

(分数:2.00)
A.3
B.6 √
C.8
D.12
解析:解析:考查函数的调用。

输出结果为fun(2*a,fun(b,c))=fun(8,5)=6,答案选B。

31.要求定义一个具有6个元素的int型一维数组,以下选项中错误的是( )。

(分数:2.00)
A.int N=6,a[N];√
B.int a[2*3]={0};
C.#define N 3 int a[N+N];
D.int a[]={1,2,3,4,5,6};
解析:解析:数组定义中长度不能为变量。

32.若有以下程序:#include main() { int a=1,b=2,c=3,d=4,r=0;if(a!=1);else r=1;if(b==2)r+=2;if(c!=3);r+=3; if(d==4)r+=4;printf(“%d\n”,r); } 则程序的输出结果是( )。

(分数:2.00)
A.3
B.7
C.6
D.10 √
解析:解析:第一个if语句a!=1条件为假,所以执行else后的语句r=1。

第二个if语句b==2条件成立,执行r+=2,r的值变为3.第三个if语句c!=3条件为假,所以不做任何操作。

执行下面的r+=3操作,r 的值变为6。

判断第四个if条件,d==4条件成立,执行r+=4操作,结果为10。

故D选项正确。

33.有以下程序:#include int fun(char*s) { char*P=s;while(*P!=0)P++;return(P—s);} main() { prinff(“%d\n”,fun(“goodbye!”)); } 程序的输出结果是( )。

(分数:2.00)
A.0
B.6
C.7
D.8 √
解析:解析:本题主要考查函数定义及调用,以及while循环语句。

执行fun函数后,首先找到最后一个字符的地址,然后减去第一个地址得到的就是这个字符串的长度,因此本题答案为8。

34.如果定义float a[10],x;,则以下叙述中正确的是( )。

(分数:2.00)
A.语句a=&x;是非法的√
B.表达式a+1是非法的
C.三个表达式a[1]、*(a+1)、*&a[1]表示的意思完全不同
D.表达式*&a[1]是非法的,应该写成*(&(a[1]))
解析:解析:数组名表示该数组的首地址,是一个地址常量,不能对它重新赋值,选项A正确。

但是可以把数组名看作一个指针常量,则表达式a+1表示的是数组中第二个元素的地址,选项B错误。

表达式a[1]、*(a+1)、*&a[1]都指的是数组a中第二个元素的值,选项C错误。

[]运算符的优先级高于*、&,取值*和取址&运算符优先级相等,是同一优先级的运算符,运算次序由结合方向所决定,*&a[1]在运算符优先级和结合性上没有问题,并且取值*和取址&运算符互逆,*&a[1]和a[1]等价,相当于求得数组a第二个元素的值,选项D错误。

故正确答案为A。

35.关于地址和指针,以下说法中正确的是( )。

(分数:2.00)
A.通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量√
B.可以取一个常数的地址赋值给同类型的指针变量
C.可以取一个表达式的地址赋值给同类型的指针变量
D.可以取一个指针变量的地址赋值给基类型相同的指针变量
解析:解析:考查对指针变量赋值的理解。

36.有以下程序: #include main() { int c[6]={10,20,30,40,50,60},*P,*s; P=c;s=&c[5];prinff(“%d\n”,S—P); } 程序运行后的输出结果是( )。

(分数:2.00)
A.5 √
B.50
C.6
D.60
解析:解析:本题主要考查数组和指针。

首先初始化一维数组c[6],语句p=c;表示将c[0]元素的地址赋给指针变量p;语句s:&c[5];表示将c[5]元素的地址赋给指针变量s。

程序最后输出s—p,即结果为5。

故A选项正确。

37.有以下程序:#include #define PT 3.5; #define S(x)*x*x main() { int a=1,b=2;prinff(“%4.1f\n”,S(a+b)); } 程序运行后的输出结果是( )。

(分数:2.00)
A.31.5
B.7.5
C.程序有错无输出结果√
D.14.0
解析:解析:宏定义不是C语句,结尾不加“;”,所以该程序会出现编译错误,答案选C。

38.设有定义:int x[2][3];则以下关于二维数组X的叙述中错误的是( )。

(分数:2.00)
A.元素x[0]可看作由3个整型元素组成的一维数组
B.数组x可以看作由x[0]和x[1]两个元素组成的一维数组
C.可以用x[0]=0;的形式为数组所有元素赋初值0 √
D.x[0]和x[1]是数组名,分别代表一个地址常量
解析:解析:x[0]可看作由3个整型元素组成的一维数组,不可以用语句x[0]=0;为数组所有元素赋初值0。

故C选项正确。

39.有以下程序: #include void fun(int n,int*s) { int f: if(n==1)*s=n+1; else {fun(n一1,&f);*s=f;} } main() { int x=0; fun(4,&x);prinff(“%d\n”,x); } 程序运行后的输出结果是( )。

(分数:2.00)
A.3
B.1
C.2 √
D.4
解析:解析:本题考查函数的递归调用。

将函数参数带入函数中,一步步递归即可得到结果,结果为2。

故选项C正确。

40.设有如下语句: typedef struct Date{ int year; int month; int day; }DATE;则以下叙述中错误的是( )。

(分数:2.00)
A.DATE是用户说明的新结构体类型名
B.struct Date是用户定义的结构体类型
C.DATE是用户定义的结构体变量√
D.struct是结构体类型的关键字
解析:解析:该定义语句把结构体struct Date命名为一个新的类型名“DATE”,DATE相当于“struct Date”,是结构体类型名,选项C描述错误,答案选C。

相关文档
最新文档