国家二级(C语言)笔试模拟试卷234(题后含答案及解析)

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

国家二级(C语言)笔试模拟试卷234(题后含答案及解析)
题型有:1. 选择题 2. 填空题
选择题(1-10、21-40每题2分,11-20每题1分,共70分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上。

1.下列选项中不符合良好程序设计风格的是______。

A.源程序要文档化
B.数据说明的次序要规范化
C.避免滥用goto语句
D.模块设计要保证高耦合、高内聚
正确答案:D
解析:程序设计的风格主要强调:清晰第一,效率第二。

主要应注重和考虑下述一些因素:①源程序文档化;②数据说明,其主要包括数据说明的次序规范化、说明语句中变量安排有序化、使用注释来说明复杂数据的结构;③语句的结构。

在程序结构中各模块的内聚性越强,则耦合性越弱。

优秀软件应高内聚,低耦合。

2.已经定义ch为字符型变量,以下赋值语句中错误的是______。

A.ch=‘\’;
B.ch=62+3;
C.ch=NULL;
D.ch=‘\xaa’;
正确答案:A
解析:对字符变量赋值时,即可以赋一字符常量,也可以赋0~255的整数,该整数表示字符常量的ASCII值。

本题中选项B是将65赋值给ch,表示字符A;选项C中NULL是C语言中的符号常量,其值为0;选项D是将一个转义字符赋值给ch,该字符的ASCII值为aa,其中aa是十六进制;选项A错误。

3.设计数据库的存储结构属于( )
A.需求分析
B.概念设计
C.逻辑设计
D.物理设计
正确答案:D
解析:物理设计阶段主要解决选择文件存储结构和确定文件存取方法的问题,包括选择存储结构、确定存取方法、选择存取路径、确定数据的存放位置。

4.在数据库系统中,用户所见的数据模式为( )。

A.概念模式
B.外模式
C.内模式
D.物理模式
正确答案:B
解析:数据库系统的三级模式:①概念模式:数据库系统中全局数据逻辑结构的描述,全体用户公共数据视图;②外模式:也称子模式与用户模式,是用户的数据视图,也就是用户所见到的数据模式;③内模式:又称物理模式,它给出了数据库物理存储结构与物理存取方法。

5.关系数据库的概念模型是______的集合。

A.关系模型
B.关系模式
C.关系子模式
D.存储模式
正确答案:B
解析:数据库的概念模型体现了数据之间的关系,它是各种数据之间相互关系的集合。

6.下列叙述中,不属于软件需求规格说明书的作用的是______。

A.便于用户、开发人员进行理解和交流
B.反映出用户问题的结构,可以作为软件开发工作的基础和依据
C.作为确认测试和验收的依据
D.便于开发人员进行需求分析
正确答案:D
解析:软件需求规格说明书是需求分析阶段的最后成果,是软件开发中的重要文档之一。

它不能方便开发人员进行需求分析。

7.下列数据结构中具有记忆功能的是( )。

A.队列
B.循环队列
C.栈
D.顺序表
正确答案:C
解析:由栈的定义可知,栈是先进后出(或后进先出)的线性表,因此,栈具有记忆功能。

8.下列工具中为需求分析常用工具的是______。

A.PAD
B.PFD
C.N-S
D.DFD
正确答案:D
解析:常见的需求分析方法有:结构化分析方法和面向对象的分析方法。

结构化分析的常用工具有:数据流图(DFD)、数据字典(DD)、判定树和判定表等。

9.源程序的文档化不包括( )。

A.符号名的命名要有实际意义
B.正确的文档形式
C.良好的视觉组织
D.正确的程序注释
正确答案:B
解析:源程序的文档化主要包括3点,①符号名应具有一定实际的含义,便于理解程序功能;②正确的程序注释;③良好的视觉组织(利用空格、空行、缩进等技巧使程序层次清晰)。

10.在软件开发中,需求分析阶段产生的主要文档是
A.软件集成测试计划
B.软件详细设计说明书
C.用户手册
D.软件需求规格说明书
正确答案:D
解析:软件需求规格说明书是需求分析阶段的最后成果,是软件开发中的重要文档之一。

11.设x,y和z都是血型变量,且x=3,y=4,z=5,则下面表达式中,值为0的表达式是
A.x&&y
B.x<=y
C.x‖++y&&y-z
D.!(x<y&&!z‖1)
正确答案:D
解析:该题考查逻辑与“&&”和逻辑或“‖”以及逻辑非“!”符号的用法。

选项A)即3&&4为真;选项B)即3<=4为真;选项C)是一个逻辑或与逻辑与的混合运算,只要执行了逻辑或左半部分,程序将直接停止执行逻辑或右半部分程序,因为x的值为真;此时选项C)变为1&&-1为真。

