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

下载本文档

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

文档简介

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

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

1、下列关于栈叙述正确的是()。

A、栈顶元素最先能被删除

B、栈顶元素最后才能被删除

C、栈底元素永远不能被删除

D、栈底元素最先被删除

标准答案:A

知识点解析:栈是先进后出的数据结构,所以栈顶元素最后入栈却最先被删除。栈

底元素最先人栈却最后被删除。所以选择A。

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

A、在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化

B、在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化

C、在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化

D、以上说法都不正确

标准答案:C

知识点解析:栈是先进后出的数据结构,在整个过程中,栈底指针不变,入栈与出

栈操作均由栈顶指针的变化来操作,所以选择C

3、某二义树共有7个结点,其中叶子结点只有1个,则该二义树的深度为(假设根

结点在第1层)()。

A、3

B、4

C、6

D、7

标准答案:D

知识点解析:根据二叉树的基本性质3:在任意一棵二义树中,多为。的叶子结点

总比度为2的结点多一个,所以本题中度为2的结点为1-1=0个,所以可以知道本

题目中的二义树的每一个结点都有一个分文,所以共7个结点共7层,即度为7。

4、软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于

应用软件的是()。

A、学生成绩管理系统

B、C语言编译程序

C、UNIX操作系统

D、数据库管理系统

标准答案:A

知识点解析:软件按功能町以分为:应用软件、系统软件、支撑软件。操作系统、

编译程序、汇编程序、网络软件、数据库管理系统部属于系统软件。所以B、C、

D都是系统软件,只有A是应用软件。

5、结构化程序所要求的基本结构不包括()。

A、顺序结构

B、GOTO跳转

C、选择(分支)结构

D、重复(循环)结构

标准答案:B

知识点解析:1966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、选择

和重复三种基本控制结沟就足以表达出各种其他形式结构的程序设计方法。

6、下面描述中错误的是()。

A、系统总体结构图支持软件系统的详细设计

B、软件设计是将软件需求转换为软件表示的过程

C、数据结构与数据库设计是软件设计的任务之一

D、PAD图是软件详细设计的表示工具

标准答案:A

知识点解析:详细设计的任务是为软件结构图中而非总体结构图中的每一个模块确

定实现算法和局部数据结构,刚某种选定的表达工具表示算法和数据结构的细节,

所以A错误。

7、负责数据库中查询操作的数据库语言是()。

A、数据定义语言

B、数据管理语言

C、数据操纵语言

D、数据控制语言

标准答案:c

知识点解析:数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操

纵语言:负责数据的操纵,包括查询及增、删、改等操作;数据控制语言:负责数

据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。

8、一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程问

的联系是()。

A^I:1联系

B、1:m联系

C、m:1联系

D、m:n联系

标准答案:D

知识点解析:因为一个教师可讲授多门课程,而一门课程乂能由多个老师讲授所以

他们之间是多对多的关系,可以表爪为m:n。

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

A、自然连接

B、并

C、交

D、差

标准答案:D

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

关系R中除去与关系S中相同元组后得到的关系To所以做的是差运算。

10、定义无符号整数类为UhH,下面可以作为类UInt实例化值的是()。

A、-369

B、369

C、0.369

D、整数集合{1,2,3,4,5)

标准答案:B

知识点解析:只有B选项369可以用无符号整数来表示和存储。A选项・369有负

号,选项C0.369是小数都不能用无符号整数类存储。选项D是一个整数集合得

用数组来存储C

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

A、C程序在运行过程中所有计算都以二进制方式进行

B、C程序在运行过程中所有计算都以十进制方式进行

C、所有C程序都需要编译链接无误后才能运行

D、C程序中字符变量存放的是字符的ASCII码值

标准答案:B

知识点解析:C程序在运行过程中的所有计算都以二进制方式进行,所以B选项错

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

A、C语言的数值常量中夹带空格不影响常量值的正确表示

B、C语言中的变量可以在使用之前的任何位置进行定义

C、在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致

知识点解析:输入数据的格式必须与scanf()的格式控制串完全匹配,所以输入时

必须在3和5之间输入“;

17、已知大写字母A的ASCII码值是65,小写字母a的ASCH码值是97。以下不

能将变量c中的大写字母转换为对应小写字母的语句是()。

A、c=('A'+c)%26-'a,

c=c+32

C、c=c-'A+a'

