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

下载本文档

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

文档简介

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

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

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

A、8

B、9

C、15

D、16

标准答案:D

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

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

2、以下选项中叙述正确的是()。

A、函数体必须由{开始

B、C程序必须由mflin语句开始

C、C程序中的注释可以嵌套

D、C程序中的注释必须在一行里完成

标准答案:A

知识点解析:函数体是函数首部下面的花括号内的部分,所以函数休必须由(开

始,A项正确。一个源程序文件可以包括预处理命令、全局声明、函数定义,程序

总是从main函数开始执行的,不是main语句,B项错误。C程序中允许两种注

释,以//开头的单行注释;以/*开始,以*/结束的块式注释,D项错误。函数

可以嵌套,注释不能嵌套,C项错误。

3、当输入为“Fool&Swalow”时,卜一面程序的执行结果是()。#includemain(){char

c:while(c!='?'){c=getcharO;putchar(c);}}

A、Swalow

B、Fool

C、Fool?

D、?Swalow

标准答案:C

知识点解析:本程序是通过getchar。函数读入字符.并通过putchar。函数将字符逐

个输出,当用户输入“?”时停止输出。

4、设已有定义:floatx;,则以下对指针变量P进行定义且赋初值的语句中正确

的是()。

A、int*p=(float)x;

B、float*p=&x;

C、floatp=&x;

D、float*p=1024;

标准答案:B

知识点解析:指针是用来存放地址的变量,用(类型名*指针变量名)的形式定义。

赋值时应将某个变量地址即&x赋给指针变量,所以选择B。

5、以下程序中c的二进制值是()。chara=2,b=4,c;c=aAb>>2

A、00000011

B、00010100

C、00011100

D、00011000

标准答案:A

知识点解析:本题主要考查按位异或和右移运算。b=4的二进制为00000100,b>

>2后为00000001,a=2的二进制为00000010,两者异或为00000011。

6、下列语句组中,不正确的是()。

A、char*s;s="01ympic";

B、chars[]="Olympic";

C、charts;s={"Olympic");

D、chars[]={"Olympic");

标准答案:C

知识点解析:S是一个字符指针变量,s代表其地址,C将字符串赋给地址,因此

选项C)错误。

7、两次运行下面的程序,如果从键盘上分别输入3和2,则输出结果是()。

#includemain(){intx;scanf("%d'',&x);if(x++>2)printf("%d",x);else

printf("%d\n",X-);}

A、4和3

B、4和2

C、4和1

D、3和2

标准答案:A

知识点解析:本题考查if-else语句。首先,scanf函数通过键盘读入x的值。当

x=3时,第一个if语句先判断条件,取x的值3和2比较,然后将x的值加1,if

条件成立,执行下面的printf语句,输出x的值40当x=2时,第一个if语句先判

断条件,先取x的值2和2比较,然后将x的值加l(x的值变为3),if条件不戊

立,执行下面的else语句,先输出x的值3,再将x的值减1。

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

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

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

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

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

标准答案:A

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

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

9、以下程序的运行结果是()。#mcludcmain()(inta=3,b=4,c=8,d=4,m=l,

n=3;printf("%d\n",(m=a>b)&&(n=c>d));}

A、0

B、1

C、2

D、3

标准答案:A

知识点解析:逻辑与(&&)运算符的功能是:当“&&”运算符两边的运算对象均为1

时,整个表达式的值为1,否则为0。因为a=3

10、若变量已正确定义,有以下程序段:i=0;doprintf("%d,",i);while(i++);

printfC%d\n\i);其输出结果是()。

A、0,0

B、0,1

C、1,1

D、程序进入无限循环

标准答案:B

知识点解析:do…while循环的执行过程如下:①执行do后面的循环体中的语

句0②计算while后一对圆括号中表达式的值.当值为非。时.转夫执行步骤

①;当值为0时,执行步骤③。③退出do…while循环。对于本题变量i的初始

值等于“0”,接着执行do后面的循环体中的语句,输出变量i的值0。再判断while

后面括号中表达式i++的值,其值为0,所以循环垢束。此时变量i的值经过自加

已经变为1,所以再次输出i的值“1”。

11、若有以下定义,则对数组元素的正确引用是(),inta[5],*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个元素。

12、以下不正确的转义字符是()。

A、,\\f

B、,\d,

C、'\s'

D、'088'

标准答案:D

知识点解析:是反斜线符,是整型变量转义字符,是字符串型转义

字符,C语言中没有规定“,088,”为转义字符。

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

