2023年遼寧省丹東市全國計算機(jī)等級考試C語言程序設(shè)計測試卷(含答案)_第1頁
2023年遼寧省丹東市全國計算機(jī)等級考試C語言程序設(shè)計測試卷(含答案)_第2頁
2023年遼寧省丹東市全國計算機(jī)等級考試C語言程序設(shè)計測試卷(含答案)_第3頁
2023年遼寧省丹東市全國計算機(jī)等級考試C語言程序設(shè)計測試卷(含答案)_第4頁
2023年遼寧省丹東市全國計算機(jī)等級考試C語言程序設(shè)計測試卷(含答案)_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2023年遼寧省丹東市全國計算機(jī)等級考試

C語言程序設(shè)計測試卷(含答案)

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

一、2.填空題(10題)

1.下面程序的功能是:從輸入的正整數(shù)中選3個數(shù)進(jìn)行輸出,要求這些

數(shù)都是2的倍數(shù),請?zhí)羁铡?/p>

main()

{intaJ=0;

scanf("%dH,&A);

do

{if(a>0&&a%2==0)

{printf(u%d\nM,A);i+-;}

if(i!=3)

{scanf(u%dH,&A);}

}while(());

)

2.下列程序的功能:對輸入的一行字符中的數(shù)字字符的字面值累加,輸

出此累加和,請?zhí)羁铡?/p>

#include<stdio.h>

#include<ctype.h>

main()

{charc;

inta,s=0;

while()

if(isdigit(c))

{a=c-'0';s+=a;}

printf("s=%d';s);

3.以下程序的輸出結(jié)果是【】。

main()

{char*p[]={“BOOL“,“OPK“,”H“,“SP”};

inti;

for(i=3,i>=0;i-,i-)printf(1,%cn,*p[i]);

printf(n\nH);

)

4.下面程序的運(yùn)行結(jié)果是【

voidswap(int*a,int*b)

(

int*tp;

t=a;a=b;b=t;

1

main()

(

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

swap(p,q);

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

)

5.以下程序運(yùn)行后的輸出結(jié)果是()。

#include<stdio.h>

main()

{intx=20;

printf("%d",0<x<20);

printf("%d\nu,0<x&&x<20);

6.有以下程序:

#include<stdio.h>

main()

{intt=l,i=5;

for(;i>=0;i—)t*=i;

printf(n%d\nu,t);

)

執(zhí)行后的輸出結(jié)果是【

7.若輸入字符串:(圖片),則以下while循環(huán)體將執(zhí)行【】次。

while((ch=getchar())=='e')printf("*");

8.若有如下結(jié)構(gòu)體說明:

structSTRU

{inta,b;charc:doubled;

stmctSTRU*p1,*p2;

);

請?zhí)羁眨酝瓿蓪數(shù)組的定義,t數(shù)組的每個元素為該結(jié)構(gòu)體類型。

[]t[20]

9.軟磁盤最外邊的磁道數(shù)是【】號磁道。

10.以下程序運(yùn)行后的輸出結(jié)果是【】

#include<stdio,h>fun(inta)

{intb=0;staticintc=3;

b++;c++;

return(a+b+c);

main()

inti,a=5;

for(i=0;i<3;i++)prinff(n%d%d",i,fun(a));

printf(M\nH);

二、單選題(10題)

11.有如下程序main(){charch⑵[5]={”6937“,“8254”},*p[2];inti,

j,s=0;for(i=0;i<2;++)p[i]=ch[i];for(i=0;i<2;i++)for(j=0;p[i][j]

>'\0';j+=2)s=10*s+p[i]葉O;printf("%d\n\s);}該程序的輸出結(jié)果

A.69825B.63825C.6385D.693825

12.程序調(diào)試的任務(wù)是()。

A.設(shè)計測試用例B.驗證程序的正確性C.發(fā)現(xiàn)程序中的錯誤D.診斷和

改正程序中的錯誤

13.

(2)已知二義樹后序遍歷序列是CDABE,中序遍歷序列是CADEB,看的前序遍歷序列是

().、

A)ABCDEB)ECABDC)EACDBD)CDEAB

14.有以下程序

#include<stdio.h>

intfun(intx,inty)

{if(x==y)return(x);

elsereturn((x+y)/2);

main()

{inta=4,b=5,c=6;

printf("%d\n”,fun(2*a,fun(b,c)));

)

程序運(yùn)行后的輸出結(jié)果是

A.3B.6C.8D.12

15.對十移動平均算法,是計算某變量之前n個數(shù)值的算術(shù)平均,正確的

說法是()

A.空間復(fù)雜度是0(1)B.空間復(fù)雜度是O(n)C.空間復(fù)雜度是O(logn)D.

空間復(fù)雜度是O(nlogn)

16.有以下程序:

#include<stdio.h>

main()

{intb[3][3]=(0,1,2,0,1,2,0,1,2},i,j,t=l;

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

for(j=l;j<=i;j++)t+=b[i][b|j][i]];

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

)

程序運(yùn)行后的輸出結(jié)果是()oA.lB.3C.4D.O

17.有如下程序:

main

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

switch(x)

case0:b++;

case1:a++;

case2:a++.b++;

)

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

}

該程序的輸出結(jié)果是()。

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

18.有以下程序:

#include<stdio.h>

main()

(

inty=9;

for(;y>0;y-)

if(y%3==0)

printfCu%d,,,-y);

}

程序的運(yùn)行結(jié)果是()o

A.852B.963C.741D.875421

19.對長度為n的線性表進(jìn)行順序查找,在最壞情況下需要比較的次數(shù)

為()。

A.125B.n/2C.nD.n+1

20.帶有頭節(jié)點的單向鏈表head,其3個數(shù)據(jù)節(jié)點A、B、C的連接關(guān)

系如下圖所示:

p

headdtnextdtnextdtnext

頭節(jié)點ABC

節(jié)點類型的定義為

structlink

{doubledt;

structlink*next;

};

若指針P指向A節(jié)點,在不改變P指向的前提下,以下選項中不能訪

問C節(jié)點數(shù)據(jù)成員dt的表達(dá)式是()O

A.*(*p).next->next->dt

B.p->next->next->dt

C.(*(*(*p).next),next),dt

D.(*(p->next->next)).dt

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

21.

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

體數(shù)組stu中,請編寫函數(shù)proc(),其功能是:按分?jǐn)?shù)的高低排列學(xué)生