D、c=(c-'A,)%26+W

标准答案:A

知识点解析:根据题意可知,小写字母比与之对应的大写字母的ASCII码大32。

A选项中字符A加上c表示的大写字符再对字母个数26取余,本身这个表达式没

有任何含义,所以选择A选项。

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

A、(E>0||E<0)

B、(E==0)

C、(!E==0)

D、(E!=0)

标准答案:B

知识点解析:while语句中条件表达式E的值不为。即为真,认为满足条件,所以

与B选项中表达式的含义正好相反,选择B选项。

19、以下程序段中,与语句:k=a>b?(b>c?l:0):0;功能相同的是()。

A、if((a>h)||(b>c))k=l;elsek=0;

B、if((a>b)&&(b>c))k=l;else!k=O;

C、if(a<=b)k=O;elseif(b<=c)k=l;

D、if(a>h)k=l;elseif(h>c)k=l;elsek=0;

标准答案:B

知识点解析:条件表达式的含义是,如果表达式I成立,结果为表达式2的值,如

果不成立为表达式3的值。所以题干中k的值这样取值:如果a>b且b>c,k值

结果为1,如果a>b,且bVc则值为0。如果aVb,k值为0。也就是只要a>b

与b>c中只要有一个条件不成立,k的值就为0,所以选择B选项。

20、有以下程序:#include<stdio.h>main()(inta=l,}1=2;for(;a<8;

a++){b+=a;a+=2;)printf("%d,%d\n",a,b);}程序运行后的输出结果是

()。

A、9,18

B、8,11

C、7,II

D、10.14

标准答案:D

知识点解析:第一次循环a的值为1,满足条件,执行b+=a,与a+=2,则b的值

变为3,a的值变为3。执行a++,a的值为4,满足条件进入第二次循环,执行完

循环体后b的值为7,a的值为6。执行a++,a的值为7,满足条件进入第三次循

环,执行完循环体后b的值为14,a的值为9。执行a++,a的值变为10,不满足

条件,循环结束。所以选择D选项。

21>有以下程序:#include<stdio.h>main()(inti,j,ni=55:for(i=l;i<=3;

i++)for(j=3;j<=i;j++)m=m%j;prinlf("%d\n",m);}程序运行后的输出结果

是()。

A、0

B、1

C、2

D、3

标准答案:B

知识点解析•:第一次执行外循环i的值为1,满足条件,判断第一次内循环,j的值

为3,不满足条件,跳月内循环。第二次执行外循环i的值为2,同理也不满足内

循环条件,跳出内循环。第三次执行外循环i的值为3,此时进入内循环判断条件

时,条件成立,执行m=m%j,m的值为1,跳出内循环,跳出外循环打印m的

值。

22、有以下程序:#inelude<stdio.h>main()(intx=8:for(;x>0;x--){if(x%

3){printf("%d,”,x-);continue;}printf(”%d,",-x);}}程序运行后的输出

结果是()。

A、7,4,2,

8,7,5,2,

C、9,7,6,4,

D、8,5,4,2,

标准答案:D

知识点解析:coutinuc的作用是跳出循环体中剩余的语句而进行下一次循环。第一

次循环x的值为8,循环体中if条件成直,打印x的值8后将x减1,再执行

continue语句,跳出本次循环。第二次判断循环条件时,x的值变为6,不满足循

环体内if条件,执行打印--X的操作,即打印5后跳出循环。第三次判断循环条件

时x的值为4,满足循环体中if条件,执行打印X--的操作,即打印4,后将x值减

一,执行continue语句,跳出本次循环。第四次判断循环条件时x的为2,满足循

环体中if条件,打印X,即打印2后将x减一,执行continue语句,跳出本次循

环。在进行for条件表达式中第三个表达式x-的操作后x的值为0,不满足条件结

束循环。所以打印结果为8,5,4,2,o

23、以下叙述中错误的是O。

A、C程序必须由一个或一个以上的函数组成

B、函数调用可以作为一个独立的语句存在

C、若函数有返回值,必须通过return语句返回

D、函数形参的值也可以传回给对应的实参

标准答案:D

知识点解析:形参是函数定义时由川户定义的形式上的变量,实参是函数调用时,

主调函数为被调函数提供的原始数据。在C语言中,实参向形参传送数据的方式

是“值传递”。因此D选项正确。

24>有以下程序:#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=&h,*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选项正确。

25、有以卜程序:#include<stdio.h>voidf(int*p»int*q);main(){intm=l,

n=2,*r=&m;f(r,&n);prinlf("%d,%d”,m,n);)voidf(int*p,int*q)

{p=p+l;*q=*q+l:)程序运行后的输出结果是()。

A、2,3

B、1,3

C、1,4

D、1,2

标准答案:B

知识点解析:在int*q)函数中.执行p=p+1是将p所对应的地址加I,而

*q=*q+l是将q所指向的n的地址所对应的值加1,所以m的得知所对应的值没有

变,而n的值则为3了<:因此B选项正确。

26、若有定义语句:inia[2][3],*p[3];则以下语句中正确的是()。

A、p=a;

B、p[0]=a;

C、p[0]=&[l][2];

D、p|I|=&a;

标准答案:C

知识点解析:A选项错误,因为p是指向一个指针数组,作为数组名,不能指向别

的地方。B选项错误,因为p|0]是一个int指针,也就是int*;而a是一个指向指针

的指针int**。选项正确,因为p⑼是一个int*,a[l]⑵是int,&a[l]⑵是int*,类

型吻合。D选项错误,因为a作为数组名,不能取地址。即使能取,p[l]是int*,