选项D)不用计算,括号内逻辑或右边的值为1,因而括号内的值为1,再进行逻辑非运算得0。

12.下列程序执行后的输出结果是void funcl(int i);void func2(int i);char st[]=“hello,friend!”;void funcl(int i) {printf(“%c”,st[i]);if(i<3){i+=2;func2(i);}} void func2(int i) { printf(“%c”,st[i]);if(i <3){i+=2;func1(i);}} main( ) {int i=
A.hello
B.hel
C.hlo
D.hlm
正确答案:C
13.已知二叉树后序遍历序列是CDABE,中序遍历序列是CADEB,它的前序遍历序列是( )。

A.ABCDE
B.ECABD
C.EACDB
D.CDEAB
正确答案:C
14.设“int x=2,y=1;”,则表达式(!x‖y--)的值是( )。

A.0
B.1
C.2
D.-1
正确答案:B
解析:因x为2,所以!x时表达式值为0,因y为1,y--表达式的值为1然后自减1,y为0,所以!x‖y--时表达式的值为1。

15.若有“double a;”,则正确的输入语句是( )。

A.scanf(“%1f”,a);
B.scanf(“%f”,&a);
C.scanf(“%1f”,&a);
D.scanf(“le”,&a);
正确答案:D
解析:本题考查scanf( )函数的调用形式:scanf(格式字符串,输入项地址表)。

“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。

16.若变量已正确定义并赋值,以下符合C语言语法的表达式是( )。

A.a:=b+1
B.a=b=c+2
C.int 18.5%3
D.a=a+7=c+b
正确答案:B
解析:选项A) 中包含一个不合法的运算符“:=”;选项C) 应改为(int)18.5%3;选项D) 可理解为两个表达式:a+7=c+b和a=a+7,因为C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等,所以a+7=c+b是错的。

因此,正确答案是选项B) ,它相当于a=(b =c+2),可分解为两个表达式:b=c+2和a=b。

17.以下程序输出的结果是#include <stdio.h>main( ) { int i=010,j=10;printf(“%d,%d\n”,++i,j--);} A.11,10
B.9,10
C.010,9
D.10,9
正确答案:B
解析:本题考核的知识点是自增运算符和自减运算符的使用.程序中i的值用八进制表示(十进制为8),++i是在变量使用前自身先加1,而j--是在变量使用后自身减1。

所以,4个选项中B符合题意。

18.在执行以下程序时,为了使输出结果为:t=4,则给a和b输入的值应满足的条件是______。

main ( ){ int s,t,a,b;scanf(“%d,%d”,&a,&b);s=1,t=1;if(a>0)s=s+1;if(a>b)t=s+1;else if (a==b) t=5;else t=2*s;printf(“%d\n”,t);}
A.a>b
B.a<b<0
C.0<a<b
D.0>a>b
正确答案:C
19.下列属于C语言语句的是______。

A.printf(“%d\n”,a)
B.#include<stdio.h>
C.a=b;b=c;c=a;
D./*this is a program*/
正确答案:C
解析:在C语言中,一个完整的C语句必须在语句末尾出现分号,分号是C语句的必要组成部分。

