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

下载本文档

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

文档简介

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

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

1、下面关于数据库三级模式结构的叙述中,正确的是()。

A、内模式可以有多个,外模式和模式只有一个

B、外模式可以有多个,内模式和模式只有一个

C、内模式只有一个,模式和外模式可以有多个

D、模式只有一个,外模式和内模式可以有多个

标准答案:B

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

个数据库可以有多个外模式,但只有一个模式和一个内模式。

2、下列不合法的用户标识符是()。

A、j2_KEY

B、Double

C、4d

D、_8_

标准答案:C

知识点解析:在C语言程序中,合法标识符的命名规则是:标识符可以由字母、

数字和下划线组成,并且第一个字符必须是字母或下划线。

3、以卜能对一维数组a进行初始化的语句是()。

A^inta[5]=(0,1,2,3,4);

B>inta(5)={};

C.inta[3]={0,1,2);

D、inta{5}={10*l};

标准答案:C

知识点解析:选项A,数组可以看作是若干个相同数据类型元素的有序集合,因此

以集合的形式对其初始叱,使用{}对其初始化;选项BD,常量表达式只能放在中

括号U中。故C选项正确。

4、有关return语句说法不正确的是()。

A、系统默认的返回值类型为整型,故当函数的返回值为int型时,在函数定义

时.,返回值的类型说明可以省略。

B、当函数有返回值时,凡是允许表达式出现的地方,都可以调用该函数。

C、当函数没有返回值时,函数的返回值类型可以说明为void型,它表示“无类型”

或“空类型,,。

D、函数的返回值类型必须与return语句中的表达式值的类型一致,但C语言也允

许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将relurn语句

中表达式的值转换为函数的返回值类型。

标准答案:D

知识点解析:函数的返回值类型一般与reiurn语句中的表达式值的类型一致,但C

语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将

return语句中表达式的值转换为函数的返回值类型。

5、有以下程序:#include<stdio.h>main(){intx=1,y=0,a=0,b=0;

switch(x)(case1:switch(y){case0:a++;break;

case1:b++;break;}case2:a++;b++;

break;case3:a++;b++;)printf("a=%d,b=%d\n",

a,b);}程序的运行结果是()o

A、a=2,b=2

B、a=2,b=1

C^a=l,b=l

D、a-1,b-0

标准答案:B

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

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

case子句执行下去,不在进行判断,直到碰到break或函数结束为止。所以执行内

层switch(y)时只执行了a++,此时a的值为1。然后执行外层case2语句的a+

+;b++;a为2,b为1。所以结果为B)。

6、若主函数中有定义语句:inta[10],b[10],C;,在主函数前定义的fun函数首

部为:voidfun(intx口).则以下选项中错误的调用语句是()c

A、fun(b);

B、fun(&c);

C^fun(&a[3]);

D、fun(b|lll);

标准答案:D

知识点解析:fun函数的形式参数为一个数组,需要实参为一个地址,而b[U]是一

个整型元素,参数类型不一致,且"11]已经溢出,所以D项错误。

7、以下对联合类型叙述正确的是()。

A、可以对联合变量名直接赋值

B、使用联合变量的目的是为了节省内存

C、任何一个联合变量可以同时引用联合中的不同成员

D、联合类型定义中不能同时出现结构类型的成员

标准答案:B

知识点解析:由于联合体是同一存储区域由不同类型的变量共享,所以不可以直接

对联合体变量名进行赋值,且联合体中的空间在某一时刻只能保持某一成员的数

据;另外合体中可以出现结构类型的成员。

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

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

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

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

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

标准答案:D

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

础建立新类的定义技术。在广义上来说,继承是指能够直接获得己有的性质和特

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

9、若有定义inix,y;并已正确给变量赋值,则以下选项中与表达式(x-y):(x+

+):(y++)中的彖件表达式(x—y)等价的是()o

A、(X—y<O||x—y>0)

B、(x—y<0)

C、(x—y>0)

D、(x—y==0)

标准答案:A

知识点解析♦:条件表达式:表达式1:表达式2:表达式3的含义是:先求解表达

式1,若为非0(真),则求解表达式2,条件表达式的值为表达式2的值。若表达式

1的值为0(假),则求解表达式3,条件表达式的值为表达式3的值。在本题中与(x

—y)等价的是((x-y)<0||(x-y)>0)。答案为A选项。

10、有以下程序:includemain(){intb[3][3]={0,1,2,0,1,2,O,1,2),

i,j,t=l;for(i=0;i<3;i++)for(j=i;j<=i;j++)t+=b[i][b[j][i]];prinff("%d\

n”,t);}程序运行后的输出结果是()。

A、3

B、4

C、1

D、9

标准答案:B

知识点解析:每次内循环只循环一次就结束,第一次外循环时

t=t+b|O]|b|O||O|]=l+b|O||O|=l+O=l;第二次外循环时

t=t+b[l][b[l][l]]=l+b[l][l]=l+l=2;第三次外循环时

t=t+b[2][b[2][2]]=2+b[2][2]=2+2=4。

