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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷第1

一、程序填空题(本题共I题,每题1.0分,共J分0)

1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中

包含一个源程序文件blankl.Co在此程序中,函数fun的功能是将不带头节点的

单向链表逆置,即若原链表中从头至尾节点数据域依次为2、4、6、8、10,逆置

后,从头至尾节点数据域依次为10、8、6、4、2。请在程序的下划线处填入正确

的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。

不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>

#includc<stdlib.h>#dcfincN5typcdcfstructnodc{intdata;structnode

*next;)NODE;/*********found*********/[I]*fun(NODE*h){NODE*p,

*q,*r;p=h;if(P==NULL)returnNULL:q=p->next:P->next=NLJLL:

while(q)(/*********found*********/r=q->【2];q->next=p;p=q;

*********found*********/q=[3];}returnp;)NODE*creatlist(inta[])

{NODE*h,*p,*q;inti:h=NULL:for(i=0:i<N:i++){q=(NODE

*)malloc(sizeof(NODE));q->data=a[i];q->next=NULL;if(h==NULL)h=p=q;

else{P->next=q;p=q,))returnh;)voidoutlist;(NODE*h){NODE*p;p=h;

if(p=NULL)printf("ThelistisNULL!\n");else{printf("\nHead"):do(printf("-

>%d",p->data);p=p->next;}while(p!=NULL);printf(',->End\n");)}

main(){NODE*head;inta[N]={2,4,6,8,10);head=creatlist(a);printf("\

nTheoriginallist:\n"):ontlist(head):head=fun(head):printf(n\nThelistafrer

inverting:\n");outlist(head);}

标准答案:⑴NODE(2)next(3)r

知识点解析:填空1:本题考查了函数指针变量的函数返回值的类型,*fun(NODE

*h)的返回值为p,而p的数据类型为NODE,因此本空应该填写NODE。填空

2:从此空的形式可知本空应该填写next。填空3:本题要求将不带头节点的

单向链表逆置,为了使q的指针向后移,此空应该填写

二、程序修改题(本题共I题,每题1.0分,共1分0)

2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中

包含一个源程序文件modi1.c0在此程序中,函数fun的功能是:将s所指字符串

中位于奇数位置的字符或ASCH码值为偶数的字符依次放人t所指数组中。例如,

字符串中的数据为“AABBCCDDEEFF”,则输出应当是“ABBCDDEFF”。请改正程

序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删

行,也不得更改程序的结构!试题程序:#include<conio.h>#include<stdio.h

>#includc<string.h>#defineN80voidfun(char*s»chart[]){inti,j=0;

for(i=0;i<(int)strlen(s);i++)/*********found*********/if(i%2&&s[i]%

2==0)t[j++]=s[i];/*********found*********/t[i]=>\O';}main(){char

s[N],t[N];printf("\nPleaseentherstrings:"):gets(s);fun(s,t),printf("nThc

resultis:&s\n",t);)

标准答案:(l)if(i%2IIs[i]%2==0)或if(i%2!=0IIs[i]%2==0)(2)t[j]=,\0\或

tUl=o;

知识点解析:(1)根据题意,将字符串s中位于奇数位置的字符或ASCII码值为偶

数的字符,依次放入字符串t中,所以if条件中要使用"或''运算。(2)变量j控制字

符串t的下标,所以是电】。

三、程序设计题(本题共I题,每题7.0分,共[分0)

3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中

包含一个源程序文件progl.c。在此程序中,请编写函数fun,其功能是:将M行

N列的二维数组中的数据,按列的顺序依次放到一维数组中"一维数组中数据的个

数存放在形参n所指的存储单元中。例如,若二维数组中的数据为33333333

4444444455555555则一维数组中的内容应是:334455334455334455334455注

意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在

函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>

voidfun(int(*s)|10bint*b,int*n,intmm,intnn){}main(){int

w[10][10]={{33,33,33,33),{44,44,44,44},{55,55,55,55)),i,j;

inta|100]={0),n=0;printf("Thematrix:\n");for(i=0;i<3;i++){for(j=0;j<

4,j++)prinlf(',%3d",w[i皿);printf(M\nM);}fun(w,a,&n,3,4);

printf("TheAarray:\n");for(i=0:i<n;i++)printf("%3d'\a[i]);}

标准答案:voidfun(int(*s)[10],int*b>int*n,intmm,intnn){inti»j;

for(j=0;j

知识点解析:题目要求实现将二维数组元素存入一维数组,需使用for循环语句来

控制二维数组元素的下标,同时使用指针变量配合操作。可以用两个循环来史理

问题,由于是按列的顺序取出,所以第1个循环用于控制列下标,第2个循环用于

控制行下标。

家二级(C语言)机试模拟试卷第2

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

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

A、C程序中注释部分可以出现在程序中任意合适的地方

B、C程序的书写格式是固定的,每行只能写一条语句

C、构成C程序的基本单位是函数,所有函数名都可以由用户命名

D、在对C语言程序进行编译时,可以发现注释行中的拼写错误

标准答案:A

知识点解析:本题考查的是C语言程序设计的初步知识。选项A),程序中/*…*

/表示注释部分,注释只是给人看的,对程序的编译和运行不起作用,可以在程序

中的任何位置;选项B),C语言的书写格式自由,一行可以写多条语句,一条语

句也可以写在不同行上;选项C),一个C程序中必须有且只能有一个由“main”命

名的主函数,其他函数由用户自行命名:选项D),程序的注释仅仅是提供阅读之

用,并不参与程序的编译,所以编译也就不会发现注释行中的错误。

2、有下列程序,其中%u表示按无符号整数输出。main。(unsignedint

x=OxFFFF;/*x的初值为十六进制数*/printf(''%u\n'',x);}程序运行后的

输出结果是()。

A、-1

B、65535

C、32767

D、OxFFFF

标准答案:B

知识点解析:“%u”格式符表示以十进制形式输出无符号整形变量。本题中无符号

整形变量x=OxFFFF表示的是十六进制无符号整型变量的最大值65535,所以最后

输出的结果为65535。

3、以下选项中正确的语句组是()。

A、chars口;s="HELLO!";

B、charts;s={nHELLO!"};

C、chars[10];s="HELLO!";

D、chads;s="HELLO!";

标准答案:D

知识点解析:本题考查数组和字符串的赋值。选项A)中数组s没有明确其大小就

赋值是错误的。选项B)中不能有大括号,选项C)中的写法应该为

4、if语句的基本形式为:if(表达式)语句,其中“表达式”()。

A、可以是任意合法的表达式

B、必须是逻辑表达式

C、必须是逻辑表达式或关系表达式

D、必须是关系表达式

标准答案:A

知识点解析:本题考查if表达式。if(表达式)中的表达式可以为任何合法的表达

式,一般情况下为逻辑、条件表达式,需要注意的是,当等号(==)误写为赋值号

(二)时不会报错的,但是其值恒为1。

5、有以下程序:#include<stdio.h>main(){FILE*fp;inta[10]={1,2,3,0,

0),i;fp=fopen("d2.dat","wb");fwrite(a,sizeof(int),5,fp);fwrite(a,

sizeof(int),5,fp);fclose(fp);fp=fopen("d2.dat',"rb");fread(a,sizeof(int),

10,fp);fclose(fp);for(i=0;i<10;i++)printf("%d,",a[ij);}程序的运行结果

是()。

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

知识点解析:首先用函数fopen()以“wb”的方式打开文件“d2.dat”,然后调用两次

fwrite函数将数组a的5个元素,依次输出到文件fp中(共10个字节),然后关闭文

件。再次打开文件,使用文件指斜指向文件的开头,调用fread函数从文件由中读

取这10个字节的数据到数组a中,此时数组a的内容就变为{1,2,3,0,0,1,

2,3,0,0),因此最后的输出结果为“1,2,3,0,0,1,2,3,0,0”。

6、下列程序的运行结果是()。#include<stdio.h>voidmain()voidfun(int*s,

int*p){inta[]={2,3,4,5},k,x;{staticintt=3;for(k=0:k<4:k++)

*p=s[t]:{fun(a,&x);t—;)printf("%d,",x);}}

A、5»4,3»2,

B、2,3,4,5,

C、2.2.2.2.

D、5,5,5,5,

标准答案:A

知识点解析:分析fun函数程序段,可知fun函数要实现的功能是将s中第(t+1)个

元素前面(含该元素)的元素逆也赋给数组P。由于fun函数定义了静态变量t=3,因

此,在主函数中调用函数鲂(a,&x)时,就是将数组a中前4个元素逆置赋给数组

x,最后输出x数组。

7、算法的空间复杂度是指()0

A、算法在执行过程中所需要的计算机存储空间

B、算法所处理的数据量

C、算法程序中的语句或指令条数

D、算法在执行过程中所需耍的临时工作单元数

标准答案:A

知识点解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选

择Ao

8、下列不属于软件工程3个要素的是()。

A、工具

B、过程

C、方法

D、环境

标准答案:D

知识点解析:软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程

项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各

个环节的控制、管理。

9、C语言主要是借助以下哪种手段来实现程序模块化()。

A、定义函数

B、定义常量和外部变量

C、使用丰富的数据类型

D、使用三种基本结构语句

标准答案:A

知识点解析:该段程序的作用是将最后一个空格后面的字符串覆盖数组a中的数

据,所以for循环执行完毕后,a[]=”you!”,所以答案选A)。

10、下面程序的输出结果是()。typedefunion{longx[1];inty[4];char

z[10];}M;Mt;main。(printf("%d\n",sizeof(t));}

A、32

B、26

C、10

D、4

标准答案:C

知识点解析:“联合体”所占用的内存空间为最长的成员所占用的空间。题中联合体

的z[10]成员是联合体中占空间最长的成员。

11、对序线性表(23,29,34,55,60,70,78)用二分法查找值为60的元素时,

需要比较次数为()。

A、1

B、2

C、3

D、4

标准答案:C

知识点解析:根据二分法查找法需要两次:①首先将60与表中间的元素55进行

比较,由于60大于55,所以在线性表的后半部分查找。②第二次比较的元素是后

半部分的中间元素,将60与表中间的元素70进行比较,由于60小于70,所以在

线性表的前半部分查找。③第三次比较的元素是前半部分的中间元素,即60,这

时两者相等,即查找成功。

12>若有定义:inta=7;floatx=2.5,y=4.7;则表达式“x+a%3*(int)(x+y)%2/

4”的值是()。

A、2.500000

B、2.750000

C、3.500000

D、0.000000

标准答案:A

知识点解析:此题考查的是变量的类型转换。表达式中“(int)(x+y)把x+y=(7.2)”的

值强制转化成整型即得到7,那么“a%3*(int)(x+y)%2"的值为整型常量1,所以

、%3*(血)(乂+丫)%2/4”的值为0;因为变量x是浮点型变量,所以表达式“x+a%

3*(int)(x+y)%2/4”的结果也是浮点型,得到2.500000。

13、若有定义语句:intx=12,y=8,z;在其后执行语句:z=0.9+x/y:则z的

值为()。

A、1

B、1.9

C、2

D、2.4

标准答案:A

知识点解析:x、y为整数,x/y值为1,加上0.9为1.9,赋值给整型变量z,

接收后为1。

14、有以下程序#includeintfun(intas*intb){if(b==O)returna;elsereturn(fun(--a,-

b));}main(){pfintf("%d\n,,,fun(4,2));}程序的运行结果是()。

A、1

B、2

C、3

D、4

标准答案:B

知识点解析:由程序可知,函数fun(intajntb)是一个递归函数。所以当主函数中

调用fun(4,2)时,其执行过程如下:fun(4,2)->fun(3,l)->fun(2,0),其返回值为

2o所以正确答案为选项B)。

15、有以下程序:#include#include"string,h"voidfun(char*s[],intn){char*t»

inti,j,for(i=0;istrlen(s[j]){t=s[i];s[i]=s[j];s|j]=t;}}main(){char

*ss[]={Hbcc","bbcc","xy",^aaaacc'1,"aabcc"};fun(ss,5);printf('r%s,%

s\n",ss[O],ss|4]);}程序的运行结果是()。

A、xy,aaaacc

aaaacc,xy

C、bcc,aabcc

D^aabcc,bcc

标准答案:A

知识点解析:从main函数入手,定义了一个一维数组并赋初值,接着调用函数

fun(),函数的功能是:比较数组中各元素的长度,按元素长度从小到大的顺序排列

元素,所以执行“fim(ss,5)”函数后,“*ss[]={”xy”,“bcc","bbcc","aabcc",

"aaaacc"}“,所以调用prinlf函数输出ss[O],ss[4]的值分别为xy,aaaacco

16>有以下程序:#include<stdio.h>voidf(int*q)(inti=0:for(:i<5;

i++)(*q)++;}main(){inta[5J={l,2,3,4,5},i;f(a);for(i=0;i<5;

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

A、6,2,3,4,5,

B、2,2,3,4,5,

C、I,2,3,4,5,

D^2,3,4,5,6,

标准答案:A

知识点解析:本题考查的是函数的地址调用,将数组名作为数组首地址进行传递,

然后取首个数组元素值进行加1运算,循环5次。因此A选项正确。

17、有如卜程序#include〈stdio.h>main。{inti,data;scanf(n%d",&data);

for(i=0;i<5;i++){if((i<data&&i%2)||(i>data&&i%3==0))continue;printf(

d,",i);程序运行时,从键盘输入:13V回车〉后,程序输出结果为()。

A、0,2.4,

B、1,3,5,

C^0,1,2.3,4,5,

D、0,1,2,3,

标准答案:A

知识点解析:程序通过$canf()函数.输入data的值13.for循环中.i的值遍历。〜

4,对每个i的值执行if语句判断,其中:i>data始终为假;所以表达式i>

dala&&i%3==0始终为假:所以if语句的判断条件需要看i<data&&i%2的值,由

于iVdata始终为真,所以iVdata&&i%2的值乂取决于i%2的值,也就是说整个

if语句的判断条件取决于i%2的值,如果i%2为真,那么if语句成立,执行

continue,否则执行primf()函数,所以当i取值1、3时,i%2的为1,if条件成

立,执行continue;当i取值0、2、4时,i%2的值为0,if条件不成立,执行

prinlfO函数,输出0,2,4,本题答案为A。

18、软件需求规格说明书的作用不包括()。

A、软件设计的依据

B、软件可行性研究的依据

C、软件验收的依据

D、用户与开发人员对软件要做什么的共同理解

标准答案:B

知识点解析:《软件可行性分析报告》是软件可行性研究的依据。

19、以下程序的输出结果是()。includemain(){inta=l,b=3;if((++a<0)&&!(b-

<=0))printf("%d,%d\n”,a,b);elseprintff'%d,%d\n”,b,a);}

A、2.2

B、1,3

C、3,2

D、3.1

标准答案:C

知识点解析:解答本题的关键在于if语句条件中的表达式。初始时a=l,b=3,所

以++a=2>0,因此++a<0为假:因为是进行逻辑与(&&)运算,在&&的一个运算对

象为假的前提下不用判断第二个运算对象的真假,就可以直接得出整个表达式的值

为逻辑0,所以执行else语句。

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

A、在switch语句中,不一定使用break语句

B、在switch语句中必须使用default

C、break语句必须与switch语句中的case配对使用

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

标准答案:A

知识点解析:defauh语句在swilch语句中可以省略,所以B错误;swilch语句中并

非每个case后都需要使用break语句,所以C错误;break语句还可以用于for等循

环结构中,所以D错误。

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

primf("*")该程序段的输出结果是()o

A、*

B、****

C、**

D、********

标准答案:A

知识点解析:暂无解析

22、下述程序的输出结果是()。#includevoidmain(){inta[5]={1»2,3,4,5);

int*p=a,**q=&p;printf("%d",*(p++));printf("%d",**q);}

A、22

B、11

C、34

D、12

标准答案:D

知识点解析:程序首先定义了一个指向一维数组a的指针p,一个指向指针变量p

的指针变量q,输出*(p++)是先输出*p即a[0]的值,再将指针p指向数组的下一个

元素a[l],输出*,是输出指针p所指向单元的内容,即的值。

23、有以卜程序#include<stdio.h>main(){inta=l,b=3,c=5;int*pl=&a,*p2=&b,

*p=&c;*p=*pl*(*p2);printf("%d\n",c);}执行后的输出结果是

A、1

B、2

C、3

D、4

标准答案:C

知识点解析:该程序中int*pl=&a,*p2=&b,*p=&c;指定义三个指针变量,并赋

值,即使pl指向a;p2指向b;p指向c。*p=*pl*(*p2);该条语句是给p所指的存储

单元c赋值,就是pl所指的存储单元的值,即a的值,与p2所指的存储单元b的

值相乘,也就是c=a*b,等价于c=l*3=3;因此C选项正确。

24、在数据底的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特征的

是()。

A、内模式

B、用户模式

C、外模式

D、概念模式

标准答案:D

知识点解析:数据库系统在其内部分为三级模式,即概念模式、内模式和外模式。

慨念模式是数据库系统中全局数据逻辑结构的描述,全体用户的公共数据视图。外

模式也称子模式或者用户模式,是用户的数据视图,也就是用户所能够看见和使用

的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。内模

式又称物理模式,是数据物理结构和存储方式的捕述,是数据在数据库内部的表示

方式。描述数据库中全体数据的全局逻辑结构和特征的是概念模式,故D选项正

确。

25、有以下程序:#iinclude<stdio.h>main(){inta=7,b=0;do{b+=a;a-

=1;Jwhile(a-);printf("%d,%d\n",b,a);}执行后的输出结果是()。

A、28,0

B、28,1

C、16,0

D、16,-1

标准答案:D

知识点解析:分析程序可知,do语句1…while(语句2),每次循环在语句I中a的

值减1,在语句2中判断a的值后,a的值又减1,所以在每次循环体执行完后,b

累力口的a的值分别为7,5,3,1,a的值分别为6,4,2,0,最后当a为。时,

while判断条件为false,此时a的值再减1,为・1,到此循环结束,所以b的值为

16,a的值为-1,故答案选D。

26、有以下程序:#inelude<stdio.h>intfun(inta[],intn,intx){int*p=a;

while(p<a+n&&*p!=x)p++;if(p<a+n)returnp-a;elsereturn-1;}main(){int

a[10]={l,2,3,4,5,6,7,8,9,10};printf('%d\\n",fun(a,10,

10));}程序运行后的输出结果是()。

A、9

B、-1

C>10

D、0

标准答案:A

知识点解析:while(p<a+n&&*p!=x)p++;当p=a;n=10,x=10;时while循环条

件成立,直到尸a+9,结束循环,执行下一条语句,if条件成立,返回p-a,此时

执行p-a=a+9-a=9;因此,输出9。故答案为A选项。

27、某二叉树共有730个结点,其中度为1的结点有30个,则叶子结点个数为

()。

A、不存在这样的二义树

B、351

C、1

D、350

标准答案:A

知识点解析:在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点

中最大的度称为树的度。对任何一棵二叉树,度为0的结点总是比度为2的结点多

一个。如果有一棵二叉树,结点总数为730,假设度为0的结点个数为n。则有

n+30+n-1=730,n=350.5,由于结点个数必须是整数,所以不可能存在题目中这

样的二叉树c故选A选项c

28、数据库系统的三级模式不包括()。

A、数据模式

B、内模式

C、外模式

D、概念模式

标准答案:A

知识点解析:数据库系统的三级模式是概念模式、内模式和外模式。

29、关系数据库管理系统能实现的专门关系运算包括()。

A、排序、索引、统计

B、选择、投影、连接

C、关联、更新、排序

D、显不、打印、制表

标准答案:B

知识点解析:关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接

运算。

30、若有以下定义,则对a数组元素地址的正确引用是()。inta[5],*p=a;

p+5

BN*a+l

C、&a+l

D、&a[0]

标准答案:D

知识点解析:本题考查如何引用数组元素的地址。选项A中,p+5引用的是a[5]的

地址,而数组a只有5个元素,即a[0]、a[1]、a[2]、a[3]、a[4],所以引用错误;

选项B中,*a+l指的是将数组a的第一个元素加1;选项C中,这种引用方式错

误;选项D中,&a[0]引用的是数组的首地址。

31、以下叙述中正确的是

A、循环发生嵌套时,最多只能两层

B、三种循环for,while,do-while可以互相嵌套

C、循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误

D、for语句的圆括号中的表达式不能都省略掉

标准答案:B

知识点解析:A选项中,循环发生嵌套时,没有规定层数:C选项中,循环嵌套

时,书写代码时没有要求必须缩进;D选项中,for语句的圆括号中的表达式都可

以省略掉。因此B选项正确。

32>有以下程序:#include#includestmctSTU{inta;charb[10];floatc;);

voidfun(structSTUt);main(){structSTUa={1001»‘‘Tim'',635.0};fun(a);

printf(''%d,%s,%5.a.a,a.b,a.c);)voidfun(structSTUt)

,,,,

{t.a=1002:strcpy(t.b,Dom);t.c=701.0;}程序运行后的输出结果是

()o

A、1001,Tim,635.0

1002,Dom,701.0

C、1002,Dom,701.0

D、1001,Tim,701.0

标准答案:A

知识点解析:此题主要是考查结构体作为子函数参数的值传递还是地址传递的问

题,子函数的功能是将形参的值用一个固定的值覆盖,但因为是值传递,所以实参

的值不会变化,所以在主函数中的结构体a的值没有发生变化。

33、在以下选项中,按照C语言规定,不能出现在标识符中的是()。

A、大写字母

B、下划线

C、数字字符

D、连接符

标准答案:D

知识点解析:按照C语言规定,标识符由字母、数字和下划线组成,且开头必须

是字母或下划线,所以选项D不合法。

34、下列说法不正确的是

A、im*fun(>—firn是一个返回int指针的函数

B、int(*fun)()---fun是一个返回int指针的函数

C、int("array[5J)U;--array是一个有5个元素的数组,每一个元素都是一个函数

指针,指向一个返回im的函数。

D、int(*fun(int))(int):--fun是带有一个int参数的函数,返回值是一个函数指

针,这个指针指向带有一个int参数并返回int的函数。

标准答案:B

知识点解析:该函数中fun是一个函数指针。指向一个返回int的函数。

35、有以下程序#includeVstdio.h>main(){intx=0x13;if(x=0x12)

printf("Truen);prinlf(Talse\n");}程序运行后的输出结果是

A、True

B、TrueFalse

C、False

D、TrueFalseTrue

标准答案:B

知识点解析:if(x=0xl2)表示x=0xl2!=0即x=0xl2为假时,执行

printf(叮rue”),再执行printf("False\n"),因此答案为B选项,注意赋值操作符"="与

相等操作符三二”的区别.

36、设有以下程序段floata[8]={1.0,2.0};intb[l]={0};charc[]=("A'1,HBn};char

d==T;以下叙述正确的是

A、只有变量c的定义是合法的

B、只有变量a,b,c的定义是完全合法的

C、所有变量的定义都是完全合法的

D、只有变量a,b的定义是完全合法的

标准答案:D

知识点解析:floata[8]={1.0,2.0);定义了一个包含8个float型元素的数组,并初始

化了数组的前2项,其他项是随机数。imb[l]={0},定义了只有一个ini型元素的

数组,并初始化为0。charc[]={”A",”B"};定义一个char型数组,大小有初始化元

素决定,但初始化值是字符串,类型不兼容,编译出错。chard="1";定义一个

char型变量,但是初始化赋值字符串,类型不兼容,编译出错。因此只有a,b定

义和初始化正确。故答案为D选项

37、有以卜程序段:#include<stdio.h>inti,n;for(i=0;i<8;i++)

{n=rand()%5;switch(n){caseI:case3:printf("%d\n",

n);break;case2:case4:printf("%d\n'\n);continue;case0:

exit(O);}prinlf("%d\n",n);}以下关于程序段执行情况的叙述,正确

的是()。

A、for循环语句固定执行8次

B、当产生的随机数n为4时结束循环操作

C、当产生的随机数n为1和2时不做任何操作

D、当产生的随机数n为0时结束程序运行

标准答案:D

知识点解析:case常量表达式只是起语句标号作用,并不是该处进行条件判断。在

执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此

case子句执行下去,不再进行判断,直到碰到break或函数结束为止。简单的说

break是结束整个循环体,而continue是结束单次循环。B)选项中当产生的随机数

n为4时要执行打印操作。。选项中当产生的随机数为1和2时分别执行case3与

case4后面语句的内容。由于存在break语句所以for循环不是固定执行8次,执行

次数与产生的随机数n有关系。

38、若有以下定义,则对数组元素的正确引用是(),inta|51,*p=a;

A、*&a[5]

B、(*a)+2

C、*p+4

D、*(a+2)

标准答案:D

知识点解析:本题考查通过指针引用数组元素。选项A)、C)没有这种引用形式:

选项B),(*a)+2与*a+2相同,表示第一个元素的值加2;选项D),*(a+2)引用数