本题答案为C。

20.在以下各标识符中,合法的用户标识符是( )
A.1
B.table__1
C.0__t
D.k%
正确答案:B
21.下列程序的运行结果是( )。

#include<stdio.h>main( ) { int a=0,b=4,c=0,d=10,x;if(a) d=d-10;else if(!b) if(!c) x=15;else x=25;printf(“%d\n”,d);}
A.5
B.3
C.20
D.10
正确答案:D
解析:本题考查if else语句。

第1个if语句,先判断条件,发现a=0条件不成立,则执行与其配对的else语句;第2个if语句,先判断条件,发现b=4,则!b 条件不成立,又没有与其配对的else语句,所以执行printf语句,输出d。

22.设函数fun的定义形式为:void fun(char ch,float x){ } 则以下对函数fun的调用语句中,正确的是______。

A.fun (“abc”,3.0);
B.t=fun(‘D’,16.5);
C.fun(‘65’,2,8);
D.fun(32,32);
正确答案:C
解析:A选项”abc”的表示字符串,与参数类型不一样。

B选项fun没有返回值,不能将其用来赋值。

D选项第一个32不是字符,与参数类型不一样。

23.下列选项中错误的说明语句是
A.char a[]={′t′,′o′,′y′,′o′,′u′,′\0′};
B.char a[]={“toyou\0”};
C.char a[]=“toyou\0”;
D.char a[]=′toyou\0′;
正确答案:D
解析:通过赋初值的方式给一维数组赋字符串,可以用给一般数组赋初值的相同方式给一维字符数组赋字符串,也可以在赋值时直接赋字符串常量。

选项B)和C)后面的’\0’是多余的,在C语言中,系统会自动在字符串的结尾处加上一个字符’\0’作为串的结束标记。

24.若ch为char型变量,k为int型变量(已知字符a的ASCII码是97),则执行下列语句后输出的结果为( )。

ch=’b’; k=10; printf(“%x,%o,”,ch,ch,k); printf(“k=%%d\n”,k);
A.因变量类型与格式描述符的类型不匹配,输出无定值
B.输出项与格式描述符个数不符,输出为0值或不定值
C.62,142,k=%d
D.62,142,k=%10
正确答案:C
解析:第1个printf函数,格式说明的个数是2,而输出项的个数是3,所以对于多余的输出项k不予输出;第2个pfintf函数,有两个%说明,第1个%后面的字符要原样输出。

25.下列能正确进行字符串赋值的是( )。

A.char s[5]={“ABCDE”};
B.char s[5]={‘A’,’B’,’C’,’D’,’E’);
C.char*s;s=“ABCDE”;
D.char*s;printf(“%s”,s);
正确答案:C
解析:选项A、B的空间不够;字符串存储要有结柬符’\0’,且要占用一个空间,printf用来输出字符,不能输入字符串。

26.执行下面的程序后,a的值为( )。

main( ) { int a,b;for(a=1,b=1,a<=10;a++) { if(b%3==1) { b+=3;continue;} b-=5;}}
A.7
B.8
C.9
D.10
正确答案:D
解析:本题考查continue的用法continue语句的作用结束本次循环,直接进行下次循环。

所以在程序中,只有当a=10时,才返出循环,故选择D选项。

27.设x=015,则x=x^017的值是( )。

A.00001111
B.11111101
C.00000010
D.11000000
正确答案:C
解析:本题考查按位异或运算,异或就是相同为0,不同为1(化为二进制00001101),017的二进制为000001111,两者异或结果为00000010。

28.数据处理的最小单位是______。

A.数据
B.数据元素
C.数据项
D.数据结构
正确答案:C
29.下面程序的输出结果是______。

main( ){int a=6,b=3; printf(“%d\n”b=(a/b,a%b));}
A.0
B.1
C.2
D.不确定的值
正确答案:C
30.若已定义c为字符型变量,则下列语句中正确的是( )。