A、语言中的关键字不能作变量名,但可以作为函数名

B、标识符的长度不能任意长,最多只能包含16个字符

C、标识符总是由字母、数字和下画线组成,且第一个字符不得为数字

D、用户自定义的标识符必须“见名知义”,如果随意定义,则会出编译错误

标准答案:C

知识点解析:C语言中的关键字即不能做变量名也不能做用户函数名,所以A错

误。标识符的命名规则,即由下画线字母和数字组成,且必须以下画线和字母开

始,也不能和关键字一致。不同C语言规定标识符的有效长度可能会不同,但没

有限制最大长度,所以B错误。用户定义的标识符只要满足标识符命名规则没有

特殊要求,不必一定“见名知义”,所以D错误。

14、以下正确的字符串常量是()。

A、

B、'abc'

C>OlympicGames

D、\\\

标准答案:A

知识点解析:百分号“%”主要用于指定输出格式.如果格式字符串中两个百分号连

续即为“%%”的形式,则表示输出一个普通字符“%"。所以答案选A)。

15^有以下程序#include<stdio.h>voidsw叩(int*a,int*b){intt,*tp;t=*a;

*a=*b;*b=t;tp=a;a=b:b=tp;printf(H%d»%d,",*a,*b);)main(){ini

i=3>j=7,*p=&i»*q=&j;swap(p>q);printf("%d,%d,%d,%d”,i,j,

*p,*q);}程序执行后的输出结果是()。

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

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

C>3,7,3,7,7,3

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

标准答案:D

知识点解析:main()函数中,首先定义两个整型变量i和j,初值为3和7,并将i

的地址赋给p,j的地址赋给q,传给swap。函数,swap。函数接收两个整型指针变

fta,b,然后使用整型变量I交换a、b所指向的值并输出,通过指针变量,这次

交换改变丫实参i、i的值,使得i=7,j=3;指针变量ip交换a和b的值,由于a、

b的值是p,q值的拷贝,所以这次交换只改变了形参a,b的值,对实参p,q的值

没有改变,所以此时a指向i,b指向i,函数最后输出*a和*b,所以输出3,7;

由于swap。函数改变了p和q指向的值,但未改变p,q的值,所以main。函数输

出i的值为7,j的值为3,*p的值为i,*q的值为j,所以程序输出:3,7,7,

3,7,3,本题答案为D。

16、若已定义:inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中

0<l<9,则对a数组元素不正确的引用是()。

A、alp一aj

B、)(&a|i])

C>p[i]

D、a[10]

标准答案:D

知识点解析:此题考查对一维数组的引用。对于已定义的数组a[M],数组元素的

正确引用必须满足下标小于M且为正整数。选项D)中下标值出现溢出。

17、有以下程序#include<stdio.h>main(){FILE*fp;intk,n,a[6]={1,2,3,4,5,6};fp

=fopen("d2.dat",nw");fprintf(fp,"%d%d%d\n",a[0],a[l],a[2]);fprintf(fp,

"%d%d%d\n\a[3],a[4],a[5]);fclose(fp);fp=fopen("d2.datM,nr");fscanf(fp,,,%d%d,',

&k,&n);printf("%d%d\n",k,n);fclose(fp);}程序运行后的输出结果是

A、12

B、14

C、1234

D、123456

标准答案:D

知识点解析:fprintf()函数向文件输出,将输出的内容输出到硬盘上的文件或是相

当于文件的设备上执行两次fprinlf后文件中有123456,所以D选项正确。

18、以下叙述中正确的是

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

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

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

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

标准答案:D

知识点解析:C语句可以跨行来写,但是必须以分号结束,所以A选项错误,C程序

中的一行可以有多条语句,所以B选项错误,C语言中的注释语句可以与原语句放

在一行也可以不放在一行,所以C选项错误。

19、以下程序:#include<stdio.h>main(){charstr[10];scanfp'%s'',&str);

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

行结果是()。

A、how

B、howareyou

C、h

D、howareyou

标准答案:A

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

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

在其后自动加上结束符“\0”。

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

v=0))printR"%d,%d\n”,a,b);elseprintf(u%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语句。

21>若有以下程序:#includemain(){inta=-2,b=0;do{++b;)while(a++);

printf("%d,%d\n",a,b);}则程序的输出结果是()。

A、1,3

B、0,2

C、1,2

D、2,3

标准答案:A

知识点解析:本题重点考查do…while语句及do...while的循环语句保证会执行一

