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

下载本文档

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

文档简介

2023年江西省九江市全国计算机等级考试

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

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

一、2.填空题(10题)

1.以下程序运行后的输出结果是_____O

main()

(

inta,b,c;

a=25;

b=025;

c=0x25;

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

)

2.以下程序的输出是【】。

main()

(

charstrl[]=Howdoyoudo",*p=strl;

strcpy(strl+strlen(strl)\2"esshe");

pfinff("%s\n",pl);

)

3.以下函数inverse的功能是使一个字符串按逆序存放,请填空。

inverse(charstrf])

{charm;

inti,j;

for(i=0,j=strlen(str);i<strlen(str)/2;[],j-)

{m=str[i];

str[i]=[];

【】;

4.以下程序的功能是根据输入的"y"("Y")与“n"("N"),在屏幕上分别显示

出"ThisisYES."与"ThisisNO."o空白处需要填入的内容是

#include<stdio.h>

voidYesNo(charch)

{switch(ch)

{case'y':

case'Y':printf("\nThisisYESAn");

case'n':

caseN:printf("\nThisisNO.\n");}

main()

{charch;

printf("\nEnterachary,Yorn,N:");

ch=[];

printf("ch;%c",ch);

YesNo(ch);}

5.测试用例包括输入值集和【】值集。

6.以下程序的输出结果是____o

voidfun()

{staticinta=0;

a+=2;printf("%d",a);

)

main()

{intcc;

for(cc=1;cc<4;cc++)fun();

printf("\n");

7.若运行时给变量x输入12,则以下程序的运行结果是【】;

main(){

intx,y;

scanf(""%d"",&x);

y=x>12?x+10:x-12;

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

}

8.深度为5的满二叉树中,叶子结点的个数为o

9.设a、b、c为整形数,且a=2,b=3,c=4则执行完以下语句后,a

的值是【】。

a*=16+(b++)-(++c);

10.以下程序运行时若从键盘输入102030〈回车>。输出结果是【】。

#include<stdio.h>

main()

(

inti=O,j=O,k=O;

scanf("%d%*d%d",&i,&j,&k);

printf("%d%d%d\n",i,j,k);

二、单选题(10题)

11.若变量C为char类型,能正确判断出c为小写字母的表达式是

A.'a'<=c<='z'

B.(c>=,a,)||(c<=,z,)

c(a,=c)

D.(c>=W)&&(c<=N)

12.对矩阵进行压缩存储是为了()。

A.方便运算B.方便存储C.提高运算速度D.减少存储空间

13.

(5)设有表示学生选课的三张表,学生表(学号,姓名,性别),课程表(课程号,课程名),

选课成绩衣(学号,课程号,成绩),则选课成绩表的关键字为().

A)课程号,成绩,B)学号,成绩

C)学号,课程号D)学号,课程号,成绩

14.有下列程序:

#include<stdio.h>

#defineSI(x.y)x♦y

MefineS2(x,y)(x)♦(y)

main()

Iinta=2,b=5;

HH

printf(%d,%d,%d,%d,Sl(a+bfa+b),Sl(a+b,b+a),S2(a+b,a+b)tS2(a+tr,b+a));

I

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

A.17,17,49,49B,17,29,49,49C.29,29,49,49D.49,49,49,

49

15.以下只有在使用时才为该类型变量分配内存的存储类型说明是()。

A.auto和static

B.auto和register

C.register和static

D.extern和register

16.顺序结构的本质特点是()。

A.数据元素存储在地址连续的内存空间

B.数据元素紧邻

C.数据元素在内存中的相对位置表示数据之间的逻辑关系

D.不使用指针

17.

(32)以下程序的输出结果是().

#include<std沁.h>

main()

{inta[3][3]={0,1,2,0,1,2,0,1,2},ij,s=1;

fbr(i=0;i<3;i++)

fbr(j=iu<=iu-H-)

s+=a[i][aU]U]];

printR"%d\n",s);

}

A)3B)4C)1D)9

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

义和赋值均正确的是()o

A.void(*pf)();pf=fun;

B.void*pf();pf=fun

C.void*pf();*pf=fun;

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

19.有以下程序:

#include<stdio.h>

intf(intx);

main()

intn=l,m;

m=f(f(f(n)));

printff'%d\n”,m);

)

intf(intx)

(

returnx*2;

)

程序的运行结果是()O

A.8B.2C.4D.l

20.

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

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

main();main()