A.c=‘97’
B.c=“97”;
C.c=97;
D.c=“a”;
正确答案:C
解析:C语言中,字符型数据和整型数据之间可以通用。

一个字符数据既可以字符形式输出,也可以整数形式输出,所以把整型数据赋给字符型变量,直接用c=97即可,所以选项C)正确。

由于题目要求选出正确的语句,选项A)少分号,不能构成语句,因此错误。

B)、D)是将一个字符串赋给一个字符变量,所以错误。

31.以下关于字符串的叙述中正确的是( )。

A.C语言中有字符串类型的常量和变量
B.两个字符串中的字符个数相同时才能进行串符串大小的比较
C.可以用关系运算符对字符串的大小进行比较
D.空串一定比空格打头的字符串小
正确答案:D
解析:C语言中只有字符串常量而没有字符串变量,故选项A不正确:字符串比较大小是以第1个不相同字符的大小为标准的,跟长度没有关系,故选项B不正确:字符串比较大小除了使用库函数stremp( )以外,就只能靠自己写代码来实现了,而不能通过关系运算符来比较大小,因为字符串在表达式中相当于coost char*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个字符串的首地址值比较大小,这是毫无意义的。

所以选项C也不正确。

空串的长度为0,而以空格打头的字符串的长度至少为1,故选项D正确,本题应该选择
D。

32.C语言中while循环和do-while循环的主要区别是______。

A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
正确答案:A
33.有如下说明:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是______。

A.*p+9
B.*(p+8)
C.*p+=9
D.p+8
正确答案:B
解析:p是指向整型变量的指针,并赋初值指向了数组a的首地址,*p=1,选项A中*p+9=10,选项C的“*p+=9”的值为10。

而p+8是指向数组a的第9个元素的地址,只有*(p+8)才是数组a的第9个元素。

34.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是______。

A.地址传递
B.单向值传递
C.由实参传递给形参,再由形参传递给实参
D.传递方式由用户指定
正确答案:B
解析:C语言以定,实参变量对形参变量的数据传递是“单向值传递”,只由实参传绐形参。

在内存中,实参单元与形参单元是不同的单元。

调用结束后,实参单元仍保留并维持原值。

35.执行下面的程序后,a的值为main( ) { int a,b;for(a=1,b=1;a<=100;a++) { if(b>=20)break;if(b%3==1) { b+=3;continue;} b-=5;} }
A.7
B.8
C.9
D.10
正确答案:B
解析:本题主要考查了循环语句中break和continue语句的使用。

break语
句的作用是结束本层循环,而continue语句的作用是结束本次循环直接进入到下次循环。

36.定义int*swap( )指的是______。

A.一个返回整型值的函数swap( )
B.一个返回指向整型值指针的函数swap( )
C.一个指向函数swap( )的指针,函数返回一个整型值
D.以上说法均错
正确答案:B
解析:一个函数可以带回—个整型值、字符值、实型值等,但也可以带回指针型数据,即地址。

本题的定义中,包括括号和*号,由于( )优先级高于*。

故它是一个返回整型指针的函数。

37.设有数组定义:chararray[]=“China”;则数组array所占的空间为( )个字节。

A.4
B.5
C.6
D.7
正确答案:C
解析:在定义字符数组用字符串常量进行初始化时,系统会自动在结尾加’\0’做结束标志,所以数组array所占的空间为6个字节。

38.要求以下程序的功能是计算main( ) {int n;float s;s=1.0;for(n=10;n>1;n--) s=s+1/n;pfintf(“%6.4f\n”,s);} 程序运行后输出结果错误,导致错误结果的程序行是
A.s=1.0;
B.for(n=10;n>1;n--)
C.s=s+1/n;
D.printf(“%6.4f\n”,8);
正确答案:C
解析:程序中由于n为整型,所以1/n的结果始终为0,故程序最后输出的结果为0,其结果错误,原因为在表达式1/n中1和n均为整型,所以应该将1改为1.0,这样表达式1.0/n的值不为0,为该数学表达式的值,因此我们可以知道导致程序运行后输出结果错误的行为s=s+1/n。

