国家二级C语言机试(选择题)模拟试卷27_第1页
国家二级C语言机试(选择题)模拟试卷27_第2页
国家二级C语言机试(选择题)模拟试卷27_第3页
国家二级C语言机试(选择题)模拟试卷27_第4页
国家二级C语言机试(选择题)模拟试卷27_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级C语言机试(选择题)模拟试

卷第1套

一、选择题(本题共25题,每题1.0分,共25分。)

1、以下叙述中正确的是

A、C程序中的每一行只能写一条语句

B、简单C语句必须以分号结束

C、C语言程序中的注释必须与语句写在同一行

D、C语句必须在一行内写完

标准答案:B

知识点解析:C语言的书写格式自由,一行可写多条语句,一条语句也可写在不同

行上。C语言注释是比较自由的,可以写在一行或者多行。C语言规定每条语句和

数据定义的最后必须有一个分号,分号是C语句的必要组成部分。

2、在长度为n的顺序表中查找一个元素,假设需要查找的元素有一半的机会在表

中,并且如果元素在表中,则出现在表中每个位置上的可能性是相同的。则在平均

情况下需要比较的次数大约为()。

A、n

B、3n/4

C、n/2

D、n/4

标准答案:B

知识点解析:在顺序表中查找,最好情况下第一个元素就是要查找的元素,则比较

次数为1;在最坏情况下,最后一个元素才是要找的元素,则比较次数为n。这是

找到元素的情况。如果没有找到元素,则要比较n次。因此,平均需要比较:找到

元素的情况xT+未找到元素的情况x7=(l+2+…+n)/nxT+nx7=一1,大约为3n

/4o

3、下列叙述中错误的是

A、在双向链表中,可以从任何一个结点开始直接遍历到所有结点

R、在循环链表中.可以从任何一个结点开始直接遍历到所有结点

C、在线性单链表中,可以从任何一个结点开始直接遍历到所有结点

D、在二叉链表中,可以从根结点开始遍历到所有结点

标准答案:C

知识点解析:线性队列是一种线性单链表,对线性队列的遍历只能从队列的头开

始,从中间的结点开始不能够遍历到所有的结点。选项C的描述是错误的。

4、在软件设计中,不属于过程设计工具的是

A、PDL(过程设计语言)

B、PAD图

C、N—S图

D、DFD图

标准答案:D

知识点解析:PDL语言[PDLlanguage)一种设计性语言。它是软件设计中广泛使用

的语言之一;PAD是问题分析图(ProblemAnalysisDiagr锄)的英文缩写,自1974

年由口本的二村良彦等人提出的乂一种主要用于描述软件详细设计的图形表示工

具;数据流图(DataFlowDiagram):简称DFD,是结构化系统分析方法的主要表达

工具及用于表示软件模型的一种图示方法;N-S图也被称为盒图或CHAPIN图。

由一些基本的框组成一个大的框,这种流程图又称为N-S结构流程图(以两个人

的名字的头一个字母组成)。N—S图包括顺序、选择和循环三种基本结构。常见的

过程设计工具有:图形工具:程序流程图,N—S,PAD,HIPO;表格工具:判定

表:语言工具:PDL(伪码)。

5、C语言规定,在一个C程序中,main。函数的位置()。

A、必须在系统调用的库函数之后

B、必须在程序的开始

C、必须在程序的最后

D、可以在任意位置

标准答案:D

知识点解析:每个C程序有且只有一个主函数(main),且程序必须从“main。"函数