11、有以下函数:intfun(char*x,char*y){intn=0:while((*x=*y)&&月cX!=’\

0'){x++;y++;n++;}returnII;}函数的功能是0。

A、将y所指字符串赋给x所指存储空间

B、查找X和y所指字符串中是否有)(),

C、统计X和y所指字符串中最前面连续相同的字符个数

D、统计x和y所指字符串中相同的字符个数

标准答案:C

知识点解析:本题中由循环条件可知遇到'0'或X与y所指的字符的值不等中的

一个条件时就结束,所以功能是统计x和y所指字符串中最前面连续相同的字符个

数。

12、有以下程序:#include<stdio.h>structtt{inix;structtt*y;)*p;structtt

a[4J={20,a+1,15,a+2,30,a+3,17,a);main(){inti;p=a;tor(i=l;i<

=2;i++){printf("%d,",p->x);p=p->y;}}程序的运行结果是()。

A、20,30,

B、30,17

C、15,30,

D、20,15,

标准答案:D

知识点解析:本题考查的是指针和结构的应用。首先定义的数组n中有两个成员,

一个整型变量,一个结沟指针。当i=l时,p指针指向结构数组的第一个元素,并

输出此元素的第一个成员x,即20;当i=2时,p指针指向结构数组的第二个元素

的第一个成员,所以输出15。

13、fgets(str,n,fp)函数从文件中读入一个字符串,以下错误的叙述是()。

A、字符串读入后会自动加入、(T

B、fp是指向该文件的文件型指针

C>fgets函数将从文件中最多读入n个字符

D、fgets函数将从文件中最多读入n-l个字符

标准答案:C

知识点解析:字符串输入函数fgetsO的调用形式为:fgets(s.n.fp)c*可以是一

个字符数组名,或是指向字符串的指针;n为要读取的最多的字符个数:fp是指向

该文件的文件型指针。字符串输入函数的功能是:从fp所指向的文件中读取长度

不超过n-l个字符的字符串,并将该字符串存放到字符数组s中。

14、将E—R图转换为关系模式时,实体和联系都可以表示为()。

A、属性

B、键

C、关系

D、域

标准答案:C

知识点解析:从E—R图到关系模式的转换是比较直接的,实体与联系都可以表示

成关系,E—R罔中属性也可以转换成关系的属性。

15、下列叙述中错误的是()。

A、C语句必须以分号垢束

B、复合语句在语法上被看作一条语句

C、空语句出现在任何位置都不会影响程序运行

D、赋值表达式末尾加分号就构成赋值语句

标准答案:c

知识点解析:C语言规定每条语句和数据定义的最后必须有一个分号,分号是C语

句的必要组成部分。复合语句也称为“语句块”,其形式如下:{语句1;语句

2;……语句n;},即月一对大括号把若干语句括起来构成一个语句组。一个复合

语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的

最后加一个分号就成为一条语句,即赋值语句。空语句是只有一个分号的语句,它

什么也不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分

号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也不会提示逻辑错误,需

要慎用。

16、有以下程序:#include<stdio.h>main(){intai,a2;charc1,c2:scanf(H%

d%c%d%c”,&al,&cl,&a2,&c2);printf("%d,%c,%d,%c"»al,cl,

a2,c2);}若想通过键盘输入,使得al的值为12,a2的值为34,cl的值为字符

a,c2的值为字符b,程序运行后的输出结果是:12,a,34,b。则正确的输入格

式是(以下一代表空格,<CR>代表回车)()。

A、123-b<CR>

B、12一•一乂一bVCR>

C、12,a,34,b<CR>

D、12a34b<CR>

标准答案:D

知识点解析:在输入多个数据时,若格式控制串中无非格式字符,则认为所有输入

的字符均为有效字符。所以应按选项D的顺序输入数据。

17、设有条件表达式:(ExP)?i++:j--.则以下表达式中(EXP)完全等价的是()《

A、(EXP=O)

B、(EXP!=O)

C、(EXP==1)

D、(EXP!=1)

标准答案:B

知识点解析:条件表达式的形式为:”表达式17表达式2:表达式3”。其含义为:

当“表达式1”的值为非零时,求出“表达式2”的值,此时“表达式2”的值就是整个条

件表达式的值;当“表达式1”的值为零时,求出“表达式3”的值,此时“表达式3”的

值就是整个条件表达式的值。对于本题来说,当表达式.EXP为非0值时条件成

立,即执行语句i++;当EXP等于0时,执行语句j-・;这等同于条件表达式

“(EXP!=O)?i++:j++;

18、有以下程序#include<stdio.h>intfun(inta,intb){if(b==O)returna;else

return(fun(—a,-b));}main(){printf(,,%dkn,\fun(4,2));}程序的运行结果是

()。

A、1

B、2

C、3

D、4

标准答案:B

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

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

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