39.以下函数调用语句中含有_______个实参。

func((exp1,exp2),(exp3,exp4,exp5));
A.1
B.2
C.4
D.5
正确答案:B
解析:实参可以是常量、变量或表达式,(exp1,exp2)是逗号表达式,它的值是exp2的值;(exp3,exp4,exp5)是逗号表达式,它的值是exp5的值。

所以该函数调用语句含有的实参个数是2,即:(exp1,exp2)和(exp3,exp4,exp5)。

40.设x、y、z、t均为int型变量,则执行以下语句后,t的值是( ) x =y=z=l;t=+ + x | | + + y && + + z;
A.不定值
B.2
C.1
D.0
正确答案:C
41.以下选项中,值为1的表达式是______。

A.1-’0’
B.1-’、0’
C.’1’-0
D.’\0’-’0’
正确答案:B
解析:‘0’代表ASCⅡ码为48的字符,‘\0’代表ASCⅡ码为0的字符,‘1’代表ASCⅡ码为49的字符,所以只有选项B的表达式的值为1。

填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡上。

注意:以命令关键字填空的必须拼写完整。

42.在面向对象方法中,类之间共享属性和方法的机制称为______。

正确答案:继承
解析:在面向对象的程序设计方法中,某些属性和方法是可以共享的,由于类从父类中继承而来,这样提高了软件的可重用性。

43.实体联系模型是一种常用的高级概念数据模型,而______是实体联系模型中的核心。

正确答案:实体联系图或E-R图
解析:实体联系图(B-R图)是实体联系模型中的核心。

由于E-R图描述的是数据流图中数据存储及其之间的关系,因此它是数据库观念设计的最常用的工具。

44.在运算过程中,能够使空表与非空表的运算统一的结构是【】。

正确答案:循环链表
解析:在链表的运算过程中,采用链接方式即循环链表的结构把空表与非空表的运算统一起来。

循环链表具有两个特点:①在循环链表中增加了一个表头结点,其数据域为任意或根据需要来设置,指针域指向线性表的第一个元素的结点。

循环链表的头指针指向表头结点。

②循环表中最后一个结点的指针不是空,而是指向表头结点。

45.软件维护活动包括以下几类:改正性维护、适应性维护、【】维护和预防性维护。

正确答案:完善性
解析:软件维护活动包括以下几类;改正性维护、适应性维护、完善性维护和预防性维护。

完善性维护是指为了满足用户对软件提出的新功能与性能要求,需要修改或再开发软件,以扩充软件功能、增强软件睦能、改进加工效率、提高软件的可维护性。

46.如果一个工人可管理多个设备,而一个设备只被一个工人管理,则卖体“工人”与实体“设备”之间存在【】关系。

正确答案:一对多
解析:实体之间的联系有3类:一对一,一对多,多对多。

设有两个实体集E1和E2,如果E2中的每一个实体与E1中的任意个实体(包括零个)有联系,而E1中的每一个实体最多与E2中的一个实体有联系,则称这样的联系为“从E2到E1的一对多的联系”,通常表示为“l:n的联系”。

由此可见,工人和设备之间是一对多关系。

47.下列程序的输出结果是______。

#include<stdio.h>main( ) { int a=2,b=- 1,c=2; if(a<b) if(b<0) c=0; else c++; printf(“%d\n”,c);}
正确答案:2
解析:分析程序,a=2,b=-1,c=2时,if语句的表达式a<b不成立,不再往下判断,直接退出if语句,执行后面的输出语句,程序结束。

在这个程序中a、b、c的值没做任何改变。

下面程序的输出结果是______。

