2022年山东省莱芜市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2022年山东省莱芜市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2022年山东省莱芜市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2022年山东省莱芜市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2022年山东省莱芜市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

2022年山东省莱芜市全国计算机等级考试

C语言程序设计真题(含答案)

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

一、2.填空题(10题)

1.数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、

数据结构、数据流、和处理过程。

2.某二叉树中度为2的结点有18个,则该二叉树中有【】个叶子结

八占、、O

3.有以下程序段:

inta[10]={l,2,3,4,5,6,7,8,9』0},*p=&a[3],b;

b=p[5];

b中的值是【】。

4若有定义inta[4][4]={{l,2,3,4},{0},{4,6,8,10},{1,3,

5.7}),则初始化后,得到的初值是。

5.栈和队列通常采用的存储结构是【】。

6.语句"int(*ptr)();”的含义是____是指向函数的指针,该函数返回一

个int型数据。

7.下面程序的运行结果是【】。

intf(inta[],intn)

{if(n>1)returna[O]+f(&a[l],n-l);

elsereturna[0];

}

main()

{intaa[3]={l,2,3},s;

s=f(&aa[O],3);

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

)

8.阅读下列程序,则程序的输出结果为【】。

#include"stdio.h"

structty

{intdata;

charc;};

main()

{structtya={30,'x'};

fun(a);

printf("%d%c",a.data,a.c);}

fun(structtyb)

{b.data=20;

b.c='y';}

9.在关系模型中,把数据看成一个二维表,每一个二维表称为一个

10.执行下面程序段后,k值是【】。

k=l;n=263;

do

{k*=n%10;n/=10;

}while(n);

二、单选题(10题)

11.若有说明charsl[30]="Thecity",s2[]="isbeautiful";,则在使用函数

strcat(sl,s2)后,结果是()。

A.si的内容更新为Thecityisbeautiful\0

B.sl的内容更新为isbeaut\0

C.sl的内容更新为Thecity'Oisbeautiful'。

D.sl的内容更新为Thecityisbeautiful\O

12.有如下程序intfunc(inta,intb){return(a+b);}main()

{intx=2,y=5,z=8,r;r=func(fnnc(x,y),z);printf("%d\n",r);}

该程序的输出结果是______o

A.12B.13C.14D.15

13.下列叙述中正确的是

A.C语言中既有逻辑类型也有集合类型

B.C语言中没有逻辑类型但有集合类型

C.C语言中有逻辑类型但没有集合类型

D.C语言中既没有逻辑类型也没有集合类型

14.有以下程序

#include<stdio.h>

voidfun(int*a,int*B)

(

int*c;

c=a;a=b;b=c;

}

main()

(

intx=3,y=5,*p=&x,*q=&y;

fun(p,q);

printf("%d,%d,",*p,*q);

fun(&x,&y);

printf("%d,%d\n",*p,*q);

)

程序运行后的输出结果是o

A.3,5,5,3B.3,5,3,5C.5,3,3,5D.5,3,5,3

15一个栈的入栈序列是a,b,c,d,e,f,则栈的不可能的输出序列为()

A.fedcbB.defbcC.defcbD.abcdef

16.以下函数的时间复杂度和空间复杂度为0

Function(n)

(n<=1)

return用

Function(r>-1)♦Function(n-2);

A.T(n)=O(2An),S(n)=O(n)

B.T(n)=O(l),S(n)=O(l)

C.T(n)=O(2An),S(n)=O(l)

D.T(n)=O(n),S(n)=O(n)

17.

有以下程序:

main

{intnum[4][4]={l,2,3.4},{5,6,7.8},{9,10,11,

12.},{13,14,15.16}},i,j;

fbr(i=O;i<4;i++)

{for(j=0;j<i;j++)printf("%4c",);

for(j=;J<4;j++)printf("%4d",num

[i][j]);

printf("\n");}}

若要按以下形式输出数组右上半三角

1234

678

1112

16

则在程序下划线处应填入的是()。

A.i-1B.iC.i+1D.4—i

18.以下定义数组的语句错误的是()。

A.intnum[]={1,2,3,4,5,6};

B.intnum[][3]={{l,2},3,4,5,6};

C.intnum[2][4]={{l,2},{3,4},{5,6});