{/#programming*/{/*/programming/•/

printflf^programming!\n");}printftnprogramming!\nM);}

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

main()main()

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

printf|Mprogramming!\n");}printf(^programming!\nM);}

三、程序设计题(10题)

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

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

fun(),其功能是将一个数字字符串转换成与其面值相同的长整型整数。

可调用strlen函数求字符串的长度。例如,在键盘输入字符串2345210,

函数返回长整型整数2345210。注意:部分源程序存放在文件progl.c

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

指定的部位填入所编写的若干语句。试题程序:

♦include<stdio.h>

2#include<string.h>

3voidNONO();

4longfun(char*s)

5

7}

8main()

{chars[10];longr;

10printf("请输入一个长度不超过9

个字符的数字字符串:«);

11gets(s);

12r=fun(s);

13printf(Mr=%ld\nM,r);

■14)NONO();

16voidNONO()

17{/*本函数用于打开文件、输入数据、调

用函数、榆出数据及关闭文件*/

18FILE♦fp,♦wf;

19inti;longr;

20chars[10]/♦p;

MnMM

21fp=fopen(in.datfr);

wf-fopen("out.dat","w");

for(i=0;i<10;i++){

24fgets(s,10,fp);

p■strchr(sr•\n*);

if(p)*p-0;

27r=fun(s);

fprintf(wfM%ld\nMr);

■rz

30fclose(fp);

MEfclose(wf);

32)

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

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

其功能是将a、b两个两位正整数合并成一个新的整数放在c中。合并

的方式是将a中的十位数和个位数依次放在变量c的百位和个位上,b

中的十位数和个位数依次放在变量c的千位和十位上。

例如,当a=45,b=12,调用该函数后c=1425。

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(inta,intb,long*c)

(

)

main()

{

inta,b;

longc;

printff'Inputa,b:");

scanf("%d%d”,&a,&b);

fun(a,b,&c);

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

)

23.请编写函数proc(),该函数的功能是:计算n门课程的平均分,计

算结果作为函数值返回。例如,有6门课程的成绩是90.5,72,80,

61.5,55,60,则函数的值为69.830注意:部分源程序给出如下。

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

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

4includeVwdio.h>

floatproc(float■a.intn)

(

voidmain()

<

floatscorefSO]1®<90.5・72・80・61.5.55・6O)・

aven

averproc(scorc.6>»

print«"\nAveragcscoreis:%5.2f\nM.aver)i

I

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

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

其功能是将s所指字符串中除了下标为奇数同时ASCII值也为奇数的字

符之外的其余所有字符全部删除,字符串中剩余字符所形成的一个新字

符串存放在t所指的数组中。

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

ASCII值为奇数,但所在元素的下标为偶数,因此需要删除;而字符1

的ASCII值为奇数,所在数组中的下标也为奇数,因此不应当删除,

其他依此类推。最后t所指数组中的内容应为“135”。

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[])

(

)

main()

(

chars[100],t[100];

printf("\nPleaseenterstrings:");

scanf("%s”,s);

fun(s,t);

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

)

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

的项目中包含一个源程序文件progl.Co在此程序中,请编写函数fun(),

其功能是找出2xM整型二维数组中最大元素的值,并将此值返回调用

函数。

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

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

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

试题程序:

#defineM4

#include<stdio.h>

intfun(inta[][m])

(

)

voidmain()

(

intarr[2][M]={5,8,3,45,76,-4,12,82);

printf("max=%d\n”,fun(arr));

)

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

结构体数组S中,请编写函数proc(),它的功能是:把分数最高的学生

数据放在h所指的数组中。注意:分数最高的学生可能不止一个,函

数返回分数最高学生的人数。

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

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

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

试题程序:

0tfirludr<■ids.

UdefineM16

rrpedrlttrurf

tHwifttutn[10ji

IIM>4

STREC:

mtpm(STREX'•STREl*-b)

JCTREC

IA002..69)♦(・GA004'<・GA001”・9II・

(•GA007*•72).("GAOOS"・641•<-GAOO«*.S)・

(•GA015*.85).《•GAOU*,»!)*(-GA012-.X»・

r*GA0Ha.9BUMGA0llw.MI.rGA0n*»MI.

(*GAOir.64)t<*GAOir.72Hi

STRECMM。

mei«m

11aBpHX<»tU«h)|

peintfC"TheKdhi.hE*coett\nM«n)i

for<i-0iKm计+》

pnntf(*KtM4d\nt>un»hCi].>>a

,・用■育分学生的学号和虞嫌

27.请编写一个函数voidproc(char*str),其功能是:将字符串str中所有

下标为偶数位置上的字母转化为大写(若该位置上不是字母,则不转换)。

例如,若输入字符串:“thankyou6verymuch”,则应输出:

“TbAnKYoU6vErYMuCh”。注意部分源程序给出如下。请勿改动main

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

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

修includeVcoeio.b>

9includeVsldux.h>

宜includeVmdhRh>

voidpruc<char•

.oidm*in()

ciuif

)i

printf<*Ptc«>emivrancharacterttnnc

wvtlMn$0rli«hM>9*r»s\nM)i

gcts(tt)।

prtatfC*\«\||Afterchancmg«tbr.ft)।

proc<tt)i

