2023年广东省揭阳市全国计算机等级考试C语言程序设计模拟考试(含答案)_第1页
2023年广东省揭阳市全国计算机等级考试C语言程序设计模拟考试(含答案)_第2页
2023年广东省揭阳市全国计算机等级考试C语言程序设计模拟考试(含答案)_第3页
2023年广东省揭阳市全国计算机等级考试C语言程序设计模拟考试(含答案)_第4页
2023年广东省揭阳市全国计算机等级考试C语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

2023年广东省揭阳市全国计算机等级考试

C语言程序设计模拟考试(含答案)

学校:班级:姓名:考号:

一、2.填空题(10题)

1.以下程序运行后的输出结果是【】。

#include<stdio.h>

main()

{charc;intn=100;

floatf=I0:doublex:

x=f*=n/=(c=50);

printf("%d%f\n",n,x);

)

2.不改变关系表中的属性个数但能减少元组个数的是()。

3.若有如下定义,则该数组的第一维大小为【】。

intb[][4]={l,2,3,4,5,6,7,8,9);

4.以下程序运行后的输出结果是____o

#inClude<strinq.h>

char*ss(char*s)

{char*p;t;

p=S+l;t=*s;

while(*p){*(p-1)=*p;p++;}

*(p-l)=t;

returns;

main()

{char*p,str[10]="abcdefgh";

p=ss(str);

printf("%s\n",p);

5.有下列程序;

#include<stdio.h>

main()

{charc;

while((c=getchar())putchar(++C);

)

程序运行时,如果从键盘输入:A,B,<CR>,则输出结果为

6.在一个容量为32的循环队列中,若头指针front=3,尾指针rear=2,

则该循环队列中共有个元素。

7.以下程序的功能是建立一个带有头结点的单向链表,链表结点中的数

据通过键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data

域不放数据,表空的条件是ph->next==NULL),请填空。

#include<stdio.h>

structlist{intdata;structlist*next;};

structlist*creatlist()

{structlist*p,*q,*ph;inta;ph=(structlist*)malloc(sizeof(structlist));

p=q=ph;printf("Inputanintegernumber;entre-ltoend:\n");

scanf("%d",&a);

while(a!=-l)

{p=(structlist*)malloc(sizeof(structlist));

[14]=a;q->next=p;[15]=p;scanf("%d",&a);}

p->next='\O';retum(ph);)

main()

{stuctlist*head;head=creatlist();}

8.C语言中用表示逻辑值为“真”,用数字“0”表示逻辑值为“假

9.数据的逻辑结构有线性结构和两大类。

10.x、y、x均为int型变量,描述“x、y和z中至少有两个为正数”的表

达式是______。

二、单选题(10题)

11.下面程序输出的是()。

main

{intt=l;fun(fun(t));}

fun(inth)

{staticinta[3]={1.2.3};

intk;

for(k=0;k<3;k++)a[k]+=a[k]-h;

for(k=0;k<3;k++)printf("%d",a[k]);

printf("\n");

return(a[h]);}

A.l,2,3,1,5,9,B.l,3,5,1,3,7,C.l,3,5,0,4,8,

D.l,3,5,-1,3,7,

12.有如下程序:

main()

{intx=l,a=0,b=0;

switch(x)

(

case0:b++;

case1:a++;

case2:a++;b++;

)

printf("a=%d,b=%d\n",a,b);

)

该程序的输出结果是()。

A.a=2,b=lB.a=l,b=lC.a=l,b=0D.a=2,b=2

13.

(16)下列4个程序中,完全正确的是().

A)#include<stdio.h>B)#include<stdio.h>

main();main()

{/.programming*/{/*/programming/*/

printf("programm»ng!W);)printfC,programming!\nM);}

C)#include<stdio.h>D)include<stdio.h>

main()main()

{/♦/programming*/♦/{/"programming*/

printff'programming!\n");}printf("programming!\n");}

14.下述哪一个是顺序存储结构的优点()。

A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种

逻辑结构的存储表示

15.设有定义inta=2,b=3,c=4;,则以下选项中值为。的表达式

是0

A.(!a==l&&(!b==O)

B.(a<b)&&!c||l

C.a&&b

D.a||(b+b)&&(c-a)

16.以下叙述中正确的是()

A.当对文件的读(写操作完成之后,必须将它关闭,否则可能导致数据丢

B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必

定被覆盖

C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打

开,才能读到第1个数据

D.语言中的文件是流式文件,因此只能顺序存取数据

17.有以下程序:#include<stdio.h>voidfunl(char*p){char*q;q=p;

while(*q!='\0')}(*q)++;q++;}mains(){chara[]={"Program"},*p;p

=&a[3];funl(p);printf("%s\n",a);}程序执行后的输出结果是()。

A.ProhsbnB.PrphsbnC.ProgsbnD.Program

18.以下各选项中的代码段执行后,变量y的值不为1的是()o

A.intx=5,y=0;if(5)y=l;

B.intx=5,y=0;if(x)y=l;

C.intx=10,y=0;if(x=y)y=l;

D.intx=5,y=10;if(x=y)y=1;

19.有如下程序段

#include"stdio.h"

#include"string.h"

#defineN10

#defineM10

char*find(char(*a)[M],intn)

{char*q;inti;

q=a[0];

for(i=0;i<n;i++)

if(strcmp(a[i],q)<0)q=a[i];

returnq;}

main()

{chars[N][M]={"tomeetme","you","and","he","china"};

char*p;

intn=5;

p=find(s,n);

puts(p);}

则执行后输出的结果为

A.A.heB.andC.youD.tomeetme

20.以下是if语句的基本形式:

if(表达式.语句

其中“表达式”()。

A.必须是逻辑表达式B.必须是关系表达式C.必须是逻辑表达式或关

系表达式D.可以是任意合法的表达式

三、程序设计题(10题)

21.

请编写函数fun(),其功能是:找出2M整型二维数组中最大元素的值,

并将此值返回调用函数。注意:部分源程序给出如下。请勿改动main

()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入

编写的若干语句。试题程序:

UCU6ACMI

*include<ntdicx

•ntfun<int«£

vendmam(>

im”f{2][M],IS.8.3.45.!2.2>i

pnm(<Sd\n-.

22.

请编一个函数floatproe(doubleh),函数的功能是对变量h中的值保留

2位小数,并对第3位进行四舍五人(规定h中的值为正数)。例如,

若h值为7.32596,则函数返回7.33;若h值为7.32496,则函数返

回7.32。注意:部分源程序给出如下。.请勿改动main()函数和其

他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干

语句。试题程序:

SmcludeV.i曲hh>

△mdude<stdio.b>

*mdudrVcomo.h)

IkMitproHfloeih)

void)

floetl|

■X*tE<*CI^")I

prtfit(<*Entrf(t>>t

•canf(exr<&.Di

pntit«"Theoriginaldautut*)•

pnnd<*Kf\n\n*«f)i

praitf<*Therwoli:X!\fi-•pror(f))i

23.假定输人的字符串中只包含字母和*号。请编写函数proc,它的功

能是:将字符串中

的前导*号全部删除,中间和后面的*号不删除。

例如,若字符串中的内容为****a*bc*def*g****,删除后,字符串中的

内容则

应当是a*bc*def*g****。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括

号中填入所编

写的若干语句。

试题程序:

#include<stdio.h>

#include<conio.h>

voidproc(char*str)

voidmain

(

charstr[81];

printf("Enterastring:kn");

gets(str);

proc(str);

printf("Thestringafterdeleted:kn");

puts(str);}

24.实现字符串拷贝的函数strcpy为()。

25.

请编写一个函数voidproc(intm,intk,intxxE3),该函数的功能是:

将大于整数m且紧靠m的k个素数存入所指的数组中。例如,若输入

206,则应输出232931374143。注意:部分源程序给出如下。请勿

改动main()函数和其他函数中的任何内容,仅在函数proc()的花括

号中填入所编写的若干语句。试题程序:

与includehj>

9includeVcooflo.h>

>include<stdkx.h>

voidproc<mtm*tnlh・mt

voedCMtO<)

mim.n«arf(10001i

sy*im<*CLS*1i

pmtf("\nPlcaxrnicTtwointegersj*)t

/U*-An*-入n)・

proc<QB»n«・rr>i

ior(♦,0g<ti1014♦)

pfiarf(e%d*.Arv(ai])i

prind<*\n•)1

26.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方

案的项目中包含一个源程序文件progl.c。在此程序中,请编写一个函

数fun(),用来求出数组中值最大的元素在数组中的下标并将其存放在

k所指向的存储单元中。

例如,输入如下整数:

876675896101301401980431451777则输出结果为6,980。

注意:部分源程序在文件progl.c中。

请勿改动主函数main。和其他函数中的任何内容,仅在函数fun()的花

括号中填入你编写的若干语句。试题程序

1tinclude<conio.h>

2#include<stdio.h>

3linclude<stdlib.h>

4intfun(int♦s,intt,int♦k)

5(

6

7)

8voidmain()

9{

10FILE*wf;

11inta[10]=(876,675,896,101,

301,401,980,431,451,777},k;

12system(MCLSM);

13fun(a,10,&k);

14printf(M%d,%d\n”,k,a[k]);

15/******今**********/

16wf=fopen(wout.datH,MwM);

M

.17fprintf(wfr%d,%d",k,a[k]);

18fclose(wf);

19/*****************/

20}

27.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方

案的项目中包含一个源程序文件progl.c在此程序中,编写函数

intfun(),其功能是求出小于或等于lim的所有素数,将其存放在aa数

组中,并返回所求出的素数的个数。

注意:部分源程序在文件progl.c中。

请勿改动主函数main。和其他函数中的任何内容,仅在函数fun()的花

括号中填入你编写的若干语句。

试题程序:

1#include<conio.h>

2#include<stdio.h>

3#include<stdlib.h>

4#defineMAX100

5intfun(intlim,intaa[MAX])

6{

7

8)

9voidmain()

10{

11FILE*wf;

12intlimit,i,sum;

13intaa[MAX];

14system("CLS");

15printf("输入一个整数:");

16scanf("%d",&limit);

17sum=fun(limit,aa);

18for(i=0;i<sum;i++)

19{

20if(i%10==0&&i!=0)/*每行输出10个数*/

21printf("\n");

22printf("%5d",aa[i]);

23)

24/******************/

25wf=fopen("out.dat","w");

26sum=fun(15,aa);

27for(i=0;i<sum;i++)

28{

29if(i%10==0&&i!=0)/*每行输出10个数*/

30fprintf(wf,"\n");

31fprintf(wf,"%5d",aa[i]);

32}

33fclose(wf);

34/******************/

35)

28.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放人

结构体数组stu中,请编写函数proc(),它的功能是:把指定分数范围

之外的学生数据放在b所指的数组中,分数范围之外的学生人数由函

数值返回。

例如,输入的分数是70和79,则应当把分数低于70和高于79的学生

数据输出,不包含70分和79分的学生数据。主函数中把70放在low

中,把79放在heigh中。

注意:部分源程序给出如下。

请勿改动main()函数和其他函数中的任何内容,仅在函数proc。的花括

号中填人所编写的若干语句。

试题程序:

WdefineM16

lypedefuruct

durnum[IO]i

iM•i

STREC»

miprorfSTREC•.・STREC•b・mtI.mih)

eidmain()

JOREL*wdM]■N•<;ADOSe.SS>・<•(;A0O3e.Ms

(*GA002*M.<'GA0O4•.a!).

{"GAOOr.Mi«rGA007a.74U

<<(;AOO«-g•<-GA006*.891.

<-GAOI$••901•<*GA013*.S3).

《■GMA.3KAW.82).

<・GA011•,731.('GAO】7•.59).

<aGA0IU・MT•GA0I6*M)।

STRIX*h[M]«

mti・n.low*hngh*ti

pnvit(("Enter2«ntt*vrnumberlow&

Knghi

Mtnf(*KdSd*•&kyw•&hcich>i

if<IwtgbVlow)

―height

heigh*low।

low*ti

n-proc(aitt«h»low»>wi<h)i

prtfitf<eTheMtudrnt'•<Utaoui

Kd-----Kdi\a*.k>w.hetch)i

tor(i,0iY,ii++)

prtntfc*K«am*h[ils)t

〃・削指定分数题(!内的学生记■

prtfid<*\ti*)।

29.请编一•个函数voidproc(intttEM][N],intpp[N]),注指向一个M行

N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指

的一维数组中。二维数组中的数已在主函数中给出。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括

号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineM3

#defineN4

voidproc(intttrM3rN]。intpp[N])

(

)

voidmain

(

intstr[M][N]={{34,56,84,78},

{23,84,93,12),

{28,38,39,93}};

intp[N],i,j,k;

systemC'CLS");

printf("Theriginaldatais:\n");

for(i=0;i<M;i++)

(

for(j=0;j<N;j++)

printf("%6d",str[i][j]);

printf("\n");

)

proc(str,p);

printf("\nTheresultis:\n");for(k=0:k<M;k++)

printf("%4d",p[k]);

printf("n");}

30.

编写函数fun(),其功能是:求SS所指字符串中指定字符的个数,并

返回此值。例如,若输入字符串“123412132",输入字符为“1”,则输出

3O注意:部分源程序给出如下。请勿改动main()函数和其他函数

中的任何内容,仅在函数fun()的花括号中填入编写的若干语句。试

题程序:

依ificlu6r<cof>K>.h>

WincludrVsl畲a

9(khncM81

mtfutt(ch&r•M.cK&rc)

voidmain()

charchi

•ywiem(-CLS*)।

pnfil(<e\nPlcaxenteraMrtngi*)।

gtl9<•)I

praiif<a\nPIe«»ew»irr«chart*)s

ch-cetchar<)«

print(<*\nThenumberoftbrcharm:Xd\a*«fen

chHi

四、2.程序修改题(10题)

31.下列给定程序中,函数fun()的功能是:计算整数n的阶乘。

请改正程序中的错误,使它能得出正确的结果。

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

试题程序:

#include<stdio.h>

doublefun(intn)

{

doubleresult,。;

whil(n>l&&n<170)

/**************f^ound********************/

result*="n;

/**************^Qund********************/

return;

main()

{int.n;

clrscr();

printf("Enteraninteger:");

scanf("%d",&n);

printf("\n\n%d[=%lg\n\n",n,fun(n));

)

32.下列给定程序中,函数fun()的功能是:计算并输出下列级数的的

N项之和SN,直到SN+1大于q为止,q的值通过形参传入。

SN=2/l+3/2+4/3+(N+l)/N

例如,若q的值为50.0,则函数值为49.394948。

请改正程序中的错误,使它能得出正确的结果。

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

试题程序:

#include<conio.h>

#include<stdio.h>

/**************'found***************/

doublefun(doubleq)

{intn;doubles,t;

n=2;

s=2.0;

while(s<=q)

t=s

/*************^Qund*************/

s=s+(n+l)/n;

n++;

)

printf("n=%d\n",n);

/************found***************/

returns;

)

main()

{clrscr();

printf("%f\n",fun(50));

)

33.给定程序MOD11.C中函数fun的功能是:根据输入的三个边长(整

型值),判断能否构成三角形:构成的是等边三角形,还是等腰三角形。

若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若

能构成一般三角形函数返回1,若不能构成三角形函数返回0。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

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

1linclude<stdio.h>

2♦include<math.h>

3ww***founcj*♦***♦♦♦♦♦***/

4voidfun(inta,intb,intc)

5{if(a+b>c&&b*c>a&&a+c>b){

6if(aMb&&bMc)

7return3;

8elseif(aMb||b»-c||aMc)

9return2;

10found**•一•*••★★★*/

11elsereturn1

12}

13elsereturn0;

14)

15main()

16(intarbrcrshape;

n

17printf(\nlnputarbrc:");scanf

wiBw

18printf(\na%d/b=%d,c-%d\nr

a,b,c);

19shape«fun(arb,c);

nw

20printf(\n\nTheshape:%d\nr

shape);

21

34.给定程序MODII.C中函数fun的功能是:把主函数中输入的3个

数,最大的放在a中,最小的放在c中,中间的放在b中。

例如,输入的数为:551234,输出结果应当是:a=55.0,b=34.0,

c=12.0o

请改正程序中的错误,使它能得出正确结果。

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

1!finclude<stdio.h>

2;voidfun(floatfloat*b,float*c)

4/******ww**found*****♦♦*♦♦/

5float*k;

6if(*a<*b)

7{k«*a;*a-*b;*b-k;}

8/**********found*w**♦♦♦♦♦♦/

13)

14main()

15{floata,b,c;

16printf(wInputabc:H);scanf

&a,&brtc);

R

17printf(a-%4.Ifrb**4.If,c

w

■%4.1f\n\nrafb,c)/

18fun(&a,&b,ic);

w

19printf(a,%4.Ifrb■%4.Ifrc

•%4.1f\n\n"ra,brc);

20

35.给定程序MODH.C中函数fun的功能是:根据以下公式求兀值,

并作为函数值返回。

例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.141480°

请改正程序中的错误,使它能得出正确结果。

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

finclude<math.h>

tinclude<stdio.h>

3doublefun(doubleeps)

4(doubles,t;intn«l;

5s*0.0;

6/**♦♦**♦***•wfound*******♦*♦*♦/

7t-0;

8while(t>eps)

9(

10t*t*n/(2*n*l);

11

12)

13/found,………♦•/

14return(s);

15}・•

16main()

17{doublex;

18printf(w\nPleaseentera

precision:");scanf(•,%1£&x);

19printf("\neps»%lfr

Pi-%lf\n\nw,x,fun(x));

20

36.下列给定程序中,函数fun()的功能是:用递归算法计算斐波拉契级

数列中第n项的值。从第一项起,斐波'拉契级数序列为1,1,2,3,

5,8,13,21...........例如,若给n输入7,

该项的斐波拉契级数值为13。

请改正程序中的错误,使它能得出正确的结果。

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

试题程序:

#include<stdio.h>

longfun(intg)

switch(g);

{caseO:returr)0;

switch(g)

case1;case2:return1;

)

return(fun(g-1)+fun(g-2));

)................

main()

(

longfib;intn;

printf("Inputn:");scanf("%d",&n);

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

fib=fun(n);

printf("fib=%d\D\n",fib);

)

37.下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公

式的值。

y=1-l/(2x2)+l/(3x3)-l/(4x4)+..1)(m+l)/(mxm)

例如:m中的值为5,则应输出0.83861lo

请改正程序中的错误,使它能得到正确结果。

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{doubley=1.0;

/**********found*************/

intj=l;

inti;

for(i=2;i<=m;i++)

j=-l*j;

/****************f^ound*******+******/

y+=l/(i*i);

)

return(y);

)

main()

{

intn=5;

clrscr();

printf("\nTheresultis%lf\n",fun(n));

)

38.下列给定程序中,函数fun()的功能是;利用插入排序法对字符串中

的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串

中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插

入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排

序的字符串已在主函数中赋予。

请改正程序中的错误,使它能得出正确的结果。

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

试题程序:

#include<String.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

{ihti,j,n;charch;

n=strlen(aa);

for(i=l;i<n;i++)

{c=aa[i];

while((j>=0)&&(ch<aa[j]))

{aa|j+l]=aa[j];

j-s

)

aa[j+l]=ch;

}

main()

{chara[N]="QWERTYUIOPASDFGHJKIMNBVCXZ";

inti;

printf("Theoriginalstring:%s\n",a);

insert(a);

printf("Thestringaftersorting:

%s\n\n",a);

39.假如整数数列中的数不重复,并存放在数组中。下列给定的程序中,

函数fun()的功能是:删除数列中值为X的元素。N中存放的是数列中

元素的个数。

请改正程序中的错误,使它能够得出正确的结果。

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

试题程序:

#include<stdio.h>

#defineN20

fun(int*a,intn,intx)

{intp=0,i;

a[n]=x;

while(x!=a[p])

p=p+l;

if(p==n)return-1;

else

{for(i=p;i<n;i++)

/*************^Qund**************/

a[i+l]=a[i];

returnn-1;

)

main()

{intw[N]={-3,0,1,5,7,99,10,15,30,90},

x,n,i;

n=10;

printf("Theoriginaldata:\n");

for(i=0;i<n;i++)printf("%5d",w[i]);

printf("\nlnputx(todelete):");

scanf("%d",&x);

printf("Delete:%d\n",x);

n=fun(w,n,x);

if(n==-l)printf("***Nobefound!

***\n\n");

else

{printf("Thedataafterdeleted:\n");

for(i=0;i<n;i++)printf("%5d",

w[i]);printf("\n\n");

)

)

40.下列给定程序中,函数fun()的功能是计算并输出high以内的素数

之和。high由主函数传给fun()函数。

例如:若high的值为100,则函数的返回值为1060。

请改正程序中的错误,使它能得到正确结果。

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

[试题源程序]

#include<conio.h>

#include<stdio.h>

#include<math.h>

intfun(inthigh)

intsum=O,n=0,j,yes;

while(high>=2)

yes=1;

for(j=2;j<=high/2;j++)

ifhigh%j==O

yes=O;

break;

if(yes==O)

(-

sum+=high;

n++;

)

high-;

)

returnsum;

)

main()

(

clrscr();

printf("%d\n",fun(lOO));

)

五、程序改错题(2题)

41.

下列给定程序中,函数fun()的功能是:计算函数F(x,y,z)=(x+y)

/(x-y)+(z+y)/(z-y)的值。其中x和y的值不相等,2和Y的

值不相等。例如,当x的值为1,y的值为2,z的值为3时,函数值为

2.00。注意:不要改动main()函数,不得增行或删行,也不得更改

程序的结构。试题程序:

”includeVstdio.h>

"includeVstdio.h>

//••••found••««

defineF(m.n)(m/n)

floatfun(floata,floatb.floatc)

(

floatmg

一=F((a+b》・《a-b》)+F((c+b)♦(<:—b))1

//••••found••••

Return(5):

>

•voidmain()

(

floatx.y»z»sufns

print«"inputxyz:H)i

print«"x-%f・y=%f\rT・x・y・z);

if(x-=y||y==z)

printf<*Dauerror!\n*)।

exit(O)।

I

sum(un(x.y.z)

printK"theresultis:%5.2f\nw.sum)i

42.下列给定程序中,函数proc()的功能是:将str所指字符串中的字母

转换为按字母序列的后续字母(但Z转化为A,z转化为a),其他字符

不变。

请修改函数proc()中的错误,使它能得出正确的结果。

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

构。

试题程序:

s*include<stdlib.h>

「includeVstdio.h>

include<ctype.h>

方include<conio.h>

voidproc(char•Mr)

//••••found••••

{・

whilc(»str!=*@*)

(

if<•&ir>='A'&&•»Mtr<=211•str>-'n'

&&•Mr<**z*>

(

if(•Mr==*Z*)«s!r=,A,i

ckcif(•—=',)•Kir=3'a'i

else•str+=1;

//«««•found•••»•

(•Mr)4-+1

}

)

voidmain()

{

charMr[80]j

5ystem("CLS")t

prind<"\nEnterAstringwithlength

<80:\n\n**)igets(51r)i

printf(**\nThestring!\n\n*'>iputs(str)t

proc(str>i

printfC"\n\nTheCords:\n\nH)ipuls(str)t

六、操作题(2题)

43.下列程序段的运行结果是____o

intx=0,y=0;

while(x<15)y++,x+=++y;

printf("%d,%d",y,x);

44.下列给定程序中,函数fun()的功能是:在字符串的最前端加入n个

*号,形成新串,并且覆盖原串。

注意:字符串的长度最长允许79。

请改正函数fun()中的错误,使它能得出正确的结果。

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

试题程序;

#include<stdio.h>

#include<strzng.h>

#include<conio.h>

/不******不不**不不**不*found********不不不*不不不/

voidfun(chars[],intn)

chara[80],*p;

inti;

/*****************^Qund***************/

S=p;

for(i=0;i<n;i++)a[i]-*';

do

{a[i]=*p;

/*****************■^Qund***************/

i++;

}while(*p);

a[i]=0;

strcpy(s,a);

)

main()

{intn;chars[80];

clrscr();

printf("\nEnterastring:");gets(s);

printf("\nThestring\%s\n",s);

printf("\nEntern(numberof*):");scanf("%d",&n);

fun(s,n);

printf("\nThestringafterinster:\%s\n",s);

参考答案

1.220220解析:根据赋值运算符“自右至左”的结合顺序,程序中赋值表

达式x=f*=n/=(c=50)的求解步骤为:首先计算n/=(c=50),即

n=n/c=l00/50=2;然后计算f*=n,即f=f*n=10*2=20.000000,由此得到

x的值为20.000000o

2.选择选择解析:关系数据库的专门关系运算包括选择、投影和连接3

种,其中选择不改变关系表中的属性个数但能减少元组个数。

3.33解析:在初始化一个含有未指定维度的数组时,C语言总是在能完

全容纳初始化列表的基础上尽可能小地设定该维度,来作为指定维度的

标准。本题有9个初始值,若指定第一维度为2,则数组含有2*4=8个

元素,容纳不下,所以指定维度为3,3*4=12,足够容纳了。故应该填

3O

4.bcdefghabcdefgha解析:在本题定义的ss()函数中首先定义了一个指

针P和一个字符变量t,然后让P指向参数指针s的下一个位置s+1,并

让t保存s位置的字符.然后使用一个while循环将p指向的内容赋给

它前面一个位置,即将参数s所指的字符串从第2个字符开始整体往前

移动一位。循环结束时,p指向原s串的结束标志处,所以让*(p-l)=t;

即是将原s串的第1个字符复制到s串的最后一个位置。整个函数实现

的是让一个字符串循环左移一位。故主函数中最后输出的字符串是

'bcdefgha'o

5.BB解析:因为c是字符类型变量,它只能接收一个字符,所以c=A,

字符型变量在参与算术运算的时候是用其相应的ASCII码参与运算的,

这样++c得到字母B的ASCII码,用putchar函数输出是输出其相应的

字符,所以是B。

6.3131解析:设队列容量为m,如果:rear>front,则队列中元素个数

为rear-front;如果rear<front,则队列中元素个数为m+(rear-front)o本

题rear<front,贝IJm=32+(2-3)=31o

7.p->dataqp->data\r\nq解析:本题考查的是链表这一数据结构对结构

体变量中数据的引用。链表的特点是结构体变量中有两个域,一个是数

据,另一个是指向该结构体变量类型的指针,用以指明链表的下一个结

八占、、O

8.非。非。解析:逻辑运算中,非。表示逻辑“真”,用。表示逻辑“假”。

9.非线性结构非线性结构

10.((x>0)&&<y>0))II(x>0)&&(z>0)IIy>0)&&(z>0))((x>0)&&<

y>0))II(x>0)&&(z>0)IIy>0)&&(z>0))解析:题目要求“x、y和z中

至少有两个为正数”,即x、y和x这3个数中必须有两个是正数,且这

3个数中的哪两个数都有可能是正数,所以它们之间是或的关系。

11.D

本题考查双重函数调用及for循环使用,fun函数中第一个for循环语

句的作用是给数组a赋值。当第一次调用fun函数时,把实参1传给

形参,输出a数组的元素为1,3,5;第二次调用fun函数时,由于数

组a为静态局部变量,故输出a数组的元素为一1,3,7o

12.A

当X为1时,执行easel,a自加等于1,因为easel后没有break,接

着执行case2,此时一a的值为2,b自加为1,故选择A选项。

13.B

14.A

15.A解析:选项A中(!a==l)&&(!b==0)—(!2=

=l)&&(!b-O)—(O=l)&&(!b==O)一0&&(!b==0)-0(&&右边表达式

(!b==0)被"短路”):选项B中(a<b)&&!c||l一(2<

3)&&!4||1->1&&0||1^0||1-*1;选项C中a&&b—2&&3-1;选项

Da||b+b)&&(c-a)一2||(b+b)&&(c-a)一1(||右边表达式(b+b)&&(c-a)被“短

路”)。所以本题选A。

16.A

B)选项中打开一个已存在的文件并进行了写操作后,原有文件中的全

部数据不一定被覆盖,也可以对源文件进行追加操作等。C)选项中在

一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打

开,才能读到第1个数据,可以用fseek()函数进行重新定位即可。D)

选项中,C语言中的文件可以进行随机读写。

17.A解析:在main函数中,p=&a[3]说明指针p指向a数组的第4个字

符(即字符\‘g\');funl中的q=p意味着指针q也指向了a数组的第4个

字符。执行while语句,表达式(*q)++使\'g\'+l,使\'g\'变成了\'h\「表达

式q++使q指向a[4]的起始地址。继续执行while语句,直到遇到V\\(K

结束循环,返回形参。最终得到的结果是从字符串‘Program',的第4个字

符开始,每个字符加1。

18.C

选项A的if条件表达式的值是5,结果为真,执行“y=l”,y的值为

1;选项B的if条件表达式x的值为5,结果也是真,执行“y=l”,y的

值为1;选项C的if条件表达式“x=y”是赋值语句,将y的值。赋给x,

表达式的值为0,if语句不执行,y的值为0;选项D的if条件表达式

“x=y”是赋值语句,将y的值10赋给x,表达式的值为10,执行

“y=l”,y的值为1。故本题答案为C选项。

19.B

在本题中,首先定义了两个宏N和M,大小都为10,然后定义了一个

返回指针的函数find,该函数带有两个形参,第一个为字符型的指针

数组,第二个为整型变量,在函数体中,首先定义了一个指针变量q,

并将形参中指针数组的第一个元素赋值给q,然后执行for循环,在循

环体中,首先执行条件判断语句,其条件为strcmp(a[i],q)<0

(strcmp函数的作用是比较两字符串的大小,如果相等,则返回0

值,如果参数中的第一个字符串大,则返回正值,否则返回负值),

如果结果为真,说明指针数组当前元素所指向的字符串比q所指向的

字符串小,此时,程序执行将当前指针数组元素赋值给p,最后返回

P,通过上面的分析我们可以看出,find函数的作用是找出指针数组中

各元素所指向字符串的最小字符串。

在主函数中,定义了一个二维数组s,并赋了初值,然后定义一个指针

变量P,用来存放函数find的返回值。调用函数find的参数分别为s

和5,结合形参看find函数,不难知道调用End函数就是找出二维数

组s中各字符串中最小的字符串,那么应该为and。此时,指针变量p

指向字符串“and”的首地址,然后执行puts(p),完成该字符串的输出。

因此,本题正确的答案是B。

20.D

解析:本题主要考查关于if语句的说明,if后面圆括号中的表达式,可

是任意合法的C语言表达式(如:逻辑表达式、关系表达式、算术表

达式、赋值表达式等),也可以是任意类型的数据(如:整型、实

型、字符型、指针型等。)

21.

【解析】此题考查的是数组的查找算法。使用for循环嵌套完成对二维

数组的遍历。题目要求出最大值,则应采用将所有元素遍历一遍,逐个

比较的方式完成。定义变量max,将第一个元素赋值max,然后通过for

循环将元素逐个与max比较,遇到比max大的则赋值max,替换原有

数据,当嵌套的for循环结束后,max即为二维数组中的最大值。

22.

【解析】要实现对变量的值保留2位小数。并对第3位小数进行四舍五

入,可以通过先将其小数点后3位变为正数后加5,所得到的数除10,

最后再除100来实现。

23.voidproc(char*str)

(

char*p=str;

while(*p==*)p++;//通过p的移动来达到使p指向第一个不是*号

的字符

for(;*p!=\0;p++,str++)//把从第一个不是*号的字符放到a中

*str=*P:

*st『\O;//最后用\0作为字符串结束标志

)

【解析1题目中要求将字符串中的前导*号全部删除,首先将指针-P移

动到第一个不是*的字符,将指针P之后的字符放入原来的字符串中,

并为新的字符串添加结束符。

24.

voidstrcpy(char*s,char*t)/*copyttos*/

{while((*s++=t++)!='\0'))|

}

25.

【解析】要将大于整数m且紧靠m的k个素数存入所指的数组中,首

先应该判断大于整数m且紧靠m的整数是否为素数。将紧靠m且为素

数的k个整数放入数组xx中。

26.1intfun(int*s,intt,int*k)

2(

3Inti;

4*k=O;/*k所指的数是数组的下

5标*/

6for(i=0;i<t;i++)hif(s[*k]<s[i])*k=i;/*找到数组中值最大的元素,把该元

素的下标赋给k所指的数*/

7retums[*k];/*返回数组的最大元素*/

8)

<t;i++)

<>本题中使用指针变量k作为值最大的元素的下标。使用时要注意对

k进行指针运算。程序一开始让k指向数组中的第1个元素,即

*k=0。通过for循环与数组各个元素比较,找到最大值。<></t;i++)

27.1intfun(intlim,intaa[MAX])

2{

3inti,j,k=0;

4for(i=2;i<=lim;i++)/*求出小于或等于lim的全部素数*/

5{for(j=2;j<i;j++)

6if(i%j==0)break;

7if(j>=i)

8aa[k++]=i;/*将求出的素数放入数组aa中*/

9)

lOreturnk;/*返回所求出的素数的个数*/

H)

<i;jp++)<>如果一个数是合数,那么它的最小质因数肯定小于等于它的

平方根。本程序使用for循环语句查找小于lim的所有数,使用内嵌的

循环判断语句判断该数是否为素数。在做这道题时,需要重点掌握素

数的判定方法:for(j=2;j<sqrt(i);j++)if(i%j==0)break;...</i;jp++)<>