D.intnum[][4]={1,2,3,4,5,6};

19.广义表((a),a)的表头是()。

A.aB.(a)C.((a))D.()

2O.if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中

正确的是

A.必须是逻辑值B.必须是整数值C.必须是正数D.可以是任意合法的

数值

三、程序设计题(10题)

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

案的项目中包含一个源程序文件progl.c。在此程序中,已知学生的记

录由学号和学习成绩构成,N名学生的记录已存入a结构体数组中。

请编写函数fun(),该函数的功能是找出成绩最高的学生记录,通过形

参将其返回主函数(规定只有一个最高分)。已给出函数的首部,请

完成该函数。

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

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

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

试题程序:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定义结构体*/

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

)

voidmain()

(

STUa[N]={{“A01”,8",{“A02”,89},{“A03”,66},

{“A04”,87},{“A05”,77},{“A06”,90},{“A07”,79},

卜A08”,61}/“A09”,80},{4<A10",7

inti;

system(“CLS”);

printf("****Theoriginaldata*****);

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

u,,

printf(No=%sMark=%d\n5a[i].num,a[i].s);

fun(a,&m);

printf("****THERESULT****\n");

printf("Thetop:%s,%d\n”,m.num,m.s);

}

22.

请编写一个函数voidproc(intm,intk,intxx[]),该函数的功能是将大

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

105(即M=10,k=5),则应输出:1214151618。注意:部分源程序

给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函

数proc()的花括号中填入所编写的若干语句。试题程序:

Uindudc<stdlib.h>

Cincludr<coc»ouh>

■include<atd«o.h>

vodprocimtm.mth・int

voednuitH)

wiim・n・u(J000]i

»ywiewi(*CLS*)•

pniwR*\nPle«Menicttwomietrr»।*)i

proc<m«n«ti)i

pam”・%d

pnntfC*\n*)t

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

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

数,其功能是从传入的num个字符串中找出最长的一个字符串,并通

过形参指针max传回该字符串的地址(用****作为结束输入的标识)。

注意涪B分源程序在文件progl.c中。请勿改动主函数main()和其他函数

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

试题程序:

1#include<conio.h>

2#include<stdio.h>

3#include<string.h>

4#include<stdlib.h>

5char*fun(char(*a)[81],intnum,char*max)

6{

7

8)

9voidmain()

10{

11FILE*wf;

12charss[10][81],*ps=NULL;

13chars[3][81]={"abed","deg","diegns"),*p=NULL;

14inti=0,n;

15system("CLS");

16printf("输入若干个字符串:");

17gets(ss[i]);

18puts(ss[i]);

19while(!stremp(ss[i],"****")==0)/*用4个星号作为结束输入的标志

*/

20{

21i++;

22gets(ssfil);

24puts(ss[i]);

25)

26n=i;

27ps=fun(ss,n,ps);

28printf("\nmax=%s\n",ps);

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

31p=fun(s,3,p);

32fprintf(wf,"%s",p);

33fclose(wf);

24.请编写函数proc,其功能是:计算并输出下列多项式值。

S=(l-1/2)+(1/3-1/4)+...+(1/(2n-l)-l/2n)

例如,若主函数从键盘给n输入20后,则输出为S=0.680803。

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

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

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

试题程序:

#includet:stdio.h>

doubleproc(intn)

(

)

voidmain

(

intn;

doubleslim;

printf("\nlnputn:");

scanf("%d",&n);

sum=proc(n)o

printf("\ns=%f\n",sum);

)

25.编写函数fun(),其功能是:求出1〜1000中能被7或11整除,但

不能同时被7和11整除的所有整数,并将其放在a所指的数组中,通过

n返回这些数的个数。注意:部分源程序给出如下。请勿改动main()

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

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

UmcludeVadhhh>

includeVezo.h>

9includeVstdio.ti>

*oidlun<ini•.♦ml•n)

voidnwiin()

mtaa£lOOO]«ii«ki

»y»tctn("ClJi-)i

(wn<«a>&■>.

(or(k-Oik<i>ilt++)

if«e+l)为10•-0)

lpnntf(*X5d•・3h])t