次(表达式的真值在每次循环结束后检查),++b即变量b自增1后再参与运算,而

a++则表示a参与运算后再自增1。所以第一次循环结束后,b=l,a=-l:第二次循

环后,b=2,a=0,这里是先对while的判断为真,然后a才自增为零的,所以还会

进行第三次循环;第三次循环后,b=3,因此A选项正确。

22、如有表达式(w)?(—x):(++y),则其中与w等价的表达式是()。

A、w==l

B、w==0

C、w!=1

D、w!=0

标准答案:D

知识点解析:条件表达式形式为V表达式1>?〈表达式2>:〈表达式3>。表达式1

的值为真,结果为表达式2的值;表达式1的值为假,结果为表达式3的值。可见

表达式w等价于w!=0o

23、有以下程序:#includeintfun(){staticintx=l:x+=l;returnx;)main()

{inti,s=l;for(i=l;i<=5;i++)s+=fun();printfiH%d\n",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选项正确。

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

回值为()。

A、0

B、'\0’

C、非0值

D、NULL

标准答案:C

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

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

25、软件生命周期中的活动不包括()。

A、市场调研

B、需求分析

C、软件测试

D、软件维护

标准答案:A

知识点解析•:软件生命周期可以分为软件定义、软件开发与软件运行维护三个阶

段。主要活动阶段是:可行性研究与计划阶段、需求分析、软件设计、软件实现、

软件测试、运行和维护,所以选择A。

26、若有以下程序:#include#defineS(x)x*x#defineT(x)S(x)*S(x)main(){int

k=5,j=2;printf("%d,%d\n",S(k+j),T(k+j));}则程序的输出结果是()。

A、17,289

B、49,2401

C、17,37

D、49,289

标准答案:C

知识点解析:本题考查宏定义。宏定义只是做简单的替换,执行语句

S(k+j)=k+j*k+j=17,T(k+j)=S(k+j)*S(k+j)=k+j*k+j*k+j*k+j=37,因此选项C正确。

J石go)

27、有以下计算公式(,<。)若程序前面已在命令行中包含math,h文

件,不能够正确计算上述公式的程序段是()。

A、(c>=2&&c<=6)&&(c%21=1)

B、(Cc==2)II(c==4)II(c==6)

C、(c>=2&&c<=6)&&!(c%2)

D、(c>=2&&c<=6)II(c!=3)II(c!=5)

标准答案:D

知识点解析:逻辑或运算符中只要有一个运算量为真结果就是真,当c>=2&&cV

=6条件不成立时c的值肯定不是2、3、4、5、6,所以c!=3,与c!=5均成立。所

以D选项的结果一定为真。

28、下列选项中,能够满足”只要字符串si等于字符串s2,则执行ST”要求的是

A、if(sl-s2==0)ST;

B.if(sl==s2)ST;

C、if(strcpy(sl,s2)==1)ST;

D、if(strcmp(s2,s1)==0)ST;

标准答案:D

知识点解析:在C语言中要对两个字符串的大小进行比较,就需要调用字符串比

较函数strcmp,如果这个函数的返回值等于0,说明两个字符串相等。因此D选项

正确。

29、在C程序中已经定义三个整型变量x,y,z,要通过语句:scanf(''%d,%

d,%cT,&x,&y,&z);给x赋值1、给y赋值2、给z赋值3,以下输入形式

中错误的是()。(注:口代表一个空格符)

A、1,2,3〈回车,

B、口口口1,2,3V回车,

C、1,口口口2,口口口3V回车,

D、1口2口3〈回车〉

标准答案:D

知识点解析:scanf()的格式中指定了要用逗号分隔输入的数值,所以在输入时必须

要有逗号来分隔输入的内容,因此,选项D错误。

30、C语言程序的模块化通过以下哪个选项来实现()。

A、函数

B、变量

C、程序行

D^语句

标准答案:A

知识点解析:暂无解析

31、对长度为n的线性表排序,在最坏情况下,比较次数不是n(n—1)/2的排序

方法是()。

A、快速排序

B、冒泡排序

C、直接插入排序

D、堆排序

标准答案:D

知识点解析:除了堆排序算法的比较次数是(nlogzn),其他的都是n(n—1)/2.

32、有以下程序#include〈stdio.h>main(){FILE*fp;inti=20,j=30,k,n;

中=fbpen(''dl.dat","w''):fprintf(fp,,,%d\n,\i);fprintf(m,''%d\n'',j):