prmtfC*\nbccoviKs\n

28.

学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构

体数组s中,请编写函数proc(),它的功能是:函数返回指定学号的学

生数据,指定的序号在主函数中输入。若没找到指定的学号,在结构体

变量中给学号置空串,给成绩置〕作为函数值返回(用于字符串比较

的函数是strcmp)。注意:部分源程序给出如下。请勿改动main()

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

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

UrtirludrVairing,b>

tftclucieVafllidh>

BmckideVadlik.b>

ddt-(in*Ml€

i]rpv<Sr(Mfucl

Ic'tuirnum!10j«

till»i

STR»'»

STRIXpruc(SlREl•■.char•b)

voidmainC)

1・(;Aoo2..e9・{-《;A00』・・B3:・C<;A001..91l・

:*GA0»t7*,72)J-GA00g*・«4・<•GA0O6*<S71・

1F.AOI5..Ail.lT;Ani3・・9l・*GA0ir.Mi.

•<;A0Ue.tll•GAOIT^.MI.

CGA018*.M|.{wGA01S*.72Me

STRECbe

rliarm[lOji

mtH

pntitl<*Thr0r.m*1datai\iB>>i

(or<i*Oit<MII-I*+)

<if(iK4**0)

pnml(M\n*>i

〃■户・山4个学生吐我

pnnvf("K»"3d*num*9ts[iJ.s)i

pnntf<•\B\nEnterthenumber।>><

getn(tn)।

li~pror(

|innl((*Thrdatai*>i

pnnifC*\«K»X4<f\n*«h.aum.k«>•

29.规定输入的字符串中只包含字母和*号。编写函数fun,其功能

是:删除字符串中所有的*号。编写函数时,不得使用C语言提供的字

符串函数。

例如,字符串中的内容为“****A*BC*DEF*G****”,删除后,字符串

中的内容应当是“ABCDEFG”。

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(chara)

(

voidmain

(

chars[81];

print{("Enterastring:\n");

gets(s):

fun(S);

printf("Thestringafterdeleted:\n");

puts(s);

)

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

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

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

数值返回。

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

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

中,把79放在heigh中。

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

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

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

试题程序:

#include<stdio.h>

#defineM16

typedefstruct

(

charnum[10];

ints:

)

STREC;

intproc(STREC*a,STREC*b,int1,inth)

{

)

voidmain

{

STRECstu[M]={{"GA005",55),{"GA003",96},

{"GA002",80),{"GA004",68),

{"GA001",88},{"GA007",74},

{"GA008",85),{"GA006",89},

{"GA015",90),{"GAO13",53),

{"GAO12",66},{"GAO14”,82),

{"GAO11",73},{"GAO17",69),

{"GAO18",64),{"GA016",86}};

STRECh[M];

inti,n,low,heigh,t;

printf("Enter2integernumberlow&

heigh:");

scanf("%d%d",&low,&heigh);

if(heigh<low))

(

t=heigh:

heigh=low;

low=t;

}

n=proc(stu,h,low,heigh);

printf("Thestudent5Sdataout

%d—%d:\n",low,heigh);

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

printf("%S%4d\n",h[i].num,h[i].s);

//输出指定分数范围内的学生记录

printf("\n");

)

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

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

并作为函数值返回。

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

IC.1121231234

-=1+-+-X-+-X-X-+-X-X-X-+…

23353573579

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

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

;finclude<math.h>

2!tinclude<stdio.h>

3idoublefun(doubleeps)

4•{doubles,t;intn-1;

5s-0.0;

6;/**♦<♦****♦♦•found****♦**♦*♦*♦

7t-0;

8while(t>eps)

9{

10t,t*n/(2*n4-l);

11

12)

13…………found…………

14•return(s);

15

16imain()

»

17|{doublex;

18printf(H\nPleaseentera

।precision:");scanf(w%lffcx)

19printf("\neps®%lfr

!Pi-%lf\n\n*rxrfun(x));

20

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

小到大的顺序进行排序。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

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

fun(char*pstr[6])

{inti,j;

char*p;

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

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

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

{if(strcmp(*(pstr+i),pstr+j)>0)

(

p=*(pstr+i);

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

*(pstr+i)-pstr+j;

*(pstr+j)=p;

)

)

main()

{inti;

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

clrscr();

for(i=0;i<6;i++)pstr[i]=str[i];

printf("\nEnter6string(1stringateach

line):\n");

for(i=0;i<6;i++)scanf("%s",pstr[i]);

fun(pstr);

printf("Thestringsaftersorting:\n");

for(i=0;i<6;i++)printf("%s\n",pstr[i]);

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

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

为为60。

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

注意:不要改动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++)

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

ifhigh%j==O

yes=0;

break;

)

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

if(yes==0)

sum+=high;

n++;

}

high-;

returnsum;

)

main()

clrscr();

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

}

34.给定程序MOD11.C中函数fun的功能是:读入一个字符串(长度<

20),将该字符串中的所有字符按ASCII码升序排序后输出。

例如,若输入:edcba,则应输出:abcdeo

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

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

1linclude<stdio.h>

2linclude<string.h>

3voidfun(chart[])

4(

charc;

6inti,j;

7/*♦♦♦♦♦♦***found*♦♦*♦**♦***/

8for(i«strlen(t);i;i--)

9for(j•0;j<i;j++)

10/***w*****wfound********♦♦*/

11if(t[j]<t(j.U)

12(

13c-t(j];

14t[j]-t(j♦11;

15t[j*1]-c;

16

17

18main()

19(

20chars[81];

21printf(w\nPleaseenteracharacter

string:R);

22gets(s);

23printf("\n\nBeforesorting:\n

\W,s);

24fun(s);

25printf(R\nAftersortingdecendingly:

\n\W,s);

26

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

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

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

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

运行结果为-25.333333。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intx[])

(

doublesum=0.0;

intc=0,i=0;

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

while(xfi]==0)

(

if(x[i]<0)

(

sum=sum+x[i];

C++;

)

i++;

}

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

sum=sum\c;

returnsum;

}

main()

(

intxf1000];

inti=0;

clrscr();

printf("\nPleaseentersomedata(endwith

0):”);

do

(

scanf("%d",&xfi]);

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

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

)

36.下列给定程序中,函数fun()的功能是:从3个红球,5个白球,6个

黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,

但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是

15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。

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

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

试题程序:

#include<stdio.h>

intfun()

{inti,j,k,sum=0;

printf("\nTheresult:\n\n");

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

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

{for(j=l;j<=5;j++)

{k=8-i-j;

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

if(k>=l&&k<=6)

{sum=sum+l;

printf("red:%4dwhite:%4d

black:%4d\n",i,j,k);

)

returnsum;

)

main()

{intsum;

sum=fun();

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

)

37.下列给定程序中,函数fun()的功能是:从字符串s中,删除所有小

写字母七,。

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

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

试题程序:

#include<stdio.h>

voidfun(char*s)

{inti,j;

for(i=j=0;s[i]!='\0';i++)

if(sill!二c)

sU]=s[i];

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

s[i]='\0';

)

main()

{chars[80];

printf("\nEnterastring:");

gets(s);

printf("Theoriginalstring:")

puts(s);

fun(s);

printf("Thestringafterdeleted:");

puts(s);printf("\n\n"):

38.给定程序MODH.C中函数fun的功能是:求整数x的y次方的低

3位值。例如,整数5的6次方为15625,此值的低3位值为625。

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

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

1linclude<stdio.h>

2longfun(intxrintyrlong*p)

3{inti;

4longt«l;

5/★•••・•★••★★••found*************/

6for(i-1;i<y;i++)

7

8*p-t;

9/…………*found…………•/

10t-t/1000;

11returnt;

12}

13main()

14{longr;intxry;

15printf(w\nlnputxandy:n);

Hw

scanf(%ld%ld/&x,&y);

16t«fun(xryr&r);

w

17printf(\n\nx«%d/y-%drr»%ld,

w

last«%ld\n\nfxry,r,t);

18

39.下列给定程序中,函数fun()的功能是读入一个字符串(长度<20),

将该字符串中的所有字符按ASCII码降序排序后输出。

例如:输入daflic,则应输出hfdca0

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

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

intfun(chart[l)

charc;

inti,j;

for(i=0;i<strlen(t)-l;i++)

for(j=i+l;i<strlen(t);j++)

if(t[i]<t[j])

(

c=tU];

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

t[i]=t[i++];

t[i]=c;

)

)

main()

{

chars[81];

clrscr();

printf("\nPleaseenteracharacter

string:");

gets(s);

printf("\n\nBeforesorting:\n%S",s);

fun(s);

printf("\nAftersortingdecendingly:\n

%s",s);

)

40.下列给定程序中,函数fun()的功能是:在字符串str中找出ASCII

码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后

顺序移动。例如,调用fun()函数之前给字符串输入ABCDeFGH,调用

后字符串中的内容为eABCDFGHo

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

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

试题程序:

#include<stdio.h>

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

fun(char*p)

{charmax,*q;inti=0;

max=p[i];

while(p[i]!=0)

{if(max<p[i])

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

p=q+i;max=p[i];

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

while(q<p)

{*q=*(q-l);

q-;

)

p[0]=max;

)

main()

{charstr[80];

printf("Enterastring:");gets(str);

printf("\nTheoriginalstring:");

puts(str);

fun(str);

printf("\nThestringaftermoving:");

puts(str);printf("\n\n");

)

五、程序改错题(2题)

41.

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

中第n项的值。从第1项起,斐波拉契数列为:1,1,2,3,5,8,13,

21,...例如,若给n输入7,则该项的斐波拉契数值为13。请改正程

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

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

includrVudio.

fung>

/f••••••••

(g>।

CBMOtreturn0i

//••••found••••

d1icase2imurnIi

I

rvvum(funCg*I)+

vendmam()

longfibimin(

pnnM(*lnput

sKd*•&-!!)i

pnntf(*n-Kd\n*•n>«

(ib*fun(n)t

pnotfC*(ib=Md\n\ae«fib)i

42.

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

小到大的顺序进行排序。请修改程序中的错误,使它能得到正确结果。

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

构。试题程序:

9mcltMfk*

WincludeVzdlhh>

0mclucir<EMO.h>

9includrV>tdto«h>

defineMAX20

midchar•

mtt.ii

<*haf♦pi

(or。-I•1<・"++»

//••••(<Mind••••

i“3rrmp(

p・•<p•”+i>i

•<pMr*♦"1>—•(pstr^pi

//••••found••••

•(p»trA•pi

)

vuedBMNI<>

iniii

char•][MAX]i

*CLS*>i

lor<K>3i<6ii++)

prwifK*\nfZater6Mrmg"«cnncateachhne>i\

fori|H0iiV6,i+♦)

•山])[

prodp)i

pnnl{(aTbrwiring*ahrrtaninfAn*)1

lDt<i-0.y,—+4)

pnnif(wK»\n*«!>[•])i

六、操作题(2题)

43.请补充main函数,该函数的功能是输入两个正整数numl和num2,

求这两个数的最大公约和最小公倍数。

例如,若输入的两个正整数为12,4,则它们的最大公约数为12,最小

公倍数为4。

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

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

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

试题程序:

#include<stdlib.h>

#include<stdio.h>

voidmain

{

inta,b,numl,num2,t;

system("CLS"):

printf("\nlnputtwonumbers:\n");

scanf("%d,%d",&numl,&num2);

if(numl<num2)

(

a=num2;

b=numl:

}

else

(

a=numl;

b=num2;

while([1])

t=[2]

a=b;

b=t:

)

printff'greatestcommondivisor:

%d\n",a);

printf("leastcommonmultiple:

%d\n",[3];

)

44.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a

结构体数组中。请编写函数fun(),该函数的功能是;找出成绩最高的

学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的

首部,请完成该函数。

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

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

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

试题程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定义结构体*/

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

main()

(

STUa[N]={{"A01",81},{"A02",89},

{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61),

{"A09",80},{"A10",71}},m;

inti;

clrscr();

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

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

printf("No=%sMark=%d\n",a[i].hum,

a[i].s);

fun(a,&m);

printf("*****THERESULT*****W');

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

)

参考答案

1.252137252137解析:本题中先定义了整型变量a、b和c,然后分

别给赋值a为25,b为八进制的025,c为十六进制0x25。然后调用

pruntf()函数将a、b和c分别用十进制输出,且中间用空格隔开,八进

制025转换为十进制的值为21,十六进制的0x25转换为十进制的值为

37,故最后的输出结果为252137。

2.HowdoessheHowdoesshe解析:strcpy(strl,sl):字符串拷贝函数,作

用是将字符串si拷贝到字符数组strl中去。strlen(str):测试字符串str的

长度,函数的值为字符串中实际长度,不包括'\\0'在内。本题中strlen(str

1)的值为13,则strcpy(strl+strlen(strl)/2'esshe')相当于strcpy(strl+6'esshe');,

因此可得答案为Howdoessheo

3.i++或++istr[j-l]str[j-l]=mi++或++i\r\nstr[j-1]\r\nstr[j-l]=m解析:字

符中逆序存放的算法是:将字符串中的第i个字符和第strlen(str)-i个字

符交换。然后交换字符串中第i+1个字符和第(strlen(str)-i)-l个字符,故

循环变量i的值应改变,且步长为1,所以[18]处应填i++;读程序可知,

循环中通过中间变量m交换字符串中的第i个字符和第strlen(str)-i个字

符,所以题中第一、二处应分别填写str[j-l]=mo

4.getchargetchar解析:考查了字符可以作为整型变量来对待,参与操作。

题中要求根据输入的字符调用函数YesNo来判断输入的字符是y(Y)还

是n(N),字符的输入可用字符输入函数getchar。函数YesNo用来判断一

个字符是y(Y)还是n(N),主要用了一个switch多分支结构来比较输入字

符与字符\ue008V,\ue009Y、,H,N是否相等来实现的。

5.输出输出解析:测试用例曲测试输入数据(输入值集)和与之对应的预

期输出结果(输出值集)两部分组成。

6.246

7.00解析:三目运算符的形式为(表达式1)?(表达式2):(表达式3)。当

(表达式1)值为真时,返回(表达式2)的值;为假时,返回(表达式3)的

值。题中因为x>12为假,所以结果为x-12,即为0。

8.1616解析:满二叉树的叶子结点都在最后一层,即第4层,且第4层

的结点达到最大数,即25-1=16。

9.28

10.1030010300解析:本题的scanf()函数要求用户输入三个十进制整

数,但只接受第一和第三个到函数的第二和第三个参数所指的内存地址

中。所以本题的输出为:10300。

11.D

12.D

13.C

14.B

对于题干中的宏,替换如下:Sl(a+b,a+b),&+1>)等价于a+b*a+b,

即2+5*2+5,等于17;Sl(a+b,b+a),等价于a+b*b+a,即2+5*5+2,

等于29;S2(a+b,a+b)等价于(a+b)*(a+b),即(2+5)*(2+5),等于

49;S2(a+b,b+a)等价于(a+b)*(b+a),即(2+5)*(5+2),等于49。本题答

案为B选项。

15.B

在用静态static与外部extern定义变量时,系统立刻给其分配内存,而

定义自动类auto与强制放入寄存器register类型变量时,只有当使用时

才分配内存。

16.C

17.B

18.A

函数指针的定义格式为函数类型(*指针变量名)(形参列表);函数名和

数组名一样代表了函数代码的首地址,因此在赋值时,直接将函数指

针指向函数名就行了。所以选项A正确。

19.A第1次调用为m=f(f(f(l))),第2次调用为m=f(f(2)),第3次调用

为m=f(4),即返回值为8O故本题答案为A选项。

20.B

21.longfun(char*s)

).

intijen;

Longsum=0;

len=strlen(s);

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

(

sum=sum*10+*s-'0'

s++;

)

retumsum;

)

<len;i++)

要把一个数字字符转为相应的数字,只要将它的ASCII值减去48(或

D1)即可。要把数字字符串转为相应的数字,则要从左到右依次取出字

符转为相应数字,乘10再加上下一位数字。</len;i++)

22.voidfun(inta,intb,long*c)

(

/*b%10获取b的个位数,a/10获取a的十位数,a%10获取a的个位

数,b/10获取b的十位数*/

*c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;

)

本题主要考核如何取出变量a和b的个位数和十位数,取出后如何将其

表示成c中相应的位数。由于变量a和b都是只有两位的整数,因此分

别对它们除以1。可得到它们的十位数,分别用1。对它们求余可得到它

们的个位数。将得到的数对应乘以100。、100、10、1,即可得到c的千

位数、百位数、十位数、个位数。注意使用变量c时要进行指针运算。

23.

【解析】要计算n门课程的平均分,首先可以求得n门课程的总分,然

后除以n得到其平均分,最后将其平均分返回到主函数中。

24.voidfun(char*s,chart[])

(

inti,j=0,n;

n=strlen(s);

for(i=0;i<=""p="">

if((i%2)&&(s[i]%2))

(

t[j++]=s[i];/*将下标为奇数同时ASCII值为奇数的字符放入数组

t中*/

)

t[j]=t\O,;/*最后加上字符串结束标志*/

)

本题要求保留下标为奇数同时ASCII值也为奇数的字符,其余的所有字

符都删除。将s字符串中,满足条件的字符存放到字符串t中。if的条

件表达式为:if(i%2!=0&&s[i]%2!=0)o

25.intfun(inta[l[m])

{

inti,j,max=a[0][01;

/*对二维数组进行遍历*/

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

for(j=0;j<=""p="">

if(max<a[i][j])<p=""x/a[i][j])<>

/*将最大值保存在max中*/

max=a[i]fjl;

returnmax;

因为数组是二维数组,所以应使用两层for循环嵌套。使用for循环语

句时需注意循环变量的取值范围。

此类求最大值或最小值的问题,可以采用逐个比较的方式。遍历数组

中所有元素,从中找出数组的最大值或最小值。首先定义变量max来

存放数组的第1个元素的值,然后利用for循环逐个找出数组中的元

素,并与变量max比较。如果元素值大于max,则将该值赋给max。

循环结束后max的值即为数组最大值。最后将该值返回。

该类题目考查较多,需要掌握逐个比较的方法。对于m*n二维数组,

采用逐个查找的方法,代码实现如下:

for(i=0;i<=""p="">

for(j=0;j<=""p="">

26.

mtpror<STREt,•・・STREC•

Mi二IC分It■鼻的

第■■中

iorO-OiYMoi*♦)

分••周

・争牛■■不止一个

rrturn〃

【解析】要得到分数最高的学生数据,首先应检查每一个学生的数

据,得到学生的最高成绩。成绩最高的学生不止一个,将每一个学生

的成绩与最高成绩相比较,得出最高成绩学生的个数,将成绩最高的

学生记录放在指定数组中通过形参返回。成绩最高的学生个数由函数

值返回给主函数。

27.

【解析】要将字符串str中下标为偶数位置上的字符转化为大写字母,

首先应该判断字符串str中下标为偶数位置上的字符是否为小写字母,

若是将其转化为大写字母.若不是不做任何变化。

28.

【解析】首先将一个STREC结构的变量学号赋值为空,成绩为-1。要

返回指定学生的数据,应该将每一个学生的学号与给定的学生学号相比

较。若有相同的,则把其数据返回给主函数。如果没有该学号的学生,

就将定义的学号为空,成绩为-1的记录返回给主函数。

29.\n\tvoidfun(char*a)

\n{

\ninti,j=0;

\nfor(i=0;a[i]!=\0;i++)

\nif(a[i]!=*)

\na[j++]=a[i];//若不是要删除的字符*则保留

\na[j]=\0;//最后加上字符串结束符\0

\n}

\n【解析】此题是删除字符串中的星号。思路是通过for循环完成对字

符串的遍历,通过if判断,找到不是“*”的字符,将其赋值到数组a中

星号前的位置,“if(a[i]!=*)”“a[i++]=a[i『,最后返回主函数将删除*后

的字符串输出即可。\n

3O.\n\tintproc(STREC*a,STREC*b,inti,inth)\n

\n

\n\t{\n

\n

\n\tinti,j=0;\n

\n

\n\tfor(i=0;i<M;i++)\n

\n

\n\tif((a[i].s>=0&&a[i].s<l)||(a[i].s>h&&a\n

\n

\n\t[i].s<=100))//通过if语句,来判断指定范围3

\n

\n\t之外的数5

\n

\n\tb[j++]=a[i];//放到b数组中\n

\n

\n\treturnj;//最后把其个数返回到主函数中\n

\n

\n\t}\n

\n

\n\t【解析】题目要求把指定范围之外的数放到b

温馨提示

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

评论

0/150

提交评论