&a是int=***,类型不对。因此C选项正确。

27、以下程序中函数f的功能是:当flag为1时,进行由小到大排序;当flag为0

时,进行由大到小排序。#include<stdio.h>voidf(intb[],intn,intflag){int

i,j,t;for(i=0;i<n-l;i++)for(j=i+l;j<n;j++)if(flag?b[i]>b[j]:b[i]<b[j])

{t=b[i];b[i]=b[j];b|j]=l;}}main(){inta[10]={5,4,3,2,1,6,7,8,9,

10),i;f(&a[2],5,0);f(a,5,1);for(i=0;i<10;i++)printf("%d,“,

a[i]);}程序运行后的输出结果是()。

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

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

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

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

标准答案:B

知识点解析:本题重点考察函数的参数传递,函数的参数传递分为传值和传地址两

种情况。本题就是结合数组考查参数传递的情形。函数f完成的功能是对数据进行

排序,语句f(&a[2],5,0)的作用是对从a[2]开始的5个元素进行从大到小排序。

注意:这里传递的是地址&a[2],所以排序操作可看作是直接对数组a操作,执行

后的结果为5,4,7,6,3,2,1,8,9,10。语句f(a,5,1)对数组a的前5个

元素从小到大排序,排序后数组为:3,4,5,6,7,2,1,8,9,10。因此B选

项正确。

28、有以下程序:#include<stdio.h>main(){ints[12]={1,2,3»4,4,3,2,

1,1,1,2,3),c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=l;i<5:

i++)printf(”%d",c[i]);pnntf(H\nM);}程序运行后的输出结果是()。

A、2344

B、4332

C、1234

D、1123

标准答案:B

知识点解析;在for(i=0;i<12;iii)c[s[i]]i।中,数组元素s[i]的值作为数组c的

下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2。因此B选项正

确。

29、以下能正确定义字符串的语句是()。

A、charstr:"\x43";

B、charstr[]=n\0";

C、charstr=*\

D、charstr[]={,\064'}:

标准答案:B

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

组来存放,故C选项和D选项不属于字符串,A选项定义的是一个字符变量s【r,

却用来存放字符串,显然也不正确,因此B选项正确。

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

A、空串比空格打头的字符串小

B、两个字符串中的字符个数相同时才能进行字符串大小的比较

C、可以用关系运算符对字符串的大小进行比较

D、C语言中有字符串类型的常量和变量

标准答案:A

知识点解析:字符串比较大小是以第1个不相同字符的大小为标准的,跟长度没有

关系,B选项不正确;字符串比较大小除了使用库函数slrcmp。以外,就只能靠自

己写代码来实现了,而不能通过关系运算符来比较大小。因为字符串在表达式中相

当于constchar*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个

字符串的首地址值比较大小,这是毫无意义的。C选项不正确。C语言中只有字符

串常量而没有字符串变量,D选项描述不正确;空串的长度为0,而以空格打头的

字符串的长度至少为1,因此A选项是正确的。

31、有以下程序:#include<stdio<>h>voidfun(ehar*a»char*b)

{while(*a=,*,)a++;while(*b=*a){b++;a++;}}main()

{char*s="*****a*b****",t[80];fun(s,I);puts(t):})程序运行后的输出结果是

()o

A、ab

B、a*b

C、*****a*b

D、a*b****

标准答案:D

知识点解析:在函数fim(char*a,char*b)中,while(*a='*')a++的功能是:如果*a

的内容为,*,则a指针向后移动,卤到遇到非,字符为止,退出循环进入下一个

whik循环,在while(*b=*a){b++;a++;}中,把字符数组a中的字符逐个赋给字符

数组b。所以在主函数口,执行fun(s,1)语句后,字符数组I中的内容为

“a*b****”。因此D选项正确。

32、卜列函数的功能是()。voidfun(char*a,char*b){while((*b=*a)!=,\0'){a4-+;

b++:}}

A、将a所指字符串赋给b所指空间

B、使指针b指向a所指字符串

C、将a所指字符串和b所指字符串进行比较

D、检查a和b所指字符串中是否有、(T

标准答案:A

知识点解析:While循环条件为:(*b=*a)!=,\0l执行时先把指针a所指向的字符

赋给指针h所在内存单元,如果该字符不是结束标识执行循环体a++;

h++;,指针a、b分别指向下一个字符单元。再判断循环条件,如果成立,继续

把指针a所指向的字符赋给指针b所在内存单元,直到遇到结束标识为止。因此A

选项正确。

33、有以卜程序:#include<stdio.h>intfun(intx)intp;if(x==O||x==l)

return(3):p=x-fun(x-2):returnp:}main())printf(H%d\n",fun(7));干旱序执

行后的输出结果是()。

A、2

B、3

C、7

D、0

标准答案:A

知识点解析:因为fun(intx)是一个递归函数,所以主函数中fun(7)经过3次递归调

用,其过程可以描述为“fun(7)=7・fun(5)=7-(5・fun(3))=7・(5・(3・fun(l)))=7・(5・(3・3))=7・

5=2",所以最后输出结果为2。因此A选项正确。

34、有以下程序:#include<stdio.h>intfun()(staticintx=l;x*=2;returnx;

main。{inti,s=l:for(i=l;i<=2;i++)s=fun();printf(H%din",s);}程序运行

后的输出结果是()。

A、0

B、1

C、4

D、8

标准答案:C

知识点解析:fun函数中的x为静态局部变量,占用固定的内存单元,下一次调用

时仍可保留上次调用时的值。也就是说,如果多次调用fun函数,x的定义只在第

一次调用时有效,从第二次调用开始,x的定义相当于不存在,直接使用x的值。

主函数中调用两次fun函数:第一次调用:x=l,x=x*2=2,s=2;第二次调用:(直

接用上次x的值)x=x*2=4,s=4o因此C选项正确。

35、以下结构体类型说明和变量定义中正确的是(),

A、structRFC:{intn:charc:):RECtl.t2:

B、typedefstruct{intn;charc;(REC;REC11,t2;

C、typedefstructREC;{intn=0:charc='A';}tl,t2;

D、struct{intn;charc;}REC;RECtl,t2:

标准答案:B

知识点解析:本题考查结构体的相关知识,选项A中structREC后面不能有分

号,C选项中typedefstructREC的后面也不能有分号,选项D中REC已经是结构

体变量,不能当做结构体类型来使用。

36、似定己建立以下链表结构,且指针p和q已指向如图所示的结点:

diunext

bead[3—11a1卜1db|T-4c[Q—>

............1P.iq.........................则以下选项中可将q所指结点从链

表中删除并释放该结点的语句组是()。

A、p->next=q->next;free(q);

B>p=q->next;free(q):

C^p=q;free(q);

D、(*p).next=(*q).next;free(p);

标准答案:A

知识点解析:本题考查删除链表中的结点操作,其方法是将要删除结点的上个结点

的下个结点指向要删除结点的下个结点,然后释放该要删除结点,所以选项A正

确。

37、有以下程序:#include<stdio.h>#include<string.h>structA{inta;char

bLIOJ;doublec;);voidf(structAt);main()structAa={1001,"ZhangDa",

1098.0);f(a);printf;"%d,%s,%6.lf\nM,a.a,a.b,a.c);}void

f(structAt){t.a=1002;strcpy(t.b,"ChangRong');t.c=1202.0;}程序运行

后的输出结果是()。

A、1002,ZhangDa,1202.0

B、1002,ChangRong,1202.0

C、1001,ChangRong,1098.0

D、1001,ZhangDa,1098.0

标准答案:D」

知识点解析:本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函

数后,会生成参数a的一个副本,而不会改变a的值,所以a值维持原值,选项D

正确。

38、有以下程序:#include<stdio.h>#defineN5#defineMN+l#definef(x)(x*M)

main(){intil,i2:il=f(2):i2=f(l+l);printf("%d%d\n”,il,i2);}程序运行

后的输出结果是()。

A、127

B、1212

C、11II

D>117

标准答案:D

知识点解析:本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执

行f(2)=(2*N+l)=U,执行f(l+l)=(l+l*N+l)=7。选项D正确。

39、有以下程序:#include<stdio.h>main()inta=5,b=l,t:t=(a<<2)|b:

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

A、1

B、11

C、6

D、21

标准答案:D

知识点解析:本题考查位运算,以及按位或操作,将a左移一位相当于是将a乘以

了4,所以aVV2等于20,二进制表示为00010100,与b按位或得到00010101,

即21,所以选项D正确。

40、设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返

回值为()。

A、0

B、,\(r

C、非0值

D、NULL

标准答案:C

知识点解析:本题考查文件的定位,feof函数的用法是从输入流读取数据,如果到

达文件末尾(遇文件结束符),eof函数值为非零值,否则为0,所以选项C正确。

二、程序填空题(本题共[题,每题1.0分,共/分。)

41、下列给定程序中,函数fun的功能是进行数字字符转换。若形参ch中是数字

字符”〜9,则将十转换成9,'1'转换成’8、2转换成7,……,9转换成

40\若是其他字符则保持不变:并将转换后的结果作为函数值返回。请在程序的

下划线处填入止确的内容并将下划线删除,使程序得出正确的结果。注意:剖分

源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!

#include<stdio.h>/**********found**********/[l]fun(charch){/

**********^und**********/if(ch>=40,&&[2])/*******»**found**********/

retum'9'-(ch-[3]);returnch;main(){charcl,c2;printf(M\nTheresult:\n");

cl=,2,;c2=fun(cl);printf("cl=%cc2=%c\n",cl,c2);cl=,8,;c2=fun(cl);

printf("cl=%cc2=%c\n",cl,c2);cl='a';c2=fun(cl);printf("cl=%cc2=%c\

n",cl,c2);)

标准答案:(l)char(2)ch<=,9,(3),0\

知识点解析:本题考查:函数定义,注意函数定义的一般形式以及有参函数和无参

函数的区别;if语句条件表达式,本题的条件表达式是判断数字字符;函数返回

值,其一般形式为“retum表达式:”。有参函数定义,其一般形式为:类型标识符

函数名(形式参数表列){声明部分语句}在形参表中给出的参数称为形式参数,它

们可以是各种类型的变量,各参数之间用逗号间隔。在进行函数调用时,主调函数

将赋予这些形式参数实际的值。形参既然是变量,必须在形参列表中给出类型说

明。

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

42、给定程序MODII.C中,函数fun的功能是:判断输入的任何一个正整数n,

是否等于某个连续正整数序列之和。若是,则输出所有可能的序列,否则输出“不

能分解”。例如:当输入100时,输出:100=9+10+11+12+13+14+15+16

100=18+19+20+21+22请改正函数fun中指定部位的错误,使它能得出正确的结

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

程序:#includc<stdio.h>voidfun(intn)(intj,b,c>m»flag=0;for(b=1;b<

=n/while(m!=0&&m>

C++)/

**********,。^^*********/if(m!=0){printf("%d=,\n);for(j=b;j<c-l;

j++)prinlf("%d+",j);printf("%d\n",j);flag=l:}if(flag==O)prinlf("不能分解

\n");)main(){intn;printf(”请输入一个整数:");seailf(',%dH,&n);

fun(n);}

标准答案:(l)m:n;(2)m:m-c;C++;(3)if(m==0)o

知识点解析:(1)每次循环,程序需要对n执行减去连续的正整数序列来判断n是

否刚好为0,即n是否是连续的正整数序列之和,所以需要使用临时变量m寄存n

的值,每次循环对m执行减运算操作,不满足继续下一轮。另外,程序声明变量

m时,未初始化它的值,所以此处应该修改为:m=n。(2)语法错误。C语言中每

个语句必须以分号结束,所以应修改为:m=m-c;C++;。(3)题目判断n是否是连

续的正整数序列之和,若是,则输出所有序列,程序中m依次减去连续的正整

数,当m为。时,表示m(即n)满足条件,再输出当前序列中的每个正整数,所以

此处判断条件反了,应修改为:if(m==0)。

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

43、编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。

例如,若输入字符串123412132,输入字符为1,则输出3。注意:部分源程序在

文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数

fun的花括号中填入你编写的若干语句。#include<sldio.h>#include<string.h

>#defineM81intfun(char*ss,chare){)main(){chara[M],ch:voidNONO();

printf("\nPleaseenterastring:");gets(a);printf("\nPleaseenterachar:");

ch=getchar();printf("\nThenumberofthecharis:%d\n",fun(a,ch));

NONO();}voidNONO(){/*本函数用于打开文件,输入测试数据,调用fun函

数,输出数据,关闭文件。*/inti;FILE*rf,*wf:chara[M],b[M],ch;

rf=fopcn("in.dat","r");wf=fopcn("out.datn»"w'r);for(i=0;i<10;i++)

{fscanf(rf,"%s",a);fscanf(rf,"%s",b);ch=*b:fprintf(wf,"%c二%d\n",

ch,fun(a,ch));}fclose(rf);fclose(wf);}

标准答案:inlflun(char*ss,chare){inti=0:for(;*ss!='\O';ss++)if(*ss==c)

i++;/*求出ss所指字符串中指定字符的个数*/relurni:}。

知识点解析:本题考查:for循环语句遍历字符串,并通过if条件语句,判断字符

串是否结束。从字符串中查找指定字符,需要使外循环判断结构,循环语句用来

遍历字符串,循环条件为字符串没有结束,即当前字符不是\0',判断语句用来

判断当前字符是否为指定字符。最后返回指定字符的个数。

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

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

1、数据结构主要研究的是数据的逻辑结构、数据的运算和()。

A、数据的方法

B、数据的存储结构

C、数据的对象

D、数据的逻辑存储

标准答案:

知识之解析B:数据结构是研究数据元素及其之间的相互关系和数据运算的一门学

科,它包含3个方面的内容,即数据的逻辑结构、存储结构和数据的运算。

2、一棵二叉树的前序遍历结果是ABCEDF,中序遍历结果是CBAEDF,则其后序

遍历的结果是()。

A、DBACEF

B、CBEFDA

C、FDAEBC

D、DFABEC

标准答案:B

知识点解析:由于该二叉树的前序遍历结果是ABCEDF,显然A结点为根结点,

所以后序遍历时A结点是最后遍历的,其后序遍历的结果为CBEFDAo

3、在数据处理中,其处理的最小单位是()。

A、数据

B、数据项

C、数据结构

D、数据元素

标准答案:B

知识点解析:数据元素是由多个数据项组成,数据是能够被计算机识别、存储和加

工处理的信息载体,数据处理的最小单位是数据项。

4、在数据库系统的内部结构体系中,索引属于()。

A、模式

B、内模式

C、外模式

D、概念模式

标准答案:B

知识点解析:内模式又祢物理模式,它给出了数据库物理存储结构与物理存取方

法,如数据存储的文件结构、索引、集簇及hash等存取方式与存取路径,内模式

的物理性主要体现在操作系统及文件级上,它还未深入到设备级上(如磁盘及磁盘

操作)。

5、以下()不属于对象的基本特征。

A、继承性

B、封装性

C、分类性

D、多态性

标准答案:A

知识点解析:对象具有如下特征:标识惟一性,指对象是可区分的。分类性,指

可以将具有相同属性和操作的对象抽象成类。多态性,指同一个操作可以是不同

对象的行为。封装性,从外面看只能看到对象的外部特征,而不知道也无需知道

数据的具体结构以及实现操作的算法。模块独立性好,对象是面向对象的软件的

基本模块,对象内部各种元素彼此结合得很紧密,内聚性强。

6、数据库系统的核心是()。

A、数据模型

B、软件开发

C、数据库设计

D、数据库管理系统

标准答案:D

知识点解析:数据库管理系统DBMS是数据库系统的核心。DBMS是负责数据库

的建立、使用和维护的软件。DBMS建立在操作系统之上,实施对数据库的统一

管理和控制。用户使用的各种数据库命令以及应用程序的执行,最终都必须通过

DBMSo另外,DBMS还承担着数据库的安全保护工作,按照DBA所规定的要

求,保证数据库的完整件和安全性C

7、开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做()。

A、软件矛盾

B、软件危机

C、软件藕合

D、软件产生

标准答案:B

知识点解析:随着计算机软件规模的扩大,软件本身的复杂性不断增加I,研制周期

显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了

入们难以控制软件发展的局面,即所谓的“软件危机”。

8、关系模型允许定义3类数据约束,下列不属于数据约束的是()。

A、实体完整性约束

B、参照完整性约束

C、属性完整性约束

D、用户自定义的完整性约束

标准答案:C

知识点解析:关系模型允许3类数据约束,它们是:实体完整性约束该约束要求

关系的主键中属性值不能为空值,这是数据库完整性的最基本要求。参照完整性

约束该约束是关系之间相关联的基本约束,它不允许关系引用不存在的元组:即

在关系中的外键要么是所关联关系中实际存在的元组,要么就为空值。用户定义

的完整性约束用户定义的完整性就是针对某一具体关系数据库的约束条件,它反

映某一具体应用所涉及的数据必须满足的语义要求。

9、关系表中的每一行记录称为一个()。

A、字段

B、元组

C、属性

D、关键码

标准答案:B

知识点解析:在关系表中,每一列称为一个属性,对应表中的一个字段;每一行称

为一个元组,对应表中的一条记录。

10、在数据库管理技术的发展中,数据独立性最高的是()。

A、人工管理

B、文件系统

C、数据库系统

D、数据模型

标准答案:C

知识点解析:在人工管理阶段,数据无法共享,冗余度大,不独立,完全依赖程

序;在文件系统阶段,数据共享性差:在数据库系统阶段,共享性好,独立性高。

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

A、C语言区分大小写

B、C程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需

要随时修改

C、整数和实数都能用C语言准确无误地表示出来

D、在C程序中,正整数可以用十进制、八进制和十六进制的形式来表示

标准答案:C

知识点解析:本题涉及C语言最基本的3个概念:①C语言是区分大小写的,q和

Q是两个不同的变量;②变量的实质就是在内存中占据一定的存储单元,存储单

元里存放的是该变量的值,变量的值可以根据需要进行修改;③整数在允许的范

围内可以准确的表示出来,但不可能表示无限度的实数。正整数可用二进制、十进

制、八进制和十六进制表示。

12、有以下程序段:inli,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case

1:case3:pfintf("%d\n",n);break;case2:case4:printf("%d\n",n);

continue;case0:exit(0);}printf(',%d\n",n);}以下关于程序段执行情况的叙

述,正确的是()

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

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

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

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

标准答案:D

知识点解析:当产生的随机数n为。时,执行case。:exit(O)这条语句,结束程序

的运行。

13、可在C程序中用作用户标识符的一组标识符是()。

A、voiddefineWORD

B、as_b3_123If

C、For_abccase

D、2cDOSIG

标准答案:B

知识点解析:C语言规定,标识符是由字母、数字或下划线组成,并且它的第一个

字符必须是字母或下划线,关键字不能用作用户标识符。

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

A、a=a+7;

B、a=7+b+c,a++

C、int(12.3%4)

D、a=a+7=c+b

标准答案:B

知识点解析:选项A是一个C语句,不是表达式:选项R是利用一个逗号表达式

给a赋值;选项C中的“%”求余运算符要求两个运算对象都必须是整型;选项D

中,不能用表达式给表达式赋值,但是变量可以给自身赋值,例如:a=a+l。

15、有以下程序段charch;intk;ch='a';k=12;pfintf("%c,%d,",ch,ch,

k);printf("k=%d\nn,k);已知字符a的ASCII十进制代码为97,则执行上述程

序段后输出结果是()。

A、因变量类型与格式描述符的类型不匹配输出无定值

B、输出项与格式描述符个数不符,输出为零值或不定值

C、a,97,12k=12

D、a,97,k=12

标准答案:D

知识点解析:在用基本输出函数prinif时,格式说明与输出项的个数应该相同。如

果格式说明的个数少于输出项的个数,多余的输出项不予输出;如果格式说明个数

多于输出项个数,则对于多余的格式项输出不定值或0。

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

A、计算机不能宜接执行用C语言编写的源程序

B、C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件

C、后缀为.obi的文件,经连接程序生成后缀为.exe的文件是一个二进制文件

D、后缀为.obj和.exe的二进制文件都可以直接运行

标准答案:D

知识点解析:C源程序经过程序编译之后生成一个后缀为obj”的二进制文件(称

为目标文件),然后由称为“连接程序''的软件包文件与c语言提供的各种库函数连

接起来生成一个后缀为cxc”的可运行文件。

17、有以下程序#includevoidmain。{inta=l,b=0;printf("%d,",

b=(a++)+(a++));printfC%d\n",a+b);}程序运行后的输出结果是()。

A、4,6

B、2,5

C、3,5

D、2,6

标准答案:B

知识点解析♦:在主函数中定义了两个整型变量a和b,并把它们的初值分别设置为

1和0;在第二条语句中,首先“算b=a+a,然后a自增两次,囚此第二句结束

时,b=2,a=3,然后第三句,a+b=5。

18、若有代数式(其中e仅代表自然对数的底数,不是变量),则下列能

够正确表示该代数式的C语言表达式是()o

A、sqrl(abs(nAx+eAx))

sqrt(fabs(pow(n,x)+pow(x,e)))

C、sqrt(fabs(pow(n,x)+cxp(x)))

D、sqrt(fabs(pow(x,n)+exp(X)))

标准答案:C

知识点解析:n和。的x累次方,要分别调用C语言的数学库函数doublepow(n,

x)和doubleexp(x),因为这两个函数的返回值都为double型,对两者的和计算绝对

值,调用库函数doublefabs(pow(n,x)+exp(x)),求出和的绝对值,再调用开平方

函数doublesqrt(fabs(pow(n,x)+exp(x))),这样计算出的结果就是题干中表达式的

值。

19、设有定义:intk=0;,下列选项的4个表达式中与其他3个表达式的值不相同

的是()。

A、k++

B、k+=l

C、++k

D、k+|

标准答案:A

知识点解析:因为题中有语句“intk=O;=所以选项B、C、D都是对k的值加1,

选项A的语句k++表示先利用k的值进行运算,然后k的值才加lo

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

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

出结果是()。

A、-1

B、65535

C、32767

D、OX卜卜卜卜

标准答案:B

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

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

输出的结果为65535。

21、下面程序的运行结果是()。for(i=3;i<7;i++)printf((i%2)?("**%d\n"):

C##%d\n"),i);

A、**3##4**5**6

B、##3**4##5**6

C、##3**4##5##6

D、**3##4**5##6

标准答案:D

知识点解析:本题考查printf函数的输出格式和条件表达式“?:”的使用。①printf

函数输出时“**%d\n”和“用%中的“白铲和…”都是直接输出。②条件表达式

的基本格式为:“a?b:c"。它的运算规则为:当a为非。时,整个表达式的值取b

的值,当a为0时,整个表达式取c的值。

22设有语句:if(a=l)b=2;c=3;,以下语句中与之等价的是()。

A、if(a==l){b=2;c=3;}

B、if(a!=l){;}else{b=2;c=3;}

C、if(a==l)c=3;b=2;

D^(a==l)?b=2:a=a;c=3;

标准答案:D

知识点解析:在C语言中,用分号表示一条语句的结束,用{}把几条语句放在一

块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项

A、B、C均与题中所给不同,而选项D相同。

23、运行下列程序时,若输入数据为“321”,则输出结果是()。main(){intnum,

ij,k,s;scabf("%d”,&nun):if(num>99)s=3;elseif(nurn>9)s=2:elses=1;

i=num/100;j=(num-i*100)/10;k=(num-i*100-j*10);switch(s){case3:

printf("%d%d%d\n”,k,j,i);break;case2:printf("%d%d\n",k,j);case

1:printfC%d\n",k);))

A、123

B、1,2,3

C、321

D、3,2,1

标准答案:A

知识点解析:本题考查if-else语句和switch语句。scanf函数通过键盘读入Bum的

值。因为num=32l>99,所以s=3,i=3,j=2,k=l<>因为s=3,所以执行case3,

输出k,j,i的值,然后通过break结束程序。

24、有以卜程序#include#}includestructA{】nta;charb[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);)structAf(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的各个成员重新进行了赋值操作,并把其值返

回在屏幕上输出。

25、判断char型变量cl是否为小写字母的正确表达式为()。

A、,a,<=cl<=,z,

B、(cl>=a)&&(cl<=z)

C、(3>=clll,zV=cl)

D、(cl>=")&&©<='7')

标准答案:D

知识点解析:C语言规定,字符常量在程序中要用单引号括起来。首先判断cl是

否为小写字母的主要条件cl>=H和clv=,N是逻辑与关系,其次选项A的这种形

式C语言中没有,所以选项D正确。

26、设有定义:charsUO];inti=0;,以下不能将一行(不超过)00个字符)带有空

格的字符串正确读入的语句或语句组是()。

A、gets(s);

B、scanf("%s",s);

C^while((s[i-H-]=getchar())!=,\n');s[i]=,\0\

D、do{scanf("%cn,&s[i|);}while(s[i++]!='\n>s[i]=,\0,;

标准答案:B

知识点解析:本题考查标准输出函数和循环语句。wets(s)函数的作用是将输入的字

符读入字符串s,直到遇到回车。而scanf()函数接收字符串时的结束标志为回车或

者空格。因此选项B不能,选项C和选项D中按字符逐个读入字符串s中,直到

读入的字符是换行符为止,因此正确。

27、下面4个关于C语言的结论中错误的是()。

A、可以用do…while语句实现的循环一定可以用while语句实现

B、可以用for语句实现的循环一定可以用while语句实现

C、可以用while语句实现的循环一定可以用for语句实现

D、do...while语句与while语句的区别仅是关键字"while”出现的位置不同

标准答案:D

知识点解析:本题考查几个循环语句的关系。①do…while语句、while语句、tor

语句所实现的循环可以相互替代:②do…while语句和while语句的区别是

do…while语句至少执行一次,再判断循环条件,while语句是先判断条件再执行。

28、若有以下程序段:structst{intn;int*m;);inta=2,b=3,c=5;structst

s[3]=({101,&a},{102,&c),{103,&b});main(){structst*p;ps;...}则以

下表达式中值为5的是()。

A、(p++)->m

B、*(p++)->m

C、(*p).m

D、*(++p)->m

标准答案:D

知识点解析:本题考查如何通过指针引用数组元素。首先定义了一个结构体,然后

定义了一个结构体变量s[3],并赋了初值。在主程序中,定义了一个指向结构体变

量s的指针p,要使表达式的值为5,就应该引用m的值,使指针p指向

s[l],++p可以实现将p指针加1,指向s[l]。

29、下列程序的运行结果是()。#includevoidsub(int*s»int*y){staticintm=4;

*y=s[0];m++:)voidmain(){inta[]={1,2,3,4,5),k;intx;printf(H\

n");for(k=0:k<=4;k++){sub(a,&x);printf("%d,",x);))

A、1,1,1,1,1,

B、1,32,3,4,5,

C、0,0,0,0,0,

D、4,4,4,4,4,

标准答案:A

知识点解析:本题中su5(int*s,int*y)函数的参数是两个指针型变量,在函数体内

将数组s的第一个元素赋给y。主程序内,首先定义了一维数组并赋初值,然后通

过for循环,5次调用sub(a,&x)函数,每一次调用都是将数组a的第一个元素1

赋给x,并输出。

30、有以下程序:#includeintfun(intx,inly){if(x!=y)return(y);elseretum((x+y)

/2);}main(){inta=4,b=5>c=6;printfr^od\nM,fun(2*a,fun(b,c)));}程

序运行后的输出结果是()。

A、3

B、6

C、8

D、12

标准答案:B

知识点解析:fun(b,c)即fun(5»6),5!=6»所以返回6;fun(2*a»6)即fun(8,6),

8!=6,所以返回6。

31、C语言中规定,程序中各函数之间()。

A、既允许直接递归调用也允许间接递归调用

B、不允许直接递归调用也不允许间接递归调用

C、允许直接递归调用不允许间接递归调用

D、不允许直接递归调用允许间接递归调用

标准答案:A

知识点解析•:本题考查函数调用的基本概念。在函数调用时,只要符合函数的使

用,程序中的各个函数间既可以直接调用其他函数,也可以递归调用其自身。

32、以下程序的输出结果是O。includemain(){inta[3][3]={0,1,2,0,1,2,

0,1,2},i,j,s=l:for(i=0:i<3;i++)for(j=i:j<=i.j++)s+=a[i][a[j][j]];

printf(H%d\n",s);)

A、3

B、4

C、I

D、9

标准答案:B

知识点解析:当外层循环为i时,内层循环j只能取j=i,所以其实

就是s+=a[i][a[i][i]],当i=0时,s=s+a[0][a[0][0]]os+a[0][0]=l,当i=l时,

s=s+a[1][a[1][1]]=s+a

温馨提示

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

评论

0/150

提交评论