开始执行,而且“main(广函数可以放在程序中的任意位置。

6、设二义树的前序序列为ABDEGHCFIJ,中序序列为DBGEHACIFJ。则按层次

输出(从上到下,同一层从左到右)的序列为

A、ABCDEFGHIJ

B、DGHEBIJFCA

C、JIHGFEDCBA

D、GHIJDEFBCA

标准答案:A

知识点解析:前序遍历中,第一个字母是根结点,也就是A是根结点;在中序遍

历中,根结点前面的是左子树、后面的是右子树。前序中,B在A的后面,中序

中在左子树中,可知B为A的左结点。中序中D在B的前面,前序中在B的后

面,可知D为B的左结点,GEH为B的右子树。前序中顺序为EGH,由此可知,

E为B的右结点,G为E的左结点、H为E的右结点。右子树中,前序中C在最

前'因为右子树根结点,也就是A的右结点,根据前序中的子树FIJ和中序中的

IFJ子树可知F为C的右结点,I为F的左结点、J为F的右结点。由此可画出这个

二叉树,然后根据二叉树

7、公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有

多名职员。则实体部门和职员间的联系是

A>1:1联系

B%m:1联系

C、1:m联系

D、m:n联系

标准答案:C

知识点解析:一个部门可以有多名员工,所以实体部门和职员间的联系是1:m联

系。

8、以下叙述中正确的是

A、语句inta口={0};是不合法的,遗漏了数组的大小

B、语句chara[2]={“A“,“B”);是合法的,定义了一个包含两个字符的数组

C、语句inta[8]={0};是合法的

D、语句chara[3];a="AB";是合法的,因为数组有三个字符空间的容量,可以保

存两个字符

标准答案:C

知识点小析:当系统为所定义的数组在内存中开辟一串连续的存储单元时,这些存

储单元中并没有确定的值,可以在定义语句中为所定义数组的各个元素赋初值。

数组初始化赋值是指在数组定义时给数组元素赋予初值。初始化赋值的一般形式

为:类型说明符数组名[常量表达式]二{值,值,…,值};需要注意的是当所赋初

值多于所定义数组的元素个数时,在编译时将给出出错信息,在指定初值时,第一

个初值必定赋给下标为。的元素,然后按这些数值的排列顺序赋初值,只能给元素

逐个赋值,不能给数组整体赋值。如果给全部元素赋值,则在数组说明中,可以不

给出数组元素的个数C

9、DOS文件系统的组织结构属于

A、星形结构

B、网形结构

C、环形结构

D、树形结构

标准答案:D

知识点解析:DOS中目录结构是层次的,由根目录到子目录形成一个树型结构。

10、有以下结构体说明、变量定义和赋值语句:structSTD{charname[10];int

age:charsex;|srs],*ps;ps=&g[O];则下列scanf函数调用语句有错误的是()。

A、scanf("%s",s[0].name);

B、seanfC'%dn,&s[0].age);

C^scanf("%c",&(ps->sex));

D、seanf("%d",ps->age);

标准答案:D

知识点解析:本题考查结构体的相关知识。题目中需要输入一个变量,scarff要求

参数为指针,而D选项中ps->age为一个变量,不是指针,所以错误。

11、设有定义charstr[]="HeHo";则语句printf("%d%d",sizeof(str),strlen(stri);

的输出结果是

A、66

B、65

C、55

D、56

标准答案:B

知识点解析:sizeof主要用于测试变量所占的实际内存,而strlcn函数主要测试字

符串中实际字符的个数,字符串”Hello”占有内存6个字节,而字符串中共有5个字

符。

12、下列关系表达式中,结果为“假”的是

A、(3<4)==1

B、(3+4)>6

C、(3!=4)>2

D、3<=4

标准答案:C

知识点解析:关系表达式和逻辑表达式的结果为非零或者0,其中。表示假,而非

零表示真,由于3!=4的结果为1,而1>2的结果为假。

13、若有定义:inta,b:通过语句scanf("%d;%d“,&a,&b):能把整数3赋给

变量a,5赋给变量b的输入数据是

A、3,5

B、35

C、3;5

D、35

标准答案:C

知识点解析:在采用seanf这个函数输入数据时,要严格遵守其输入的规则定义。

本题此函数定义的规则是,在两个整数之间加分号输入。

14^若有定义语句:inia=3,b=2,c=l;以下选项中错误的赋值表达式是()。

A、a=(b=4)=3;

B、a=b=c+1;

C^a=(b=4)+c;

D、a=l+(b=c=4);

标准答案:A

知识点解析:不能将变量或常量赋给一个表达式,所以A选项中(b=4)=3是错误的。

15、下列关于栈的叙述中,正确的是

A、栈底元素一定是最后入栈的元素

B、栈顶元素一定是最先入栈的元素

C、栈操作遵循先进后出的原则

D、以上说法均错误

标准答案:C

知识点解析:栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元

素总是最先被插入的元素,从而也是最后才能被删除的元素。栈的修改是按后进先

出的原则进行的。因此,栈称为先进后出表,或“后进先出”表,所以选择C。

16、有下列程序:structS{intn:inta[20];);voidflint*a,intn){inti;for(i=0;i<

n-1:i++)a[i]+:i;)main(){inti;structSs={10,{2,3,1,6,8,7,5,4,10,

9|);f(s.a,s.n);for(i=0;i<s.n;i++)printfp%d,“,s.a[i]);)程序运行

后的输出结果是

A、3,4,2,7,9,8,6,5,11,10,

B、2,3,1,6,8,7,5,4,10,9,

C、2,4,3,9,12,12,11,11,18,9,

D、1,2,3,6,8,7,5,4,10,9

标准答案:C

知识点解析:voidf(int*a,intn)函数的功能是对数组叫的每一个元素力口上其下标的

值。所以在main()函数中f(s.as.n)语句会调用intn涵数,此时指针a指

向数组s.a={2,3,I,6,8,7,5,4,10,9),n=IO:然后执行for(i=0;i<

n.1;i++)a[i]+=i;语句,也就是从0开始到8对数组s.a={2,3,1,6,8,7,

5,4,10,9}中的每一个元素加上其下标值。

I7N若有以下程序#includeint*f(int*s,int*t)(int*k;if(*s<*t){k=s;s=t;t=k;}

returns;)main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);

printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);)则程序的输出结果是

A、3,5,5,3,5

B、3,535,5

C、5,3,5,3,5

D^5,3,3,5,5

标准答案:B

知识点解析:在主函数中分别给整型变量i、j和指针型变量p、q赋初值,并声明

指针变量r;调用f函数,并将实参变量p和q的值传递给形参变量s和t,并且f

函数是指针型函数,即函数的返回值将是一个地址。在f函数中,如果条件成立,

则将指针变量s和t互换,并且将指针s的地址返回主函数。最后输出

*i•的值,即3,535,5。因此B选项正确。

