2023年江西省九江市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第1頁
2023年江西省九江市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第2頁
2023年江西省九江市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第3頁
2023年江西省九江市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第4頁
2023年江西省九江市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

2023年江西省九江市全國計算機等級考試

C語言程序設(shè)計模擬考試(含答案)

學(xué)校:班級:姓名:考號:

一、2.填空題(10題)

1.以下程序運行后的輸出結(jié)果是_____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.以下函數(shù)inverse的功能是使一個字符串按逆序存放,請?zhí)羁铡?/p>

inverse(charstrf])

{charm;

inti,j;

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

{m=str[i];

str[i]=[];

【】;

4.以下程序的功能是根據(jù)輸入的"y"("Y")與“n"("N"),在屏幕上分別顯示

出"ThisisYES."與"ThisisNO."o空白處需要填入的內(nèi)容是

#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.以下程序的輸出結(jié)果是____o

voidfun()

{staticinta=0;

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

)

main()

{intcc;

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

printf("\n");

7.若運行時給變量x輸入12,則以下程序的運行結(jié)果是【】;

main(){

intx,y;

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

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

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

}

8.深度為5的滿二叉樹中,葉子結(jié)點的個數(shù)為o

9.設(shè)a、b、c為整形數(shù),且a=2,b=3,c=4則執(zhí)行完以下語句后,a

的值是【】。

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

10.以下程序運行時若從鍵盤輸入102030〈回車>。輸出結(jié)果是【】。

#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)設(shè)有表示學(xué)生選課的三張表,學(xué)生表(學(xué)號,姓名,性別),課程表(課程號,課程名),

選課成績衣(學(xué)號,課程號,成績),則選課成績表的關(guān)鍵字為().

A)課程號,成績,B)學(xué)號,成績

C)學(xué)號,課程號D)學(xué)號,課程號,成績

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

程序執(zhí)行后的輸出結(jié)果是()。

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

49

15.以下只有在使用時才為該類型變量分配內(nèi)存的存儲類型說明是()。

A.auto和static

B.auto和register

C.register和static

D.extern和register

16.順序結(jié)構(gòu)的本質(zhì)特點是()。

A.數(shù)據(jù)元素存儲在地址連續(xù)的內(nèi)存空間

B.數(shù)據(jù)元素緊鄰

C.數(shù)據(jù)元素在內(nèi)存中的相對位置表示數(shù)據(jù)之間的邏輯關(guān)系

D.不使用指針

17.

(32)以下程序的輸出結(jié)果是().

#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.設(shè)有以下函數(shù):voidfun(intn,char*s){...}則下面對函數(shù)指針的定

義和賦值均正確的是()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;

)

程序的運行結(jié)果是()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);}

三、程序設(shè)計題(10題)

21.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方

案的項目中包含一個源程序文件progl.c。在此程序中,請編寫函數(shù)

fun(),其功能是將一個數(shù)字字符串轉(zhuǎn)換成與其面值相同的長整型整數(shù)。

可調(diào)用strlen函數(shù)求字符串的長度。例如,在鍵盤輸入字符串2345210,

函數(shù)返回長整型整數(shù)2345210。注意:部分源程序存放在文件progl.c

中,請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()

指定的部位填入所編寫的若干語句。試題程序:

?include<stdio.h>

2#include<string.h>

3voidNONO();

4longfun(char*s)

5

7}

8main()

{chars[10];longr;

10printf("請輸入一個長度不超過9

個字符的數(shù)字字符串:?);

11gets(s);

12r=fun(s);

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

■14)NONO();

16voidNONO()