组的第3个元素。

39、若定义函数“int*func。",则函数func的返回值为()。

A、一个实数

B、一个指向整型变量的指针

C、一个指向整型函数的指针

D、一个整型函数的入口地址

标准答案:B

知识点解析:本题考查函数返回值。fun函数的返回值类型为ini*类型,即函数返

回一个指向整型变量的指针。

二、程序填空题(本题共[题,每题7.0分,共7分0)

40、程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所

有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指

的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的

学生数据输出到Rename所指的文件中,覆盖原来的文件内容。请在程序的下画

线处填入正确的内容并非下画线删除,使程序得出正确的结果。注意:部分源程

序在文件BLANK].C中。不得增行或删行,也不得更改程序的结构!试题程序:

1#include<stdio.h>2#defineN53typedefstructstudent{4longsno;5char

nameflO];6floatscore[3];7}STU;8voidfun(char*filename)9{FILE*fp;inti,

j;10STUs[N],l;11/*********found*********/12fp=fopen(filename,

[11);13fread(s,sizeof(STU),N,fp);14fclose(fp);15for(i=0;i<N-l:i++)

16for(j=i+l;j<N;j++)17/*********found*********/18if(s[i].sno[2]

s|j].sno)19{t=s[i];s[i]=s[j];20s|j|=t;)21fp=fopen(filename,''wb'>22!

*********found*********/23【3】(s,sizeof(STU),N,fp);24fclose(fp);

25}26main()27{STUt[N]={{10005,,,ZhangSan,\95,80,88),

{10003,"LiSi”,85,70,78},(10002,,,CaoKai,\75,60,88},

{10004,''FangFang”,90,82,87},{10001,,,MaChao,\91,92,77)},

ss[N];28inti,j;FILE*fp;29fp=fbpcn(^^student.daf\"wb'>30fwritc(t,

sizeof(STU),5,fp);31fclose(fp);32printf\n\nTheoriginaldata:\n\

n’‘);33for(j=0;jVN;j++)34{printf(''\nNo:%idName:%-8sscores.”,

t|j].sno,t|j].name);35for(i=0;i<3;i++)36printfp'%6.2f\

t|j].score[i]);37printR"\n'');38}39fun(''student.dat'');40printf(''n\