18、有以下程序voidfun(inln,int*s){intf;if(n=l)*s=n+l;else{fun(n-l,&f);

*s=f;))main(){intx=0:fun(4,&x);printf(n%d\n",x);)程序运行后的输出

结果是

A、I

B、3

C、4

D、2

标准答案:D

知识点解析:函数fun为递归调用函数,如果n的值为1,那么后面形参指向的空

间存放n+1,否则继续计算fun(n・l)的值°调用分析过程:fun(4,&x)-fun(3,

&x)->fun(2,&x)->fun(l,&x)在回归的过程中,对丁x内的数据并没有改动。

19、有下列程序:voidf(intbU){inti;for(i=2;i<6;i++)b[ij本=2;)mam()

{inta[10]={l,2,3,4,5,6,7,8,9,10),i;f(a);for(i=0;i<l0,i+

4-)printf("%d,a[i]);}程序运行后的输出结果是

A、1,2,3,4,5,6,7,8,9,10,

B、I,2,3,4,10,12,14,16,9,10,

C、1,2,6,8,10,12,7,8,9,10,

D、1,2,6,8,10,12,14,16,9,10,

标准答案:C

知识点解析:函数voidf(intb[])的功能是对数组b口中第2个到第5个元素的值逐

个扩大2倍。所以在main。函数中,f(8)语句的作用是对数组a[10]中从a[2]到a[5]

的各个数字乘以2,因而数组a[10]的元素就变成了{1,2,6,8,10,12,7,8,

9,10)o

20、有以下结构体说明、变量定义和赋值语句structSTD{charname(J0];intage;

charsex;}s[5],*ps;ps=&s[O];则以下scanf函数调用语句有错误的是

A、scanf("d",&s[0].age);

B、scanf("%c",&(ps->sex));

C、scanf("%s",s[0].name);

D、scanf("%d”.ps->age):

标准答案:D

知识点解析:程序段定义了结构体变量数组s[5]和指针变量ps,然后ps指向数组

s[5]中的第一个元素,因而ps->age用s[0].age。因为在输入scanf()函数中,第2

个参数应该表示为地址变量,而选项A)表示的值,而不是一个地址值。

21、一个栈的初始状态为空。现将元素1,23A,B,C依次入栈,然后再依次出栈,

则元素出栈的顺序是

A、1,2,3,A,B,C

B、C,B,A』,2,3

C、C,B,A,3,2,1

D、1,2,3,C,B,A

标准答案:c

知识点解析:栈的修改是按后进先出的原则进行的,所以顺序应与入栈顺序相反,

故选C。

22、有以卜.程序#inc1udeVstdio.h>main()voidfun(int*a,int*b){intx=3,y=5,

*p=&x,*q=&y;{int*c;fun(p,q);printf("%d,%d,",*p,*q);c=a;a=b;

b=c;}fun(&x,&y);printf("%d,%d\n",*p,*q);}程序运行后的输出结果是

A、3,5,5,3

B、3,5,3,5

C^5,3,3,5

D、5,3,5,3

标准答案:B

知识点解析:本题考查函数的调用与指针。p和q分别为指向x和y的指针,函数

fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,

该操作不能返回主函数。而主函数中,fun(p,q)、fun(&x,&y)的实参均为x与y

的地址,因此,两者结果相同,并且两者指针指向的值不能变化。

23、有以卜程序structS{inta,b;}data[2]={10,100,20,200);main(){structS

p=data[l];printf("%d\n,',++(p.a));}程序运行后的输出结果是

A、11

B、20

C、21

D、10

标准答案:C

知识点解析•:在题目中定义了结构体S类型的数组变量data,并对其赋初值。在程

序中定义了指向结构体S类型的变量p,并把数组data的第二个元素da⑷1]的值赋

给它,所以此时成员变量p.a的值等于20,在输出时分别加1,所以输入结果为选

项A。

24、以下叙述中错误的是

A、用typedef可以说明一种新的类型名

R、typedef的作用是用一个新的标识符来代表已存在的类型名

C、可以用typedef说明的新类型名来定义变量

D、typedef说明的新类型名必须使用大写字母,否则会出编译错误

标准答案:D

知识点解析:本题考查typedef的使用方法,typed”对已存在的类型使用一个新的

名字,新类型可以使用小写,所以D选项错误。

25、以下叙述中正确的是

A、在C程序中的八进制和十六进制,可以是浮点数

B、整型变量可以分为int型、short型、long型和unsigned型四种

C、八进制数的开头要使用英文字母。,否则不能与十进制区分开

D、英文大写字母X和英文小写字母x都可以作为二进制数字的开头字符

标准答案:B

知识点解析:C程序中的实型常量只有十进制一种数制,所以A错误。八进制数以

0打头,所以C错误。C语言中整数只有十进制、八进制、十六进制三种没有二进制

数制,所以D错误。

国家二级C语言机试(选择题)模拟试

卷第2套

一、选择题(本题共25题,每题1.0分,共25分。)

1、以下叙述中正确的是

A、在C语言程序设计中,所有函数必须保存在一个源文件中‘

B、在算法设计时,可以把复杂任务分解成一些简单的子任务

C、只要包含了三种基本结构的算法就是结构化程序

D、结构化程序必须包含所有的三种基本结构,缺一不可

标准答案:B

知识点解析:模块化设计思想,就是把复杂的任务分成简单的子任务,心函数或者

过程描述子任务,C语言中一个程序可以包括多个源文件,每个源文件可以有符干

个函数,结构化的程序由顺序结构、循环结构和选择结构三种基本结构组成,不一

定全要包括这三种结构,而算法不等于程序。

2、以下关于结构化程序设计的叙述中正确的是

A、结构化程序使用got。语句会很便捷

B、一个结构化程序必须同时由顺序、分支、循环三种结构组成

C、由三种基本结构构成的程序只能解决小规模的问题

D、在C语言中,程序的模块化是利用函数实现的

标准答案:D

知识点解析:C语言是结构化程序设计语言,顺序结构、选择结构、循环结构是结

构化程序设计的二种基本结构,研究证明任何程序都可以由这三种基本结构组成。

但是程序可以包含一种或者儿种结构,不是必须包含全部三种结构。自从提倡结构

化设计以来,gol。就成了有争议的语句。首先,由于g。。语句可以灵活跳转,如

果不加限制,它的确会破坏结构化设计风格。其次,got。语句经常带来错误或隐

患。它可能跳过了某些对象的构造、变量的初始化、重要的计算等语句。Goto语

句的使用会使程序容易发生错误并且也不易阅读,所以应避免使用。由三种基本结

构构成的程序几乎能解决大部分问题。

3、下列叙述中正确的是

A、)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续

B、顺序存储结构只针对线性结构,链式存储结构只针对非线性结构

C、顺序存储结构能存储有序表,链式存储结构不能存储有序表

D、链式存储结构比顺序存储结构节省存储空间

标准答案:A

知识点解析:顺序存储方式主要用于线性的数据结构,它把逻辑上相邻的数据元素

存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现。

而链式存储结构的存储空间不一定是连续的。

4、对下列二叉树()。进行前序遍历的结果是()。

A、DYBEAFCZX

B、YDEBFZXCA

C、ABDYECFXZ

D、ABCDEFXYZ

标准答案:C

知识点解析:二叉树前序遍历的简单描述:若二叉树为空,则结束返回;否则,

①访问根节点;②前序遍历左子树;③前序遍历石子树。可见,前序遍历二叉树

的过程是一个递归的过程。根据题目中给出的二叉树的结构可知前序遍历的结果是

ABDYECFXZo

5、有以下程序main。{charcl='A',c2=*Y*;prin【f("%d,%d\n",cl,c2);)

程序的输出结果是

A、输出格式不合法,输出出错信息

B、65,90

C、65,89

D、A,Y

标准答案:C

知识点解析:C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。

在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。

6、若变量已正确定义,以下选项中非法的表达式是

A、a!=4l|b'

B、V%4

C>a,=l/2*(x=y=20,x*3)

D、'A'+32

标准答案:C

知识点解析:赋值表达式左边应为变量,选项C中左边为字符常最,因此非法,

其余表达式均为合法的表达式。

7、C语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的

外部指的是()。

A、冠以关键字extern

B、位置在函数体外部

C、作用范围是全程的

D、位置在函数的外部

标准答案:D

知识点解析:C语言中允许用位置在函数外部的说明来指定变量、函数和其他标识

符的特征。

8、下面不属于软件需求规格说明书内容的是

A、软件的可验证性

B、软件的功能需求

C、软件的性能需求

D、软件的外部接口

标准答案:A

知识点解析:软件需求说明书的编制是为了使用户和软件开发者双方对该软件的初

始规定有一个共同的理解,使之成为整个开发工作的基础。包含硬件、功能、性

能、输入输出、接口需求、警示信息、保密安全、数据与数据库、文档和法规的要

求。

9、关于算法,以下叙述中错误的是

A、同一个算法对于相同的输入必能得出相同的结果

B、一个算法对于某个输入的循环次数是可以事先估计出来的

C、某个算法可能会没有输入

D、任何算法都能转换成计算机高级语言的程序,并在有限时间内运行完毕

标准答案:D

知识点解析:算法和程序不同,算法满足以下特性:算法有5个特性,即有穷性、

确定性、可行性、有零个或多个输入以及有一个或多个输出。算法的确定性是指算

法中的每一个步骤都必须有明确定义,不允许有模棱两可的解释,也不允许有多义

性,因此对于相同的输入必有相同的输出,同时可以事先估计算法的时间复杂度,

对于有循环的算法,以循环体内的循环次数来估测时间复杂度。

10、下列叙述中正确的是()。

A、conlinue语句的作用是使程序的执行流程跳出包含它的所有循环

B、break语句只能用在循环体内和switch语句体内

C^在循环体内使用break语句和continue语句的作用相同

D、break语句只能用于switch语句体中

标准答案:B

知识点解析:continue语句的作用是跳过循环体中剩余的语句而进行下一次循环,

所以A选项错误。break语句的作用是终止正在执行的switch流程,跳出switch结

构或者强制终止当前循环,从当前执行的循环中跳出,所以C、D选项错误。

11、有三个关系R、S和T如下:

关系R和S通过运算得到关系T,

A、并

B、自然连接

C、笛卡尔积

D、交

标准答案:D

知识点解析:关系R与S经交运算后所得到的关系是由那些既在R内又在S内的

有序组组成的,记为Rns。

12^有以下程序:#include<stdio.h>voidf(intb|]){inti;for(i=2;i<6;i++)

b[i]*=2;}main(){inta[10]={l,2,3,4,5,6,7,8,9,10),i;f(a);

for(i=0;i<10;i++)pfinff("%d,",a[i]);}程序的运行结果是()°

A、1,2,3,4,5,6,7,8,9,10,

B、1,2,6,8,10,12,7,8,9,10,

C、1,2,3,4,10,12,14,16,9,10,

D、1,2,6,8,10,12,14,16,9,10,

标准答案:B

知识点解析:数组名是常量,表示的是数组首元素的地址。当执行f(a)的时候,由

于传递的是首地址,相当于直接对数组a进行操作,所以从数组a的第3个元素

a[2]到元素a[5],每个元素值扩大两倍,因此B选项正确。

13、有以下程序#includcmain(){chara,b,c,d;scanf("%c%c",&a,&b);c=getchar();

d=getchar();printf("%c%c%c%c\nn,a,b,c,d);)当执行程序时,按卜列方式输入数据

(从第1列开始,代表回车,注意:回车也是一个字符)1234则输出结果是

()O

A、123

B、12

C、1234

D、1234

标准答案:A

知识点解析:考查字符数据的输入输出。gelchar()函数只能接受单个字符,数字和

回车也会按照字符处理,输入多于一个字符时,只接受第一个字符。本程序输入结

束之后,a=T,b=2,c=<回车>,d=3。则输出的结果为A)。

14>有以卜程序^includevoidfun(char*a,char*b){while(*a=,*,)a++;

while(*b=*a){b++;a++:))main(){char*s="*****a*b*****”,t[80];fun(s,t);

puts(t);)程序的运行垢果是

A、a*b

B、*****a*b

C、a*b****

D、ab

标准答案:C

知识点解析:主函数main()定义了指向字符串的指针和一个字符数组,接着调

fun(s,I)函数,进行实参向形参传递,函数fun()第一个while语句判断*a中的值为

“”时继续扫描,当遇到不是“”时结束,接着第二个while循环语句,将*&中从“a”

开始的后续所有字符都赋予*b,也就是t[80]中的内容为"a*b****”。

15、有以下程序#include<stdio.h>typedefstruct{intb,p;)A;voidf(Ac)/*注

意:C是结构变量名*/{intj;c.b+=hc.p+=2;|main(){i;Aa={L2):f(a);

printfC%d,%d\n”,a.b,a.p);)程序运行后的输出结果是

A、274

B、1,2

C、I,4

D、2,3

标准答案:B

知识点解析:在C语言中,数据只能从文参单向传递给形参,称为“按值“传递。

也就是说,当简单变量作为实参时,用户不可能在函数中改变对应实参的值。所以

本题中在main()函数f(a)语句中结构体实参a作为值,传递给函数f(AC中的形参

c;这种值传递的方式不会对实参a产生任何影响,所以结构体实参a的值不会发

生变化。

16、若有以下说明和定义uniondt{inta;charb;doublec;)data:以下叙述中错

误的是

A、data的每个成员起始地址都相同

B、变量data所占内存字节数与成员c所占字节数相等

C、程序段:data.a=5;printfC'%f\n",data.c);输出结果为5.000000

D、data可以作为函数的实参

标准答案:C

知识点解析:本题主要考查联合的定义和使用。选项A)联合中每个成员起始地址

都是一样的,正确;选项B)联合的长度等于长度最长成员的长度,在dala中,成

员c是double类型,长度为8个字节最长,因此data所占用字节数和成员c长度

一致。选项C)整型和double类型的存储格式不一致,整数5在内存中的存储格式

和浮点数5存储格式不一样,因此daac输出不会是5.000000;选项D)联合和