17{/*本函數(shù)用于打開文件、輸入數(shù)據(jù)、調(diào)

用函數(shù)、榆出數(shù)據(jù)及關(guān)閉文件*/

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。在此程序中,編寫函數(shù)fun(),

其功能是將a、b兩個兩位正整數(shù)合并成一個新的整數(shù)放在c中。合并

的方式是將a中的十位數(shù)和個位數(shù)依次放在變量c的百位和個位上,b

中的十位數(shù)和個位數(shù)依次放在變量c的千位和十位上。

例如,當(dāng)a=45,b=12,調(diào)用該函數(shù)后c=1425。

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

請勿改動主函數(shù)main。和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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.請編寫函數(shù)proc(),該函數(shù)的功能是:計算n門課程的平均分,計

算結(jié)果作為函數(shù)值返回。例如,有6門課程的成績是90.5,72,80,

61.5,55,60,則函數(shù)的值為69.830注意:部分源程序給出如下。

請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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在此程序中,編寫函數(shù)fun(),

其功能是將s所指字符串中除了下標(biāo)為奇數(shù)同時ASCII值也為奇數(shù)的字

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

符串存放在t所指的數(shù)組中。

例如,若s所指字符串的內(nèi)容為“ABCDEFG12345",其中字符A的

ASCII值為奇數(shù),但所在元素的下標(biāo)為偶數(shù),因此需要刪除;而字符1

的ASCII值為奇數(shù),所在數(shù)組中的下標(biāo)也為奇數(shù),因此不應(yīng)當(dāng)刪除,

其他依此類推。最后t所指數(shù)組中的內(nèi)容應(yīng)為“135”。

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

請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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在此程序中,請編寫函數(shù)fun(),

其功能是找出2xM整型二維數(shù)組中最大元素的值,并將此值返回調(diào)用

函數(shù)。

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

請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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.學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入

結(jié)構(gòu)體數(shù)組S中,請編寫函數(shù)proc(),它的功能是:把分?jǐn)?shù)最高的學(xué)生

數(shù)據(jù)放在h所指的數(shù)組中。注意:分?jǐn)?shù)最高的學(xué)生可能不止一個,函

數(shù)返回分?jǐn)?shù)最高學(xué)生的人數(shù)。

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

請勿改動main。函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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

,?用■育分學(xué)生的學(xué)號和虞嫌

27.請編寫一個函數(shù)voidproc(char*str),其功能是:將字符串str中所有

下標(biāo)為偶數(shù)位置上的字母轉(zhuǎn)化為大寫(若該位置上不是字母,則不轉(zhuǎn)換)。

例如,若輸入字符串:“thankyou6verymuch”,則應(yīng)輸出:

“TbAnKYoU6vErYMuCh”。注意部分源程序給出如下。請勿改動main

()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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.

學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)

體數(shù)組s中,請編寫函數(shù)proc(),它的功能是:函數(shù)返回指定學(xué)號的學(xué)

生數(shù)據(jù),指定的序號在主函數(shù)中輸入。若沒找到指定的學(xué)號,在結(jié)構(gòu)體

變量中給學(xué)號置空串,給成績置〕作為函數(shù)值返回(用于字符串比較

的函數(shù)是strcmp)。注意:部分源程序給出如下。請勿改動main()

函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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個學(xué)生吐我

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.規(guī)定輸入的字符串中只包含字母和*號。編寫函數(shù)fun,其功能

是:刪除字符串中所有的*號。編寫函數(shù)時,不得使用C語言提供的字

符串函數(shù)。

例如,字符串中的內(nèi)容為“****A*BC*DEF*G****”,刪除后,字符串

中的內(nèi)容應(yīng)當(dāng)是“ABCDEFG”。

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

請勿改動maini)函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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.學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放

人結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc,它的功能是:把指定分?jǐn)?shù)范圍

之外的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,分?jǐn)?shù)范圍之外的學(xué)生人數(shù)由函

數(shù)值返回。

例如,輸入的分?jǐn)?shù)是70和79,則應(yīng)當(dāng)把分?jǐn)?shù)低于70和高于79的學(xué)生

數(shù)據(jù)輸出,不包含70分和79分的學(xué)生數(shù)據(jù)。主函數(shù)中把70放在low

中,把79放在heigh中。

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

請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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);

//輸出指定分?jǐn)?shù)范圍內(nèi)的學(xué)生記錄

printf("\n");

)

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

31.給定程序MOD11.C中函數(shù)fun的功能是:根據(jù)以下公式求兀值,

并作為函數(shù)值返回。

例如,給指定精度的變量eps輸入0.0005時,應(yīng)當(dāng)輸出Pi=3.141480°

IC.1121231234

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

23353573579

請改正程序中的錯誤,使它能得出正確結(jié)果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

;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.下列給定程序中,函數(shù)fun()的功能是:用冒泡法對6個字符串按由