fclose(fp);fjp=fopcn(''dl.dat",'T');fscan^fp/5%d%d.t,&k,&n);

printf(,,%d%d\n,\k,n);fclose(fp);)程序运行后的输出结果是()。

A、2030

B、2050

C、3050

D、3020

标准答案:A

知识点解析:分析程序段,首先以只写方式打开文件,利用fDrintf函数将i和j的

值写入到文件di.dat中,然后关闭文件:再以只读方式打开文件,利用格式比输

入函数。fscant,将文件中的数据赋值给k和n,最后输出k和n的值,分别是20和

30o

33、若在定义语句:inta,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正

确执行的语句是()。

A^scanf("%d”,a,b,c);

B、scanf(”%d%d%d",a,b,c);

C、scanf(”%d",p);

D、scanf("%d",&p);

标准答案:C

知识点解析:程序语句inta,b,c,*p=&c;定义了3个整型变量a,b,c和一个

整型指针变量P,并且把变量c的地址赋给p。scanf函数的一般形式为“scanff格式

控制字符串”,地址列表)”,其中的地址列表应当是存放输入数据变量的地址。

34设x=021,y=012,则z=xly的值是()。

A、1

B、0

C、00011011

D、11000010

标准答案:c

知识点解析:本题主要考查按位或运算。按位或是对两个运算对象相应的位进行逻

辑或运算,其运算规则和逻辑或相同,两个运算对象只要有一个是1,则结果为

35、设有定义:intx=2,*p=&x;floaty=3.0;charz=,c';,则立即进行以下运算有安全

隐患的是

A、p++;

x++;

C、y++;

D、z++;

标准答案:A

知识点解析:由于x是一个整形变量,将x地址赋值给p指针后,A选项中p++对

指针p进行加1运算,P指针的值相当于加4(整型变量的地址占4个字节),此

时p指向了未知的内存地址,对未知内存地址进行操作具有安全隐患,故答案为A

选项。

36、有以下程序#includc<stdio.h>main(){inti=4;for(printf(H%d",i);i<2;i++)

printf("%dM,i);printf(u\n");}程序运行后的输出结果是

A、12

B、4

C、1

D、0

标准答案:A

知识点解析:for(prinlf("%d”,i);i〈2;i++)先输出i,由于i=4,不满足条件,直接输出

换行符.因此答案为H选项.

37、有以下程序#includcVstdio.h>main(){charb[4][10],c;inti,j;for(i=0;i<4;

i++){j=0;while((c=gctchar())!=,'&&c!=,\n,)b[i][j-H-]=c;b[i][j]='\0';}

printf("%s%s%s%s\n",b|0],b[l],b[2],b[3]);}程序运行时从第一列开始输入:Peach

flowerispink.V回车〉则输出结果是

A、Peachflowerispink.

Peachflowerispink.

C>Peachflowerispink.

D、Peachflowerispink.

标准答案:A

知识点解析:for循环语句中,通过执行whHc语句,把输入的字符串以一为分隔

符,分别保存在b二维数组的4行中,再通过%s格式控制符,将b二维数组中四

行字符串无空格连接输出,答案为A选项。

38、有以卜程序#include<stdio.h>structtt{intx;structtt*y;}s[2]={1,0,2,0);

main(){structtt*p=s;p->y=s;printf("%d",++p->x);)程序运行后的输出结果是

A、2

B、0

C、1

D、3

标准答案:A

知识点解析:*p=s,可得p指向s[0],p->y指向现p->y=s,因此p->y指向

s[0]o因此p->x=l,++p->x等价于++(p->x),因此打印结果为2。答案为A选项。

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

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

A、sqrt(abs(nAx+eAx))

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

C、sqrt(fabs(pow(n»x)+exp(x)))

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

标准答案:C

知识点解析:n和e的x帮次方,要分别调用C语言的数学库函数“double

pow(n,x)”和“doubleexp(x)”,因为这两个函数的返回值都为double型,对两者的和

计算绝对值,调用库函数“doublefabs(pow(n,x)+exp(x))v,求出和的绝对值,再调

用开平方函数“doublesqrc(fabs(pow(n,x)+exp(x))),\这样计算出的结果就是题干

中表达式的值。

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

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

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

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

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

标准答案:A

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

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

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

句,一条语句也可以写在不同行上;选项C),一个C程序中必须有且只能有一个

由“main”命名的主函数,其他函数由用户自行命名;选项D),程序的注释仅仅是

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

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

41、给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个