结构体都可以作为函数实参。

17、设变量已正确定义并赋值,以下正确的表达式是

A、x=y+z+5,++y

B、int(15.8%5)

C^x=y*5=x+z

D、x=25%5.0

标准答案:A

知识点解析:在赋值表达式中,赋值符号'、="的左边只能为赋值的变量,不能为表

达式,右边可以为常量或者是表达式,故选项C错误;在取余运算中,运算符“%”

两边都必须是整型数据,所以选项B、D错误,选项A是C语言中的逗号表达

式。

18、有以F#include#defineN4voidfun(inta(][N],intb[]){inti;for(i=0;i

A、-3,-1,1,3,

B、-12,-3,0A

C、0,1,2,3,

D、-3,-3,-3,-3,

标准答案:A

知识点解析:函数fun()的功能是计算b[i]:b[0]=a[0][0]-a[0][3]=-3,b[l]=a[l][l]-

a[l][2]=-l,b[2]=a[2][2]-a[2][l]=l,b[3]=a[3][3]-a[3][O]=3,所以计算得到的y值为

选项A)o

19、有以下程序段charname[20];intnum;scanf(nname=%snum=%dM,name,&num);

当执行上述程序段,并从键盘输入:name=Lilinum=1001后,name的值为

A、name=Lili