main( ){ static char a[]=“language”,b[]=“program”;char *ptrl=a,*ptr2=b;int kfor(k=0;k<7;k++)if(*(ptrl+k)==*(ptr2+k))printf(“%c”,*(ptr1+k));}
正确答案:
48.在树形结构中,没有前件的结点是( )。

正确答案:根结点
49.以下程序运行后的输出结果是( )。

struct NODE { int k;struct NODE*link;};main( ) { struct NODE m[5],*p=m,*q=m+4;int i=0;while(p!=q) {p->k=++i;p++;q->k=i++;q--;} q->k=i;for(i=0;i<5;i++)printf(“%d”,m[i].k);printf(“\n”);}
正确答案:13431
50.下面程序的运行结果是______。

#include<stdio.h>main( ) { void inc1( );void inc2( );inc1( );inc1( );inc1( );inc2( );inc2( );inc2( );} void inc1( ) { int x=0;x++;printf(“in inc1 x=%d\n”,x);} void inc2( ) { static int x=0;x++;printf(“in inc2 x=%d\n”,x);}
正确答案:in inc1 x=1in inc1 x=1in inc1 x=1in inc2 x=1in inc2 x=2in inc2 x=3
51.若有定义doublea [5];,则a数组元素下标的上限为______。

正确答案:4
解析:一维数组元素的定义形式为:数组名[N],则该数组中元素的下限是0,上限是N-1。

52.下列程序的运行结果是【】。

main( ) { int i; for(i=1;i <=5;i++) f(i);} f(j) { int j; static int a=1000;auto int k=1;++k;printf(“%d+%d+%d=%d\n”,a,k,j,a+k+j);a+=10;}
正确答案:100+2+1=103110+2+2=114120+2+3=125130+2+4=136140+2+5=147 解析:静态局部变量的生存期为整个程序的运行期间,而作用域为定义该变量的函数或局部范围。

自动变量的建立和撤销都是由系统自动进行的,所以称为自动变量。

自动变量的作用域和生存期都为定义它的局部范围内。

对同一函数的两次调用之间,自动变量的值是不保留的。

而静态变量则保留。

注意:局部变量和全局变量的定义及其作用范围。

53.若有定义int a[4][4]={{1,2,3,4},{0},{4,6,8,10},{1,3,5,7}},则初始化后,a[1][1]得到的初值是______。

正确答案:0
解析:二维数组可以看成是按矩阵形式排列的,题目中给二维数组赋初值是按行分段赋值的,a[4][4]可以分解为4个一维数组,其数组名分别为a[0]、a[1]、
a[2]、a[3],这4个一维数组都有4个元素,a[0]的元素为a[0][0]、a[0][1]、a[0][2]、a[0][3]。

54.下列程序的输出结果是______。

long fun5(int n) ( long s; if((n==l)‖(n==2)) s=2; else s=n+fun5(n-1); return(s); } main( ) { long x; x=fun5(4); printf(%1d\n”,x);
正确答案:9
解析:考查if else语句,n==4不满足条件,所以fun5(4)=4+fun5(3),n==3也不满足条件,fun5(3)=3+fun5(2),n==2满足条件fun5(2)=2,故x=4+3+2=9。

55.下面程序把从终端读入的10个整数以二进制的方式写到一个名为bi.dat的新文件中。

请填空。

#include<stdio.h>FILE * fp;main( ) { int i,j;if((fp=fopen(【】,”wb”));=NULL)exit(0);for(i =0;i<10;i++) { scanf(“%d”,&j);fwrite(&j,sizeof(int),1,【】);} fclose(fp);}
正确答案:”bi.dat”fp
56.设有定义语句:int a[][3]={{0},{1}{2}};,则数组元素a[1][2]的值是【】。

正确答案:0
解析:本题考查的是二维数组初始化问题。

题中对数组的a[0][0],a[1][0],a[2][0]3个元素分别赋值为0,1,2,其余的元素都自动赋0。

所以a[1][2]的值为0。

相关文档
最新文档