19、当a=4,b=5,c=7,d=6时,执行下面一段程序:if(a

A、I

B、2

C、3

D、4

标准答案:B

知识点解析:本题考查ifelse语句。第一个if语句,先判断条件,a

20、若有以下程序段:intr=8;printfC'%d\n",r>>l);程序运行后的输出结果

是()。

A、16

B、8

C、4

D、2

标准答案:C

知识点解析:本题考查位运算,属于基础知识,题目中将整型变量8.二进制表达

为00001000,右移一位为00000100,即4,选项C正确。

21、下列描述中,正确的是()。

A、线性链表是线性表的链式存储结构

B、栈与队列是非线性结构

C、双向链表是非线性结构

D、只有根结点的二义树是线性结构

标准答案:A

知识点解析:根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结

构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个

条件:①有且只有一个根结点;②每个结点最多有一个前件,也最多有一个后

件。则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表

都是线性结构,而二义树是非线性结构。

22、下列程序的运行结果为()。#includevoidabc(char*str){inta,b,i,j;for(i_-

j=0;str[i]!=,\O,;i++)ifi[str[i]!=,a,)str[j-H-]=str[i];str[j]=,\O,:}voidmain(){char

str[]="abcdef;abc(str);printf("str[]=%s",str);)

A、str[]=bcdef

B、str[]=abcdef

C^str[]=a

D、str||=ab

标准答案:A

知识点解析:本题考查函数调用的参数传递。通过函数abc的执行,将字符串中的

字母a去掉,保留剩下的,由于是通过指针调用,所以改变字符串的结果。

23、以下有关宏替换的叙述不正确的是()。

A、使用宏定义可以嵌套

B、宏定义语句不进行语法检查

C、双引号中出现的宏名不替换

D、宏名必须用大写字母表示

标准答案:D

知识点解析:本题考查宏替换的规则。宏替换有两类:简单的字符替换和带参数的

宏替换。使用宏应注意:①宏定义仅仅是符号替换,不是赋值语句,因此不做语

法检查;②为了区别程序中其他的标示符,宏名的定义通常用大写字母,但不是

必须用大写;③双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义

的宏中可以使用先定义的宏。

24、在下列模式中,能够给出数据库物理存储结构与物理存取方法的是()o

A、外模式

B、内模式

C、概念模式

D、逻辑模式

标准答案:B

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

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

式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述。内模式又

称物理模式,它给出了数据库物理存储结构与物理存取方法,所以选择B。

25、设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),

课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)

为()。

A、课号,成绩

B、学号,成绩

C、学号,课号

D、学号,姓名,成绩

标准答案:C

知识点解析:学号是学生表S的主键,课号是课程表C的主键,所以选课表SC的

关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择

C)0

26、以下不属于C语言整型常量的是()。

A、0L

B、-018

C、OXa

D、200U

标准答案:B

知识点解析:C语言中,整数可以有八进制、十进制和十六进制3种表示形式,十

进制的数码取值为0〜9,没有前缀:八进制的数码取值为0〜7,必须以0开头,

作为八进制数的前缀;十六进制的数码取值为:0〜9,A〜F或a〜f,前缀为OX

或Ox。另外,对于长整型数,使用后缀L或1来表示,无符号数使用后缀U或u

来表示;0L表示十进制长整型数0,故选项A正确;OXa表示十六进制数a,即十

进制数值10,故选项C正确;200U表示十进制无符号整型数200,故选项D正

确;负数一般使用二进制补码形式保存在内存中,按照八进制显示时,前缀0在最

前面,后面的数值由二进制补码转换成八进制,无负数符号,在C程序中,只有

十进制数可以是负数,而八进制和十六进制数只能是整数。因此答案为B。

27、有以下程序#include<stdio.h>main(){structSTU{charname[9];charsex;

doublescore[2];};structSTUa={"Zhso-m',85.0,90.0},b={HQian",T,95.0,92.0};

b=a;printf("%s.%c,%2.0f,%2.0f\n",b.namc,b.sex.b.scorc[0],b.scorc[l]);}程序的运行

结果是

A、Qian,m,85,90

B、Zhao,m,85,90

C、Zhao,f,95,92

D、Qian,f,95,92

标准答案:B

知识点解析:本题考查结构体初始化操作,本题中可以直接将结构体a赋值给b,

所以输出的结果和a一样,选项B正确。

28、若有定义语句:doublea,*p=&a;以下叙述中错误的是()。

A、定义语句中的*号是一个间址运算符

B、定义语句中的*号是一个说明符

C、定义语句中的p只能存放double类型变量的地址

D、定义语句中*p=&a把变量a的地址作为初值赋给指针变量p

标准答案:A

知识点解析:指针运算符(通常称为间接引用运算符:indirectionoperator或复引用

运算符:dereferencingoperator)返回其操作数(即一个指针)所指向的对象的值。定

义语句中的*号不是一个间址运算符,而是定义指针变量的说明符,因此,A项错

误,B选项正确,原则上说变量p可以放double兼容性的变量地址,C选项正确,

根据指针的赋值运算,可知D选项正确。故答案为A选项。

29、若想定义血型变量a,b,c,d并都赋值为1,以下写法中错误的是()。

A、inta=b=c=d=l;

B、inta=l,b=l,c=l,d=l;

C^inta,b,c»d;a=b=c=d=l;

D、inta,b,c,d=l;a=b=c=d;

标准答案:A

知识点解析:C诺言赋值运算符的结合方向是从右向左,使用的变量必须已经定义

了,inta=b=c=d=l;本条语句首先执行赋值运算d=l,由于b并未定义,故编译不

通过,提示没有定义标-只符b、c、d,故A选项错混。答案为A选项。

30、有以下程序段:charname[20];intBum;scanf(''name=%snum=%d'',

name,&hum);当执行上述程序段,并从键盘输入:name=Davidnum=101v回车,

后,name的值为()。

A、name二David

B、name=Davidnum=101

C、David

D、DavidBum=101

标准答案:C

