2022年江蘇省泰州市全國計算機(jī)等級考試C語言程序設(shè)計真題(含答案)_第1頁
2022年江蘇省泰州市全國計算機(jī)等級考試C語言程序設(shè)計真題(含答案)_第2頁
2022年江蘇省泰州市全國計算機(jī)等級考試C語言程序設(shè)計真題(含答案)_第3頁
2022年江蘇省泰州市全國計算機(jī)等級考試C語言程序設(shè)計真題(含答案)_第4頁
2022年江蘇省泰州市全國計算機(jī)等級考試C語言程序設(shè)計真題(含答案)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2022年江蘇省泰州市全國計算機(jī)等級考試

C語言程序設(shè)計真題(含答案)

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

一、2.填空題(10題)

1.以下程序的運行結(jié)果是【】。

#include<stdio.h>

main()

{intfun();fun();}

fun()

{staticinta[3]={O,l,2};

inti;

for(i=0;i<3;i++)a[i]+=a[i];

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

printf("\n");)

2.數(shù)據(jù)庫系統(tǒng)中實現(xiàn)各種數(shù)據(jù)管理功能的核心軟件稱為【】。

3.單元測試又稱模塊測試,一般采用【】測試。

4.下面程序的運行結(jié)果是()。##include<stdio.h>main(){inta,s,n,

m;a=2;s=0;n=l;m=l;while(m<=4){n=n*a;s=s+n;++m;}

printf("s=%d",s);}

5.若有以下程序

main()

{inta=4,b=3,c=5,t=0;

if(a<b)t=a;a=b;b=t;

if(a<c)t=a;a=c;c=t;

printf("%d%d%dln",a,b,c);

)

執(zhí)行后輸出結(jié)果為o

6.類是一個支持集成的抽象數(shù)據(jù)類型,而對象是類的【】。

7.語句:x++;、++x;、x=x+l;、x=l+x;,執(zhí)行后都使變量x中的值增

1,請寫出一條同一功能的賦值語句(不得與列舉的相同)【】。

8.若輸入thistestterminal,以下程序的輸出結(jié)果為:terminaltestthiso

請?zhí)羁铡?/p>

#defineMAXLINE20

[]