B、Lilinum=

C、nanie=Lilinum=1001

D、Lili

标准答案:D

知识点解析:在题目中以字符串的形式给字符数组赋值,所以字符数组name的值

为Lili。

20、有以下程序#includeintf(intn){intt=0,a=5;if(n/2){inta=6;t+=a++;}e:se

{inta=7;t+=a++;}returnt+a++;)main(){ints=0,i=0;for(;i<2;i++)s+=f(i);

printf("%d\n”,s);}程序运行后的输出结果是()。

A、24

B、28

C、32

D、36

标准答案:A

知识点解析:一个源文件中如果外部变量和局部变量同名,则在该局部变量的作用

域内,该外部变量会被“屏蔽",main。函数中调用两次f()函数,两次调用均进入

else选择支句,t=7,返回7+5=12,所以s=O+f(O)+f(1)=24,答案选A。

21、有下列程序:voidf(intb|]){intI:for(i=2;i<6;i++)b|i]=2;}main(){int

a[10]={l,2,3,4,5,6,7,8,9,10),i;f(a);for(i=0;i<10,

i++)printf("%d,“,a[i]);}程序运行后的输出结果是

A、1,2,3,4,5,6,7,8,9,10,

B、1,2,3,4,10,12,14,16,9,10,

C、1,2,6,8,10,12,7,8,9,10,

D、1,2,6,8,10,12,14,16,9,10,

标准答案:C

知识点解析:函数voidf(intb[])的功能是对数组b口中第2个到第5个元素的值逐

个扩大2倍。所以在main。函数中,f(a)语句的作用是对数组a[10]中从a⑵到。5]

的各个数字乘以2,因而数组a[10]的元素就变成了{1,2,6,8,10,12,7,8,

9,I0)o

22、以下叙述中正确的是

A、当break出现在循环体中的switch语句体内时,其作用是跳出该switch语句

体,并中止循环体的执行

B、只能在循环体内和switch语句体内使用break语句

C、continue语句的作用是:在执行完本次循环体中剩余语句后,中止循环

D、在while语句和do-while语句中无法使用continue语句

标准答案:B

知识点解析:break语句可以使程序流程跳出switch语句体,也可用break语句在

循环结构中终止循环体,从而提前结束循环,而当break出现在循环体中的switch

语句体内时,其作用只是跳出该switch语句体,并不能中止循环体的执行。若想

强行终止循环体的执行,可以在循环体中.但并不在*witch语句中设置break语

句,满足某种条件则跳出循环体。continue语句的作用是结束本次循环,在while

和do-while循环中,cominue语句使得流程直接跳到循环控制条件的测试部分,然

后决定循环是否继续进行。

23、若有以下程序typedefstructstu{charname|J0|,gender;intscore;}STU;void

f(char*p){sgcpy(p,"Qian");}main(){STUa={,,Zhao",290),b;b=a;

f(b.name);b.gender=T;b.score=350;printf("%s,%c,%d,",a.name,

a.gender,a.score);printf("%s,%c,%d\n",b.name,b.gender,b.sc

A、Zhao,m,290,Zhao,m,290

Qian,f,350,Qian,f,350

C、Zhao,m,290,Qian,f,350

D、Zhao,m,290,Zhao,f,350

标准答案:C

知识点解析:主函数中结构体变量定义同时赋初值。执行b=a;语句后,b的数据

和a的数据相同,调用函数f(b.name),形参指针p接收实参b.name的地址,此

时p和b.name指向同一个存储空间,流程转到f执行,p指向的存储空间存放字

符串“Qian",流程结束返回主函数。主函数中变量b的其他成员存放数据。因此a

的数据{“Zhao",'m',290},b的数据为{“Qian",’3350}。注意本题结构体STU

类型变量a和b中的name成员为数组,不是指针,它具有自己的存储空间。

24、若实体A和B是一对多的联系,实体B和C是一对一的联系,则实体A和C

的联系是

A、一对一

B、——对多

C、多对一

D、多对多

标准答案:B

知识点解析:A和B为一对多的联系,则对于A中的每一个实体,B中有多个实

体与之联系,而B与C为一对一联系,则对于B中的每一个实体,C中之多有一

个实体与之联系,则可推出对于A中的每一个实体,C中有多个实体与联系,所

以为一对多联系。

25、有以卜程序#includeintfun(inta,intB){retuma+b;}main(){intx=6,y=7,z=8,r;

r=fun(fun(x,y),z-);printf("%d\n",r);}程序运行后的输出结果是

A、21

B、15

C、20

D、31

标准答案:A

知识点解析:函数fun的功能是返回两个形参的和。调用函数fun(x,y)时,将变量

x=6和y=7的值分别传送变量a和b,并且通过语句returna+h:将13返|口|给主函

数。继续调用函数fun(13,z--),这里z--指将z的值参与运算后,再将z的值减1操

作;将13和8分别传送变量a和b,且通过语句relurna+b:将21返回给主函数。

因此A选项正确。

国家二级C语言机试(选择题)模拟试

卷第3套

一、选择题(本题共25题,每题1.0分,共25分。)

1、设一棵树的度为3,其中没有度为2的结点,且叶子结点数为6。该树中度为3

的结点数为

A、1

B、2

C、3

D、不可能有这样的树

标准答案:D

知识点解析:树的度是指一棵树中,最大的结点的度称为树的度。木题中树的度为

3,也就是坡少有一个度为3的结点。要求没有度为2的结点,且叶子结点为6,

如果要有度为3的结点,那么最多只有5个叶子结点,而画不出6个叶子结点。因

此这样的树是没有的。

2、以下不能输出字符A的语句是(注:字符A的ASCII码值为65,字符a的

ASCH码值为97)

A、pnntf("%c\n",,a,-32);

B、printf(%d\n",

C、printfC%c\n",65);

D、printf("%c\n",'B-l);

标准答案:B

知识点解析:在选项B的输出函数中,大写字符以整型数据的形式输出。

3、Wchara[4]="xyM;char*p;执行了语句p=a之后,*(p+2)的值是()。

A、'B'

B、、(r

c^不确定

D、字符'B,的地址

标准答案:B

知识点解析:在C语言中定义数组指定的是元素的个数,因此a[4]定义了一个含4

个元素的数组。对于字符数组,数组名a实际上是指向该串第一个元素a[0]的指

针,即其值为&a[0],在执行了语句p=a之后,p指向a[0],而木(p+2)的含义为:

指针p加上偏移2,从而指向a[2],然后取a[2]的值。由于C语言中任何字符串都

必须以一个‘'0'字符串结束,因而声明chara[3]二"AB”;实际上隐含赋值a[2]=,\

0\所以正确答案是B),

4、下列程序段的输出结果是()。main。{chars[]="HellowoHd":s[5]=0:

printf("%s\n",s);}

A、HelloOworld

B、Helloworld

C、Hello

D、HelloO

标准答案:C

知识点解析:由于s数组中数组下标为5的元素赋值为0,0是字符串的结束标

志,所以在输出字符串的时,仅输出数组下标为0~4的数组元素。

5、以下正确的字符串常量是

A、'abc'

B、OlympicGames

C、””

D、"\\\"

标准答案:C

知识点解析:字符串常量是由双引号括起来的一串字符。在C语言中,以一个反

斜线开头后跟一个特定的字符,用来代表一个特定的ASCH字符。利用两个,\\\'

表示一个反斜杠,因此选项D的表示无法确认表示几个反斜杠。

6、设表的长度为n。下列算法中,最坏情况下比较次数小于n的是

A、二分查找法

B、堆排序

C、快速排序

D、顺序查找法

标准答案:A

知识点解析:二分法查找只适用于顺序存储的有序表。二分查找的基本方法是:将

被查元素x与线性表的中间项进行比较,若中间项的值等于X,则说明查到;若小

于中间项的值则在线性表的前半部分;以相同的方法进行查找;若大于中间项的

值,则在线性表的后半部分以相同的方法进行查找。在最坏情况下,二分查找需要

比较log2n次。所以选项A正确。

7^有如下程序:#include<stdio.h>main(){FILE*fpl;fpl=fopen("fl.txt",

"wH);fprintf(fpl,"abc');fclose(fpl);}若文本文件fl.txt中原有内容为

good,则运行以上程序后,文件fl.txt中的内容为()。

A、goodabc

B、abed

C、abe

D、abegood

标准答案:C

知识点解析:当用“w”方式打开一个已有内容的文件时,文件中的已有内容将全部

丢失,新写入的内容就是文件的内容。

8、在关系数据库中,用来表示实体间联系的是()。

A、属性

B、二维表

C、网状结构

D、树状结构

标准答案:B

知识点解析:在关系数据库中,用二维表表示实体间的联系。

9、以下程序段中的变量已正确定义:for(i:0;i<4;i}{,i}{)for(k=l;k<3:

u,,

k++);prinff(*);程序的运行结果是()。

A、**

B、****

c、*

D、********

标准答案:C

知识点解析:由于内层循环tor(k=l;k<3;k++)后面直接跟了空语句;所以在

循环内部什么操作也不做,跳出外层循环后执行打印语句,所以打印了一个“松,

选择C选项。

10、以下叙述中正确的是

A、continue语句的作用是:使程序的执行流程跳出包含它的所有循环

B、break语句只能用在循环体内和switch语句体内

C^在循环体内使用break语句和continue语句的作用相同

D、break语句只能用于switch语句体中

标准答案:B

知识点解析:只能在循环体内和swish语句体内使用break语句。continue语句的

作用是结束本次循环,即跳过本次循环体中continue语句后面的语句,立刻进行下

一次的循环条件判断,可以理解为仅结束本次循环。而break语句可以使程序流程

跳出switch语句体,也可用break语句在循环结构中终止循环体。

11、下列描述中正确的是

A、为了建立一个关系,首先要构造数据的逻辑关系

B、表示关系的二维表中各元组的每一个分量还可以分成若干数据项

C、一个关系的属性名表称为关系模式

D、一个关系可以包括多个二维表

标准答案:C

知识点解析:为了建立一个关系,首先要指定关系的属性,所以选项A是错误

的。表示关系的二维表中各元组的每一个分量必须是不可分的基本数据项,所以选

项B是错误的。在关系数据库中,把数据表示成二维表,而一个二维表就是一个

关系,所以选项D是错误的。一个关系的属性名表称为该关系的关系模式,其记

法为:〈关系名〉(V属性名1>,V属性名2>,…,V属性名n>)。

12、以下叙述中正确的是

A、语句inta口={0};是不合法的,遗漏「数组的人小

B、语句chara[2]={”A",”B"};是合法的,定义了一个包含两个字符的数组

C、语句inla[8]={0};是合法的

D、语句chara[3];a="AB":是合法的,因为数组有三个字符空间的容量,可以保

存两个字符

标准答案:c

知识点3析:当系统为所定义的数组在内存中开辟一串连续的存储单元时.这些存

储单元中并没有确定的值,可以在定义语句中为所定义数组的各个元素赋初值。

数组初始化赋值是指在数组定义时给数组元素赋予初值。初始化赋值的一般形式

为:类型说明符数组名[常量表达式]={值,值,…,};。需要注意的是当所赋初

值多于所定义数组的元素个数时,在编译时将给出出错信息,在指定初值时,第一

个初值必定赋给下标为0的元素,然后按这些数值的排列顺序赋初值,只能给元素

逐个赋值,不能给数组整体赋值。如果给全部元素赋值,则在数组说明中,可以不

给出数组元素的个数。

13、若有以F程序#include〈stdio.h>intk=7,m=5;yoidflint**S){int*t=&k:

s=&t;*s=&m;printf(''%d,%d,%d,k,*t>**s);}main(){inti=3,*p=

&i,**r=&p;fir);printf(''%d,%d,%d\n”,i.*P,**r);}则程序的输出结

果是

A、7,5,7,3,3,3,

B、7,5,7,3,5,7,

C^7,5,5,3,3,3,

D、7,7,5,3,3,3

标准答案:C

知识点解析:本题考查二级指针作为函数的参数,可以通过函数调用来改变主函数

中一级指针的指向。主函数中指针变量p指向i,r指向p,调用f函数,形参指针

s指向p,流程转到f函数执行,指针变量指向k,s指向3此时更改了s的指i,

uj,s指向了3更改了s指向的地址空间内容为m的地址,同时[也指向变量m,

因此**s的值为m的值,%为m的值,k为7。流程返回到主函数,没有对主函数

空间的数据和指向作出更改,因此全部为3。

14、有以下程序#include#defineN3voidfun(inta[][N],intb[]){inti,j;for(i=0;i<

N;i++){b[i]=a[i][0];for(j=1;j<N;j++)if(b[i]<a[i][j])b[i]=a[i][j];})main()

{intx|N||N]={1,2,3,4,5,6,7,8,9},y|N|,i;fun(x,y);for(i=0;i<N;

i++)printf(y[i]);printf(,'\nH);)程序运行后的输出结果是

A、3,5,7

B、1,3,5,

C、2,4,8,

D、3,6,9,

标准答案:D

知识点解析:函数fun()的作用是求出二维数组中每一行中的最大元素,所以

在main。函数中执行完fun(x,y)后,数组y中的元素为二维数组x[N][N]每一行的最

大元素。因此D选项正确。

15、以下叙述中错误的是

A、结构化程序由顺序、分支、循环三种基本结构组成

B、C语言是一种结构化程序设计语言

C、使用三种基本结构构成的程序只能解决简单问题

D、结构化程序设计提倡模块化的设计方法

标准答案:C

知识点解析:结构化程序由顺序结构、选择结构和循环结构3种基本结构组成。已

经证明,由3种基本结构组成的算法可以解决任何复杂的问题。由3种基本结构所

构成的算法称为结构化算法;由3种基本结构所构成的程序称为结构化程序。

16、在以卜给出的表达式中,与while(E)中的(E)不等价的表达式是

A、(E>0IIE<0)

B、(!E==0)

C、(E!=0)

D、(E==0)

标准答案:A

知识点解析:在while(E)中p,表达式E可以是C语言中任意合法的条件表达式,

但不能为空,由它来控制循环体是否执行。在选项A中表达式E〉0llE<0是一个逻

辑表达式。

17、由以下while构成的循环,循环体执行的次数是intk=O;while(k=l)k++;

A、一次也不执行

B、执行一次

C、无限次

D、有语法错,不能执行

标准答案:C

知识点解析:循环条件表达式为赋值表达式k=-l,因此循环执行无限次。

18、若有以下程序#includevoidf(intx){if(x>=10){printf("%d-u,

x%10);f(x/10);}elseprintf("%d",x);}main(){intz=123456;f(z);}则程序的输出结