知识点解析:scanf在输入内容时严格按照格式要求接收字符,泮意到%$后面有个

空格,所以name的值将是David。

31、有以下程序#include<stdio.h>#include<stdlib.h>voidfun(int*pl,int*p2,inl

*s){s=(int*)malloc(sizeof(int));*s=*pl+*(p2++);}main(){inta[2]={1,2},

b[2]={10,20),*s=a;fiin(a,b,s);printf("%d\n",*s);}程序运行后的输出结果是

A、Il

B、10

C、1

D、2

标准答案:C

知识点解析:本题考查任数组名作为函数参数,执行fun函数后,s的值并没有发

生变化,仍然是指向a,所以输出结果为1,选项C正确。

32、若变量己正确定义for(x=0,y=0;(y!=99&&x<4);x++)则以上for循环

A、执行3次

B、执行4次

C、执行无限次

D、执行次数不定

标准答案:B

知识点解析:本题重点考察for语句的循环次数,for(x=0,y=0;(y!=99&&x<

4);x++),y!=99&&xV4即循环条件当y不等于99以及xV4时,执行循环语句,

当有一个条件不成立时,均结束循环,因此循环4次,B选项正确。

33、有以下程序include<stdio.h>main(){charc[2||5|={"6934","8254"},*p|2|;

inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>0&&

p[i皿V='9;j+=2)s=10*s+p[i][j]-'O';printf("%d\n",s);}程序的输出结果是

A、693825

B、69825

C、63825

D、6385

标准答案:D

知识点解析:本题的意图在于将c中两个字符串的偶数位置的数字组成一个新数,

找到的四个数字分别为6、3、8、5,组成的数为6385,所以答案为D选项。

34、有两个关系R,S如下,由关系R和S通过运算得到关系T,则所使用的操作

RST

nBcDBCD

□EJf3k2b1nl

EJEJa0kl

n2xl

A、并

B、自然连接

C、笛卡尔积

D、差

标准答案:D

知识点解析:常用的扩充运算有交、除、连接及自然连接等。并:RS是将S由的

记录追加到R后面。差:R-S结果是属于R但不属于S的记录组成的集合。交:

RS结果是既属于R又属于S的记录组成的集合。差运算R-S:关系R中两条记录

其中(b1nl)不属于S,所以R-S二T。D选项正确。

35、有以下程序:#includemain(){intx,a=l,b=l;while⑴{scanR''%d’',

&x);if(x>0){a*=x;break:)if(x<O){b*=x;continue;}printf(''%d,%d\n'',

a,b);}}程序运行时输入:一2—3045〈回车,,则输出结果是()。

A、1,6

B、1,61,6

C、一1,一6

D、一2,6

标准答案:B

知识点解析:循环体中的break语句将立即退出循环,而continue将直接执行下一

次循环。当输入一2和一3时,执行b*二x语句,且不会打印,结果是b=l*—2*-

3=6,当输入0时,前两个if语句并未执行,直接打印出a,b的值,此时a=l,

b=6,当输入4时执行break语句,直接退出循环。

36、下面程序的运行结果是()。#includevoiddel(char*s){inti,j;char*a;a=

S;for(i=0,j=0;a[i]!=>\;i++){if(a[i]>=>0,&&a[i]<=*9*){s[j]=a[i];j

++;}s「]='\O';}}main(){chars[]="aa89gggh";del(s);printf("\n%s",

s);)

A、aa

B、89

C、gggh

D、aa89gggh

标准答案:B

知识点解析:本题中dcl(char*s)函数实现的功能是:逐个读入s数组中的字符,如

果遇到数字,则将其重新存在s中,遇到非数字字符则跳过。所以最后输出的应该

是字符串s中的所有数字。

37、在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的

阶段是()。

A、需求分析

B、详细设计

C、软件设计

D、概要设计

标准答案:A

知识点解析:软件生命周期的主要活动阶段为:可行性研究和计划制定、需求分

析、软件设计、软件实现、软件测试、运行和维护。其中需求分析是对开发软件提

出的需求进行分析并给出详细定义,即准确地确定软件系统的功能,编写软件规格

说明书及初步的用户手册,提交评审。

38、在C语言程序中,以下说法正确的是()。

A、函数的定义和函数的调用均不可以嵌套

B、函数的定义不可嵌套,但函数的调用可以嵌套

C、函数的定义可以嵌套,但函数的调用不可以嵌套

D、函数的定义和函数的调用均可以嵌套

标准答案:B

知识点解析:本题考查函数调用的基本概念。因为函数的结果是一个未知量,而函

数定义时不能使用未知量,所以函数定义不可以嵌套,但是函数调用可以嵌套。

39、以下程序段中,循环次数不超过10的是

