版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)机试模拟试卷第1
套
一、选择题(本题共40题,每题1.0分,共40分。)
1、设有定义:char*c;,以下选项中能够使字符型指针C正确指向一个字符串的
是()。
A^charstr[]=Hstring";c=str:
B、scanf(”%s",c);
C、c=getchar();
D^*c="string";
标准答案:A
知识点解析:B选项中scanf()函数是将c定义为一个字符数组的数组名,C选项中
是将c定义为一个字符型变量,D项是在指针定义时为它赋值,否则是不合法的,
所以BCD三项都不正确。A选项定义字符数组str,再将字符数组str的首地址赋
给字符型指针c,正确。
2、数据管理技术发展的三个阶段中,()没有专门的软件对数据进行管理。I.人工
管理阶段H.文件系统阶段IH.数据库阶段
A、仅I
B、仅in
c、I和n
D、n和in
标准答案:A
知识点解析:数据管理技术发展的三个阶段中,只有人工管理阶段,没有操作系
统,没有管理数据的软件,数据处理方式是批处理。在文件系统阶段,操作系统中
已经有了专门数据管理软件,一般称为文件系统。在数据库系统阶段,出现了统一
管理数据的专门软件系统.即数据库管理系统。
3、在一棵二叉树上,第5层的结点数最多是()。
A、8
B、9
C、15
D、16
标准答案:D
知识点解析:根据二叉树的性质:二叉树第i(i*)层上至多有个结点。得到第
5层的结点数最多是16个。
4、以下选项中叙述正确的是()。
A、函数体必须由{开始
B、C程序必须由mflin语句开始
C、C程序中的注释可以嵌套
D、C程序中的注释必须在一行里完成
标准答案:A
知识点解析:函数体是函数首部下面的花括号内的部分,所以函数休必须由(开
始,A项正确。一个源程序文件可以包括预处理命令、全局声明、函数定义,程序
总是从main函数开始执行的,不是main语句,B项错误。C程序中允许两种注
释,以//开头的单行注释;以/*开始,以*/结束的块式注释,D项错误。函数
可以嵌套,注释不能嵌套,C项错误。
5^设有某函数的说明为int*func(inta[10],intn);则下列叙述中,正确的是()。
A、说明中的a|10|写成a|]或*a效果完全一样
B、形参a对应的实参只能是数组名
C、func的函数体中不能对a进行移动指针(如a++)的操作
D、只有指向10个整数内存单元的指针,才能作为实参传给a
标准答案:A
知识点解析:考查数组名作为函数参数。数组名作为函数参数时,只传递数组的首
地址而不检查形参数组的长度,所以形参表中可以不给出形参数组的长度,形参数
组和实参数组长度也可以不同,选项D)错;a[10ha[]、*a做形参都是接受实参
数组首地址,效果一样,A)正确。传递给形参的实参可以是数组名,还可以是指
向该数组的指针变量,选项B)错。数组名可以看做一个指针常量,对其进行自加
自减运算相当于指针变量的自加自减,选项C)错,答案选A)。
6、设有宏定义:#defineIsDIV(k»n)((k%n==l)?l:0)且变量m已正确定义并赋
值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是()。
A、判断m是否能被S和7整除
B、判断m被5和7整除是否都余I
C、判断m被5或者7整除是否余I
D、判断m是否能被5或者7整除
标准答案:B
知识点解析:本题考查逻辑运算符的相关概念,逻辑与若要为真,那么两边都要为
真,即m都能被5和7整除都余1,所以选项B正确。
7、下列叙述中正确的是()。
A、所有数据结构必须有根结点
B、所有数据结构必须有终端结点(即叶子结点)
C、只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构
D、没有根结点或没有叶子结点的数据结构一定是非线性结构
标准答案:D
知识点解析:D项正确,线性结构的特点是:①集合中必存在“第一个元素”且推
一;②集合中必存在“最后一个元素”且惟一;③除最后一个元素外,其他数据元
素均有惟一的“后继”;④除第一个元素外,其他数据元素均有惟一的“前驱所以
没有根结点或没有叶子结点的数据结构一定是非线性结构。AB两项错误,不是所
有数据结构都必须有根结点和叶子结点;C项错误,数据结构中若有中间结点不满
足只有一个前件或者后件的条件,就不是线性结构。
8、一般情况下,当对关系R和S进行自然连接时,要求R和S含有一个或者多个
共有的()。
A、记录
B、行
C、属性
D、元组
标准答案:C
知识点露析:自然连接是一种特殊的等值连接,它满足下面的条件:①两关系间
有公共域;②通过公共域的等值进行连接,故C选项正确。
9、设变量均已正确定义,若要通过scanf("%d%c%d%要&al,&cl,&a2,
&c2);语句为变量al和a2赋数值10和20,为变量cl和c2赋字符X和Y0下列
所示的输入形式中正确的是(注:□代表空格字符)()。
A、10DXD20DY
B、10nX20nY
C、10DX20Y
D、10X20aY
标准答案:A
知识点解析:在使用scanf函数进行输入数据时,输入的数据之间必须用空格、回
车符、制表符(Tab键)等间隔符隔开。
10、设有如下定义:structsk{intm:floatx;[data,*q;若要使q指向data中
的m域,正确的赋值语句是()。
A、q=&data.m;
*q=data.m;
C、q=(structsk*)&data.m;
D、q=(structsk*)data.m;
标准答案:C
知识点解析:利用强制类型转换(structsk*)把整数型地址&data.m转换成结构体变
量指针赋给结构体指针变量q。
11、某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是()。
A、10
B、8
C、6
D、2,6
标准答案:B
知识点解析:在主函数中定义了两个整型变量a和b,并把它们的初值分别设置为
1和0;在第二条语句中,首先计算6=@+2,然后a自增两次,因此第二句结束
时,b=2,a=3,然后第三句,a+b=5。
16>有以下程序:#include<stdio.h>main(){inta=3:a+=a-=a*a;printf("%d
\nH,a);}程序的输出结果是()。
A、0
B、9
C、3
D、-12
标准答案:D
知识点解析:等号运算符是从右到左,且与“+、・、*”运算符比,优先级较低。
首先计算a*a,结果为9,执行a=a-9后a的值为-6.然后执行a+=a,即a=a+a=-
6+(-6),所以值为-12。
17、以下选项中,合法的C语言实数是()。
A、3.Ie3.1
B、.2el
C、E09
D、1.23E
标准答案:B
知识点解析:C语言中,实数有两种表示形式:十进制小数形式和指数形式,本题
各选项都是以指数形式表示。当实数以指数形式表示:尾数E(或e)整型指数。其
中尾数是小数形式的实型常量,E或。是指数形式的标识,又称为阶码标识;整型
指数表示指数的大小。C语言规定,E或e之前的尾数必须要有数字,E或e之后
的整型指数必须是整数,且E或e前后以及数字之间不得插入空格I。综匕本题
答案为B。
18、以下描述中,不是线性表顺序存储结构特征的是()。
A、可随机访问
B、需要连续的存储空间
C、不便于插入和删除
D、逻辑相邻的数据物理位置上不相邻
标准答案:D
知识点解析:线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻
辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在
物理位置的相邻元素之中,因此不需要另外开辟空间来保存元素之间的关系。
19、阅读以下程序:#includemain(){intcase;floatprintf;prinlf("请输入2个
数:");scanf("%d%f\&case,&printf);printf(n%d%f\n",case,printf):}
该程序编译时产生错误,其出错原因是()。
A、定义语句出错,case是关键字,不能用作用户自定义标识符
B、定义语句出错,printf不能用作用户自定义标识符
C、定义语句无错,scanf不能作为输入函数使用
D、定义语句无错,printf不能输出case的值
标准答案:A
知识点解析:C语言中,关键字又称保留字,它是系统预先定义的、具有特定含义
的标识符,不能用作用户自定义的标识符在程序中使用。
20、算术运算符和圆括号有不同的运算优先级,对于表达式:a+b+c*(d+e),关于
执行顺序,以下说法正确的是()。
A、先执行(d+e)得己,再执行c*r2得r3,再执行a+b得rl,最后执行rl+r3得表
达式最后结果
B、先执行a+b得rl,再执行(d+e)得己,再执行c*己得r3,最后执行rl+r3得表达
式最后结果
C、先执行(d+e)得「2,再执行c木r2得「3,再执行b+r3得14,最后执行a+14得
表达式最后结果
D、先执行a+b得rl,再执行rl+c得r5,再执行(d+e)得r2,最后执行r5*r2得表
达式最后结果
标准答案:B
知识点解析:题意表达式中,圆括号的优先级最高,乘法运算符次之,加法运算符
最低,同优先级中,加法运算符的结合性从左向右结合,所以题意中的表达式执行
顺序是:先执行a+b得rl,再执行(d+e)得r2,再执行c*己得r3,最后执行rl+r3
得表达式最后结果,本题答案为B。
21、以下程序的输出结果是()c#includevoidprt(inf*x,int*y,int*7.){printfif'4%
d,%d,%d、n",++*x,++*y,*(z++));)main()finta=10,b=40,c=20;prt(&a,
&b,&c);prt(&a,&b.&c);)
A、11,42,3112,22,41
B、11,41,2012,42,20
C、lb21,4011,21,21
D、11,41,2112,42,22
标准答案:B
知识点解析:本题考查的是函数参数的传递及自加运算符。主函数中第一次调用函
数prt(&a,&b,&c);,此函数中的输出语句prinlf("%d,%d,%d\n",++*x,
++*y,*(z++));使得a和b的值均加1,而*(z++)由于先执行z++所以c的值不
变;第二次调用函数pri(&a,&b,&c);使得a和b在上一次的基础上再各自加
1(因为形参和实参进行的是地址传递),而c的值仍不变。
22、有以下程序:椭neludeVsldio.h>main(){inty=10;while(y-);
printf(,'y=%d\n,',y);}程序执行后的输出结果是()。
A、y=-l
B、y=0
C、y=l
D、while构成无限循环
标准答案:A
知识点解析:y一一表示y使用后再自减1。所以最后一次y的值为0,条件不成
立但仍要执行自减操作,y的值为-1,跳出循环。打印y的值-1。
23、下列叙述中正确的是()。
A、循环队列是队列的一种链式存储结构
B、循环队列是队列的一种顺序存储结构
C、循环队列是#线性结构
D、循环队列是一种逻辑结构
标准答案:B
知识点解析:在实际应用中,队列的顺序存储结构一般采用循环队列的形式。
24、有以下程序:#includeintfun(inta,intb){if(b==O)returna:elsereturn(fun(—
a,-b));)main(){printf("%d/n",fun(4,2));}程序运行的结果是()。
A、1
B、2
C、3
D、4
标准答案:B
知识点解析:fun函数是一个递归函数,其功能是:当b的值为零时,返回此时a
的值;否则,返回fun(-a,・・b),即将a和b的值分别减1后返回fim(a,b)。当b
不断递减时,a也不断递减,直到h为零”执行过程为:执行fnn(4.2),h=2,返
Mfun(3,1)»此时b=l,返回fun(2,0),b=0,返回a的值2。
25、有以下程序:#includeintfun(charP[][10]){intn=0,i;for(i=0;i<7;i++)
if[P[i][0]=,T,)n-H-;returnn;}main(){charstr[][10]={"Non'1,nTue",''Wed",
“Thu”,Tri","Sat%"Sun");printf(u%d\nn,fun(str));}程序执行后的输出结
果是()。
A、1
B、2
C、3
D、0
标准答案:B
知识点解析:此程序是统计一周7天中英文名称首字母为的个数。P[i][0]是字
符串的首字符.一共有两个叮“,所以n=2。因此B选项正确。
26、以下程序段中,与语句:k=a>b?(b>c?l:0):0;功能相同的是()。
A^if((a>b)II(b>c))k=l;elsek=0:
B、if((a>b)&&(b>c))k=1;elsek=0;
C、if(a<=b)k=0;elseif(b<=c)k=l;
D、if(a>b)k=l;elseif(b>c)k=l;elsek=0:
标准答案:B
知识点解析:条件表达式的含义是,如果表达式1成立,结果为表达式2的值,如
果不成立为表达式3的值。所以题干中k的值这样取值:如果a>b且b>c,k值结
果为1,如果a>b,且bh与b>c中只要有一个条件不成立,k的值就为0,所以选
择B选项。
27、有以下程序:#includeintfun(){staticintx=l:x+=l;returnx;)main()
{inti,s=l;for(i=l;i<=5;i++)s+=fun();printf「%d\iT,s);)程序运行后的
输出结果是()。
A、120
B、11
C、6
D、21
标准答案:D
知识点解析:fun函数中的变量x为静态局部变量,占用固定的内存单元,下一次
调用时仍可以保留上次调用时的值。也就是说,如果多次调用fun函数,x的定义
只在第一个调用时有效,从第二次调用开始,x的定义相当于不存在,直接使用上
次x的值。fun函数被调用了5次,每次调用后的返回值累加并赋予S。5次调用
后,x的值为6,s的值为21。因此D选项正确。
28、以下关于字符串处理的叙述正确的是()。
A、进行字符串复制时,目的串的存储空间必须足够大
R、两个字符串进行比较时,短的一个必定比长的一个小
C、计算一个字符串的长度时,应包含串尾的结束标志
D、两个字符串连接时,对■存储空间的大小没有要求
标准答案:A
知识点解析:两个亨符串进行比较时,按照字符串中相同位置的字符ASCII码顺
序进行比较,故选项B错误;字符串需要包含串尾的结束标志,但是计算字符串
长度时,不包含串尾的结束标忠,故选项C错误;要将字符串s2连接到si后面,
串si所在存储空间必须可以存储字符串si、字符串s2连接后构程新串的字符,故
选项D错误、答案选A。
29、若有以下程序#include<stdio.h>typedefstructstu{charname[10],gender;int
score;}STU;voidf(STUa,STUB){b=a;printf("%s,%c,%d,M,,b.gender,
,H
b.score);}main(){STUa={“Zhao",'m',290},b={'Qian,T?350};f(a,b);
printf("%s,%c,%d\n'\,b.gender,b.score);)则程序的输出结果是
A、Qian,f,350,Qian,f,350
B、Zhao,m,290,Zhao,m.290
C^Zhao,m,290,Qian,f,350
D、Zhao,m,290,Zhao,f,350
标准答案:C
知识点解析:本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函
数后,会首先输出被重新复制的b值,且与a相同,而执行完f函数后,b值并不
会改变,所以还是维持原值,选项C正确。
30、对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正
确的是()。
A、冒泡排序为n(n-l)/2
B、简单插入排序为n
C、希尔排序为n
D、快速排序为n/2
标准答案:A
知识点解析:在最坏情况下,冒泡排序所需要的比较次数为n(n-l1/2;简单插入排
序所需要的比较次数为n(n-l)/2;希尔排序所需要的比较次数为0(n>5):堆排序所
需要的比较次数为O(nlog2n)。
31、以下选项中,当x为大于1的奇数时,值为0的表达式为()。
A、x%2=1
B、x/2
C、x%2!=0
D、x%2=0
标准答案:D
知识点解析:当x为大于1的奇数时,x对2求余的结果为1,不为0,所以选项
D中表达式的值为0。
32有以下程序#inckide<stdio.h>main(){chara=,H,;a=(a>='A'&&a<
='Z'):(a+32):a;printf(,r%c\n';a);)程序运行后的输出结果是
A、H
B、h
C、A
D、a
标准答案:B
知识点解析:条件运算符构成的选择结构的一般形式为:表达式1:表达式2:表
达式3。其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达
式的值,否则以表达式2的值作为整个条件表达式的值。该题目中首先给字符变量
a赋值为,H\语句@=伯>=力,&&@〈=2)(@+32)港;即将大写字母变为小写字
母。因此B选项正确。
33、下面描述中错误的是()。
A、系统总体结构图支持软件系统的详细设计
B、软件设计是将软件需求转换为软件表示的过程
C、数据结构与数据库设计是软件设计的任务之一
D、PAD图是软件详细设计的表示工具
标准答案:A
知识点解析:系统总体结构图不支持详细设计,所以选项A的描述错误,其他选
项均正确。
34、有以下程序:#include#includemain(){FILE*fp:charch,str[5];
if((fp=fbpcn("data.dat",''wb+''))==NULL)|pnntf("error!\n'');cxit(O);)
ch=getchar();while(ch!='!?){fputs(ch,fp);ch=getchar();}rewind(fp);
do{fgets(str,4,fp);puts(str);}while(!feof(fp));felose(fp);)程序运行时输
入:hello!〈回车〉,则程序的输出结果是()。
A、hello
hello
C、hello
D、hell
标准答案:A
知识点解析:分析程序可知,程序是首先以可写方式打开文件daia.dat,然后使
用geichar。逐个读入输入的字符,写到文件中,直到输入的字符是‘!’时,停止写
入文件;然后使用rewind。将文件指针定位到文件开头位置,再调用fgets。函数,
将文件中的内容读入str字符数组中,再用puts。输出,直到遇到文件结尾符,关
闭文件。其中写入文件时是逐个写入的,而读出时调用fgeis(slr,4,fp),由此可
知fgets至多读取3个字符到str,然后在结尾自动加上,、0”字符,作为字符目的
结尾标志,使用puts输出时,输出3个字符并完成换行。
35、阅读以下程序#inckide<sldio.h>main(){IntCase;floatprintF;printf("请
输入2个数:"):&printF):printf("%d%f\n",Case.
printF);)以下说法正确的是()。
A、定义语句出错,Case是关键字,不能用作用户自定义标识符,printF不能用作
用户自定义标识符
B、定义语句出错,Int无法被识别
C、定义语句无错,scanf不能作为输入函数使用
D、定义语句无错,printf不能输出Case的值
标准答案:B
知识点解析:C语言是一种大小写敏感的语言,因此Int应为int,而CaseprinF则
可以使用。
36、有如下程序#include<stdio.h>main(){inti,data;scanf("%d'\&data);for(i=0;
i<5;i++){if(i<data)continue;printf("%d,",i);}printf("\n");}程序运行时,从键
盘输入:3V回车〉后,程序输出结果为
A、3,4,
B、1,2,34
C、0,123,4,5,
D、0,1,2,
标准答案:A
知识点解析:continue语句只能用在循环结构中,其作用是结束本次循环,即不再
执行循环体中continue语句之后的语句,而是立即转入对循环条件的判断与执行。
本题执行过程为:输入3,则dala=3;执行for循环,i=0,if条件成立,结束本次
循环,不输出i值,执行下一次循环;直到i>=3,if条件不成立,依次输出i值
3,4,直到i=5退出for循环。A选项正确。
37、有如3程序#include<stdio.h>main(){inti,data;scanf("%d",&data);for(i=0;
i<10;i++){if(i>data)break;printf(n%d,",i);))程序运行时,从键盘输入:3<
回车〉后,程序输出结果为
A、3,4,5,
B、1,2,3,
C、2,3,4,
D、0』,2,3,
标准答案:D
知识点解析:从键盘_L输入"3”,此时daia=3。进入for语句,执行if语句,判断i
>data是否成立,如果条件成立,运行break语句结束整个循环过程。当i等于
0、1、2、3时,if条件不满足,执行循环体中的printf("%d”,i)语句,因此答案为D
选项。
38、有以下程序#include<stdio.h>main(){intx=0x13;printf(',INT:%d\n'\
x+1);}程序运行后的输出结果是
A、INT:14
B、INT:13
C、INT:12
D、INT:20
标准答案:D
知识点解析:0x13是16进制数,%d需要输出十进制数,换算成10进制为19,输
出lNT=x+l=20,因此答案为D选项。
39、软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于
系统软件的是
A、学籍管理系统
B、ERP系统
C、C编译程序
D、CAI软件
标准答案:C
知识点解析:计算机软件按功能分为应用软件、系统软件、支撑软件(或工具软
件)。系统软件是管理计算机的资源,提高计算机的使用效率,为用户提供各种服
务的软件。应用软件是为了应用于特定的领域而开发的软件。支撑软件介于系统软
件和应用软件之间,协助用户开发软件的工具型软件,其中包括帮助程序人员开发
和维护软件产品的工具软件,也包括帮助管理人员控制开发进程和项目管理的工具
软件,如Dephi、PowerBuilder等。选项C属于系统软件,选项A、B、D属于应
用软件,故选C选项
40有以下程序#include<stdio.h>main(){intx=3,y=5;x=xAy;y=xAy;x=xAy;
printf(n%d,%d\n';x,y);}程序运行后的输出结果是
A、3,5
B、5,3
C、35,35
D、8,8
标准答案:B
知识点解析:八运算符为按位异或运算符,即0人1=1,1八0=1/人1=0,0人0=0;经计算可得
x=xAy,y=xAy,x=xAy,作用是交换x,y的值。因此答案为B选项。
二、程序填空题(本题共1题,每题1.0分,共1分。)
41、下列给定程序中,函数fun的功能是:有NxN矩阵,根据给定的m(mV=N)
值,将每行元素中的值均右移m个位置,寿边置为0。例如,N=3,m=2,有下列
矩阵123456789程序执行结果为001004007请在程序的下画线处填入正确
的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!试题程序:#inciucle<stdio.h>
#defineN4voidfun(int(*t)[N],intm){inLi,j;/**********k)und***********I
for(i=0;i<N;[1]){for(j=N—1—m;j>=0;j——)
/**********found***********/[2]曰/**********伯und**********»/
for(j=0;j<[3],j++)t[i][j]=O;)}main(){intt[][N]={21,12,13,24,25,
16,47,38,29,11,32,54,42,21,33,10),i,j,m;printfC\nThe
originalarray:\n");for(i=0;i<N;i++){for(j=0,j〈N;j++)printfC%2d'',t[i]|j|);
}printf("Inputm(mV=%d):”,N);scanR"%d”,&m);fun(t,
m);printf(u\nTheresultis:\n"),for(i=0,i(N:i++)(for(j=0;j<N;j++)
prints%2d,\t[i][j]);printf("\n");)}
标准答案:(l)i++(2)m(3)m
知识点解析:填空1:循环语句中,循环变量i增量为1。填空2:将每行元素中
的值均右移m个位置,所以数组元素的下标是:填空3:此for循环语
句实现左边元索置0操作,所以j的取值范围是0—m。
三、程序修改题(本题共[题,每题7.0分,共7分。)
42、下列给定程序中,函数fun的功能是:用下面的公式求兀的近似值,直到最后
一项的绝对值小于指定的数(参数num)为止。彳"I了5'7…例如,程序运
行后,输入0.0001,则程序输出3.1414。请改正程序中的错误,使它能得出正
确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结
构!试题程序:#include<stdlib.h>#include<math.h>#include<stdio.h>
floatfun(noatnum){ints;floatn,t,pi;t=l;pi=0;n=l;s=l;/
*********8und*********/while(t>=num){pi=pi+t;n=n+2;s=s;
*********found*********/t=s%n;)pi=pi*4;returnpi;)voidmain(){float
nl,n2;system("CLS");printf("Enierafloatnumbet:");scanf("%f,&nl);
n2=fun(nl);printf("%6.4f\n'\n2);}
标准答案:(l)while(fabs(t)>=num)(2)t=s/n;
知识点解析:(1)函数fun中while语句的作用是,当新的一项大于给定参数时,循
环累计计算s的值。题目要求最后一项的绝对值小于给定参数,因此循环条件应当
是while(fabs(t)>=num)5(2)变量t用来存放最后一项的值,因为每一项均为1或
一1除以一个数,所以此处应使用除法运算符
四、程序设计题(本题共[题,每题7.0分,共I分0)
43、使用VC++20I0打开考生文件夹下progl中的解决方案。此解决方案的项目中
包含一个源程序文件progl.c。此程序定义了NxN的二维数组,并在主函数中自
动赋值。请编写函数fun(intaWN]),该函数的功能是:将数组左下半三角元素中
的值全部置成0。例如a数组中的值为:197238456则返回主程序后a数组中
的值应为:097008000注意:部分源程序给出如下。请勿改动main函数和其
他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程
序:#include<conio.h>#include<stdio.h>#include<stdlib.h>#defineN5
voidfun(inta[][N]){)voidmain(){inta[N][N],i,j;system("CLS"):
printf("****Thearray****\n");for(i=0;i<N;i++)/*产生一个随机的5*5矩阵
*/{for(j=0;j<N:j++)(a[i][j]=rand()%10;printf("%4d",a[i][j]);}printf("\
nu);)fun(a):printfC'THERESULT\n");for(i=0;i<N;i++){for(j=0;j<N;
j++)pnntf("%4dr,,a[iJLj]);printf(u\nn);)|
标准答案:voidfun(inta[][N]){inti,j;for(i=0;i<N;i++)fdr(j=O;j<=i;j++)
a[i]|j]=0:/*将数组左下半三角元素中的值全部置成0*/1
知识点解析:对于NxN二维数组,如何表示其左下半三角元素,可以通过以下语
句实现。for(i=0;i<n;i++)for(j=0;jV=i;j++)外层循环用来控制矩阵的行下
标,内层循环控制矩阵的列下标。注意列下标的取值范围,因为要表示下三角元
素,所以j的范围是0~i。
国家二级(C语言)机试模拟试卷第2
套
一、选择题(本题共39题,每题1.0分,共39分。)
1、有以下程序:#include<stdio.h>#includc<string.h>main(){char
str[][20]={"One*World\"One*Dream!H),*p=str[l];primf("%d,”,strlen(p));
printfC%s\n\p);}程序运行后的输出结果是()。
A、9,One*World
B、9,One*Dream!
C^10,One*Dream!
D、10,One*World
标准答案:C
知识点解析:本题将两个字符串常量赋值给一个二维字符数组,用字符常量为字符
数组:赋值需要在最后加上一个结束符表示字符串结束,所以数组长度为字
符的个数加1,而且数组的下标是从0开始计数,所以p指向第二个字符串。
2、下列程序的输出结果为()。main(){unionun(char*name;intage;int
pay;)s;s.name="zhaoming'':s.age=32;s.pay=3000;printf("%d\nl
s.age);)
A、32
B、3000
C、0
D、不确定
标准答案;B
知识点解析:本题考查的是联合体的有关概念。因为联合体是各个成员共享一段存
储空间,此段存储空间最终存放的是最后存入的成员的值,所以题目中输出
s.age实际上输出了最后存入的3000,因为3000已经把原来存入的s.age(32)的
值覆盖。
3、有以下程序:#include<stdio.h>#include<string.h>structA{inta:char
b[10];doublec;};voidf(structA*t);main(){stnctAa={1001JZhangDa'',
1098.0);f(&a);printR''%d,%s,%6.a,a,a,b,a.c);)void
f(structA*t)(t->a=1002;strcpv(t->b,''ChangRong'');t->c=1202.0;}程序运
行后的输出结果是()。
A、1001,zhangDa,1098.0
1002,ChangRong,1202.0
C、1001,ChangRong,1098.0
D、1002,zhangDa,1202.0
标准答案:B
知识点解析:本题主要考查是的函数调用时参数之间的传递问题。在C语言中参
数之间的传递是传值,也就是把实参的值复制一份传递给形参,而实参的值不发生
变化。但对于指针调用来说,函数直接对实参的地址操作,因此在这种情况下实参
变化。
4、有两个关系R和T如下:则由关系R得到关系T的
操作是()。
选择
A、
交
B、影
投
、
C并
D、
标准答案:C
知识点解析:关系T是±|关系R的第1、3列的元组组成,这是对关系R进行投影
运算的结果。可以简单理解为:选择运算是对行的操作,投影运算是对列的操作。
5、下列程序的运行结果是()。#include<stdio.h>voidsub(int*s,int*y){static
intm=4;*y=s[O];m++:}voidmain(){inta[]={1,2,3,4,5},k;intx;
print]''\n'');for(k=0:k<=4;k++){sub(a,&x);printf('‘%d,x);}}
A、1,1,1,1,1,
B、1,2,3,4,5,
C、0.0,0,0,0.
D、4,4,4,4,4,
标准答案:A
知识点解析:本题中sub(int*s,inl*y)函数的参数是两个指针型变量,在函数体内将
数组s的第一个元素赋给y。主程序内,首先定义了一维数组并赋初值,然后通过
for循环,5次调用sub(a,&x)函数,每一次调用都是将数组a的第一个元素1赋给
x,并输出。
6、以下叙述中错误的是()。
A、可以通过typcdef增加新的类型
B、可以用typedef将已存在的类型用一个新的名字来代表
C、用typedef定义新的类型名后,原有类型名仍有效
D、用typedef可以为各种类型起别名,但不能为变量起别名
标准答案:A
知识点解析:关键字lypedef的作用只是将C语言中的已有的数据类型作了置换,
并不是增加新的类型,所以A错误。
7、某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是()o
A、10
B、8
C、6
D、4
标准答案:C
知识点解析:根据二叉树的基本性质3:在任意一棵二叉树中,度为。的叶子节点
总是比度为2的节点多一个,所以本题中是5+1=6个。
8、若下列选项中的各变量均为整型且已有值,其中不正确的赋值语句是()。
A、++i;
B、nl=(n2/(n3=2));
C^k=i=j:
D、a=b+c=2;
标准答案:D
知识点解析:木题考查赋值表达式.赋值表达式的一般形式是:变量名=表达式.
C语言规定,不能给变量表达式赋值。
9、有以下程序段:#include<stdio.h>inta,h,c;a=IO;b=50;c=30;if(a>
h)a=b,b=c;c=a;printf("a=%db=%dc=%d\n",a,b,c);程序运行后的输出结
果是()。
A、a=10h=50c=30
a=10h=50c=10
C、a=10b=30c=10
D、a=50b=30c=50
标准答案:B
知识点解析:本题中a>b的条件不满足,所以不执行逗号表达式a=b,b=c;的操
作,而是执行c=a操作,即c的值为10。
10、在源程序的开始处加上“include”进行文件引用的原因,以下叙述正确的是
()。
A、stdio.h文件中包含标准输入输出函数的函数说明,通过引用此文件以便能正
确使用printf、scanf等函数
B、将stdio.h中标准输入输出函数链接到编译生成的可执行文件中,以便能正确
运行
C、将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译链接
D、将stdio.h中标准输入输出函数的二进制代码插入到引用处,以便进行编译链
接
标准答案:A
知识点解析:“stdio.h”文件中包含标准输入输出函数的函数说明,预处理指令
#include是指程序可以在该文件中找到printf,scanf等标准输入输出函数。
11、下列语句组中,正确的是()。
A、char*s;s=n01ympic";
B、chars[7];s="01ympic";
C^charts;s={"Olympic”};
D、chars|7];s={"Olympic");
标准答案:A
知识点解析:字符型指纤变量可以用选项A的赋值方法:char的;s="Olympic”,
选项C的写法:chads,s={"Dlympic”};是错误的。字符数组可以在定义的时候初
始化:chars[]={"Olympic"};?或者chars[]="Olympic",都是正确的。但是不可以
在定义字符数组后,对数组名赋值。(数组名是常量,代表数组首地址)所以选顼B
和选项D都是错误的。对•于本例,选项B、D中字符数组s的大小至少为8,才能
存放下字符串。(字符串的末尾都有结束标识
12、以下选项中不属于C语言标识符的是()。
A、常量
B、用户标识符
C、关键字
D、预定义标识符
标准答案:A
知识点解析:常量是指在程序运行过程中其值不能被改变的量,如5、1.0、字符
“a”等。C语言的标识符分为3类:关键字、预定义标识符和用户标识符。常量不
属于标识符,所以选择A。
13、以下叙述错误的是()。
A、C语言区分大小写
B、C程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需
要随时修改
C、整数和实数都能用C语言准确无误地表示出来
D、在C程序中,正整数可以用十进制、八进制和十六进制的形式来表示
标准答案:c
知识点解析:本题涉及C语言最基本的3个概念:①C语言是区分大小写的,q和
Q是两个不同的变量:②变量的实质就是在内存中占据一定的存储单元,存储单
元里存放的是该变量的值,变量的值可以根据需要进行修改;③整数在允许的范
围内可以准确的表示出来,但不可能表示无限度的实数。正整数可用二进制、十进
制、八进制和十六进制表示。
14>有以下程序:#include<stdio.h>main(){inta»b;for(a=0;a<3;a++)
{scanf("%d'\&b);switch(b){default:printf("%d”,++b);case1:prin【f("%
d",++b);case2:primf(”%d",++b);}}}执行时输入:123V回车>,则输出
结果是()。
A、233456
B、234
C、223444
D、234344
标准答案:A
知识点解析:这是一个循环结构嵌套选择结构,按照外层循环,内层选择一步一步
处理即可。本题重点注意,switch语句中并没有出现break语句,所以内层循环是
不会跳出的。
15>有以下程序#includeVstdio.h>#includeVstring.h>StructA{inta;char
b|10];doublec;};structAf(structAt);main(){structAa=(1001,"ZhangDa",
1098.0);a=f(a);printf("%d,%s,%6.If\n",a.a,a.b,a,c);)structA
f(StructAt){t.a=1002;strcpy(t.b,"WangPeng");t.C=1220,0;returnt;)程
序运行后的输出结果是()。
A、1001,ZhangDa,1098.0
B、1002,ZhangDa,1220.0
C、1001,WangPeng,1098.0
D、1002,WangPeng,1220.0
标准答案:D」:
知识点解析:在主函数中定义结构体A的变量a,并对其赋初值,再调用函数
f(a),在函数f(a)中对结构体变量a的各个成员重新进行了赋值操作,并把其值返
回在屏幕上输出。
16、C语言主要是借助以下哪种手段来实现程序模块化()。
A、定义函数
R、定义常量和外部变量
C、使用丰富的数据类型
D、使用三种基本结构语句
标准答案:A
知识点解析:该段程序的作用是将最后一个空格后面的字符串覆盖数组a中的数
据,所以for循环执行完毕后,a口二"you!”,所以答案选A)。
17、有以下定义:inta;longb:doublex,y;则以下选项中正确的表达式是
()。
A、a=x<>Y
B、a%(int)(x-y)
C、(a*y)%b
D、Y=x+y=x
标准答案:B
知识点解析:c语言中没有“<>”运算符,所以A选预错误。运算符的两个操作
值必须为整型数据,所以B选项正确。a*y的结果为double型,所以C选项错
误。不能将值赋给像x+y这样的表达式,所以D选项错误。
18、有以卜.程序:#includemain(){intk=5;whilef-----k)printf("%d”,k一=3);
,,
printfr\n);)程序执行后的输出结果是()。
A、1
B、2
C、4
D、死循环
标准答案:A
知识点解析:一一k先自减再使用,所以第一次判断条件即为while(4),条件为
真,执行打印k的值k+3,结果为1;第二次判断条件即为while(O),条件为
假,结束循环,打印回车换行符。所以选择A选项。
19、有以下程序#includeVstdio.h>voidmain。{intn=2,k=l;while(!(k>
0IIn++));printf("%d%d\n",k,n);}程序运行后的输出结果是()。
A、02
B、13
C、57
D、12
标准答案:D
知识点解析:在程序中整型变量n的初始值等于2,整型变量k的初始值等于1,
在执行while语句时,由于表达式k的值大于0为真,所以不再需要判断n++是否
为真,(k>0lln++)表达式的值为真。!(k>0lln++)表达式的值为假,所以while语
句中的条件不满足,循环语句不会执行,变量n的值也不会加I,所在输出变量k
和n的值是1和2o
20>有以下程序:#includevoidfun(char*s){while(*s){if(*s%2==0)printfC,%c",
*s);s++:|)main(){chara[]=("good");fun(a);printf("\n");)注意:字母a
的ASCH码值为97,程序运行后的输出结果是()。
d
B、go
C、god
D、good
标准答案:A
知识点解析:字符串“good”中g的ASCII码值为103,0的ASCII码值为111,d的
ASCH码值为100o在fun函数中,if(*s%2==0)语句选择ASCH码值为偶数的字母
输出。在good中,只有d的ASCII码值为偶数,所以结果为d。
21、已知二叉树后序遍历序列是CDABE,中序遍历序列是CADEB,它的前序遍
历序列是()。
A、ABCDE
B、ECABD
C、EACDB
D、CDEAB
标准答案:c
知识点解析:由于后序遍历的最后一个元素为E,所以E为根结点,所以它的前序
遍历的首个元素为E,故排除A)和D)选项。由于中序遍历中,元素B在元素根
结点E的后面,所以B为二叉树的右子树,并且该二叉树右子树只有一个元素,
所以前序遍历的最后一个元素应为B,故选项C)为正确选项,即该二叉树的前序
遍历序列是EACDB。
22、以下能正确表述算式sin(27cr+30。)的C语言表达式是()。
A、sin(2*3.14*r+3.14*30/180.0)
B、sin(2*7i*r+30)
C、sin(2*3.14*r+30)
D、sin(2*3.14*r+30*3.14/360.0)
标准答案:A
知识点解析•:考查算术表达式的写法,C中没有兀,需要用数值3.14代替,C中
sin函数的参数为弧度,角度30转成弧度应为3.14"30/18()。故而选A)。
23、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是
()。
A、函数的形参和实参分别占用不同的存储单元
B、形参只是形式上的存在,不占用具体存储单元
C、同名的实参和形参占同一存储单元
D、函数的实参和其对应的形参共占同一存储单元
标准答案:A
知识点解析:本题重点考察的是函数的形参和实参.在定义函数时函数名后而括孤
中的变量名称为“形式参数''(简称形参),在主调函数中调用一个函数时,函数名后
面括弧中的参数(可以是一个表达式)称为“实际参数”(简称实参)。C语言规定,实
参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不
能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。因此A
选项正确。
24、软件设计中模块划分应遵循的准则是()。
A、低耦合低内聚
B、高耦合高内聚
C、低耦合高内聚
D、内聚与耦合无关
标准答案:C
知识点解析:软件设计中,模块划分应遵循高内聚低耦合的准则,答案选C)。
25、有以下程序#include#definePT3.5;#defineS(x)PT*x*x;main())inta=l,b=2;
primf("%4.1f\n”,S(a+b));}程序运行后的输出结果是()。
A、程序有错无输出结果
B、31.5
C、7.5
D、14.0
标准答案:A
知识点解析:暂无解析
26、设有以下程序段:nity;y=rand()%30+l;则变量y的取值范围是()。
A、0<y<30
B、0<y<30
C、l<y<30
D、l<y<30
标准答案:B
知识点解析:rand()产生随机整数,任何整数对30求余得到的整数范围为0-29,
则y的取值范围为14蜉30或者0<产30,y是整数,0<y<30o
27,有以下程序:#includevoidfun(char*c,intd){*c=*c+l:d=d+l:printf("%
e,%e,",*c,d);}main(){charb=,a\a='A';fun(&b,a);printf("%c,%c
\nM,b,a);}程序运行后的输出结果是O。
A、b,B,b,A
B、b,B,B,A
C、a,B,B,a
D、a,B,a,B
标准答案:A
知识点解析:本题重点考察函数的调用,首先要了解字母对应的ASCH码。例如
A为65.a为97c即字母+1则可得到下一个字母.其次是函数形参和实参的问
题,运行过程如下:在fun(&b,a)中,*c='a',d=65o*c+l='b',d+l=66,
printfC%c,%c,”*c,d);输出b,B,因为指针c指向地址的值为b,此时
b=*c=,b,;函数返回执行printf("%c,%c\n”,b,a);输出b,A,因此A选项正
确。
28、下面描述中不属于数据库系统特点的是
A、数据共享
B、数据完整性
C、数据冗余度高
D、数据独立性高
标准答案:c
知识点3析:数据库系统的特点为高共享、低冗余、独立性高、具有完整性等,C
错误。
29、以下程序拟实现计算sum=l+l/2+l/3+…+1/50。include<stdio.h>
main。{inti;doublesum;sum=l.0;i=l;do{i++;sum+=l/i;)while(i<
50);printf("sum=%lf\rT,sum);}程序运行后,不能得到正确结果,出现问题
的语句是()。
A、sum+=l/i;
B、while(i<50);
C>sum=l.0;
D、i++;
标准答案:A
知识点就斤:选项A中,sum+=l/i;i为整型,区此1/i是整型类型,当1/i有
小数时,小数部分会被截断。因此1/i结果始终为0,导致结果出错,应改为
sum+=l.0/io因此答案为A选项。
30、以下定义语句中正确的是()。
A^intx=y=2;
B、charA=65b='b';
C、floata=1,*b=&a,*c=&b;
D、doublea=0.0+1,b=l.I:
标准答案:D
知识点解析:A选项中的y值在定义之前不能给变量x赋值;B选项中的分号应该
为逗号;C选项中的*b和*c是指针变量,*c二&b不正确;D选项在定义时可以将
一个表达式的值同时赋给正在定义的变量。因为赋值操作是先计算赋值符号(二)右
边的表达式的值再将其赋给等号左边的变量。
31、有以下程序:#ncludevoidmain(){inti,s=0,t[]={L2,3,4,5,6,7,
8,9);for(i=0;i<9;i+=2)s+=*(t+i);printf("%d\n'',s);}程序执行后的输
出结果是()。
A、25
B、20
C、40
D、36
标准答案:A
知识点解析:本题是将数组中的部分元素进行求和的结果。下标分别是0,2,4,
8,所以结果是1+3+5+7+9=25o
32、某二叉树共有12个结点,其中叶子结点只有1个。则该二叉树的深度为(根
结点在第1层)
A、3
B、6
C、8
D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司对船员制定奖惩制度
- 乡村振兴促进法的特色与关键制度
- 车间兼职安全员奖惩制度
- 中学教师周课时奖惩制度
- 学校后勤岗位奖惩制度
- 备料员行为奖惩制度
- 医疗质量管理及奖惩制度
- 民办学校校内奖惩制度
- 物管公司员工奖惩制度
- 出口退税操作奖惩制度
- 2026年江苏航运职业技术学院单招职业技能测试题库含答案
- CCAA审核概论重点内容
- 铁路信号培训课件
- 故宫研学打卡手册-小册子版本
- 2025年学校设施设备市场调查报告
- 成都高新辅警笔试题型及答案
- 2025年制止餐饮浪费试题及答案
- 小学综合实践三下3布置我们的家公开课获奖课件百校联赛一等奖课件
- 财务会计(对外经济贸易大学)知到智慧树网课答案
- 2025蚌埠中考试卷真题及答案
- RNP进近课件教学课件
评论
0/150
提交评论