果是

A、6-5-4-3-2-1-

B、6-5-4-3-2-1

C、1-2-3-4-5-6

D、1-2-3-4-5-6-

标准答案:B

知识点解析:本题重点考察函数的递归调用,程序首先初始化整型变量z为

123456,调用函数f。f函数中首先通过if条件语句判断x是否大于等于10,如果

条件成立,求x除以10的余数并输出,同时将变量x进行x/10运算,同时调用函

数f。如果条件不成立,直接输出变量X。因此第I次调用函数,变量x为

123456,条件成立,输出余数6;第2次调用函数,变量x为12345,条件成立,

输出余数5;第3次调用函数,变量x为1234,条件成立,输出余数4;第4次调

用函数,变量x为123,条件成立,输出余数3;第5次调用函数,变量x为12,

条件成立,输出余数2;第6次调用函数,变量x为12345,条件不成立,输巴

10因此B选项正确。

19、有以下程序voidfunl(char*p)main。{char*q;{chara||={"Program"),*p;

q=p;p=&a[3];funl(p);printf("%s\n'\a);while(*q!='\O')}{(*q)++;

q++;}}程序执行后的输出结果是

A、Prphsbn

B、Prohsbn

C>Progsbn

D>Program

标准答案:B

知识点解析:在函数voidfunl(char*p)中,语句(*q)++的功能是q所指的字符加1,

变成其后面的字符:q++就是指针q指向下一个字符的位置。所以在主函数中,语

句p=&a[3]的作用是使指针p指向字符数组叫中的第四个字符的位置,即D指向

字符'g':然后调用函数funl(p)后,字符g变成什,字符T变成",字符'a,变

成字符,变成因而字符数组a|]中的内容就成“Prohshn”。