小到大的順序進行排序。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).

試題程序:

#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.下列給定程序中,函數(shù)fun()的功能是計算并輸出high以內(nèi)的素數(shù)

之和。high由主函數(shù)傳給fun()函數(shù)。若high的值為100,則函數(shù)的值

為為60。

請改正程序中的錯誤,使它能得到正確結(jié)果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#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中函數(shù)fun的功能是:讀入一個字符串(長度<

20),將該字符串中的所有字符按ASCII碼升序排序后輸出。

例如,若輸入:edcba,則應(yīng)輸出:abcdeo

請改正程序中的錯誤,使它能統(tǒng)計出正確的結(jié)果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

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.在主函數(shù)中從鍵盤輸入若干個數(shù)放入數(shù)組中,用0結(jié)束輸入并放在

最后一個元素中。下列給定程序中,函數(shù)fun()的功能是計算數(shù)組元素中

值為負(fù)數(shù)的平均值(不包括0)。

例如:數(shù)組中元素的值依次為43,47,-21,53,-8,12,0,則程序的

運行結(jié)果為-25.333333。

請改正程序中的錯誤,使它能得到正確結(jié)果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#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.下列給定程序中,函數(shù)fun()的功能是:從3個紅球,5個白球,6個

黑球中任意取出8個作為一組,進行輸出。在每組中,可以沒有黑球,

但必須要有紅球和白球。組合數(shù)作為函數(shù)值返回。正確的組合數(shù)應(yīng)該是

15。程序中i的值代表紅球數(shù),j的值代表白球數(shù),k的值代表黑球數(shù)。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注童:不要改動main函數(shù),不得增行或刪行,也不得更改程序的蛀構(gòu)。

試題程序:

#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.下列給定程序中,函數(shù)fun()的功能是:從字符串s中,刪除所有小

寫字母七,。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).

試題程序:

#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中函數(shù)fun的功能是:求整數(shù)x的y次方的低

3位值。例如,整數(shù)5的6次方為15625,此值的低3位值為625。

請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

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.下列給定程序中,函數(shù)fun()的功能是讀入一個字符串(長度<20),

將該字符串中的所有字符按ASCII碼降序排序后輸出。

例如:輸入daflic,則應(yīng)輸出hfdca0

請改正程序中的錯誤,使它能得到正確結(jié)果。

注意:不要改動main函數(shù),不得增行或刪行,敢不得更改程序的結(jié)構(gòu)。

試題程序:

#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.下列給定程序中,函數(shù)fun()的功能是:在字符串str中找出ASCII

碼值最大的字符,將其放在第一個位置上,并將該字符前的原字符向后

順序移動。例如,調(diào)用fun()函數(shù)之前給字符串輸入ABCDeFGH,調(diào)用

后字符串中的內(nèi)容為eABCDFGHo

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#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.

下列給定程序中函數(shù)fun()的功能是:用遞歸算法計算斐波拉契數(shù)列

中第n項的值。從第1項起,斐波拉契數(shù)列為:1,1,2,3,5,8,13,

21,...例如,若給n輸入7,則該項的斐波拉契數(shù)值為13。請改正程

序中的錯誤,使它能得出正確結(jié)果。注意:不要改動main()函數(shù),

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:

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.

下列給定程序中,函數(shù)proc()的功能是:用冒泡法對6個字符串按由

小到大的順序進行排序。請修改程序中的錯誤,使它能得到正確結(jié)果。

注意:不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)

構(gòu)。試題程序:

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函數(shù),該函數(shù)的功能是輸入兩個正整數(shù)numl和num2,

求這兩個數(shù)的最大公約和最小公倍數(shù)。

例如,若輸入的兩個正整數(shù)為12,4,則它們的最大公約數(shù)為12,最小

公倍數(shù)為4。

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

請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上

填人所編寫的若干表達式或語句。

試題程序:

#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.已知學(xué)生的記錄由學(xué)號和學(xué)習(xí)成績構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a

結(jié)構(gòu)體數(shù)組中。請編寫函數(shù)fun(),該函數(shù)的功能是;找出成績最高的

學(xué)生記錄,通過形參返回主函數(shù)(規(guī)定只有一個最高分)。已給出函數(shù)的