A、inti=10;do{i=i+l;|while(i<0);

B、inti=5;do(i+=l;}while(i>0);

C、inti=l;do{i+=2;)while(i!=10);

D、inti=6;do[i-=2;}while(i!=l);

标准答案:A

知识点解析:do...while循环语句一般形式为:do{循环体}while(表达式),执行过

程为:首先执行循环体,之后判断表达式,成立(非0)则再一次执行循环体,不

成立(0)则退出循环。A选项,执行函数体i=ll,判断条件IIV0不成立,退出

循环,循环次数为1,入超过10次,A选项正确。B选项执行函数体仁6,判断条

件为〉0,由于执行函数体时i在增加,i>0一直成立,程序陷入无限循环,循环

次数大于10,B选项错误。C选项执行函数体i=3,判断条件为i!=10,由于函数

体中i每次增加2,所以永远不可能等于10,故程序会陷入无限循环,循环次数大

于10,C选项错误。D选项执行函数体i=4,判断条件为i!=l,由于函数体中i每

次减少2,所以永远不可能等于1,故程序会陷入无限循环,循环次数大于10,D

选项错误。

40、卜列序列中不满足堆条件的是

A、(98,95,93,96,89,85,76,64,55,49)

B、(98,95,93,94,89,85,76,64,55,49)

C、(98,95,93,94,89,90,76,64,55,49)

D、(98,95,93,94,89,90,76,80,55,49)

标准答案:A

知识点解析:若有n个元素的序列,将元素按顺序组成一棵完全二叉树,当且仅当

满足下列条件时称为堆:大根堆,所有结点的值大于或等于其左右子结点的值;小

根堆,所有结点的值小于或等于其左右子结点的值。B、C、D选项属于大根堆,

A选项由于98>95,判断属于大根堆,但95<96,不满足条件,不是堆,故选择

A选项

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

41、给定程序中,函数fun的功能是将a和b所指的两个字符串转换成面值相同的

整数,并进行相加作为函数值返刚,规定字符串中只含9个以下数字字符。例

如,主函数中输入字符串:32486和12345,在主函数中输出的函数值为:44831。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得

更改程序的结构!#include#includc#include#defineN9longctod(char*s){longd=0;

while(*s)if(isdigit(*s)){产*********found**********/d=d*10+*s一1

/1f

/小不小不小不小个小个tennd不小小小小小小小小2;)returnd;}longfun(char*a,

char*b){/**********found**********/return3;}main(){char

sl[N],S2[N];do{printf("Inputstringsi:");getS(sl);}while(Strlen(sl)>N);do

{printf("Inputstrings2:"):gets(S2);)while(strlen(s2)>N);printf("Theresult

is:%id\n",fun(sl,s2));)

标准答案:(l),0,(2)s++(3)ctod(a)+ctod(b)

知识点解析:第一空:举例说明ctod内循环的作用,例如将字符串“123”转换为数

字时:第一次进入循环时,*s等于字符“1”,d应等于0*10+1,第一空处是将字符

变成数字,字符"1”变成数字1可由字符“「'减去字符“0”得到,故第一空处应为

“9"。;第二空:s是数组指针,在循环中s不断往后移动直至到达数组结束,故

第二空处应为“s++”。第三空:由审题分析可知,在fun函数内两次调用ctod函数

完成字符串到整数的变爽,然后求和,故第三空处为“ctod(a)+ctod(b)”。

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

42、给定程序M0DI1.C中函数fun的功能是:从整数1到55之间,选出能被3

整除、且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的

个数作为函数值返回。规定,函数中al放个位数,a2放十位数。请改正程序中的

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

得更改程序的结构。#include<stdio.h>intfun(int*b){intk,al,a2,i=0:

for(k=10;al=k-

a2*10:if((k%3==0&&a2==5)||(k%3==0&&a1==5)){b[i]=k;i++:})/

)main(){inta[100],k,m;

m=fun(a);printf("Theresultis:\n");for(k=0;k<m;k++)printf("%4d",

a[k]);printf(n\n");)

标准答案:(1)a2=k/10;(2)retnrni;

知识点解析:(1)第一标识下"a2=k/10;”是截取十位数,截取个位数是k%10,而

截取十位数是k/10,因此第一标识下应改成"a2=k/10:(2)变量i是标识数组

b的下标也就是数组的个数,题目中“returnk;”返回的是循环条件表达式中的变

量,所以这里应该将"returnk;"改为"returni;

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

43、请编写函数fun,其功能是将形参s所指字符串放入形参a所指的字符数组

中,使a中存放同样的字符申。说明:不得使用系统提供的字符申函数。注意:

部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,

仅在函数fun指定的部位填入所编写的若干语句。试题程序:1#includeVstdio.h

>2#defineN203voidNONO();4voidfun(char*a,charts)5{67)8main()9

{charsl[N],*s2=''abcde饱hijk“:10fun(sl,s2);11printf(''%s\n'',si);12

printf(''%s\n'',s2);13NONO();14}15voidNONO()16(/*本函数用于打开

文件,输入数据,调用函数,输出数据,关闭文件。*/17FILE*fp,*wf;18

inti;19charsi[256],s2[256]:20a=fopen(''in.dat",''r'>21

wf=fbpen(''out.dat",、'w'');22for(i=0;i<10;i++){23fgets(s2,255,fp);24

fun(sl>s2);25fprintf(wf,si);26)27fclose(fp);28fclose(wf);29)

标准答案:1voidfun(char*a,char*s)2{while(*s!=,\09)3{*a=*s;4a++;5

s++;6}7*a=,\0,;8}

知识点解析:要将s所指的字符串存入a所指的字符串中,程序要求不能使用系统

提供的字符串函数,本题可以使用循环语句,依次取出a所指字符串中的元素,将

其存入s所指的字符串中,最后为s所指的字符串添加结束标识、(V。

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

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

1、下列关于栈和队列的描述中,正确的是()。

A、栈是先进先出

B、队列是先进后出、

C、队列允许在队头删除元素

D、栈在栈顶删除元素

标准答案:D

知识点解析:栈实际也是线性表,只不过是一种特殊的线性表。栈是只能在表的一

端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶,另一端为栈

底。队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队

头,允许插入的一端叫做队尾。

2、已知二叉树后序遍历序列是CDABE,中序遍历序列是CADEB,它的前序遍历

序列是()。

A、ABCDE

B、ECABD

C、EACDB

D、CDEAB

标准答案:C

知识点露析:由于后序遍历的最后一个元素为E,所以E为根结点,所以它的前序

遍历的首个元素为E,故排除A)和D)选项。由于中序遍历中,元素B在元素根结

点E的后面,所以B为二叉树的右子树,并且该二叉树右子树只有一个元素,所

以前序遍历的最后一个元素应为B,故选项C)为正确选项,即该二义树的前序遍

历序列是EACDB。

3、在数据流图中,带有箭头的线段表示的是()。

A、控制流

B、数据流

C、模块调用

D、事件驱动

标准答案:B

知识点解析:数据流图中带箭头的线段表示数据流,沿箭头方向传递数据的通道,

一般在旁边标注数据流名。

4、结构化程序设计的3种结构是()。

A、顺序结构,分支结构,跳转结构

B、顺序结构,选择结构,循环结构

C、分支结构,选择结构,循环结构

D、分支结构,跳转结构,循环结构

标准答案:B

知识点解析:程序设计语言仅仅使用顺序、选择和重复(循环)三种基本控制结沟就

足以表达出各种其他形式结构的程序设计方法。遵循程序结构化的设计原则,按结

构化程序设计方法设计出的程序易于理解、使用和维护;可以提高编程工作的效

率,降低软件的开发成本。

5、下列方法中,不属于软件调试方法的是()。

A、回溯法

B、强行排错法

C、集成测试法

D、原因排除法

标准答案:C

知识点解析:软件调试主要采用以下三种方法:强行排错法:作为传统的调试方

法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。回溯

法:该方法适合于小规模程序的排错、即一旦发现了错误,先分析错误征兆,确定

最先发现“症状”的位置C原因排除法:原因排除法是通过演绎和归纳,以及二分

法来实现。

6、下列选项中,不属于模块间耦合的是()。

A、内容耦合

B、异构耦合

C、控制耦合

D、数据耦合

标准答案:B

知识点解析:耦合可以分为下列几种,它们之间的耦合度由高到低排列:内容耦

合一一若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。公共

耦合若一组模块都访问同一全局数据结构,则称为公共耦合。外部耦合---

若一组模块都访问同一全局数据项,则称为外部耦合。控制耦合一一若一模块明

显地把开关量、名字等信息送入另一模块,控制另一模块的功能,则称为控制耦

合。标记耦合一一若两个以上的模块都需要其余某一数据结构的子结构时,不使

用其余全局变量的方式而全都使用记录传递的方式,这样的耦合称为标记耦合。

数据耦合一一若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参

数,则这两个模块为数据耦合。非直接耦合——若两个模块没有直接关系,它们

之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦

合,这样的耦合独立性最强。

7、下列特征中不是面向对象方法的主要特征的是()。

A、多态性

B、标识惟一性

C、封装性

D、耦合性

标准答案:D

知识点解析:面向对象没计方法与面向过程设计方法有本质的不同,其基本原理

是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:标识

惟一性、多态性、封装性、模块独立性、继承和多态性好。

8、在数据库设计中,将E-R图转换成关系数据模型的过程属于()。

A、需求分析阶段

B、概念设计阶段

C、逻辑设计阶段

D、物理设计阶段

标准答案:C

知识点解析:逻辑结构设计的任务:概念结构是各种数据模型的共同基础,为了能

够用某一DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模

型,这正是数据库逻辑结构设计所要完成的任务。它包括从E-R图向关系模式转

换和逻辑模式规范化及调整、实现。

9、在一棵二叉树上,第5层的结点数最多是()。

A、8

B、9

C、15

D、16

标准答案:D

知识点解析:根据二叉树的性质:二叉树第i(iNl)层上至多有个结点。得到第

5层的结点数最多是16个。

10、下列有关数据库的描述,正确的是()。

A、数据库设计是指设计数据库管理系统

B、数据库技术的根本目标是要解决数据共享的问题

C、数据库是一个独立的系统,不需要操作系统的支持

D、数据库系统中,数据的物理结构必须与逻辑结构一致

标准答案:B

知识点解析:数据库设计的目的实质上是设计出满足实际应用需求的实际关系模

型。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:提高数据

的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数

据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和

维护代价。

11、以下关于C语言的叙述中正确的是()。

A、预处理命令通常位于函数体外面,但也可以位于函数体中间

B、C语言中的变量定义须在其他语句之前

C、在C语言程序的书写中,一个语句必须单占一行

D、一个C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的

main函数

标准答案:A

知识点解析:源程序中可以有预处理命令(indude命令仅为其中的一种)。C语言中

的变量可以在使用之前的任何位置进行定义。C语言程序的书写中,多个语句可以

位于一行,但为了增强可读性,一般每行只有一条语句。一个C语言源程序可以

由一个或多个源文件组成,但仅可以有一个main函数.

12、下列叙述中错误的是()。

A、用户所定义的标识符允许使用关键字

B、用户所定义的标识符应尽量做到“见名知意”

C、用户所定义的标识符必须以字母或下划线开头

D、用户定义的标识符中,大、小写字母代表不同标识

标准答案:A

知识点解析:在C语言中,合法标识符的命名规则是:标识符可以由字母、数字

和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必

须按此规则命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同

的字符。在选择标识符时,应注意做到“见名知义”,即选择具有一定含义的英文单

词或汉语拼音作为标识符,以增加程序的可读性。

13、下列选项中可作为C语言合法常量的是()。

A、-80

B、-080

C、-8el.0

D、-80.0e

标准答案:A

知识点解析:所谓常量是指在程序运行的过程中,其值不能被改变的量。在C语

言中,有整型常量、实型常量、字符常量和字符串常量等类型。选项B)中是以0

开头,表示一个八进制数,而八进制数的取值范围是0-7,所以“-080”错误;在C

语言中e后面的指数必须是整数,因此,选项C)和D)也不正确。

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