20、设有定义语句int(*f)(int);则以下叙述正确的是

A、f是基类型为int的指针变量

B、f是指向int类型一维数组的指针变量

C、f是指向函数的指针变量,该函数具有一个int类型的形参

D、f是函数名,该函数的返回值是基类型为in[类型的地址

标准答案:C

知识点解析:定义语句int(*f)(int)中f是指向函数的指针变量,该函数中也只有一

个int型的形参。

21、有以卜程序#includemain(){inta,b;for(a=l,b=l;a<=100;a++){if(b>=20)

break;if(b%3==1){b=b+3;continue;)b=b-5;)printf("%d\n",a);}程序的输出结果

A、10

R、9

C、8

D、7

标准答案:B

知识点解析:首先注意f。「循环的控制条件当b>=20或者a>100则跳出for循环

也即b<20且a<=100时执行for循环;第一次进入循环a=l,b=l均满足循环条

件,但b%3==l条件满足,故执行b=b+3,得到b=4,注意有continue,所以后面语

句不执行,直接跳转到a++这个语句,所以第一次循环完之后a=2,b=4;进入第二

轮循环,b%3==l也是满足的,故再次b=b+3,此轮循环执行之后a=3,b=7,进入下

一轮。此后和前面循环同理,都是b%3==l满足,因为每次都是加3,而之后乂去