数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。例如,形参s

所指的字符串为:ThisisaClanguageprogram,函数的返回值为6。请在程序的卜

划线处填入正确的内容并把卜.划线删除,使程序得出正确的结果。注意:源程序

存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结

构!1#include<stdio.h>2intfun(char*s)3{intn=0,flag=O:4while(*s!='\0,)

5{if(*s!=''&&flag==O){6/**********found**********/7_1_;flag=l;)8

/**********砧und**********/9iR*s==,,)flag=2,10/

*********珏01»记**********/11—3—;12)13returnn;14)15main()16{char

str|811;intn;17\nEnteralinetext:\n'、);gets(slr);18n=fun(str);19

printf,'\nThereare%dwordsinthistext.\n\n'\n);20}

标准答案:(l)n++(2)0(3)s++

知识点解析:函数fun的功能是计算出形参s所指字符串中包含的单词个数。第一

空:“if(*s!="&&flag==O)”说明找到空格了,单词的数量应加1,故第一空处应为

“n++”。第二空:“if(*s!=,,&&f!ag==O)”和“if(*s=-)flag=_2_;”在flag为0的情

况下,n才加1,因此第二空处是将flag置0,即第二空处应为“0”。第三空:

“卜次(*5!=,\0,)”循环的终止条件是$达到结尾,因此在循环体内s应该不断往字

符串尾移动,即第三空为“S++”。

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

42、由N个有序整数组成的数列已放在一维数组中,给定程序MODI1.C中函数

fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下

标值;反之,返回-1。折半查找的基本算法是:每次查找前先确定数组中待查的

范围:low和high(10whigh,查找结束。请改正程序中的错误,使它能得出正确结

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

#include()defineN10/************found************/voidfun(inta[],intm)

{intlow=0,high=N-I,mid;while(low<=high){mid=(low+high)/2;

if(ma[mid])Iow=mid+1;elsereturn(mid);}return(一1);}main(){inti,

a[N]={-3,4,7,9,13,45,67,89,100,180),k,m;printf(”a数组中的数

据如F:");for(i=0;i=0)printf("m=%d,index=%d\n",m,k);else

printf("Notbefound!\n");)

标准答案:(1)intfun(inta[],intm)(2)elseif(m>a[mid])

知识点解析:(1)根据主函数中“k=fim(a,m);”,知道函数fun应该是返回int型的

函数,所以第一个标识下面定义的“voidfun(inta口,intm)”应该改为“intfun(int

a[],intrnfo(2)第二个标识下的“elseIf(m>a[mid])、'是判断m是否比a[mid]大,在

while循环中采用的是if-elseif-else语句,显然“elseIF'当中"IF应当小写,故第二标

识下“elseIf(m>a[mid])”应改为“elseif(m>a[mid]),,o

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

43、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了

尾部的*号之外,将字符串中其他*号全部删除。形参p己指向字符串中最后的一个

字母。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内

容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:

ABCDEFG*******。注意:部分源程序在文件PR0G1.C中。请勿改动主函数

main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#includevoidfun(char*a.char*p){}main(){chars[81],*t;voidNONO();

printf("Enterastring:\n"):gets(s);t=s;while(*t)t++;t—;while(*t=='*')1-;

fun(s,t);printf("Thestringafterdeleted:\n");puts(s),NONO();)void

NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

*/FTLE*in,*out;inti;chars[81],*t;in=fopen("in.dat'\T');

out=fopen("out.dal","w");for(i=0;i<10;i++){fscarlf(in,"%s",s);t=S;

while(*t)t++;t-;while(*t==,*,)t-;fun(s,t);fprintf(ouL,"%s\n",s);}

fclose(in);fclosc(out);)

标准答案:char*q=a;intj=0;while(*q&&q

知识点解析:(1)首先,主函数中使指针移到字符串的最后一个字符,对字符串由

串尾开始进行操作。(2)然后,指针由尾开始向头移动,查找第一个非“*”号字符,

指针I指向后一个非“和,即从最后一个非“*'字符开始的字符都不需要删除,将

前面的其他“*”号全部删除后,将尾部的“*”字符往前移动即可。⑶确定了字符数

组的最后一个字符非“”后,调用fun函数,在fun函数中,将原串中由起始位置的

字符开始到最后一个非逐个查询该字符是是“*”字符,如果是则删除,并将后面

的字符往前移动;然后将I之后的字符移动到前面,最后在字符串的后面添加“,\

0'唧可。

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

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

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

A、栈是先进先出

B、队列是先进后出

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

D、栈在栈顶删除元素

标准答案:D

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

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

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

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

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

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

A、159

B、147

C、357

D、369

标准答案:C

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

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

时,输出x⑵⑼=7。

3、对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为()。

A、9

B、10

C、45

D、90

标准答案:c

知识点露析:冒泡法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是

每次比较都要将相邻的两个元素互换,需要互换的次数为

9+8+7+6+5+4+3+2+1=45,故选C。

4、下面的程序在编译时产生错误,其出错原因是()。#inckidemain(){intl_case;

floatprintF;printf(”请输入2个数:");scanf("%d%f,&1case,&printF);

printf(',%d%f\nH,l_case,printF);}

A、定义语句出错,Lease不能作为变量名

B、定义语句出错,printF不能用作用户自定义标识符

C、定义语句无错,scanf不能作为输入函数使用

D、定义语句无错,printf不能输出1_ca*e的值

标准答案:A

知识点解析:C语言变量名可由数字,字母,下划线构成,但首字符不能为数字。

5、若有说明:typedefstruct{inta:chare:)w;则以下叙述正确的是()。

A、编译后系统为w分配5个字节

B、编译后系统为w分配6个字节

C、编译后系统为w分配58个字节

D、编译后系统不为w分配存储空间

标准答案:D

知识点解析:w是一个自定义类型,而不是变量,放编译后系统不为w分配存储

空间。当使用w定义变量时才会为其定义的变量分配存储空间。

6、设变量x和ly均已正确定义并赋值,以下if语句中,在编译时将产生错误信息

的是()。

A、if(x++);

B、if(x>y&&y!=O);

C、if(x>y)x—elsey++;

D、if(y<0){;}elsex++;

标准答案:c

知识点解析:选项C)中,if(x)y)后面的“x」是一个表达式而不是一个语句,所以在

编译时会产生错误信息。

7、若语句"t=fun(fun(x,y,a),(a+b,a+c),x+y+z);”对fun函数的调用正确,则

fun函数的形参个数为()。

A、3

B、4

C、5

D、6

标准答案:A

知识点解析:本题考查函数调用时的参数个数。在函数调用时,实参必须和形参的

个数、类型一一对应。但函数的计算结果只有一个值,因而fun函数的参数个数为

3o

8、有以下程序:#includcintfun(intx,inty){if(x==y)retum(x);else

retum((x+y)/2);}main(){inta=l,b=2,c=3;printf(',%d\n",fun(2*a,fun(b.

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

A、2

B、3

C、4

D、5

标准答案:A

知识点解析:即fun(2.3),21=3.所以返问(2+3)/2=2:fnn(2*a,2)即

fun(2,2),2==2,所以返回2。

9、在源程序的开始处加上“includeVstdio.h>”进行文件引用的原因,以下叙述

正确的是()。

A、stdio.文件中包含标准输入输出函数的函数说明,通过引用此文件以便能正确

使用printf>scanf等函数

B、将stdio.h中标准输入输出函数链接到编译生成的可执行文件中,以便能正确

运行

C、将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译链接

D、将stdio.h中标准输入输出函数的二进制代码插入到引用处,以便进行编译链

标准答案:A

知识点解析:“stdio.h”文件中包含标准输入输出函数的函数说明,预处理指令

#include<stdio.h>是指程序可以在该文件中找到primf、scanf等函数。

10、设有以下语句:typedefstructTT{eharc;inta[4|;JCIN;则卜.面叙述中正确

的是()。

A、CIN是structTT类型的变量

B、TT是struet类型的变量

C、可以用TT定义结构体变量

D、可以用CIN定义结构体变量

标准答案:D

知识点解析:本题考查typedef重新声明一种结构体类型,其中CIN为结构体类型

名,而不是结构体变量,所以D选项正确。

11、有以下程序:#include<stdio.h>main(){intk=-17;primf("%d,%0,%x

\n",k,1-k,1-k);}程序的运行结果是()。

A、-17,22,12

B、-17,12,22

C、-17,-22,-12

D、17,22,12

标准答案:A

知识点解析:整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法

和十六进制数表示法。十进制整常,量没有前缀,输出格式控制符为%d;八进制整

常量以0作为前缀,输出格式控制符为%0;十六进制整常量以Ox或Ox作为前

缀,输出格式控制符为%x。l-k=18,整型常量18用八进制表示为22,十六进制

表示为12,故A选项正确。

12、有以下程序:#includemain(){intc;while((c=getcharO)!=,\n,){switch(c-,3,)

{case0:case1:putchar(c+4):case2:putchar(c+4);break:case3:

putchar(c+3);case4:putchar(c+3);break;))printf("\n");}从第一列开始输入

数据(代表一个回车符):3845,则程序输出结果为{)。

A、77889

B、77868

C、776810

D、7.78866e+007

标准答案:A

知识点解析:题中while循环的条件是:当从键盘读入的字符不是时,执行

while循环。输入第一个字符3时:执行case。,什么也不输出:easel,输出7;

case2,输出7;遇到break语句,跳出switch语句。输入第二个字符8时:c

一,3=5,不执行任何语句。输入第三个字符4时:c」3=l,执行easel输出8;

case2,输出8;遇到break语句,跳出switch语句。输入第四个字符5时:

。’3'=2,执行case2,输出9;遇到break语句,跳出switch语句。

13、以下程序段的输出结果为()。staticchara[]="programme";char*p;p=a;

for(p=a:p

A、programme

B、porm

C、有语法错误

D、prog

标准答案:B

知识点解析:本程序首先定义了静态字符数组a,然后将指针p指向数组a的首地

址,第一次for循环,p=a,p指向数组的第一个元素,*p是取指针p所指地址的内

容,输出p;第二:次for循环,p=p+2,则p指向数组的第三个元素,*p是取指

针p所指地址的内容,输出。;第三次for。循环,p=p+2,则p指向数组的第5个

元素,*p是取指针p所指地址的内容,输出r;第四次for循环,p=p+2,则p指向

数组的第7个元素,*p是取指针p所指地址的内容,输出m;结束循环。

14、对于一个正常运行的C程序,以下叙述中正确的是()。

A、程序的执行总是从main函数开始,在程序的最后一个函数中结束

B、程序的执行总是从程序的第一个函数开始,在main函数结束

C、程序的执行总是从main函数开始

D、程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束

标准答案:C

知识点解析:任何一个C程序都是从主函数main开始,至主函数main结束:,所

以选择C选项。

15、以下选项中非法的字符常量是()。

A、、\'

B、30201'

C、、xAA,

D、'0'

标准答案:B

知识点解析:选项A)表示的是反斜杠字符:一般可以用1〜3位八进制数表示的

字符,而选项R)中“,020「”有4位八进制数,所以错误:选项C)是用两位十

六进制数AA表示的ASCII码字符;选项D)表示的是字符0对应的ASCII码值。

16、有以卜程序#include<stdio.h>main(){inta=l,b=2,c=3,x;x=(aAb)&c;

printf("%d\n",x);}程序的运行结果是