的記錄,高分在前。注意:部分源程序給m如下。請勿改動main()

函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所編

寫的若干語句。試題程序:

&iacludeh>

"MineMII

trtiedrfstruct

chari?uinLIO]i

mt

STRIX,.

vodproc<STREl**])

mti?ji

STRECti

for(i-INVM,++)/,州?立法按從?■IL

樽序?/

Cor(j"Oij<M-)

??4J1?<?[?+H?)/?核》散的昌?梅列伊4

的記*?高分住■?/

)

voidmain<)

STRECMW[M]-<<-GA005".Ml.<*GA003"

7??

(?GA002"<491.<*GAOO4\S5)?LGAOOI.?9I).

(?GAOO7".72ld*GAOO8*.?4).(?GA004".B7I.

<"GAOI$a.tS)?<*GAOI3*?I1)?CGA012M.MI.

CGAOU".9ll.rGAOir.M).CGAO|7".M).

<aGA0l8a.?4h<<GA01C*,7t)li

mtii

pffor(ntw>i

pnntf(aThrdata“1rfnoried>\a'')i

for<i**Oii<Mii++)

〃修行■由4個學(xué)生圮上

printK*\n*)(

pnnt(<<XM%4da?*tu(iXa)(

22.請編寫函數(shù)proc(),它的功能是計算:s=(In(1)4-ln(2)+In(3)

4-…+ln(m))0.5在C語言中可調(diào)用log(n)函數(shù)求In(n)o例如,

若nl的值為30,則proc()函數(shù)值為8.640500o注意:部分源程序

給出如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函

數(shù)proc()的花括號中填入所編寫的若干語句。試題程序:

Uinclu4rVzdlik.h>

9includeVcomo.h>

,includeVtldCh>

includr<OMth.k>

doubleprocCuMm)

)

voednwiatH>

?y?tefn(dS)i

pnntfCaHAn>?proc(30))i

23.

請編寫函數(shù)proc(),該函數(shù)的功能是:將M行N列的二維數(shù)組中的數(shù)

據(jù),按行的順序依次放到一維數(shù)組中,一維數(shù)組中數(shù)據(jù)的個數(shù)存放在形

參n所指的存儲單元中。例如,若二維數(shù)組中的數(shù)據(jù)為:13233343

1424344415253545則一維數(shù)組中的內(nèi)容應(yīng)該是1323334314243444

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

其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所編寫的若

干語句。試題程序:

UincludeV?ididh>

BidprodUM("HM?b.im?n.mtmm.mtnn)

raidmain(>

totarril0][]0]?((33,33.33.33).(44.44.44.44).

{S$.SS.S5.5$H.??ji

ui<?C100]-iO)?n?Oi

e