模3,且都跳过for后面语句直接执行a++,所以,一直循环到b=22跳出而循

环。此时a为8.综合起来就是,每次循环b增加3,a增加1,且当b>22时跳出循

环,结束程序。所以b从1增加到22,有(22-1)<3=7,所以a=1+7=8.因此B选项

正确。

22、以下叙述中正确的是()。

A、函数既可以直接调用自己,也可以间接调用自己

B、任何情况下都不能用函数名作为实参

C、函数的递归调用不需要额外开销,所以效率很高

D、简单递归不需要明确的结束递归的条件

标准答案:A

知识点解析:函数之间可以嵌套调用,选项A)描述正确;函数名可以作为实参,

实际传递的是该函数的返回值,选项B)错误;递归调用也是函数调用,每次调用

的时候也需要记录每一层的返回点,也要增加许多额外的开销的,选项C)错误;

递归调用和循环很相似,为了防止递归调用无休止地进行,必须在函数内添加明确

的结束条件,选项D)错误;答案选A)。

23、下列与队列结构有关联的是

A、函数的递归调用

B、数组元素的引用

C、多重循环的执行

D、先到先服务的作业调度

标准答案:D

知识点解析:队列的修改是依先进先出的原则进行的,D正确。

24、以下能正确定义字符串的语句是

A^charstr="\x43H;

B、charstr[]="\O";

C、charstr='';

D、charstr[]={,\064,};

标准答案:B

知识点解析:C语言中,字符串是用一对双引号括起来的字符序列,并用字符型数

组来存放.故C选项和D选项不属十字符串

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论