nThedataaftersorting:\n\n、');41a=fdpen(''student,dat",''rb、');42

fread(ss,sizcof(STU)»5,fp);43fclose(fp);44for(j=0;jVN;j++)45{printf('’

\nNo:%IdName:%-8sScores.ss|j].sno,ss|j].name);46for(i=0;i<

3;i++)47printf(,,%6.2f\ss[j].score[i]);48printf,'\n'');49)50)

标准答案:(l)''rb',(2)>(3)l\vritc

知识点解析:填空1:题目中要求从形参filename所指的文件中读入学生的数据,

以此可以看出本空应该二真写"rb"。填空2:此处的if语句是比较学号的大小,如

果学号大就和学号小的於位,以此本空填写"填空3:题目要求所有的学生数据

均以一进制方式输出到义件中,因此本空填写fwriteo

三、程序修改题(本题共7题,每题7.0分,共I分0)

41、下列给定程序中函数fun的功能是:将s所指字符串的正序和反序进行连接,

形成的新串放在t所指的数组中。例如,当s所指字符串为“ABCD”时,t所指字符

申中的内容应为“ABCDDCBA”。请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行.也不得更改程序的结构!试题程

序:#include<conio.h>#include<stdio.h>#include<string.h>/

*********found*********/voidfun(chars»chart){inti,d;d=strlen(s);

for(i=0;i<d:i++)t[i]=s[i];for(i=0:i<d;i++)t[d+i]=s[d—1—i];/

*********found*********/t[2*d—1]=,\O';)main(){chars[100]>t[100];

printf("\nPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("\nThe

resultis:%skn",t);}

标准答案:(l)voidfun(char*s,char*t)(2)t[2*d]=>\0';或t[d+i]='\O';或

t[2*d]=O;或t[d+i]=O;

知识点解析:(I)从调用函数来看,函数传递的是数组,所以函数的形参应为指

针。(2)循环结束后回文字符的个数为2*d个,因为数组下标是从0开始的,所以

最后一个字符的下标为2*<1—1,在最后一个字符的后面加上结束符\0,因比为

t[2*d]=,\0,;o

四、程序设计题(本题共7题,每题1.0分,共I分。)

42、编写函数fun,其功能是:将s所指字符串中除了下标为奇数同时ASCII码值

也为奇数的字符之外,其余的所有字符全部删除,串中剩余字符所形成的一个新串

放在t所指的数组中。例如,若s所指字符串的内容为“ABCDEFG12345",其中字

符A的ASCII码值为奇数,但所在元素的下标为偶数,因此需要删除;而字符1

的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此

类推。最后t所指数组中的内容应为“135”。注意:部分源程序给出如下。请勿改

动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的

若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<

string.h>voidfnn(charchart[]){)main(){chars[100],t[100];

printf("knPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("knThcresult

is:%s\n",t);}

标准答案:voidfun(char*s,chart[]){inti,j=0,n:n=strlen(s);for(i=0;i<n;

i++)if((i%2)&&(s[i]%2)){t[j++]=s[i];/*将下标为奇数同时ASCII码值为奇数

的字符放入数组t中*/}切]=''0';/*最后加上结束标识符*/}

知识点解析:本题要求除了下标为奇数同时ASCII码值也为奇数的字符,其余的

所有字符都删除,即要留下下标为奇数同时ASCI【码值也为奇数的字符。所以if

的条件语句应为:if(i%2!=0&&s[i]%2!=0)。

国家二级(C语言)机试模拟试卷第3

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

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

A、线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的

B、线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构

C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构

D、线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性

标准答案:B

知识点解析:线性链式存储结构中每个节点都由数据域与指针域两部分组成,增加

了存储空间,所以一般要多于顺序存储结构。

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

A、栈是一种先进先出的线性表

B、队列是一种后进先出的线性表

C、栈与队列都是非线性结构

D、以上三种说法都不对

标准答案:D

知识点解析:栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队

列都是线性结构。

3、软件测试的目的是

A、评估软件可靠性

B、发现并改正程序中的错误

C、改正程序中的错误

D、发现程序中的错误

标准答案.D

知识析:软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中

心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误。

4、在软件开发中,需求分析阶段产生的主要文档是()。

A、软件集成测试计划

B、软件详细设计说明书

C、用户手册

D、软件需求规格说明书

标准答案:D

知识点解析:需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求规

格说明书、需求评审四个方面。所以选择D。

5、软件生命周期是指()。

A、软件产品从提出、实现、使用维护到停止使用退役的过程

B、软件从需求分析、设计、实现到测试完成的过程

C、软件的开发过程

D、软件的运行维护过程

标准答案:A

知识点解析:通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称

为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用

为止的整个时期都属于软件生命周期。

6、面向对象方法中,继承是指()。

A、一组对象所具有的相似性质

B、一个对象具有另一个对象的性质

C、各对象之间的共同性质

D、类之间共享属性和操作的机制

标准答案:D

知识点解析:继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为

基础建立新类的定义技术。广义地说,继承是指能够直接获得已有的性质和特征,

而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。

7、层次型、网状型和关系型数据库划分原则是()。

A、记录长度

B、文件的大小

C、联系的复杂程度

D、数据之间的联系方式

标准答案:D

知识点解析:层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制

的无向图,关系模型采用二维表来表示,所以三种数据库的划分原则是数据之间的

联系方式。

8、一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工

作人员与实体计算机之间的联系是()。

A、一对一

B、一对多

C、多对多

D、多对一

标准答案:C

知识点解析:因为一个人可以操作多个计算机,而一台计算机又可以被多个

人.用.所以两个实体之间是多对多的关系.

RST

-AI?M区[zrnz

aI__2_a12|c|3|1

TZZI卜:2]】|

9、有三个关系R、S和T如下:,」⑶则由关系

R和S得到关系T的操作是()。

A、自然连接

B、差

C、交

D、并

标准答案:B

知识点解析:关系T中的元组是R关系中有而S关系中没有的元组的集合,所以

进行的是差的运算。

10、计算机能直接执行的程序是()。

A、源程序

B、目标程序

C、汇编程序

D、可执行程序

标准答案:D

知识点解析:计算机能直接执行的程序是二进制的可执行程序,扩展名为.exeo

所以选择D选项。

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

A、C语言规定必须用main作为主函数名,程序将从此开始执行

B、可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行

C、C语言程序将从源程序中第一个函数开始执行

D、main的各种大小写拼写形式都可以作为主函数名,如MAIN,Main等

标准答案:A

知识点解析:C语言中的主函数只能是main。函数,不能任意指定,所以B选项错

误。C语言从主函数main。开始,到主函数main。结束,所以C选项错误。主函数

必须写成小写的main,不能混淆大小写,所以D选项错误。

12、以下选项中可用做C程序合法实数的是()。

A、3.OeO.2

B、.leO

C>E9

D、9.12E

标准答案:B

知识点解析:A选项中。后面的指数必须为整数,所以错误。C语言规定,E之前

必须要有数字,所以C选项错误。E后面必须要有数字,且必须为整数,所以D

选项错误c

13、下列定义变量的语句中错误的是()。

A、int_inl;

B、doubleint_;

CNcharFor;

D、noalUSS:

标准答案:D

知识点解析:C语言规定,变量命名必须符合标识符的命名规则。D选项中包含了

非法字符“$”,所以错误。标识符由字母、数字或下划线组成,且第一个字符必须

是大小写英文字母或者下划线,而不能是数字。大写字符与小写字符被认为是两个

不同的字符,所以For不是关键字for。

14、表达式:(inl)((douhle)9/2)-9%2的值是()。

A、0

B、3

C、4

D、5

标准答案:B

知识点解析:先将整型数据9强制转换成double型,然后除以2得到的结果与

double型保持一致,即为4.5,然后将4.5强制转换成整型数据4,然后计算

9%2的值为1,最后计算4-1的值为3,所以选择B选项。

15、设变量均己正确定义,若要通过scanf("%d%c%d%c",&al,&cl,&a2,

&c2);语句为变量al和a2赋数值1。和2。,为变量cl和c2赋字符x和y。以下

所示的输入形式中正确的是()。(注:□代表空格字符)

A、10EIX<回车>20口丫〈回车〉

B、BDX20UYV回车》

C、10XV回车>20YV回车,

D、10口*口20口丫〈回车〉

标准答案:C

知识点解析:输入数据的格式必须与scanf()的格式控制串完全匹配,如果A、B、

C选项中在数字10后面均输入了空格,则会将空格赋给变量cl,而不是把x赋给

cl,所以选择C选项。

16、以下选项中不能作为C语言合法常量的是()。

A、0.le+6

B、,cd'

C、

D.Aoir

标准答案:B

知识点解析:要想表示字符串常量应该用双引号表示,即-CCT,单引号用于表示

字符常量.所以R选项中的表示方法错误.

17、if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是

()。

A、必须是逻辑值

B、必须是整数值

C、必须是正数

D、可以是任意合法的数值

标准答案:D

知识点解析:if语句中的表达式可以是任意合法的数值,如常量、变量表达式。所

以D选项正确。

18、有如下嵌套的if语句:if(a<b)if(a<c)k=a;elsek=c;elseif(b<c)k=b;else

k=c;以下选项中与上述if语句等价的语句是()。

A^k=(a<b)?((b<c)?a:b):((b>c)?b:c);

B、k=(a<b)?((a<c)?a.c):((b<c)7.b:c);

C^k=(a<b)?a:b;k=(b<c)?:b:c;

D、k=(a<b)?a:b;k=(a<c)?a:c;

标准答案:B

知识点解析:题目中嵌套语句的含义是当aVb且aVc成立,则将a的值赋给k。

如果aVb成立而aVc不成立将c的值赋给k。如果aVb不成立而b<c成立,将b

的值赋给k。如果aVb不成立且b<c也不成立,籽c的值赋给匕判断条件表达

式只有B选项可以表示这个含义。

19、有以下程序:#include<stdio.h>main(){intk=5;while(-k)p门

k・=3);printf「\n,>}程序执行后的输出结果是()。

A、1

B、2

C、4

D、死循环

标准答案:A

知识点解析:一一k先自减再使用,所以第一次判断条件即为whi1e(4),条件为

真,执行打印k的值k=4-3,结果为1;第二次判断条件即为while(O),条件为假,

结束循环,打印回车换行符。所以选择A选项。

20、有以下程序:#include<stdio.h>main(){inti,j;for(i=3;i>=l;i—)

{for(i=l;jV=2;j++)primf(“%(r,i+j);printf(]n9}}程序运行后的输出结

果是()。

A、432543

B、453423

C>233445

D、233423

标准答案:R

知识点解析:第一次执行外循环,i的值为3,第一次执行内循环j的值为1,jV

=2条件成立,打印i+j的值,即4;第二次执行内循环j的值为2,j<=2条件成

立,打印i+j的值,即5;再判断条件不成立,打印回车换行符,跳出内循环。第

二次执行外循环,i的值为2,内循环的执行同第一次一样,所以打印3和4,打印

回车换行,结束内循环。第三次执行外循环i的值为1,同理内循环中打印2和

3,打印回车换行符,结束内循环。

21>有以下程序:#include<stdio.h>main()(intk=5,n=0;do{svvitch(k)

{ease1:ease3:n+=l;k—;break;default:n=0;k—;ease2:ease4:n+=2;

k-;break;}prindT,%d'',n);)whiIe(k>0&&n<5);}程序运行后的输出结

果是()。

A、02356

B、0235

C、235

D、2356

标准答案:C

知识点解析:k的值为5,逐个对case语句进行匹配,均不匹配,执行default下的

语句n=0;k-o再执行case2:case4:后面的语句n+=2;k-;o执行break语句跳

出switch判断,打印n的值,即2。经过第一次循环后,k的值为3,然后进行k>

0&&nV5条件判断为真。第二次执行循环体,执行case3:后面的语句n+=l;k-

・;。再执行break语句跳出循环,此时打印n的值3,此时k的值为2。第三次执

行循环体k的值为2,满足条件,执行case2:case4:后面的语句n+

温馨提示

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

最新文档

评论

0/150

提交评论