28.

【解析】题目要求把指定范围之外的数放到h中,将每一个学生的成

绩与指定的成绩相比较,将符合条件的学生成绩放在数组b中,并将

符合要求的学生个数返回给主函数。

29.\r\n\tvoidproc(inttt[M][N],intpp[N])

inti,j,max;

for(i=0;i<M;i++)//i控制行的下标

(

max=tt[i][c];//max存放每行中最大的数

for(j=0;j<N;j++)

if(tt[i][j]>max)

max=tt[i][j];

pp[i]=max;//把大的数放到PP数组中,经过i来控制pp数组的下

)

)

【解析】按照题目中要求,求出二维数组每行中最大元素,并依次放

入PP所指的一维数组中。首先比较二维数组中每一行的元素,找出每

一行中的最大元素,放入一维数组pp中,返回到主函数当中。

30.

【解析】此题考查用for循环遍历字符串和通过条件表达式*ss!='\0

'来判断字符串是否结束。给字符串加上结束标识‘\0',通过for循

环遍历字符串中每一个字符,在遇到结束标识前,如果遇到指定(即用户

输入)字符,变量i加1,最后将变量i返回,即用户输入字符在字符串

中出现的次数。

31.⑴错误:result*--n;正确:result*=n—;(2)错误:return;正确:

returnresult;(1)错误:result*=—n;正确:result*=n—;\r\n⑵错误:re

温馨提示

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

评论

0/150

提交评论