pnfM?"ThrnMtnxt\n>i

(or<iwOiiOt[+?)

for?>

pnM((*X3J*??rr[iXj]H

pnntfC-Xn")?

pnx<*rr?a?6n?3?4)?

pnnth*ThcAamy.f).

IWO.YIHi*?)

printf<*Yt3d.?*[i])i

pnnth

24.請編一個函數(shù)fun(ohlr*str),該函數(shù)的功能是把字符串中的內(nèi)容逆置。

例如,字符串中原有的字符串為asdf9,則謫用該函數(shù)后,串中的內(nèi)容為

9fdsao

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

中填人所編寫的若干語句。

試題程序:

#include<string.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidfun(char*str)

(

)

voidmain

(

chara[Nl;

FILE*out:

printf(nEnterastring:");

gets(a);

printf("Theorigiralstringis:");

puts(a);

fun(a):

printf("Thestringaftermodified:");

puts(a);

strcpy(a,^Welcome!");

fun(a);

ut=fopen("outfile.dat“,“w");

fprintf(out,n%sH.a);

fclose(out);

}

25.請編寫函數(shù)proc(),該函數(shù)的功能是:計算n門課程的平均分,計

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

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

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

花括號中填入所編寫的若干語句。試題程序:

Sinclude<sfdio.h>

floatproc(float?a.intn>

voidmain()

float?core[30],sx{90.5.72.80.61,5.55.60).

aven

aver?-proc(stcore.6)t

print?"\nAveragescoreis:%5.2(\n".aver)j

26.學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入

結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc(),該函數(shù)的功能是:把高于等于

平均分的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,高于等于平均分的學(xué)生人數(shù)通

過形參n傳回,平均分通過函數(shù)值返回。注意:部分源程序給出如下。

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

花括號中填入所編寫的若干語句。試題程序:

■inclvd*<MAQIIL>

?MMWMU

trpv4e4—

Ichar

40MMe??

)

:TTKKl*i

doubleH?r(FnilX'?a.STItEt'.,■??>

ruwlmaM<)

STRIT???(M]?((*GAOS*.?1.(*GAM*.7?H

1"GAOZ.??、?I?Gg..31?<*GA0l???”?

<,GA07.g.].GAM,M.<*GWM.

(aGA09*.MKI>GAIIe.nu(*GAir.nK

(*GAI0*.90HI

STRECMM」

NMi

dOwMeavet

proH**??!??A?)?

print”,TheS44etawWli.

b.h*r(KMXT.3(?\a*.auw>?

for<??0?Yiu〉

pruM”?%?外,1V?1G1―NJa,

pnntl(

27.請編寫函數(shù)proc,其功能是:將str所指字符串中除下標(biāo)為偶數(shù)、同

時ASCII碼值為奇數(shù)的字符外,其余的字符都刪除,串中剩余字符所形

成的一個新串放在t所指的數(shù)組中。例如,若str所指字符串中的內(nèi)容為

ABCDEFG12345,其中字符B的ASCII碼值為偶數(shù),所在元素的下標(biāo)為

奇數(shù),因此必須刪除;而字符A的ASCII碼值為奇數(shù),所在數(shù)組中的下

標(biāo)為偶數(shù),因此不應(yīng)當(dāng)刪除。依此類推,最后t所指的數(shù)組中的內(nèi)容應(yīng)

是ACEGO

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

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

中填人所寫的若干語句。

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidproc(char*str,chart[])

(

}

voidmain

(

charstr[1001,t[100];

system(nCLS");

printf("\nPleaseenterstringstr:n);

scanf(n%Sn,str);

proc(str,t);

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

28.…請編寫函數(shù)。fun能是:判斷形參n中的正整數(shù)是幾位數(shù)(輸入數(shù)

據(jù)的位數(shù)不超過4位),并將結(jié)果通過函數(shù)值返回。例如:若輸入的數(shù)

據(jù)為123,則輸出結(jié)果為:輸入的數(shù)字是3位。注意:部分源程序存在

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

數(shù)fun的花括號中填入所縮寫的若干語句。試題程

?include<stdio.h>

voidNONOO;

intfun(intn)

main()

{intn,place;

do{

printf("請輸入一個4位以內(nèi)的正整數(shù):");

scanf("id1,,&n);

>while(n<0IIn>9999);

place=fun(n);

printf(1"愉人的數(shù)字是1d位\n**,place);

NONOO;

)

voidNONOO

</?本語數(shù)用于打開文件,帖人數(shù)據(jù),調(diào)用語數(shù),輸出數(shù)物,關(guān)閉文件。?/

FILE?fp,?wf;

inti,n,place;

fp-fopen("c:\test\in.dat","r");

wf-fopen("c:\fcest>put.datH,"w");

for(1-0;i<10;i*4)

(

fscanf(fp,"W",(n);

place-fun(n);

fprintf(wf,"W\n",place);

i

fclose(fp);

fclose(wf);

序:1

29.請編寫一個函數(shù),用來刪除字符串中的所有空格.例如,輸入

abcdefgh,則輸出為abcdefgho注意:部分源程序給出如下。請勿改

動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號

中填入所編寫的若干語句。試題程序:

£mclucfteh>

3mrlude<rtypc.h>

?includeVeftidb>

3Mirludr<*rd!ib.hA

?noidprocXHuir??ir>

voidnuin<)

charatlCSIJ(

*CLS*>?

pruidCInput???nngt")?

get?(?tr)i

|>roc<*rr>i

prtntfC*????lri/?\rT.wr)i

30.編寫函數(shù)fun,其功能是:求ss所指字符串中指定字符的個數(shù),并返

回此值。例如,若輸入字符串123412132,輸入字符為1,則輸出3。

注意:部分源程序在文件PRO。.C中。

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

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

?include<stdio.h>

#include<獻(xiàn)ring,h>

defineM81

intfun(char?ss,charc)

tnain()

Ichar?[M],ch;

voidNONO();

printf(0\nPle?Menterastring:**)?gels(a);

printf("\nPleaseenterachar:");ch=j(etchar();

printf(**\nThcnumberoftherharis:%d\n",fun(a,ch));

NONO();

I

voidNONO()

!/?本函數(shù)用于打開文件,It人測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。?/

inti;

FILE?rf.?wf;

chara[M],b[M],ch;

rf=fbpen("in.dat",*r");

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

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

I

fi?anf(rf,a);

ficanf(rf."%?*.b);

ch=?b;

fprintf(wf."%c?%d\n",ch,fun(a,ch));

I

fcloee(rf);

fcioee(wf):

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

31.下列給定程序中,函數(shù)fun()的功能是:根據(jù)輸入的3個邊長(整型

值),判斷能否構(gòu)成三角形:若能構(gòu)成等邊三角形,則返回3,若是等腰

三角形,則返回2,若能構(gòu)成三角形則返回1,若不能,則返回0。

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

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

試題程序:

#include<math,h>

intfun(inta,intb,intc)

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

{if(a==b&&b==c)

//*************Icund1不不不不不不不不不不不不不不/f

return1;

elseif(a==b||b==c||a==c)

return2;

//*T**T**T**T**T**T**T**T**T**T**T**T**T*?11n0j個個個個個個個個-個k-個k-個k-個k-個k-個x/

elsereturn3;

elsereturn0;

main()

{inta,b,c,shape;

printf(H\nInputa,b,c:");

scanf("%d%d%dn,&a,&b,&c);

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

shape=fun(a,b,c);

printf(n\n\nTheshape:%d\nM,shape);

}

32.給定程序MOD11.C中函數(shù)fun的功能是:輸出M行M列整數(shù)方

陣,然后求兩條對角線上元素之和,返回此和數(shù)。

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

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

1?include<stdio.h>

2?defineM5

3/…………found…………/

4intfun(intn,intxx[][])

5(int1,j,sum?0;

HH

6printf(\nThe%dx%dmatrix:\nr

M,M);

7for(i-0;i<M;

8{for(j-0;j<M;

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

10printf("if",xx(i][j]);

11printf("\n");

12}

13for(i-0;i<n;i++)

14sum+■xx[i](i]+xx[i][n-i-1];

15return(sum);

16

17main()

18{intaa[M][M]-({l#2r3,4r5)t

[4,3,2,1,0},[6,7,8,9,0},{9,8,7,6,5},

(3,4,5,6,7));

19printf("\nThesumofallelements

on2diagnalsis%d."rfun(M,aa));

20

33.下列給定程序中,函數(shù)fun()的功能是:從n個學(xué)生的成績中統(tǒng)計出

低于平均分的學(xué)生人數(shù),此人數(shù)由函數(shù)值返回,平均分存放在形參aver

所指的存儲單元中。例如輸入8名學(xué)生的成績:

80.5607290.59851.58864

則低于平均分的學(xué)生人數(shù)為4(平均分為75.5625)0

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

#defineN20

intfun(float*s,ihtn,float*aver)

{floatave40.0;

intcount=0,k,i;

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

/^1*^1*^1*1*1**X**1^/

/平不不不不不不不不不不不不rciinri不不不不不不不不不不不不不不/

t=s[k];

ave=t/n;

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

if(s[i]<ave)count++;

/*1**1*^1*^1**1*1*1**X**1^*1^?1**X*f

/斗不不不不不不不不不不不不rcnnri不不不不不不不不不不不不不不/

*aver=&ave;

returncount;

}

main()

{floats[30],aver;

intm,i;

clrscr();

printf("\nPleaseenterm:");scanf

(“%d”,&m);

printf("\nPleaseenter%dmark:\n",m);

for(i=0;iprintf(M\nThenumberofstudents:

%d\nH,fun(s,m,&aver));

printf("Ave=%f\nM,aver);

)

34.下列給定程序中函數(shù)fun()的功能是:將長整型數(shù)中每一位上為偶數(shù)

的數(shù)依次逆向取出,構(gòu)成一個新數(shù)放在t中。高位在低位,低位在高位。

例如當(dāng)s中的數(shù)為25846513時,t中的數(shù)為6482。請改正函數(shù)fun()

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

voidfun(longS,long*t)

(

intd;

longsl=l,i=l;

*t=0;

while(s/i>0)

i=i*10;

i=i/10;

while(s>0)

d=s/i

/*1**1**!<*1**!**!*1*!**!**!**!**!**!**!**!*、!?*!**!**!*/

/個個個個個個個個個個個個個T/~\I]nn個個個個個個個個個個個個個/

if(d%2!=0)

/木木木木木木木木木木木木木found木木木木木木木木木木木木木/

t=d*sl+t;

sl*=10;

)

S=S%i;

i=i/10;

}

)

main()

(

longS,t;

clrscr();

printf(n\nPleaseenterS:");

scanf(u%ldM,&s);

fun(S,&t);

printf(HTheresultis:%ld\n'\t);

}

35.給定程序MOD11.C中函數(shù)fun的功能是:計算n的5次方的值(規(guī)

定n的值大于2、小于8),通過形參指針傳回主函數(shù);并計算該值的個

位、十位、百位上數(shù)字之和作為函數(shù)值返回。

例如,7的5次方是16807,其低3位數(shù)的和值是15。

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

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

tfinclude<stdio.h>

linclude<math.h>

3intfun(intn,int*value)

4{intd,s,i;

5found……*

6d?0;s?0;

7for(i?l;i<*5;i*+).d*d*n;

8*value-d;

9for(i?l;i<?3;i++)

10{s-s+d%10;

************found*********1

12d?d\10;

13

14returns;

15

16main()

17(intntsum,v;

18do

19{printf(**\nEntern(2<n<8):w);

scanf("%d"r&n);)

20while(n<?211n>-8);

21sum-fun(n,4v);

22printf("\n\nTheresult:\nvalue-

%dsum?%d\n\n"rvrsum);

23

36.給定程序M0D11.C中函數(shù)fun的功能是:求出以下分?jǐn)?shù)序列的前

n項之和。和值通過函數(shù)值返回到main函數(shù)。

23581321

T'293959T才……

例如,若n=5,則應(yīng)輸出:8.391667。

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

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

1?linclude<stdio.h>

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

3voidfun(intn)

4{inta,b,c,k;doubles;

5s?0.0;a-2;b?1;

6for(k-1;k<-n;k++){

7/…………found**………?

8s-s*(Double)a/b;

9c=a;a?a4-b;b-c;

10

11returns;

12

13main()

14(intn?5;

15printf(n\nThevalueoffunction

is:%lf\nw,fun(n));

16

37.已知一個數(shù)列從0項開始的前3項:0,0,1,以后的各項都是其相

鄰的前3項之和。下列給定的程序中,函數(shù)fun()的功能是:計算并輸出

該數(shù)列前n項的和sum。n的值通過形參傳入。例如,當(dāng)n=10時,程序

的輸出結(jié)果應(yīng)為96.0000000

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

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

試題程序:

#inckide<conio.h>

#include<stdio.h>

doublefun(intn)

(

doublesum,SO,SI,S2,S;

intk;

sum=1.0;

if(n<=2)

sum=0.0;

s0=0.0;

si=0.0;

s2=1.0;

/^j/

/個*T**T**T**T*個個*T*個*T*個個個TC]lt^ri*T**T**T**T**l**T**T**T**T**T**T**T**T*/

for(k=4;k<n;k++)

S=S0+S1+s2;

Sum+=s;

S0=sl;

Sl=s2;

/?1??!??!??1??14?f??f??f??f??1??1??(??1*1*!??£??f??f?*X**1**X*?1??1??!??1??1?/

不**********10iir)ci不不不不不不不不不不不不不/

S2=S;

returnsum;

)

main()

(

intn;

clrscr();

printf(nInputN=");

scanf(u%d",&n);

printf(n%f\nn,fun(ni);

38.下列給定程序中,函數(shù)fun()的功能是:從3個紅球,5個白球,6個

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

但必須要有紅球和白球。組合數(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(M\nTheresult:\n\n");

f7*7*7*7*7*7*7*7*7*£1*1*7,7.7.*1**1**1*7.*1*q./

/不不不不不不不不不不不不不不[()]]]]([不不不不不不不不不不不不不不不/

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

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

{k=8-i-j;

J/

/不不不不不不不不不不不不不不iintl不不不不不不不不不不不不不不不不不不/

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

{sum=sum+l;

printf(nred:%4dwhite:%4d

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

)

)

)

returnsum;

)

main()

{intsum;

sum=fun();

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

)

39.下列給定程序中,函數(shù)fun()的功能是;利用插入排序法對字符串中

的字符按從小到大的順序進(jìn)行排序。插入法的基本方法是:先對字符串

中的頭兩個元素進(jìn)行排序,然后把第3個字符插入到前兩個字符中,插

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

序的字符串已在主函數(shù)中賦予。

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

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

試題程序:

#include<String.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

{ihti,j,n;charch;

n=strlen(aa);

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

//

frTwrTwrTwrTwrTwrTwrTwrTwrTw?Tw?T??[??[??[??[??[??[??[??TwrTwrTwrTwrTw?[??[?t

{c=aa[i];

j=i-l;

while((j>=0)&&(ch<aafjl))

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

j-;

)

aa[j+l]=ch;

)

}

main()

{chara[NJ="QWERTYUIOPASDFGHJKIMNBVCXZM;

inti;

printf("Theoriginalsiring:%s\n'\a);

insert(a);

printf(HThestringaftersorting:

%s\n\nn,a);

40.在主函數(shù)中從鍵盤輸入若干個數(shù)放入數(shù)組中,用。結(jié)束輸入并放在

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

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

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

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intx[])

doublesum=0.0;

intc=0,i=0;

t1/

/*I*n**I**I**T**T**T**r*T**T**T'*r*rrrA]]口][不不不不不不不不不不不不不/

while(x[i]==0)

if(x[i]<0)

sum=siim+x[il;

c++;

}

i++;

)

/*1**1**1**1**1**1*4,71/

/*T**T**T**T**7**T**T*****T**T**T**T*?11Fl/-1個個個個個個個個個個個/

sum=sum\c;

returnsum;

main()

(

intxllOOO];

inti=0;

clrscr();

printf("\nPleaseentersomedata(endwith

0):”);

do

(

scanf(u%dH,&x[i]);

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

printf(,'%f\nH,fun(x));

)

五、程序改錯題(2題)

41.

下列給定的程序中,函數(shù)proc()的功能是:將str所指字符串中出現(xiàn)

的tl所指字符串全部替換成t2所指字符串,所形成的新的字符串放在

w所指的數(shù)組中。在此處,要求U和t2所指字符串的長度相同。例如,

當(dāng)str所指字符串中所指的內(nèi)容為abcdabcdef9,tl所指字符串中的內(nèi)容

為be,t2所指字符串中的內(nèi)容為11時,結(jié)果在w所指的數(shù)組中的內(nèi)容

應(yīng)為alldalldefg。請修改程序中的錯誤,使它能得出正確的結(jié)果。注意:

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

題程序:

?mrltMi*<aiWhlkll>

■mrlvtir<??nag,b>

mlpforidiaf??tr?cW**tl?dwr

Mrcpy<w??rr>?

whir(?*>

whtlr<r>

ri?eb*raka

wtuie(?<)(????r??4-??r

ria*'+

<CLS*>>

prmii<*\mPV?w??1**Mrw***tt>>?

KMU<

prwid<*\nP1e?*rc?Metwhstragtl(*>i

KMlf<>?

prwuK*\AP1MM?M*raMhurwgt2a*>?

if<?trica(ti>*-strimfG)

|Noc(atr?tl.U.w>?

ptnMf(*\aTWe/.?八

)

ebe*Enori?aria?<

42.

下列給定程序中,函數(shù)fun的功能是求兩個非零正整數(shù)的最大公約數(shù),

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

例如,若nmnl和num2分別為49和21,則輸出的最大公約數(shù)為7;若

num1和num2分別為27和81,

則輸也的最大公約數(shù)為27o

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

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

試題程序:

#tnclude<stdio.h>

fun(>ntajntb)

(int3

if(a<b)

Ega汨=t;

r=^a%b;

whi!e(r!=O)

{a=b;b=r;T=a%b;}

/********?**■*學(xué),*~訓(xùn)4,*******?豐

return?;

)

voidmain()

|intnuml9num2fa;

printfCInputnumlnum2:M);

scanfC%d%d".&numL&num2);

printf(nnum1num2=%d\n\n*miml,nuni2);

a=<un(numl,num2);

prin出FiemaxfnrnncommOTdivisoris%d\n\n"㈤;

六、操作題(2題)

43.函數(shù)delete(s,i,n)是作用是從字符串s中刪除從第i個字符開始的n

個字符,請?zhí)羁铡?/p>

voiddelete(charslJ,inti,intn)

{intj,k,length=O;

while(s[length])

[];

-i;

j=i

)

if(I])

{k=i+n;

if(i+n<=length)

while(k<length)

s|j++J=slk++J;

s[j尸\0';

}

44.以下fun函數(shù)的功能是在N行M列的整型二維數(shù)組中,選出一個

最大值作為函數(shù)值返回,請?zhí)羁铡?設(shè)M,N已定義)

intfun(inta[N][M])

{inti,j,row=0,col=0;

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

for(j=O;j<M;j++)

if(a[i][j]>a[row][col])(row=i;col=j;)

return();

}

參考答案

l.i<3

2.

分析題目可知,程序中運(yùn)用函數(shù)c=getchar。從標(biāo)準(zhǔn)輸入設(shè)備讀取下一

個字符,而且是一行的字符(即沒有換行),所以條件為

(c=getchar())!-\\n'o

\r\n

\r\n

3.S0

4.3535解析:在主函數(shù)中通過定義和賦初值使p和q分別指向了X和

y.執(zhí)行函數(shù)調(diào)用“swap(p,q)1把p和q中的地址值傳給了形參指針.變

量a和b,a和b分別指向了實參x和y。在函數(shù)sw叩()中交換了指針變

量a和b的值,并沒有交換a和b指向的實參的值,所以函數(shù)調(diào)用返回

后x和y依舊是原來的值。

5.1010解析:表達(dá)式0<x<20,首先計算0<x,其值為1,再計算

20,其值為1,輸出1;表達(dá)式0<x&&x<20,0<x為1,x<20為0,

再計算1&&0,其值為0,輸出0。所以輸出結(jié)果為10。

6.00解析:本題是計算5*4*3*2*1*0的值,結(jié)果為0。

7.00解析:函數(shù)getchar。是從鍵盤得到用戶輸入的一個字符。用戶輸入

的第1個字符是a,不管后面輸入的是什么ch的值都是宣,因此條件

(ch=getchar())==?為假,這個循環(huán)不會被執(zhí)行。

8.structSTRUstructSTRU解析:結(jié)構(gòu)體類型是構(gòu)造數(shù)據(jù)類型,是用戶自

己定義的一種類型。

結(jié)構(gòu)體類型的定義:

struct結(jié)構(gòu)體類型名

成員項表;

定義結(jié)構(gòu)體變量的的形式為:

struct結(jié)構(gòu)體類型名變量1,變量2,……

其中變量包括:一般變量、指針變量、數(shù)組變量等。

9.0

10.1011121210111212解析:用static關(guān)鍵字聲明的變量稱為靜態(tài)局部變

量。靜態(tài)局部變量只在編譯時賦一次初值,以后再次調(diào)用函數(shù)時不再重

新賦初值,而是保留上次函數(shù)調(diào)用結(jié)束時的值。程序中的變量c為靜態(tài)

變量,當(dāng)再次調(diào)用fun函數(shù)時,變量c不再被賦初值,變量c的值為上

次調(diào)用fun函數(shù)時所保留下來的值,具體在程序運(yùn)行過程中的體現(xiàn)如下:

當(dāng)i=0時,第一次調(diào)用fun(5),這時a=5,b=0,c=3,執(zhí)行b++,c++,

得到b=l,c=4,則a+b+c=10,返回主函數(shù)輸出010;當(dāng)i=l時,第二

次調(diào)用fun(5),這時a=5,b=0,c=4,執(zhí)行b++,C++,得到b=l,c=5,

貝IJa+b+c=ll,返回主函數(shù)輸出111;當(dāng)i=2時,第三次調(diào)用fun(5),這

時a=5,b=0,c=5,執(zhí)行b++,C++,得到b=l,c=6,則a+b+c=12,返

回主函數(shù)輸出212;當(dāng)i=3時,循環(huán)結(jié)束,所以輸出結(jié)果為:010111212o

1LC解析:該題稍微難一點°主要要搞清楚以下幾點:①定義了一個

指針數(shù)組char*p⑵后,程序中第一個循環(huán)for(i=0;i<2;i++)p[i]=ch[i];

的作用,是使指針數(shù)組的p[0]元素(它本身是一個指針)指向了二維數(shù)組

ch的第一行字符串,并使指針數(shù)組的p[l]元素指向二維數(shù)組ch的第二

行字符串,這樣,就使指針數(shù)組p和二維數(shù)組Ch建立起了一種對應(yīng)關(guān)

系,以后對二維數(shù)組ch的某個元素的引用就有兩種等價的形式:ch[i]|jl

或p[i][j]o②對二維數(shù)組Ch的初始化,使其第一行ch[O]中存入了字符

串“693

12.D程序調(diào)試的任務(wù)是診斷和改正程序中的錯誤。

13.C

14.B

15.A

16.C

本題考查了兩層for循環(huán)。外層循環(huán)增量i的值作為內(nèi)層循環(huán)執(zhí)行次數(shù)

的值使用。

17.A

當(dāng)x為1時,執(zhí)行easel,a自加等于1,因為case1后沒有break,接

著執(zhí)行case2,此時a的值為2,b自加為1,故選擇A選項。

18.A第1次for循環(huán),y的值為9,“y%3”的值為0,滿足if條件輸出“?

?廣即先自減后輸出,所以輸出8;第2次for循環(huán),y的值為7,“y%3”

的值為1,不滿足if條件,不執(zhí)行printf語句;第3次for循環(huán),y的

值為6,“y%3”的值為Q滿足if條件輸出即先自減后輸出,所以

輸出5;第4次for循環(huán),y的值為4,不滿足if條件,不執(zhí)行printf語

句;第5次for循環(huán),y的值為3,滿足if條件,輸出2;第6次for循

環(huán),y的值為1,不滿足if條件,不執(zhí)行printf語句。故本題答案為A

選項。

19.CC?!窘馕觥繉€性表進(jìn)行順序查找時,從表中的第一個元素開始,

將給定的值與表中逐個元素的關(guān)鍵字進(jìn)行比較,直到兩者相符,查找到

所要找的元素為止。在最壞情況下,要查找的元素是表的最后一個元素

或查找失敗,這兩種情況都需要將這個元素與表中的所有元素進(jìn)行比較,

因此比較次數(shù)為no

20.A

link結(jié)構(gòu)體中的next是鏈表中下一個節(jié)點的地址。由于p當(dāng)前指向節(jié)

點A,因此p->next是B的地址。p->next->next是C的地址,訪問C

的節(jié)點數(shù)據(jù)成員dt可以使用C的地址訪問,即p->next->next->dt,選

項B正確?;蛘呤乖陆庖谩?”運(yùn)算符:(*p)表示節(jié)點A,(*p).next表

示B的地址,*((*p).next)表示節(jié)點B,(*((*p).next)).next表示C的地

址,*((*((*p).next)).next)表示節(jié)點C,所以C的數(shù)據(jù)成員dt可以表示

為(*((*(*p).next).next)).dt,因為“『運(yùn)算符優(yōu)先級高于“*”運(yùn)算符,所以

也可以寫為(*(*(*p).next).next).dt,選項C正確。同理,也可以既使用

指針運(yùn)算符,又使用解引用運(yùn)算符來訪問C的節(jié)點數(shù)據(jù)成員出,即

(*(p->next->next)).dt,選項D正確。選項A中,*p表示A節(jié)點,

(*p).next表示節(jié)點B的地址,由于運(yùn)算符的優(yōu)先級高于“*”運(yùn)算

符,因此先執(zhí)行即表達(dá)式(*可.優(yōu)*1?>11強(qiáng)1?〉出引用了(2節(jié)點的數(shù)

據(jù)成員dt,然后再執(zhí)行解引用運(yùn)算“*",這是錯誤的。故本題答案為A

選項。

21.

【解析】要按分?jǐn)?shù)的高低排列學(xué)生的記錄,可以使用冒泡排序法。將每

一個學(xué)生的成績與其他學(xué)生的成績相比較,對不符合要求的記錄交換位

22.

【解析】由題目中所給表達(dá)式可知,表達(dá)式的值為m項表達(dá)式的和然后

開平方??梢允紫韧ㄟ^m次循環(huán)求得m項表達(dá)式的和,然后將其和開

平方并返回到主函數(shù)當(dāng)中。

23.

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論