{inti;

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

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

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

sort(pstr);

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

sort([])

char*pstr[3];

{inti,j;

char*p;

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

for(j=i+1;j<3;j++)

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

{p=*(pstr+i);

*(pstr+i=【】;

*(pstr+j)=p;

)

9.下面程序的功能是輸出數(shù)組s中最大元素的下標(biāo),請?zhí)羁铡?/p>

main()

{intk,p,s[]={l,-9,7.2,-10,3);

for(p=0,k=p;p<6;p++)

if(s[p]>s[k])[]

printf("%d\n",k);}

10.當(dāng)線性表的操作無插入和刪除時,采用【】結(jié)構(gòu)為好。

二、單選題(10題)

11.現(xiàn)有以下結(jié)構(gòu)體說明和變量定義,如圖所示,指針P、q、r分別指

定一個鏈表中連續(xù)的3個結(jié)點。

datadatancxldatanext

....................A|AI----1-------HBI---1-------HcI—|----?......

TPTqG

structnode

{hardata;

structnode*next;)*P,*q,*r;

現(xiàn)要將q和r所指結(jié)點交換前后位置,同時要保持鏈表的結(jié)構(gòu),下列

不能完成此操作的語句是()。

A.q-:>next=r->next;p—:>next=r;rm:>next=q;

B.q-:>next=r;q->next=r->next;r->next=q;

C.q-:>next=r->next;r->next=q;p->next=r;

D.q-:>next=q;p->next=r;q->next=r->next;

12.將一棵有100個結(jié)點的完全二叉樹從上到下,從左到右依次對結(jié)點

進(jìn)行編號,根結(jié)點的編號為1,則編號為49的結(jié)點的左孩子的編號為

A.98B.99C.50D.48

13.若有定義“inta,b,c;"以下程序段的輸出結(jié)果是()。

a=l1;b=3;c=0;

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

A.2B.0C.3D.l

14.設(shè)長度為n的鏈隊列用單循環(huán)鏈表表示,若只設(shè)頭指針,則入隊操作

的時間復(fù)雜度為0

A.O(l)B.O(log2n)C.O(n)D.O(n2)

15.在inta=3,int*p=&a;中,*p的值是()

A.變量a的地址值B.無意義C.變量p的地址值D.3

16.下面的哪個保留字不能作為函數(shù)的返回類型()。

A.voidB.intC.newD.long

17.對長度為n的線性表排序,在最壞情況下,比較次數(shù)不是n(n-1)

/2的排序方法是()。

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

18.下列關(guān)于線性表、棧和隊列的敘述,錯誤的是0。

A.線性表是給定的n(n必須大于零)個元素組成的序列

B.線性表允許在表的任何位置進(jìn)行插入和刪除操作

C.棧只允許在一端進(jìn)行插入和刪除操作

D.隊列允許在一端進(jìn)行插入在另一端進(jìn)行刪除

19.設(shè)有如下函數(shù)定義:

#include<stdio.h>

intfun(intk)

{if(k<1)return0;

elseif(k==1)return1;

elsereturnfun(k-l)+l;

)

若執(zhí)行調(diào)用語句“n=fUn(3);",則函數(shù)fun總共被調(diào)用的次數(shù)是()。

A.2B.3C.4D.5

20.有如下程序main(){charch[2][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[il[jl

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

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

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

21.編寫函數(shù)fun(),其功能是:實現(xiàn)兩個字符串的連接(不要使用庫函

數(shù)strcat),即把p2所指的字符串連接到pl所指的字符串的后面。例

如,分別輸入下面兩個字符串:“FirstString——”“SecondString”程序

輸出:“FirstString——SecondString”注意:部分源程序給出如下。請

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

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

#includeVsidlib.h>

%includeVntdio.h>

4includeVconio.h>

voidfun(charpl[].charp2[])

(

I

voidmain()

(

charsl[80],$2[40]i

system(i

printf(*Entersiands2An*)?

?canf(**?si?s2)i

prind(=%s\n*?si)i

printf("s2=%An"?s2)i

printf("Invokefun(si.s2)An")i

fun(?l?s2>i

printf("Afterinvoking:\n*>:

printf("%s\n*?si)t

22.規(guī)定輸入的字符串中只包含字母和+號。編寫函數(shù)fun,其功能是:除了字符串前導(dǎo)和

尾部的母號外,將其他的*號全部刪除。形參h已指向字符串中第一個字母,形參P指向字

符串中最后一個字母。在編寫函數(shù)時,不得使用c語言提供的字符串函數(shù)。

例如,若字符串中的內(nèi)容為“"fVBCPEW""*",刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是

“…?ABCDEFG…

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

詁勿改動主函效main和其他島最中的任何內(nèi)容,僅在函數(shù)firn的花括號中填入你編寫的若干語句。

試痍程序:

#inrlude<Atdio.h>

voidfun(char*&char叱.。**p)

tnain()

\char48H,%>(;

printf('*Enlera訪電卬?

用嶼

t=f?s;

whfle(*t)

t++:

t-;

while(*t=***)

1-;

while(*t==1*')

t-;

wh舊*f=T巧

f++;fun(sX0;

printf(,fThestringafterdel?led:\n");

pute(ft);

23.請編寫函數(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()的

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

includeV*dio.h>

floatproc(float■a.intn)

voidmain()

<

float5coref30]0<90.5?72?80.61.5?55?6O)?

aven

averproc(scorc.6>?

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

24.編程計算下列表達(dá)式:s=n!(n從鍵盤上輸入)

25.請編寫函數(shù)voidproc(intx,intpp[],int*n),它的功能是:求出能

整除x且不是偶數(shù)、不為1的各整數(shù),并按從大到小的順序放在PP所

指的數(shù)組中,這些除數(shù)的個數(shù)通過形參n返回。

例如,若x的值為30,則有3個數(shù)符合要求,它們是15,5,3o

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

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

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

試題程序:

Ctnrludr<como.h>

?vnrludrV*idio.h>

Umrlude<vtdhkh>

raidpruc<HM■?intppCJ?,每(?n)

Ridmmn()

mi1000]?ai?i?

"CLS*)?

anttiregefnumber(\n*)?

?can1(.%4"?&*)i

p<roc<K?Atv?&n>i

(or”,?-1il>?*0ii——)

|>nnt((*Sd*?arr£i])i

print!(e\n")?

26.

編寫函數(shù)如n,其功能是:刪除一個字符串中指定下標(biāo)的字符。其中,

a指向原字符串,刪除指定字符后

的字符串存放在b所指的數(shù)組中,n放指定的下標(biāo)。

例:輸入一個字符串"world",然后輸入3,則調(diào)用該函數(shù)后的結(jié)果為

"word"o

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

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

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

試題程序:

#inelude<5tdio.h>

#include<conio.h>

#dcfineLEN20

voidfiinfchara(]tcharb[],intn)

voidmain()

.(charstrl[LENJ.str2(LEN];

intn;

printf(wEnterthestringzXn");

gets(slrl);

printfEnterihepositionrfthestringdeleted:*1);

fun(strLstr2,n);

prinrfC^Thenewstringis:%s\n?Lr2);

27.n個人的成績存放在score數(shù)組中,請編寫函數(shù)proc(),它的功能是

將低于平均分的人數(shù)作為函數(shù)值返回,將低于平均分的分?jǐn)?shù)放在down

所指的數(shù)組中。例如,當(dāng)score數(shù)組中的數(shù)據(jù)為{99,80,40,56,59,

84,60,76,100}時,函數(shù)返回的人數(shù)應(yīng)該是4,down中的數(shù)據(jù)應(yīng)為

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

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

語句。試題程序:

9aneludek>

9inriudeVcooio.h>

Stnrludr<Ndxxh>

SincludeV,tr?ng.h>

uMproc(miscorrf;.mt???m4owrCl>

raidmainC)

inil?n?down[9]t

mi?corr{9]*

?0?7<.|00)|

?ywt?n(-CLS-)i

R*proe<Mx>e*?9?dowiOi

pnntf(*\ndowntotbeaverage?corraret*)?

k>r<i,Oiyn■+?>

pnntf(*%d*?downf|]>i

print".\n*)t

28.

編寫一個函數(shù),該函數(shù)可以統(tǒng)計一個長度為2的字符串在另一個字符串

中出現(xiàn)的次數(shù)。例如,假定輸入的字符串為abcdefabcdeabceabcdef,子

字符串為cd,則應(yīng)當(dāng)輸出3。注意:部分源程序給出如下。請勿改動

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

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

8mclude^,Htdbb.hJ>

8Miclwd*<?MUOLk>

9IBrlttd*<BtdKKk>

9iarludrVwiring,

ntpmiciiar?Mr.char?M^Hrtr?

roidMMIH>

cliar

KMfll

*ClJ5*)|

pnMf(-aAtVW??e)i

get?(Btr)i

pnMf<attAfV,

getw(?ubatr>e

W(Mr),

pwts(Mibair)i

■?prac《ur,MIIM”*

pmiRKAB*?■)?

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

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

生的記錄,高分在前。

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

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

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

試題程序:

#include<stdio.h>

#defineM16

typedefstruct

(

charnum[10];

intS;

)

STREC:

voidproc(STRECa[])

(

inti,j;

STRECt;

for(i=l;i++)/*用冒泡法來按從高到低

排序*/

for(j=0;j++)0

if(a[j].s)//*按分?jǐn)?shù)的高低排列學(xué)生

的記錄,高分在前*/

{t=a[j];a[j]=a[j+l];a[j+l]=t;)

)

voidmain

{

STRECstu[M]={{"GA005",85),{"GA003",76},

{"GA002",69},{"GA004",85),"GA001",91),

{"GA007",72),{"GA008",64),{"GA006",87),

{"GAO15",85),{"GA013",91),{"GAO12",64),

{"GAO14",91),{"GAO11",66),{"GAO17",64},

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

inti;

proc(stu);

printf("Thedataaftersorted:\n");

for(i=0;i++)

if(i%4==0)

〃每行輸出4個學(xué)生記錄

printf("n");

printf("%s%4d",stu[i],num,stu[i].s);

}

printf("\n");

30.編寫函數(shù)fun(),其功能是:求出1?1000中能被7或11整除,但

不能同時被7和11整除的所有整數(shù),并將其放在a所指的數(shù)組中,通過

n返回這些數(shù)的個數(shù)。注意:部分源程序給出如下。請勿改動main()

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

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

儀k>

△ificludeVcoxxh>

9includeVctdio,

eid?n)

wdidmain<)

mtaa[lOOO]?B?ki

fun<*a?&*a)i

(oce-Oib<iiih++)

10?-0)

IpnotfC*%i

I〃一行。9個It

el?e

pnm{(aK$d-?“Ch]”

pnnift*\n*>B

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

31.下列給定程序中函數(shù)fun()的功能是:從低位開始取出長整型變量s

中偶數(shù)位上的數(shù),依次構(gòu)成一個新數(shù)放在t中。例如,當(dāng)s中的數(shù)為

7654321時,t中的數(shù)為642。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

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

voidfun(longs,longt)

{longsI=10;

s/=10;

*t=s%10;

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

while(s<0)

{s=s/100;

*t=s%10*sl+*t;

sl=sl*10;

)

)

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");scanf

("%ld",&s);

fun(s,&t);

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

)

32.給定程序中函數(shù)fun的功能是:將一個由八進(jìn)制數(shù)字字符組成的字

符串轉(zhuǎn)換為與其值相等的十進(jìn)制整數(shù)。規(guī)定輸入的字符串最多只能包含

5位八進(jìn)制數(shù)字字符。

例如,若輸入:77777,則輸出將是:32767。

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

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

[試題源程序]

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

intfun(char*p)

(

intn;

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

n=*p-'o';

p++;

while(*p!=0){

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

n=n*8+*p-'o';

p++;

)

returnn;

}

main()

(

chars[6];inti;intn;

printf("Enterastring(Ocataldigits):");

gets(s);

if(strlen(s)>5)

(

printf("Error:Stringtoolonger!\n\n");

exit(O);

)

for(i=0;s[i];i++)

if(s[i]<'O'||s[i]>7)

printf("Error:%cnotisocataldigits!\n\n",s[i]);

exit(O);

)

printf("Theoriginalstring:");

puts(s);

n=fun(s);

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

}

33.給定程序M0D11.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)!

1jlinclude<stdio.h>

2ifinclude<math.h>

3intfun(intn,int*value)

4{intd,s,i;

5/?育???????????found,*****,******

6d-0;s-0;

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

8*value-d;

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

10{s-s^d%10;

11w*founcj***

12d?d\10;

13

14returns;

16main()

17(intn,sum,v;

18do

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

RH

scanf(%dr&n);)

20while(n<?21In>?8);

21sum-fun(n,4v);

22printf(w\n\nTheresult:\nvalue?

%dsum-%d\n\n",vrsum);

23

34.下列給定程序中,函數(shù)fun()的功能是:求整數(shù)x的y次方的低3位

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

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

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

試題程序:

#include<stdio.h>

longfun(intx,inty,long*p)

{inti;

longt=l;

/******不*******fk)und不***不**********!

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

t=t*x;

*p=t;

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

t=t/1000;

returnt;

}

main()

{longt,r;intx,y;

printf("\nlnputxandy:");scanf

("%ld%ld",&x,&y);

t=fun(x,y,&r);

printf("\n\nx=%d,y=%d,r=%ld,last=

%1d\n\n",x,y,r,t);

)

35.下列給定程序中,函數(shù)fun()的功能是計算并輸出high以內(nèi)的素數(shù)

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

為1060o

請改正程序中的錯誤,使它能得到正確結(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));

)

36.N個有序整數(shù)數(shù)列已放在一維數(shù)組中,給定下列程序中,函數(shù)fun()

的功能是:利用折半查找算法查找整數(shù)m在數(shù)組中的位置。若找到,則

返回其下標(biāo)值:反之,則返回-1。

折半查找的基本算法是:每次查找前先確定數(shù)組中待查的范圍:low和

high(low<high),然后把m與中間位置(mid)中元素的值進(jìn)行比較。如果

m的值大于中間位置元素中的值,則下一次的查找范圍放在中間位置之

后的元素中;反之,下次查找范圍落在中間位置之前的元素中。直到low

>high,查找結(jié)束。

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

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

試題程序:

#include<stdio.h>

#defineN10

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

voidfun(inta[],intm)

{intlow—0,high=N-l,mid;

while(low<=high)

{mid=(low+high)/2;

if(m<afmid])

high=mid-l;

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

elseif(m>=a[mid])

low=mid+l;

elsereturn(mid);

)

return(-l);

)

main()

{inti,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;

printf("a數(shù)組中的數(shù)據(jù)如下:");

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

printf("Enterm:");scanf("%d",&m);

k=fun(a,m);

if(k>=0)printf("m=%d,index=%d\n",m,k);

elseprintf("Notbefound!\n");

37.下列給定程序中,函數(shù)fun()的功能是:將m(lSmqO)個字符串連接

起來,組成一個新串,放入pt所指字符串中,例如:把3個串a(chǎn)bc,CD,

EF串聯(lián)起來,結(jié)果是abcCDEF。

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

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

試題程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

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

intfun(charstr[][10],intm,char*pt)

{intk,q,i,j=O;

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

{q=strlen(str[k]);

j+=q;

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

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

pt[i]=str[k,i];

pt+=q;

pt[O]=0;

)

Pf

}

main()

{intm,h;

chars[10][10],p[120];

clrscr();

printf("\nPleaseenterm:");

scanf("%d",&m);gets(s[01);

printf("\nPleaseenter%dstring:In",m);

for(h=0;h<m;h++)gets(s[h]);

fun(s,m,p);

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

38.給定程序MODH.C中函數(shù)fun的功能是:應(yīng)用遞歸算法求形參a

的平方根。求平方根的迭代公式如下:

xl=-(xO+—)

2xO

例如,a為2時,平方根值為:1.414214O

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

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

1?include<stdio.h>

2finclude<math.h>

3/****?*??**found**********/

4doublefun(doublea,dounlexO)

5{doublexl,y;

6xl?(x0>a/xO)/2.0;

7/**********found***w******/

8if(fabs(xl-xo)>0.00001)

9y?fun(arxl);

10elsey-xl;

11returny;

12

13main()

14{doublex;

15printf("Enterx:w);scanf

16printf("Thesquarerootof%lf

w

is%lf\nrxrfun(xr1.0));

17

39.下列給定程序中,函數(shù)fun()的功能是:統(tǒng)計字符串substr在字符串

srt中出現(xiàn)的次數(shù)。例如,若字符串為aaas1kaaas,子字符串為as,則

應(yīng)輸出20

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

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

試題程序:

#include<stdio.h>

fun(char*str,char*substr)

{inti,j,k,num=0;

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

for(i=0,str[i],i++)

for(j=i,k=0;substr[k]==str[j];k++,j++)

if(substr[k+l]=='\0')

{num++;

break;

)

returnnum;

)

main()

{charstr[80],substr[80];

printf("Inputastring:");

gets(str);

printf("Inputasbustring:");

gets(substr);

printf("%d\n",fun(str,substr));

40.給定程序MODH.C中fun函數(shù)的功能是:分別統(tǒng)計字符串中大寫

字母和小寫字母的個數(shù)。

例如,給字符串s輸入:AAaaBBbl23CCccccd,則應(yīng)輸出結(jié)果:upper=

6,lower=8O

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

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

1finclude<stdio.h>

2/………?found………?/

3voidfun(char*srinta,intb)

4(

5while(*s)

6{if(*s>-&&*s<?2)

7/?**?****w*found**********/

8?a?a+l;

9if(*s>?,a*&&*s<-1zf)

10/…?……found………?/

11

12

13)

14}

15main()

16{chars[100];intupper-Q,lower

?0;

17printf("\nPleaseastring:n);

gets(s);

18fun(sr&upper,slower);

19printf(H\nupper-%dlower■

w

%d\nrupperzlower);

20)

五、程序改錯題(2題)

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

級數(shù)列中第n項的值。從第一項起,斐波拉契級數(shù)序列為1,1,2,3,

5,8,13,21,…例如,若給n輸入8,該項的斐波拉契級數(shù)值為21。

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

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

ninclude<ai<ho.b>

brMproc(mtc>

//????found????

?wiich(g>i

corOrreturnOi

//????????

cate11cawtireiurn11

}

muni<proc(g1)4pcoc(g-2)>i

midnuiiaC>

km?fibiifMnt

pnfii(<*Input?tv)i?c?af(<Kdfl?&n>i

pnntf<*B-%d\n*?n>i

fib=peoc<n>i

prmt??fib=-Kd\n\n*?rtb)i

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

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

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

例如,輸入3個邊長為3,4,5,實際輸入時,數(shù)與數(shù)之間以Enter鍵分

隔而不是逗號。

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

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

試題程序:

#include<stdio.h>

#include<math.h>

intproc(inta,intb,intc)

if(a+b>c&&b-c>a&&a+c〉b)

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

//****found****

return1;

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

return2;

//****found****

elsereturn3;

}

elsereturn0;

)

voidmain

(

inta,b,c,shape;

printf("\nlnputa,b,c:");

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

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

shape=proc(a,b.c):

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

)

六、操作題(2題)

43.給定程序中,函數(shù)fun的功能是:調(diào)用隨機(jī)函數(shù)產(chǎn)生20個互不相同

的整數(shù)放在形參a所指數(shù)組中(此數(shù)組在主函數(shù)中已置0)。

請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確

的結(jié)果。

注意:源程序存放在考生文件夾下的BLANK1.C中。

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

linclude<stdlib.h>

2*include<stdio.h>

3*defineN20

4voidfun(int*a)

5(inti.x,n?0;

6x?rand()%20;

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

8while(n<_1_)

9(for(i?0;i<n;i++)

10/???*******found******?***/

11if(x-a[i))_2_;

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

13if(iM_3_){a[n]-x;n++;)

14x?rand()%20;

15)

16}

17main()

18(intx[N)-(0}

19fun(x);

20printf(wTheresult:\nH);

21for(iw0;i<N;i++)

n

22(printf("%4drx[i]);

23if((i4-l)%5-?0)printf(R\nH);

24}

25printf(w\n\nw);

26

44.以下程序的運行結(jié)果是【】。

#include<stdio.h>

longfib(intg)

{switch(g)

{case0:return0;

case1:

case2:return1;}

return(fib(g-l)+fib(g-2));}

main()

{longk;

k=fib(5);

printf("k=%51d\n",k);}

參考答案

1.0240480,2,4\r\n0,4,8解析:本題主要考查for循環(huán)語句的使用以

及靜態(tài)局部變量的特點。

2.數(shù)據(jù)庫管理系統(tǒng)

數(shù)據(jù)庫管理系統(tǒng)(DBMS)

3.白盒法白盒法

4.s=30s=30解析:分析循環(huán)條件“m=l,m<=4",所以循環(huán)4次。第1

次n=n*a=2,s=s+n=2;m=2。第2次:n=n*a=4,s=s+n=6;m=3。第

3次:n=n*a=8,s=s+n=14;m=4o第4次:n=n*a=16,s=s+n=30o

5.503503解析:此處需注意的是:如果if后面的條件為真,只執(zhí)行其

后的一條語句或一條復(fù)合語句,如果if后面的條件為假,只執(zhí)行else后

面的一條語句或一條復(fù)合語句。先判斷表達(dá)式“a<b”為假,不執(zhí)行,t=a”,

但執(zhí)行"a=b;b=t;",s的值為3,b的值為0。在判斷表達(dá)式“a<c”,

值為真,所以執(zhí)行后面的3條語句,t=a;a=c;c=t",結(jié)果a的值為5,c

的值為3,所以最后輸出的結(jié)果為5、。和3。

6.實例將屬性、操作相似的對象歸為類,也就是說,類是具有共同屬性、

共同方法的對象的集合。所以,類是對象的抽象,對象則是其對應(yīng)類的

一個實例。

7.x+=1;

8.main()pstr*(pstr+j)

9.k=p;k=p;解析:為要尋找數(shù)組中的最大元素的下標(biāo),需先預(yù)設(shè)1個

臨時最大元素的下標(biāo),并順序逐一考查數(shù)組的元素,當(dāng)發(fā)現(xiàn)當(dāng)前元素比

臨時最大元素更大時,就用當(dāng)前元素的下標(biāo)更新臨時最大元素下標(biāo)。直

至考查了數(shù)組的全部元素后,這臨時最大元素下標(biāo)就是數(shù)組的最大元素

下標(biāo)。通常預(yù)設(shè)的最大元素下標(biāo)是數(shù)組的首元素下標(biāo),考查是從首元素

開始順序向后繼元素考查。程序中,存儲臨時最大元素下標(biāo)的變量是k,

變量p控制順序考查的循環(huán)控制變量。當(dāng)發(fā)現(xiàn)當(dāng)前元素s[p]比臨時最大

元素s[k)更大時,應(yīng)該用p更新ko所以在空框處應(yīng)填入代碼“k=p;”。

10.順序順序解析:當(dāng)線性表的操作無插入和刪除時,在對線性表進(jìn)行

操作時,不能改變元素的位置,采用順序結(jié)構(gòu)的效率高于鏈?zhǔn)浇Y(jié)構(gòu)。因

為采用順序結(jié)構(gòu),對元素的查找可通過計算得到。

11.D

由題目中線性鏈表的定義可知,要將q和r所指的結(jié)點交換前后位

置,只要使q指向r的后一個結(jié)點,P指向r結(jié)點,r指向q結(jié)點即

可。而在選項D中,r->next=q,這時r指向的節(jié)點為q;p->next=r,

這時P指向的節(jié)點為r;q->next:r->next,因為r節(jié)點已經(jīng)指向q,所

以執(zhí)行這個語句后q又指向q,所以選項D不正確。

12.A

13.AC語言中,逗號運算符可以把兩個以上(包含兩個)的表達(dá)式連接

成一個表達(dá)式。逗號運算符的優(yōu)先級是所有運算符中級別最低的,逗號

運算符保證左邊的子表達(dá)式運算結(jié)束后才進(jìn)行右邊的子表達(dá)式的運算。

也就是說,逗號運算符是一個序列點,其左邊所有子表達(dá)式運算都結(jié)束

后,才對其右邊的子表達(dá)式進(jìn)行運算,并以最右邊表達(dá)式的值作為整個

逗號表達(dá)式的值。因此C的值為“a%b”,即“11%3=2”。故本題答案為A

選項。

14.C

15.D

16.C

17.D

各種排序方法中最壞情況下需要比較的次數(shù)分別為眉泡排序n(n-

1)/2、快速排序n(n-l)/2、簡單插入排序n(n-l)/2>希爾排序0(nl.5)、

簡單選擇排序n(n-l)/2、堆排序O(nlog2n)

18.A解析:線性表的插入和刪除允許在任何位置進(jìn)行,所以B選項的

說法是正確的;棧的操作只允許在棧頂進(jìn)行,因此,棧稱為先進(jìn)后出表

(FILO,FirstInLastOut),或“后進(jìn)先出''表(LIFO,LastInFirstOut),所以

C選項說法也是正確的,?隊列(queue)是只允許在一端刪除,在另一端插

入的順序表,允許刪除的一端叫做隊頭(front),允許插入的一端叫做隊

尾(rear),因此隊列亦稱作先進(jìn)先出(FIFO,FirstInFirstOut)的線性表,

或后進(jìn)后出(LILO,LastInLastOut)的線性表。所以D選項說法也是正確

的。

19.B執(zhí)行調(diào)用語句“n=fim(3);”,3被當(dāng)作實參傳遞進(jìn)去,進(jìn)行了一次調(diào)

用。3被當(dāng)作實參傳進(jìn)去后,程序會執(zhí)行“elsereturnfun(k-1)+1;",函數(shù)

被調(diào)用了第2次,參數(shù)是3-1,也就是2。2被當(dāng)作參數(shù)傳進(jìn)去后,程序

會執(zhí)行"elsereturnfun(k-l)+1;”函數(shù)被調(diào)用了第3次,參數(shù)是2-1,也

就是1。I被當(dāng)作實參傳進(jìn)去后,程序會執(zhí)行“elseif(k=l)return1;",函

數(shù)不再被遞歸調(diào)用。所以最終結(jié)果為3次。故本題答案為B選項。

20.C解析:該題稍微難一點。主要要搞清楚以下幾點:①定義了一個

指針數(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][j]

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

串“693

21.

【解析】本題考查字符串連接函數(shù)的實現(xiàn)。本題通過兩個for循環(huán)完成

功能。第一個循環(huán)的作用是計算出字符串的長度,如果pl是‘\0'(即

此字符是字串尾),退出循環(huán),i中保存的數(shù)值即是字串長度。第二個循

環(huán)的作用是循環(huán)遍歷字串p2的字符,利用語句“pl[i++]=p2|j]將p2中

的字符逐個插到字串pl后。

22.

(答案1

voidfnn((Jiar*a,char*h,char*p)

{mti=0;

char*q=a;

while(q<h)

(

咽=*q;q++;i++;

)

while(q<p)(

if(*q|二,巧

(

加仁*q;i++:

1,

q++;

I

while(*q)

(

a(i土,;》.甲+;

)

a(i]=W;

}

(解析】

h和p分別指向第一個和最后個字母,先將前導(dǎo)”號進(jìn)行保存.再保存中間的非*號字符,然后保存

尾“號,加上結(jié)束標(biāo)識符-

23.

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

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

24.\n\t#include'stdio.h'

\nmain

\n{longt=l;

\ninti;

\nfor(i=1;i<=10;i++)

\nt=t*i;

\nprintf('%ld',t);}

\n

25.

【解析】按照題目中要求,求出能整除x且不是偶數(shù)的各整數(shù)。首先

判斷小于等于整數(shù)x的所有奇數(shù)是否能被x整除,將能被x整除的奇

數(shù)放入數(shù)組pp中。最后將數(shù)組pp中元素的個數(shù)返回到主函數(shù)中。

26.

I答案】

voidfun(chara[J,charH|.in:n)

(inii,k=0;

/*將不是指定下標(biāo)的字符存人數(shù)組b中*/

b[k?+卜叩h

b|k上/?在字符串最后加上結(jié)束標(biāo)識符*/

)

(解析】

根據(jù)題意要蒯除字符串中指定下標(biāo)的字將,也就是保得非指定下標(biāo)的字符.所以if語句為說!』),在字

符串木是加上字符率結(jié)束標(biāo)識符W

27.

【解析】要找到所有學(xué)生中成績低于平均分?jǐn)?shù)的人數(shù),首先需要算出所

有學(xué)生的平均成績。然后將所有學(xué)生的成績與平均成績相比較。將低于

平均分?jǐn)?shù)學(xué)生的記錄存放在新的數(shù)組中,并將低于平均分?jǐn)?shù)的學(xué)生數(shù)返

回給主函數(shù)。

28.

【解析】要計算出主字符串中包含子字符串的個數(shù),應(yīng)該檢查主字符串

中從第一個到最后一個字符。每出現(xiàn)一個計數(shù)變量加1,最后將得到的

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

29.voidproc(STRECa[])

{

inti,j;

STRECt;

for(i=l;i<M;i++)//用冒泡法來按從高到低排序

for(j=0;j++)

if(a[j].s)//按分?jǐn)?shù)的高低排列學(xué)生的記錄,高分在前

{t=a[j];a[j]=a[j+l];a[j+l]=t;}

)

30.

【解析】根據(jù)題意,所寫函數(shù)要用for循環(huán)實現(xiàn)對整數(shù)1~1000的遍歷;

通過if語句找出能被7或11整除,但不能同時被7和11整除的所有整

數(shù),因為同時被7和11整除的整數(shù)一定能被77整除,且不能被77整

除的數(shù)不一定就是能被7或11整除,可得出表達(dá)式“(i%7==0||i%ll==O)

&&i%77!=0";再按題目要求,將找出來的整數(shù)放在a所指的數(shù)組中,

通過n返回這些數(shù)的個數(shù)即可。

31.(1)錯誤:voidfun(longslongt)正確:voidfun(longslong*t)(2)錯誤:

while(s<0)正確:while(s>0)⑴錯誤:voidfun(longs,longt)正確:void

fun(longs,long*t)\r\n(2)錯誤:while(s<0)正確:while(s>0)解析:本

題考查函數(shù)調(diào)用方式和while循環(huán)語句中條件限制的方法。主函數(shù)中fun()

的調(diào)用方式說明fun()函數(shù)的參數(shù)應(yīng)當(dāng)為指針類型,所以voidfun(long

s,long。正確的寫法應(yīng)該是voidfun(longs,long*t)0

32.(1)錯誤:*p正確:*p(2)錯誤:'o';正確3o';⑴錯誤:*p\r\n正確:

*p\r\n(2)錯誤:'o';\r\n正確:'o';

33.(l)d=l;s=0;(2)d=d/10;(l)d=1;s=0;(2)d=d/10;解析:

本題中函數(shù)的功能是計算n的5次方的值(規(guī)定n的值大于2、小于8),

通過形參指針傳回主函數(shù);并計算該值的個位、十位、百位上數(shù)字之和

作為函數(shù)值返回。本題解題過程首先是求5次方,然后對結(jié)果進(jìn)行截取

以及求和。

34.(1)錯誤:for:(i=l;i<y;i++)正確:for(i=l;i<=y;i++)(2)錯誤:

t=t/1000;正確:t=t%1000;⑴錯誤:for:(i=l;i<y;i++)正確:for(i=l;i

<=y;i++)\r\n(2)錯誤:t=t/1000;正確:t=t%1000;解析:我們先用

簡單的思想理解一下該程序,如果當(dāng)x=y=l時,程序的問題出在哪兒?

很簡單吧,所以for(i=l;i<y;i++)的循環(huán)條件應(yīng)該是for(i=l;i++),

另外,t=t/1000;中的錯誤是混淆了和“%”的定義對這樣的細(xì)節(jié)問題

務(wù)必注意。

35.(1)錯誤:ifhigh%j

溫馨提示

  • 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

提交評論