首部,請完成該函數(shù)。

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

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括

號中填入所編寫的若干語句。

試題程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定義結(jié)構(gòu)體*/

{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。然后調(diào)用

pruntf()函數(shù)將a、b和c分別用十進制輸出,且中間用空格隔開,八進

制025轉(zhuǎn)換為十進制的值為21,十六進制的0x25轉(zhuǎn)換為十進制的值為

37,故最后的輸出結(jié)果為252137。

2.HowdoessheHowdoesshe解析:strcpy(strl,sl):字符串拷貝函數(shù),作

用是將字符串si拷貝到字符數(shù)組strl中去。strlen(str):測試字符串str的

長度,函數(shù)的值為字符串中實際長度,不包括'\\0'在內(nèi)。本題中strlen(str

1)的值為13,則strcpy(strl+strlen(strl)/2'esshe')相當(dāng)于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個字符,故

循環(huán)變量i的值應(yīng)改變,且步長為1,所以[18]處應(yīng)填i++;讀程序可知,

循環(huán)中通過中間變量m交換字符串中的第i個字符和第strlen(str)-i個字

符,所以題中第一、二處應(yīng)分別填寫str[j-l]=mo

4.getchargetchar解析:考查了字符可以作為整型變量來對待,參與操作。

題中要求根據(jù)輸入的字符調(diào)用函數(shù)YesNo來判斷輸入的字符是y(Y)還

是n(N),字符的輸入可用字符輸入函數(shù)getchar。函數(shù)YesNo用來判斷一

個字符是y(Y)還是n(N),主要用了一個switch多分支結(jié)構(gòu)來比較輸入字

符與字符\ue008V,\ue009Y、,H,N是否相等來實現(xiàn)的。

5.輸出輸出解析:測試用例曲測試輸入數(shù)據(jù)(輸入值集)和與之對應(yīng)的預(yù)

期輸出結(jié)果(輸出值集)兩部分組成。

6.246

7.00解析:三目運算符的形式為(表達式1)?(表達式2):(表達式3)。當(dāng)

(表達式1)值為真時,返回(表達式2)的值;為假時,返回(表達式3)的

值。題中因為x>12為假,所以結(jié)果為x-12,即為0。

8.1616解析:滿二叉樹的葉子結(jié)點都在最后一層,即第4層,且第4層

的結(jié)點達到最大數(shù),即25-1=16。

9.28

10.1030010300解析:本題的scanf()函數(shù)要求用戶輸入三個十進制整

數(shù),但只接受第一和第三個到函數(shù)的第二和第三個參數(shù)所指的內(nèi)存地址

中。所以本題的輸出為: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

在用靜態(tài)static與外部extern定義變量時,系統(tǒng)立刻給其分配內(nèi)存,而

定義自動類auto與強制放入寄存器register類型變量時,只有當(dāng)使用時

才分配內(nèi)存。

16.C

17.B

18.A

函數(shù)指針的定義格式為函數(shù)類型(*指針變量名)(形參列表);函數(shù)名和

數(shù)組名一樣代表了函數(shù)代碼的首地址,因此在賦值時,直接將函數(shù)指

針指向函數(shù)名就行了。所以選項A正確。

19.A第1次調(diào)用為m=f(f(f(l))),第2次調(diào)用為m=f(f(2)),第3次調(diào)用

為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++)

要把一個數(shù)字字符轉(zhuǎn)為相應(yīng)的數(shù)字,只要將它的ASCII值減去48(或

D1)即可。要把數(shù)字字符串轉(zhuǎn)為相應(yīng)的數(shù)字,則要從左到右依次取出字

符轉(zhuǎn)為相應(yīng)數(shù)字,乘10再加上下一位數(shù)字。</len;i++)

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

(

/*b%10獲取b的個位數(shù),a/10獲取a的十位數(shù),a%10獲取a的個位

數(shù),b/10獲取b的十位數(shù)*/

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

)

本題主要考核如何取出變量a和b的個位數(shù)和十位數(shù),取出后如何將其

表示成c中相應(yīng)的位數(shù)。由于變量a和b都是只有兩位的整數(shù),因此分