prifiif(w\n*>iI"一行Y9个IT

ebe

prtnifc"KSd*♦

pnnth*\nw>»

26.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程

的成绩已在主函数中给出,请编写函数fun,其功能是:求出该学生的

平均分,并放入记录的ave成员中。

例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,

则他的平均分应为78.875。注意:部分源程序在文件PROG1.C中。

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

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

fiiiclude<stdio.h>

fdefineN8

typedefstruct

Icharnum[10];

doubleB[N];

doubleave;

|STREC;

voidfiin(STREC•a)

main()

|STREC•=|"GA005",85.5,76,69.5.85,91.72,64.5,87.51;

inti:

voidNONO();

fun(&s);

printf("The%»*ssludentdau:\n".s.num);

for(i«0;i<N;i♦♦)

pnntf("%4.lAn"»[i]);

printf("\nave=%7.3An"ave);

NONO();

I

voidNONO()

1/•本函数用于打开文件,输人数据,*用函敷,粕出数据,关闭文件.

FILE•out;

intij;STREC>[10]=|

I"GA005”,as.5.76.69.5.85.91.72,64.5,87.5(,

I*GA00P.82.5,66.76.5,76,89.76.46.5,78.51,

|,GA002-.72.5,6.79,68.46.S.58.51.

I■GA003-,92.5,76.86.5,86,99,86t56.5,8«.5|,

I•GA004-,92.66.5,46.5,56,76,75,1.

|-GA006",75.5,74,71.5,1t

I-CA007-,92.5,61,72.5,84.79,75,66.5.72.5J,

I"GA008-,72.5,S6,73.5,80,69,63,76・5.53.51,

|-GA009",66.5,71,74.5.70,61.82,86.5,58.51.

|-CAOJO*,76,66.S,715,60.76,71.96.5,93.51,

Is

out=fopen(**out.<hl**,*w*);

(br(i=0;i<10;i♦♦)|

fun(&»[i]);

fpnntf(out,*%7.3AnH,t[i].ave);

I

fdo0e(out);

27.

函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数

的字符删除,S所指串中剩余的字符形成的新串放在t所指的数组中。

例如,若s所指字符串中的内容为“ABCDEFG12345",其中字符C的

ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的

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

此类推。最后t所指的数组中的内容应是“BDF12345”。

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

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

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

试题程序:

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[D

(

)

main()

{.•

char100],t[100];

printf(n\nPleaseenterstringS:");

冢皿s);

fun(s«t);

printfrenultis:%s\n,\t);

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

案的项目中包含一个源程序文件progl.c。在此程序中,定义了NxN的

二维数组,并在主函数中赋值。请编写函数fun(),其功能是求出数组

周边元素的平均值并将其作为函数值返回给主函数中的s。例如,若a

数组中的值为

01279

19745

23831

45682

59141

则返回主程序后s的值应为3.375o

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

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

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

试题程序:

1#include<stdio.h>

2#include<conio.h>

3#include<stdlib.h>

4#defineN5

5doublefun(intw[][n])

6{

7

8}

9voidmain()

10{

11FILE*wf;

12inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3』,4,5,6,8,2,5,9,

13inti,j;

14doubles;

15system("CLS");

16printf("***Thearray***\n");

17for(i=0;i<N;i++)

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

19{printf("%4d",a[i][j]);}

20printf("\n");

21)

22s=fun(a);

23printf("***TheResult***\n");

24printf("Thesumis:%lf\n",s);

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

27fprintf(wf,"%if",s);

28fclose(wf);

29/******************/

30)

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

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

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

数值返回。

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

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

中,把79放在heigh中。

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

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

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

试题程序:

ddrftneM16

typedrfMruct

(

dur

STRfX1

iniproHSTREC•••STREC•b•间1•mth)

midmainC>

STREL*(<e<;A(Nna.SS>.rGA0O3*.M•

I•GAOO:*•孙.<•GAW.M>•

<aGA001a«Mi.rGAOO7a,74h

<<GAOO®-.W-GA006*.M.

<-GAOI$*99OI.CGAO13e«S3H

rGAOI2<.Ml.rGAOH<«82h

<・GA01】•.731.('GAO]7・.$9).

<*GAOiSa«<4k<eGAOI<e«MHs

STRECh[M]«

mti.n«low*heigh*ti

pnvit(("Enter2«ntt*vrnumberlow&

height

Manf(*SdKd*«&krw・&hci<h>i

if<httgbVlow)

1=height

heigh*lowi

low*tt

proc(attt»h»law»i

prtfiifC,Thr»tudri»t•<huout

Kd-----Kdi\a*.low.hetch)i

tor(90iYoii++)

pnmf(•・・M0<.11nl.MD.".

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

prtni«*\ti*)।

30.请编写函数proc(),其功能是:将str所指字符串中下标为偶数的字

符删除,串中剩余字符形成的新串放在t所指数组中。例如,当str所

指字符串中的内容为ABCDEFGHIJK(输入完成以空格、Tab或者Enter

键加任意非空格、Tab或者Enter键的一个字符作为输入结束标志),则

在t所指数组中的内容应是BDFHJ。注意:部分源程序给出如下。请

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

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

=tneludeVsTdLb.

£include<como.h>

#include〈Mdidh>

BrncludtVxn皿h>

voidprocCchar•ar.char•[]>

midriMinC>

MMI*1S

charntr[100j»t[100]i

HEE4*CI^5*)।

pcn<CPl”Aemier»inntStr**>i

proriur.t)i

prtntf<*\nTheEuhIB:K»\n"•<>!

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

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

式的值。

y=1-l/(2x2)+1/(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++)

/****************jpQund*******+******/

y+=l/(i*i);

)

return(y);

)

main()

(

intn=5;

clrscr();

printf("\nTheresultisfun(n));

)

32.下列给定程序中,函数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];

j=i-l;

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

{aaU+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);

33.下列给定程序中,函数fun()的功能是:用冒泡法对6个字符串按由

大到小的顺序进行排序。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

voidfun(char*pstr[6])

inti,j;

char*p;

fbr(i=O;i<5;i++)

for(j=i+l;j<6;j++)

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

if(strcmp((pstr+i),(pstr+j))<0)

{

p=*(pstr+i);

*(pstr+i)=*(pstr+j);

/*************fk)und*************/

*(pstr+j)=*p;

)

)

main()

(

inti;

char*pstr[6],str[6][MAXLINE];

clrscr();

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

pstr[i]=str[i];

printf("/nEnter6string(1stringateachline):\n");

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

scanf("%s",pstr[i]);

fun(pstr);

printf("Thestringsaftersoiling:\n");

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

printf("%s\n",pstr[i]);

34.下列给定程序中函数fun()的功能是:将长整型数中每一位上为奇数

的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。

例如当s中的数为87653142例t中的数为7531。

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

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

试题程序:

#include<stdio.h>

#include<conlo.h>

voidfun(longs,long*t)

{intd;

longsl=l;

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

t=0;

while(s>0)

{d=s%10;

/***************************/

if(d%2==0)

{*t=d*sl+*t;

sl*=10;

)

s/=10;

)

}

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");scanf("%ld",&s);

fun(s,&t);

printf("Theresultis:%ld\n",t);

35.给定程序M0D11.C中函数fun的功能是:交换主函数中两个变量

的值。例如:若变量a中的值原为8,b中的值为3。程序运行后a中的

值为3,b中的值为8。请改正程序中的错误,使它能计算出正确的结

果。

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

*include<stdio.h>

2/………found………•/

3voidfun(intxrinty)

4(

5intt;

6/*******w*found**********/

7!t-x;x-y;y«t;

8:}

9;main()

10I{

11inta,b;

12a«8;b«3;

13fun(&a,&b);

ww

14printf(%dr%d\n,a,b);

15

36.下列给定程序中,函数fun()的功能是将字符串s中位于偶数位置的

字符或ASCII码为奇数的字符放入字符串t中(规定第一个字符放在第0

位中)。

例如:字符串中的数据为ADFESHDI,则输出应当是AFESDL

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

#defineN80

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

voidfun(chars,chart[])

inti,j=0;

for(i=0;i<strlen(s);i++)

/*********j^Qund*+************/

if(i%2=0||s[i]%2!=0)

tU++]=s[i];

t[j]='\O';

)

main()

(

chars[N],t[N];

clrscr();

printf("\nPleaseenterstrings:");

gets(s);

fun(s,t);

printf("\nTheresultis:%s\n",t);

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

公式的值。

Al=l,A2=l/(5+Al),A3=l/(5+A2)........An=l/(5+A(n-l))

例如,若n=10,则应输出0.192582。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

floatfun(intn)

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

intA=l;

inti;

/*************^^und*************/

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

A=16/(5+A);

returnA;

)

main()

(

intn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

,,

printf("A%d=%lf\n1n,fun(n));

)

38.给定程序MODHC中函数fun的功能是:对N名学生的学习成绩,

按从高到低的顺序找出前m(mS10)名学生来,并将这些学生数据存放在

一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。

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

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

1tinclude<stdio.h>

2■include<stdlib.h>

3finclude<string.h>

4♦defineN10

5typedefstructss

6(charnum(10);

7ints;

8)STU;

9STU*fun(STUa(Eintm)

10(STUb(N],*t;

11int

12/****♦*****found**********/

13t-(STU*)calloc(sizeof(STU),m)

14for(i-0;i<N;i++)b[i]-a[i];

15for(k«0;k<m;

16{for(i-j-0;i<N;i++)

17if(b(i).s>b[j].s)j-i;

18/****♦♦*♦♦♦found****♦*♦♦**/

19t(k)-b(j);

20b(j].s-0;

21)

22returnt;

23]

24outresult(STUa(],FILE*pf)

25(inti;

26for(i»0;i<N;[♦+)

n

27fprintf(pfr"No-%sMark-%d\nr

a[i].numra(i].s);

28fprintf(pf,w\n\n");

29)

30main()

31(STUa[N)-{{“A01”,81},「A02”,89),

「A03”,66},「A04”,87},{“A05”,77),

LA06-,90},「A07”,79》,LA08-,61},

ww

("A09r80h("A10,71));

32STU*pOrder;

33int1,m;

34printf(»♦**♦♦TheOriginaldata

…;

35outresult(a,stdout);

36printf("\nGivethenumberofthe

studentswhohavebetterscore:");

H

37scanf(%d"r;

38while(m>10)

39{printf(w\nGivethenumberofthe

studentswhohavebetterscore:*,);

40scanf("%dw,&m);

41

42pOrder-fun(a,m);

43printf(***♦*♦THERESULT

\nw);

44printf("Thetop:\nw);

45for(i«0;i<m;i++)

w

46printf("%s%d\nrpOrder[i].

num,pOrder(i].s);

47free(pOrder);

48

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

之和。high由主函数传给fun()函数。若high的值为100,则函数的值

为1060o

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

intfun(inthigh)

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

while(high>=2)

yes=l;

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

/***************************/

ifhigh%j==O

yes=0;

break;

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

if(yes==0)

sum+=high;

n++;

high-;

)

returnsum;

)

main()

(

clrscr();

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

)

40.在主函数中从键盘输入若干个数放入数组中,用。结束输入并放在

最后一个元素中。下列给定程序中,函数fun()的功能是计算数组元素中

值为负数的平均值(不包括0)。

例如:数组中元素的值依次为43,47,-21,53,-8,12,0,则程序的

运行结果为-25.333333。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intxf])

{

doublesum=0.0;

intc=0,i=0;

while(x[i]==0)

if(x[i]<0)

{

sum=sum+x[i];

C++;

}

i++;

)

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

sum=sum\c;

returnsum;

)

main()

(

intx[1000];

inti=0;

clrscr();

printf("\nPleaseentersomedata(endwith

0):”);

do

{

scanf("%d",&x[i]);

}while(x[i++]!=0);

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

五、程序改错题(2题)

41.

由N个有序整数组成的数列已放在一维数组中,下列给定程序函数fun

0的功能是:利用折半查找法查找整数m在数组中的位置。若找到,

返回其下标值;否则,返回-屋折半查找的基本算法是:每次查找前先

确定数组中待查的范围low和high(10w%high)o然后用m与中间位

置(mid)上元素的值进行比较。如果m的值大于中间位置元素的值,

则下一次的查找范围落在中间位置之后的元素中;反之,下一次的查找

范围落在中间位置之前的元素中,直到low>;high,查找结束。请改

正程序中的错误,使它能得出正确的结果。注意:不要改动main()

函数,不得增行或删行,也不得更改程序的结构!试题程序:

5include<stdio.h>

rdefineN10

//*•••found•■••

voidfunCintintm)

{inilow=0.high=xN-!.midi

whilr(low<=high)

(mtd=(low+high)/2i

hi«h=mid-11

//••••found•«••

elseif<m>afmidj)

low»mid4-11

elsereturn<mid)i

return<-1)i

voidmain()

(inti・a[N]«{-3.1.7.9.13.I5・67.89.100.

180}・k,nu

printf("•数组中的数据如下,,

for(ix,0ii<Nit4"+)

printf(*%dt

printfC*Enterm:")»

k=fun(a.m>i

if(k>*0>

printf<*m=%d・index=%d\n"・m.k>i

elseprint""Notbefound!\n"):

42.下列给定程序中,函数fun()的功能是:将长整型数中各位上为奇

数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低

位。例如,当s中的数为87653142时,t中的数为7531。请改正程序

中的错误,使它能得出正确的结果。注意:不要改动main()函数,

不得增行或删行,也不得更改程序的结构!试题程序:

绊includeVsldlib.h>

*include<stdio.h>

*includeVconio,h>

voidfun(longs.long•t>

intdi

longsi=Ij

//»•••found•••■

t»Oi

while(s>0>

d=s%10t

//••••found»•»•

*d%2««0)

<

«t-d*si+*ti

!ii•lOi

)

»/~10|

}

)

voidmain()

(

longs«u

systcm()i

printf(*\nPleaseenters:*>1

scanf("%idw•&*)g

fun(s«&«t)1

printf("Theresultin:%id\n".t)।

I

六、操作题(2题)

43.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最小

元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:

234345753134436458100321135760

则输出结果为6,100。

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

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

(

)

main()

(

inta[10]={234,345,753,134,436,458,

100,321,

135,760),k;

clrscr();

fun(a,10,&k);

printf("%dr%d\n",k,a[k]);

)

44.请补充函数fun(),该函数的功能是:把一个字符串中的字符(字母)

按从小到大排序并把这个全部由字母组成的字符串保存在原串中,函

数返回这个字符串的长度。例如;输入“cixbr2.3",如果为bcirx,字符串

长度为5。

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

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

上填入所编写的若干表达式或语句。

#include<stdio.h>

#defineN20

intfun(char*str)

(

inti=0,j=0,k=-0,m=0;

chart;

char*p=str;

while(*p)

(

if((*p>='A'&&*p<='Z')||(*p>='a'

&&*p<='z'))

【】

p++;

)

*(str+i)='\0';

【】;

while(*(p+j))

【】;

while(*(p+k))

(

if(*(p+k)<*(str+m)

(

t=*(str+m);

*(str+m)=*(p+k);

*(p+k)=t;

k++;

j++;

)

returni;}

main()

{

charstr[81];

ihtn;

clrscr();

printf("Inputtheoriginalstring");

gets(str);

printf("***TheOriginalstring***In");

puts(str);

printf("***Thenwestring***\n");

n=fun(str);

puts(str);

printf("***Thelengthofnewstringis:

%d***\n",n);

参考答案

L数据存储数据存储

2.1919解析:根据二叉树的性质:在任意一棵二叉树中,度为。的结点

(即叶子结点)总是比度为2的结点多一个。本题中度为2的结点数为18,

故叶子结点数为18+1=19个。

3.99解析:p是一个指针变量,指向数组a的元素a[3],所以

b=p[5]=a[5+3]=a网=9。

4.00解析:二维数组可以看成是按矩阵形式排列的,题目中给二维数组

赋初值是按行分段赋值的,a[4][4]可以分解为4个一维数组,其数组名

分别为a[0]、a[l],a[2],a[3],这4个一维数组都有4个元素,a[0]的元

素为a[0][0]、a[O][l],a⑼⑵、a[0][3]o

5.链式存储和顺序存储链式存储和顺序存储

6.ptrptr解析:本题考查函数指针的概念。函数指针的定义格式是:类型

标识符(*旨针变量名)()。注:“类型标识符”为函数返回值的类型。

7.66解析:经过分析将递归函数写成其数学表达式如下:

本题中定义了一个长度为3的数组aa并初始化。接着调用递归函数f,

由上面的数学表达式以计算其返回值s=l+2+3=6,所以空格处应该填6。

8.30x30x解析:本题的参数传递属于值传递,所以函数内不能改变调用

函数中的数据。

9.关系关系解析:关系模型用;维表表示,则每个;维表代表一种关系。

10.3636解析:本题循环体共执行了3次。第一次:k=3,n=26:第二次:

k=18,n-2;第三次:k=36,n=00

HD解析:该函数用来使两个字符串连接成为一个字符串。strcat(strl,

str2)将str2中的字符连接到strl的字符后面,并在最后加一个“\\0"。连

接后新的字符串存放在strl中。注意:用于字符串处理的函数。

12.D

13.D解析:在C语言中没有逻辑类型,逻辑类型用整型来表示,故选

项A和选项C不正确,C语言中没有集合类型,故选项B不正确。所

以,D选项为所选。

14.B

解析:本题主要考查的是函数的实参和形参之间的传递关系,C语言

中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针

变量作函数参数也要遵循这一规则。调用函数不可能改变实参指针变

量的值。所以X和y的地址并没有改变,即p和q也没有改变,因

此,选项B是正确的。

15.B

16.A

17.B

\n本题中要求输出右上半角的数,对角线上的数的下标相同,所以j=i。

\n

18.B

二维数组的定义有3种形式,第一种是分行为两位数组赋值,即int

num[]={{12},{3,4},{5,6}},第二种是按照数组排列顺序进行赋

值,BPintnum[]={l,2,3,4,5,6},第三种为对部分元素赋初值,

即intnum[]={{L2}什,{3,4},{5,6}},所以错误的为B。

19.B

20.D

21.fun(STUa[],STU*s)

(

inti;

*s=a[0];

for(i=0;i<N;i++)/*找出成绩最高的学生记录*/

if(s->s<a[i].s)<p=""x/a[i].s)<>

*s=a[i];

)

先使指针变量S指向第1名学生。通过循环语句遍历所有学生的成

绩,利用条件语句判断当前学生成绩是否最高。所以if条件表达式为

s->s

S,,等价于,,(*s).s”°

22.

【解析】通过要求把非素数的数放到xx数组中,检查大于整数m的整

数,将不是素数的整数放在数组xx中,直到个数大于k个结束。

23.1char*fun(char(*a)[81],intnum,char*max)

2{

3inti=0;

4max=a[0];

5for(i=0;i<num;i++)/*找出最长的一个字符串*/

6if(strlen(max)<strlen(a[i]))

7max=a[i];

8retummax;/*传回最长字符串的地址*/

9)

<strlen(a[i]))

解答本题之前,首先应该明白ss是数组名,是指数组首元素的地址。

max是字符指针变量,可以指向一个字符串。假定max指向数组中第

1个字符串,它的长度最长。再使用循环语句遍历字符串数组,使用条

件语句判断该字符串的长度是否大于max指向的字符串的长度,如大

于,则max指向该字符串。保证max指向的字符串最长,并将其作为

函数值返回。</strlen(a[i]))

24.\n\tdoubleproc(intn)

\n{

\ninti;

\ndoubles=0.0;//s为其和的变量

\nfor(i=l;i<=n;i+十)

\nS=s+(l-0/(2*i-l)-l.0/(2*i));//计算s

\n=(l-l/z)+(l/3-1/4)+...+(l/(2n-l)-l/

\n2n)

\nreturns;//最后把所得到的和返回到主函数中

5}

\n【解析】由题目中所给表达式可知,多项式的值为n项表达式的

和。可以利用n次循环求出n项表达式的值,求和放在变量s中。最

后将多项式的值返回到主函数当中。\n

25.

【解析】根据题意,所写函数要用for循环实现对整数1〜1000的遍历;

通过if语句找出能被7或11整除,但不能同时被7和11整除的所有整

数,因为同时被7和11整除的整数一定能被77整除,且不能被77整

除的数不一定就是能被7或11整除,可得出表达式“(i%7==0||i%ll==O)

&&i%77!=0";再按题目要求,将找出来的整数放在a所指的数组中,

通过n返回这些数的个数即可。

26.

voidfun(STREC*a)

inti:

a->ave=0.0:

fbr(i=O;i<N;i++)a->ave=a—>ave+-->s[i];/*求各门成绩的总和}

a->ave/=N

温馨提示

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

评论

0/150

提交评论