A、int_int;

B、doubleint_;

C>charFor;

D、floatUSS;

标准答案:D

知识点解析•:C语言规定,变量的标识符只能由字母、数字和下划线3种字符组

成,且首字符必须为字母或下划线。在C语言中大写字母和小写字母被认为是两

个不同的字符。选项A)定义的变量标识符_int和选项B)定义的变量标识符int_与

C语言的关键字而是不同的,是正确的变量标识。选项C)定义的变量标识符For

与C语言中的关键字「or是两个不同的标识符,所以选项C)是正确的,而选项D)

包含有特殊字符$,因而其不符合C语言的变量命名规定。

15、下列关于函数的叙述中正确的是()。

A、每个函数都可以被其他函数调用(包括main函数)

B、每个函数都可以被单独编译

C、每个函数都可以单独运行

D、在一个函数内部可以定义另一个函数

标准答案:B

知识点解析:在C语言中,函数定义是平行的,函数不能嵌套定义,即函数之间

没有从属关系。虽然函数之间可以相互调用,但main。函数不能被调用,选项A)

错误;C程序从main。函数开始执行,当main。函数执行完毕时,整个程序就结束

了。C程序的执行必须从main。函数开始,选项C)选项错误;函数不能嵌套定

义,选项D)错误。

16、当a=l、b=2、c=3、d=4时,执行下面程序段后,X的值是()。if(a<b)if(c<

d)x=l;elseif(a<c)iffb<d)x=2;elsex=3;elsex=6;elsex=7:

A、1

B、6

C、3

D、2

标准答案:A

知识点解析:本题考查的是if-clse语句。第一个if语句,先判断条件,发现aVb

条件成立,执行下面的语句。第二个if语句,先判断条件,发现c<d条件成立,

执行下面的语句X=lo

17、以下程序的输出结果是()。#include<stdio.h>main(){inta=4,b=3,c=2,

d=l;printf(”%d",a<b?a:d<c?d:b);)

A、1

B、3

C>2

D、4

标准答案:A

知识点解析:条件表达式的格式为:Ha?b:c",它的功能是:当a为真时,表达式

的值等于b的值;当a为假时,表达式的值等于c的值。因为条件运算符的结合方

向为“自右向左”。因此,当表达式中嵌套使用条件表达式时,应先计算右边的条件

表达式,再计算左边的条件表达式。题中应先计算“dVc?d:b”的“dVc”关系表达

式的值,因为气=1VC=2”为真,所以取第一个表达式的值,即d的值作为整个表

达式的值。接着计算“aVb?a:d”,“a=4Vb=3”为假,取第二个表达式的值,即d

的值作为整个表达式的值。

18^有以下程序#include〈sldio.h>main(){intb[3][3]={0,1,2,0,1,2,0,

1,2),i,j,t=0:for(i=0;i<3;i++)for=(j=2;j>=i:j-)t+=b[i][j];pdntf("%d

\n",t);}程序运行后的输出结果是()。

A、4

B、3

C、8

D、9

标准答案:C

知识点解析:这道题主要考查的是二维数组的有关知识。在两层for循环语句中,

累加上三角元素,所以程序执行的过程为

-t=b[0][0]+b[0][l]+b[0][2]+b[l][l]+b[l][2]+b[2][2]=8Mo

19、以下程序:include<stdio.h>main(){charstr|10];scanf("%s",&str);

printf(H%s\n",str);}运行上面的程序,输入字符串“howareyou",则程序的执

行结果是()。

A、how

B、howareyou

C、h

D、howareyou

标准答案:A

知识点解析:当从键盘输入“howarcyou”时,由于scanf输入函数的特点是遇到空

格时结束读入字符,因此,该程序只将how这3个字符送到了字符数组sir中,并

在其后自动加卜结束符“\0%

20、设变量x和变量y都是int类型,且x=Ly=2,则pfintf("%d%d",x,y,

(x,y))的输出结果是()c

A、12

B、122

C、1,2

D、输出值不确定

标准答案:A

知识点解析:本题考查printf函数的格式和逗号表达式。printf函数在输出时,是

根据格式说明符的个数输出的,如果函数中有多余的项将不予输出;如果有输出项

少于格式说明符,则出绪,不能输出正确的结果。本题中逗号表达式(x,y)只返回

y的值。此时格式说明的个数是2,而输出项的个数是3,因此,prinlf函数只输出

前两项。

21、以卜程序的输出结果是()。#include<stdio.h>main(){inia=8,b=6,m=l;

switch(a%4)(caseO:m-+;break;case1:m++;switch(b%3){default:m++;

caseO:m++:break:}|printf(n%d\n",m);)

A、1

B、2

C>3

D、4

标准答案:B

知识点解析:本题考查switch语句。因为a=8,a%4=0,所以执行case0后面的语

句,将m加1,遇到break语句跳出switch。

22、定义如下变量和数组:inti,x[3][3]={l,2,3,4,5,6,7,8,9};则下面

语句的输出结果是()。for(i=0;i<3;i++)printf("%d",x[i][2-i]);

A、159

B、147

C、357

D、369

标准答案:C

知识点解析:本题主要考查二维数组的使用。题中利用for循环来输出x数组中的

指定元素:①当i=0时,输出x⑼⑵=3;②当i=l时,输出x⑴⑴=5;③当i=2

时,输出x[2][0]=70

23、有下列程序段:typcdefstructNODE{intnum;structNODE*ncxt:}OLD;

下列叙述中正确的是()c

A、以上的说明形式非法

B、NODE是一个结构体类型

C、OLD是一个结构体类型

D、OLD是一个结构体变量

标准答案:C

知识点解析:C语言允许用typedef说明一种新类型名,其一般形式为:typedef类

型名标识符。typedef语句的作用仅仅是使“标识符”来代表已存在的“类型名”,并未

产生新的数据类型。原有类型名依然有效。此题中,用typedef定义了新的类型

OLD结构,所以OLD为结构体类型。

24、下列数组定义中错浜的是()。

A>intx|||3|={0};

B、intx[2][3]={{l,2},{3,4},{5,6}};

C、intx[][3]={{l,2,3),{4,5,6|);

D、intx|2][3]={l,2,3,4,5,6);

标准答案:B

知识点解析:二维数组的初始化有以下几种形式:①分行进行初始化;②不分行

的初始化;③部分数组元素初始化:④省略第一维的定义,不省略第二维的定

义。在选项B)中赋值号左边定义了一个2行3列的二维数组,而右边用3行2列

的数字进行赋初值。所以出现了边界的越界溢出错误。

25、以下叙述错误的是()。

A、变量的作用域取决于变量定义语句的位置

B、全局变量可以在函数以外的任何部位进行定义

C、局部变量的作用域可用于其他函数的调用

D、一个变量说明为sialic存储类型是为了限制其他编译单元的引用

标准答案:D

知识点解析:本题考查函数调用的变量作用域。全局变量不在任何函数体内定义,

作用域为整个文件;局部变量在函数体内定义,作用域仅为本次函数;sialic类型

是静态变量,为了方便其他编译单元的引用,不能随意改变。一个函数包含两部

分:函数首和函数体,函数体包括花括号内的所有语句。

26、若定义函数"im*func()”,则函数定nc的返回值为()。

A、一•个实数

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

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

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

标准答案:B

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

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

27、若有定义“inta[5],*p=a;”则正确引用数组元素的是()。

A、*&a[5|

B、*a+2

C、*(p+5)

D、*(a+2)

标准答案:D

知识点解析:本题考查通过指针引用数组元素。用指针引用数组有以下3种形式:

①“(p+n)与(a+n)”表示数组元素a[n]的地址;②“*(p+n)与*(a+n)”表示数组元素

a[n];③"p[n]=*(p+n)”,都表示数组元素a[n]。选项A)、B)没看这种引用形式:选

项C),“*(p+5)”是引用数组的第6个元素,而数组一共有5个元素,出现越界;选

项D),“*(a+2)”引用数组的第3个元素。

28、以下对C语言中联合类型数据的正确叙述是()。

A、定义了联合变量后,即可引用该变量或该变量中的任意成员

B、一个联合变量中可以同时存放其所有成员

C、联合中的各个成员使用共同的存储区域

D、在向联合中的一个成员进行赋值时,联合中其他成员的值不会改变

标准答案:C

知识点解析:联合体的几个特点:①联合体所占用的内存空间为最长的成员所占

用的空间;②各个成员分量全部是从低地址方向开始使用内存单元:③联合体中

的空间在某一时刻只能保存某一个成员的数据;④联合体和结构体可以任意嵌

套。

29有以下函数定义:inifun(doublea,doubleb){returna*b;}若以下选项中所用

变量都己正确定义并赋值,错误的函数调用是()。

A^if(fun(x,y)){........}

B、z=fun(fun(x,y),fun(x,y));

C、z=tun(tun(x,y)x,y);

D、fun(x,y);

标准答案:c

知识点解析:本题考查函数调用时的参数传递。选项C)中第一个参数的表达式不

正确,因此不能得到正确的结果。

30、执行以下语句段后:xy的值是()。int*pt,xy;xy=200;pt=&xy:

xy=*pt+30;

A、200

B、170

C、260

D、230

标准答案:D

知识点解析:本题考查指针的运用。通过pt=&xy,将pt指向xy所占的内存地

址,而*pl是指针p1所指向内存单元中的内容,即200,所以最后x

温馨提示

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

评论

0/150

提交评论