別對它們除以1??傻玫剿鼈兊氖粩?shù),分別用1。對它們求余可得到它

們的個位數(shù)。將得到的數(shù)對應(yīng)乘以100。、100、10、1,即可得到c的千

位數(shù)、百位數(shù)、十位數(shù)、個位數(shù)。注意使用變量c時要進行指針運算。

23.

【解析】要計算n門課程的平均分,首先可以求得n門課程的總分,然

后除以n得到其平均分,最后將其平均分返回到主函數(shù)中。

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];/*將下標(biāo)為奇數(shù)同時ASCII值為奇數(shù)的字符放入數(shù)組

t中*/

)

t[j]=t\O,;/*最后加上字符串結(jié)束標(biāo)志*/

)

本題要求保留下標(biāo)為奇數(shù)同時ASCII值也為奇數(shù)的字符,其余的所有字

符都刪除。將s字符串中,滿足條件的字符存放到字符串t中。if的條

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

25.intfun(inta[l[m])

{

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

/*對二維數(shù)組進行遍歷*/

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;

因為數(shù)組是二維數(shù)組,所以應(yīng)使用兩層for循環(huán)嵌套。使用for循環(huán)語

句時需注意循環(huán)變量的取值范圍。

此類求最大值或最小值的問題,可以采用逐個比較的方式。遍歷數(shù)組

中所有元素,從中找出數(shù)組的最大值或最小值。首先定義變量max來

存放數(shù)組的第1個元素的值,然后利用for循環(huán)逐個找出數(shù)組中的元

素,并與變量max比較。如果元素值大于max,則將該值賦給max。

循環(huán)結(jié)束后max的值即為數(shù)組最大值。最后將該值返回。

該類題目考查較多,需要掌握逐個比較的方法。對于m*n二維數(shù)組,

采用逐個查找的方法,代碼實現(xiàn)如下:

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

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

26.

mtpror<STREt,???STREC?

Mi二IC分It■鼻的

第■■中

iorO-OiYMoi*?)

分??周

?爭?!觥霾恢挂粋€

rrturn〃

【解析】要得到分?jǐn)?shù)最高的學(xué)生數(shù)據(jù),首先應(yīng)檢查每一個學(xué)生的數(shù)

據(jù),得到學(xué)生的最高成績。成績最高的學(xué)生不止一個,將每一個學(xué)生

的成績與最高成績相比較,得出最高成績學(xué)生的個數(shù),將成績最高的

學(xué)生記錄放在指定數(shù)組中通過形參返回。成績最高的學(xué)生個數(shù)由函數(shù)

值返回給主函數(shù)。

27.

【解析】要將字符串str中下標(biāo)為偶數(shù)位置上的字符轉(zhuǎn)化為大寫字母,

首先應(yīng)該判斷字符串str中下標(biāo)為偶數(shù)位置上的字符是否為小寫字母,

若是將其轉(zhuǎn)化為大寫字母.若不是不做任何變化。

28.

【解析】首先將一個STREC結(jié)構(gòu)的變量學(xué)號賦值為空,成績?yōu)?1。要

返回指定學(xué)生的數(shù)據(jù),應(yīng)該將每一個學(xué)生的學(xué)號與給定的學(xué)生學(xué)號相比

較。若有相同的,則把其數(shù)據(jù)返回給主函數(shù)。如果沒有該學(xué)號的學(xué)生,

就將定義的學(xué)號為空,成績?yōu)?1的記錄返回給主函數(shù)。

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;//最后加上字符串結(jié)束符\0

\n}

\n【解析】此題是刪除字符串中的星號。思路是通過for循環(huán)完成對字

符串的遍歷,通過if判斷,找到不是“*”的字符,將其賦值到數(shù)組a中

星號前的位置,“if(a[i]!=*)”“a[i++]=a[i『,最后返回主函數(shù)將刪除*后

的字符串輸出即可。\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之外的數(shù)5

\n

\n\tb[j++]=a[i];//放到b數(shù)組中\(zhòng)n

\n

\n\treturnj;//最后把其個數(shù)返回到主函數(shù)中\(zhòng)n

\n

\n\t}\n

\n

\n\t【解析】題目要求把指定范圍之外的數(shù)放到b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論