A、3

B、1

C、2

D、0

标准答案:A

知识点解析:本题考查位运算符以及相关运算,人为按位或,&为按位与,那么Mb

为3,再与c按位与仍然为3,所以答案为A选项。

17、如果需要打开一个已经存在的非空文件“FILE”并进行修改,正确的语句是

()o

A、fjp=fbpen(,TILE,,,,,r,*);

B、m=fbpen(''FILE”Ja—‘');

,,

C、fp=fbpen(;TILE","w+);

,,,,,

D、fp=fbpen(FILE";r+);

标准答案:D

知识点解析:本题考查打开文件函数fopcn。,打开文件函数fopcn。的调用形式

为:fp二fopen(文件名,文件使用方式)。”文件使用方式”说明:方式“r”为以输入方

式打开一个文本文件;方式“a+”为以读/写方式打开一个文本文件,保留文件中原

有的数据;方式“w+”为以读/写方式建立一个新的文本文件;方式“什”为以读/写

方式打开一个文本文件。

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

A、有一个以上根结点的数据结构不一定是非线性结构

B、只有一个根结点的数据结构不一定是线性结构

C、循环链表是非线性结构

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

标准答案:B

知识点解析:线性结构应满足:有且只有一个根结点与每个结点最多有一个前件,

也最多有一个后件,所以B正确。所以有一个以,根结点的数据结构一定是非线

性结构,所以A错误。循环链表和双向链表都是线性结构的数据结构。

ST

tzB±1

19、有三个关系R、S和T如下:则由关系R和S

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

A、自然连接

B、交

C、除

D、并

标准答案:C

知识点解析:如果S=T/R,则S称为T除以R的商。在除运算中S的域由T中那

些不出现在R中的域所组成,对于S中的任一有序组,由它与关系R中每个有序

组所构成的有序组均出现在关系T中。所以本题选择C。

20、有如下程序段:intx=12;doubley=3.141593:printf("%d%8.6f,x,

y);其输出结果是()。

A、123.141593

B、123.141593

C、12,3.141593

D、123.1415930

标准答案:A

知识点解析:printf函数中格式字符“%8.6”的含义是:变量y的输出宽度为8(包

括小数点),小数点后面保留6位小数,且右对齐。所以选择A。

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

A、chars[];s="HELLO!";

B、chads;s={"HELLO!”};

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

n,

D、chads;s=HELLO!':

标准答案:D

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

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

22、有以卜程序#include<stdio.h>intfun(intx){intp;if(x==0||x==l)retum(3);

p=x-fun(x-2);returnp;}main(){printf("%d\nM,fun(7));)执行后的输出结果是

A、2

B、3

C、7

D、0

标准答案:A

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

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

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

23、有以下程序:#includevoidf(int*P,int*q);main(){intm=l,n=2,*r=&m;

f(r,&n);prinff("%d,%d”,m,n);}voidf(int*P,int*q){P=P+1:

*q二*q+1:}程序运行后的输出结果是()。

A、2,3

B、1,3

C、1,4

D、1,2

标准答案:B

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

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

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

24、设有某函数的说明为则下列叙述中,正确的是()。

A、说明中的a[10]写成a口或*a效果完全一样

B、形参a对应的实参只能是数组名

C、func的函数体中不能对a进行移动指针(如a+-)的操作

D、只有指向10个整数内存单元的指针,才能作为实参传给a

标准答案:A

知识点解析:暂无解析

25>有以下程序:#include#ineludevoidfun(int*p1.int*p2,int*s)

{s=(int*)malloc(sizeof(int));*s=*pl+*(p2++);)main(){intat2|={1,2),

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

结果是()。

A、11

B、10

C、1

D、2

标准答案:C

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

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

26、有以下程序(strcat函数用于连接两个字符串):#inckide<stdio.h>#include<

string.h>main(){chara[20]=^ABCD\OEFG\05\b[尸‘IJK'';strcat(a,b);

printf「%s\n'a);}程序运行后的输出结果是()。

A、1,6,2,1,

B、8,7,3,1,

C、4,7,5,2,

D、1,6,5,7,

标准答案:D

知识点解析:首先对二维数组进行赋值操作,a|0][0]、a[0][l].........a[3][2]、

a[3][3]的值为1、4........6、1。通过for语句和if语句,对二维数组各列元素进行

由小到大的排序操作,程序最后通过foi■语句输出二维数组对角线上的元素。因此

D选项正确。

27、有以下程序:#include#includestructA{inta;charb[10];doublec:);

voidf(structAt);main(){structAa={1001,"ZhangDa",1098.0);f(a);

prinlf("%d,%s,%6.lf\nM,a.a,a.b,a.c);)voidf(struelAt)

{t.a=1002:strcpy(t.b,"ChangRong");t.c=1202.0:)程序运行后的输出结

果是()。

A、1002,ZhangDa,1202.0

1002,ChangRong,1202.0

C、1001,ChangRong,1098.0

D、1001,ZhangDa,1098.0

标准答案:D」

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

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

D正确。

28、有以卜程序:#include<stdio.h>intfun(int*b,intn){inti,r=l;for(i=0;i

<=n;i++)r=r*b[i];returnr;}main()(intx,a[]={2,3,4,5,6,7,8,9);

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

A、24

B、720

C、120

D、6

标准答案:C

知识点解析:函数fun()求数组指定返回的元素的积。函数fun(a,3)求的是数组

a[0]〜a[3]的积。因此结果为2*3*4*5=120,故答案为C选项。

29、设有以下函数:voidfun(intn,char*s){.......}则下面对函数指针的定义和赋

值均正确的是()。

A、void(*pf)(int,char);pf=&fun;

void*pf():pf=fun:

CNvoid*pf();*pf=fun;

D、void(*pf)(int,char*);pf=fun;

标准答案:D

知识点解析:函数的参数可以是指制类型。它的作用是将一个变量的地址传送到另

一个函数中。函数名代表函数的入口地址,指向函数的指针应该定义为

void(*pf)()o如果定义为void*pf(),则表示函数pf返回值为一个基类型为void的指

针。因此D选项正确。

30、有以卜程序#include<stdio.h>main(){inta=3;printf("%d\n'\(a+=a-

温馨提示

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

评论

0/150

提交评论