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

下載本文檔

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

文檔簡介

2022年山西省呂梁市全國計算機等級考試

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

學校:班級:姓名:考號:

一、2.填空題(10題)

1.下列程序的功能是輸入一個整數(shù),判斷其是否是素數(shù),若為素數(shù)則輸

出1,否則輸出0。請?zhí)羁铡?/p>

#include<stdio.h>

main()

{inti,x,y=l;

scanf("%d",&x);

for(i=2;i<=x/2;i++)

if[]{y=0;break;}

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

2.設(shè)有以下定義:

structss

{intinfo;structss*link;}x,y,z;

且已建立如下圖所示鏈表結(jié)構(gòu),

xy

請寫出刪除點y的賦值語句【】。

3.下列程序的輸出結(jié)果是16.00,請?zhí)羁?

main()

(

inta=9,b=2;

floatx=【],y=l.1,z;

z=a/2+b*x/y+l/2;

printf("%5.2f\n",z);

)

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

voidreverse(inta[],intn)

{inti,t;

fbr(i=O;i<n/2;i++)

{t=a[i];a[i]=a[n+l+i];a[n-l-i]=t;}

}

main()

{intb[10]={l,2,3,4,5,6,7,8,9,10};inti,s=0;

reverse(b,8);

for(i=6;i<10;i++)s+=b[i];

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

}

5.以下程序可把輸入的十進制數(shù)以十六進制數(shù)的形式輸出,請?zhí)羁铡?/p>

#inelude<stdio.h>

main()

{eharb[17]={"0123456789ABCDEF"};

intc[64],d,i=0,base=16;

longn;

printf("Enteranumber:\n");

seanf("%ld",&n);

do{c[i]=[];i++;n=n/base;}

while(n!=0);

printf("Transmitenewbase:\n");

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

{d=c[i];printf("%c",b[]);}

printf("\n");

}

6.若a的值為1,則表達式!aII++a的值是____。

7.設(shè)有如下宏定義

#defineMYSWAP(z,x,y)

{z=x;x=y;y=z;}

以下程序段通過宏調(diào)用實現(xiàn)變量a,b內(nèi)容交換,請?zhí)羁铡?/p>

floata=5,b=16,c;

MYSWAP([]a,b);

8.性結(jié)構(gòu)中,第一個結(jié)點沒有前驅(qū)結(jié)點,其余每個結(jié)點有且只有【】

個前驅(qū)結(jié)點,?最后一個結(jié)點沒有后繼結(jié)點,其余每個結(jié)點有且只有【】

個后繼結(jié)點。

9.以下程序運行后的輸出結(jié)果是【】。

voidswap(intx,inty)

{intt;

t=x;x=Y;Y=t;printf("%d%d”,x,y);

)

main()

{inta=3,b=4;

swap(a,b);printf("%d%d",a,b);

10.以下程序運行后的輸出結(jié)果是____。

main()

(

inta,b,c;

a=25;

b=025;

c=0x25;

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

}

二、單選題(10題)

11.下面關(guān)于圖的存儲的敘述中,哪一個是正確的。

A.用相鄰矩陣法存儲圖,占用的存儲空間數(shù)只與圖中結(jié)點個數(shù)有關(guān),而與

邊數(shù)無關(guān)

B.用相鄰矩陣法存儲圖,占用的存儲空間數(shù)只與圖中邊數(shù)有關(guān),而與結(jié)點

個數(shù)無關(guān)

C.用鄰接表法存儲圖,占用的存儲空間數(shù)只與圖中結(jié)點個數(shù)有關(guān),而與

邊數(shù)無關(guān)

D.用鄰接表法存儲圖,占用的存儲空間數(shù)只與圖中邊數(shù)有關(guān),而與結(jié)點

個數(shù)無關(guān)

(27)下面函數(shù)調(diào)用語句含有實參的個數(shù)為().

fiinc((exp1,exp2),(exp3,exp4,exp5));

12.A)1B)2C)3D)5

13.

(1)線性表常采用的兩種存儲結(jié)構(gòu)是(

A)散列方法和索引方式B)鏈表存儲結(jié)構(gòu)和數(shù)組

C)順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)D)線性存儲結(jié)構(gòu)和非線性存儲結(jié)構(gòu)

14.在下列定義語句中,編譯時會出現(xiàn)編譯錯誤的是()。

A.chara='\x2d';B.chara='\n';C.chara='a';D.chara="aa";

15.

有以下程序

#include<stdio.h>

#include<string.h>

typedefstrllct{charname[9];charsex;floatscore[2];}STU;

STUf(STUa)

{STUb={"Zhao",m,85.0,90.0);inti;

strcpy(aname,b.name);

sex:b.sex;

for(i=0;i<2;i++)a,score[i]=b.score[i];

returna;

)

main

{STUc="Qian",f,95.0,92.0},d;

d=f(c),printf("%s,%c,%2.Of,%2.Of,d.Name,d.sex,d.score[0],

d.score[l]);

}

程序的運行結(jié)果是()。

A.Qian,f,95,92

B.Qian,m,85,90

C.Zhao,m,85,90

D.Zhao,f,95,92

16.有以下程序:

#include<stdio.h>

main

{shortC=124;

C=C_;

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

)

若要使程序的運行結(jié)果為248,應在下劃線處填入的是()。A.?2B.I248C.&0248

D.?l

17.if語句的基本形式是:if(表達式)語句,以下關(guān)于“表達式”值的敘述中

正確的是

A.必須是邏輯值B.必須是整數(shù)值C.必須是正數(shù)D.可以是任意合法的

數(shù)值

18.現(xiàn)有如下定義語句int*p,s[20],i;p=s;表示數(shù)組元素s[i]的表

達式不正確的是

A.*(s+i)B.*(p+i)C.*(s=s+i)D.*(p=p+i)

19.在位運算中,操作數(shù)每右移一位,其結(jié)果相當于()

A.操作數(shù)乘以2B.操作數(shù)除以2C.操作數(shù)除以16D.操作數(shù)乘以16

20.

18)若有代數(shù)式J式+e1,(其中e僅代表自然對數(shù)的底數(shù),不是變量),則卜.列能夠正確

表示該代數(shù)式的C語言表達式是().

A)sqrt(abs(nAx+eAx))B)sqrt(fabs(pow(n,x)+pow(x,e)))

C)sqrt(fabs(pow(n,x)+exp(x)))D)sqrt(fabs(pow(x,n)+exp(x)))

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

21.請編寫函數(shù)proc(),它的功能是:求出str所指字符串中指定字符的

個數(shù),并返回此值。例如,若輸入字符串12341234123,輸入字符4,

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

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

語句。試題程序:

SmcludeVconio.b>

$ancitxh<.Ubah>

9deftawNSI

m<procCchar?Mr?charc)

voidmainC)

(ciuir?(N]?chi

*ywt?n(*CLS*)i

printf(e\fiPl**AeEier.?inn*:*>i

???*<?)I

printfCmier■chart*)i

pnntf(*\nThenumberofthecharbtMd

\s".prtK<a?ch>)i

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

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

其功能是將一個數(shù)字字符串轉(zhuǎn)換成一個整數(shù)(不得調(diào)用C語言提供的將

字符串轉(zhuǎn)換成整數(shù)的函數(shù))。例如,若輸入字符串“-1234”,則函數(shù)把它

轉(zhuǎn)換成整數(shù)值-1234。

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

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

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

試題程序:

#include<stdio.h>

#include<string.h>

longfun(char*p)

(

)

voidmain()

chars[6];

longn;

printf("Enterastring:\n");

gets(s);

n=fun(s);

printf("%ld'n”,n);

}

23.某學生的記錄由學號、8門課程成績和平均分組成,學號和8門課程

的成績已在主函數(shù)中給出,請編寫函數(shù),其功能是:求出該學生的平均

分,并放入記錄的ave成員中。

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

則他的平均分應為78.875。

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

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

入你編寫的若干語句。

試題程序:

#include<stdio.h>

#defineN8

typedefstruct

(

charnum[10];

doubles[N];

doubleave;

}STREC;

voidfun(STREC*a)

voidmain

STRECs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};

inti;

fun(&s);

printf("The%ssstudentdata:\n",s.num);

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

printf("%4.Ifkn",s.s[i]);

printf("\nknave=%7.3fkn",s.aVe);

printf("\n");

24.規(guī)定輸入的字符串中只包含字母和*號。編寫函數(shù)fun,其功能是:刪

除字符串中所有的*號。編寫函

數(shù)時,不得使用c語言提供的字符串函數(shù)。

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

中的內(nèi)容應當

是:ABCDEFGO

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

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

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

的nclutk<ntdio.h>

voidfun(char?.)

mdin()

Irhiirs[81];

voidNONO();

printff**Enteraairing:\nH);gete(a)?

fun(*);

pm?f("Thesiringafterdeified:\nw);pul?(M);

\0N0():

2dNONO(>

"*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),除出數(shù)期.關(guān)閉文件.?/

F1IE-in.?out;

in!i;rhar?[8|];

in-fopm("in.d?lH,*r*);

ou!=(opcn(**out,<ki*wM);

for(i=();i<10;i*f)|

fscanf(in."%,?);

fun(a);

fpnntf(out."%八n".?)$

Glot?c(in);

out)?

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

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

數(shù)fun(),該函數(shù)的功能是將大于整數(shù)m且緊靠m的k個素數(shù)存入所

指的數(shù)組中。例如,若輸入17、5,則應輸出19、23、29、31、37。注

意:部分源程序在文件progl.c中。請勿改動主函數(shù)main。和其他函數(shù)中

的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。試題

程序:

1linclude<conio.h>

2#include<stdio.h>

3finclude<stdlib.h>

4voidfun(intm,intk,intxx[])

I{

6

H)

8voidmain()

9(

10FILE*wf;

IIintm,n,zz[1000];

12system(HCLSH);

13printf(M\nPleaseentertwoin-

渥tegers:M);

wM

14scanf(%d%dr&m,&n);

ul:fun(m,n,zz);

16for(m=0;m<n;m)

17printf(n%d”,zz[m]);

18printf(H\n;

19/

nMnw

20wf■fopen(out.datrw);

fun(17,5,zz);

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

fprintf(wf,n%d”,zz[m]);

fclose(wf);

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

}

26.規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,其功能是:

除了字符串前導的*號之外,將串中其他*號全部刪除。在編寫函數(shù)時,

不得使用c語言提供的字符串函數(shù)。

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

串中的內(nèi)容應當是:

****ABCDEFG。

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

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

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

#irw:ludt*<stdin,h>

voidfun(rhjir??)

main()

Ichars[81);voidNONO())

printf(*EnterAAiring:\n");

fun(n):

|irintf("Thestringafterdeleted:\n*);put?(?);

NONO();

voidNONO()

{/?本函敢用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),雉出數(shù)據(jù).關(guān)閉文件n*/

FILE?in,?out;

inti;char81];

in=fopen(*in.dat",**rH);

out=fopcn("out.dal,t,**w*);

for(>x0;i<10s>)I

fwcanfCin.**%s*,,);

fun(i)t

fprinlf(out.**%?\nw.*);

(C1OM(in);

lclose(out);

27.請編寫函數(shù)proc(),對長度為9個字符的字符串,除首、尾字符外,

將其余7個字符按ASCH碼值降序排列。例如,原來的字符串為

HabcdefA,則排序后輸出為HfedcbaA。注意:部分源程序給出如下。

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

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

Wmclud*Varis^f.h>

爹mcludrV?tdhbub>

gmdudt-VMdio.b>

UmcludrVctype.h>

9include<como.Ii>

voidproc<Huir?m?bumam)

void)

rluir

?ywtciaC*CLS*)i

priiu”??人9個字理的字找好J)i

proc(t?9)t

pnfitf(?\n%m.

28.

規(guī)定輸入的字符串中只包含字母和*號。編寫函數(shù)fun(),其功能是:

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

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

符串中的內(nèi)容應當是“ABCDEFG”。注意:部分源程序給出如下。請

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

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

gmcludek>

■includeVzdidh>

void(un<char?i)

voidmum<)

char

pniith*Enter■*<nntx\n-)i

■》a

print!(*ThcBtnngahrtdrlrted八Di

poii(t)i

29.假定輸入的字符串中只包含字母和*號。請編寫函數(shù)proc,它的功

能是:將字符串中的前導*號全部刪除,中間和后面的*號不刪除。

例如,若字符串中的內(nèi)容為****a*bc*de/g****,刪除后,字符串中

的內(nèi)容則應當是a*bc*de理g****。

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

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

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

試題程序:

#include<stdio.h=:{>

#include<conio.h>

woidproc(char*str)

(

)

voidmain

charstr[81];

printf("Enterastring:\n");

gets(str);

proc(str):

printf("Thestringafterdeleted:\n");

puts(str);}

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

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

數(shù)fun(),用來求出數(shù)組中值最大的元素在數(shù)組中的下標并將其存放在

k所指向的存儲單元中。

例如,輸入如下整數(shù):

876675896101301401980431451777則輸出結(jié)果為6,980。

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

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

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

1#include<conio.h>

2linclude<stdio.h>

3#include<stdlib.h>

4intfun(int?s,intt,int?k)

5{

6

7}

8voidmain()

9{

10FILE*wf;

Ilinta[10]={876,675,896,101,

301,401,980,431*51,777},k;

12system(MCLSM);

13fun(a,10,&k);

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

15/

16wf=fopen("out"w");

.17fprintf(wf,”%d,%d",k,a[k]);

18fclose(wf);

19/*****************/

20}

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

31.下列給定程序中,函數(shù)fun()的功能是:根據(jù)整型形參m的值,計算

如下公式的值。

l-l/(2x2)-l/(3x3)-...-l/(mxm)

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{doubley=1.0;

inti;

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

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

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

y-=l/(i*i);

return(y);

)'

main()

{intn=5;

clrscr();

printf("\nTheresultis%lf\n",fun(n));

)

32.下列給定程序中,函數(shù)fun()的功能是讀入一個字符串(長度<20),

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

例如:輸入dafhc,則應輸出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]<trjl)

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);

)

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

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

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

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

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

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

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

試題程序:

#include<string.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

{

inti,j,n;charch;

n=strlen(aa);

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

(

ch=aa[i];

j=i-l;

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

while((j>=0)||(ch>aa[j]))

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

j-/

)...........................................................

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

aa[j]=ch;

)

)

main()

(

chara[N]="JRTYDFKLIOPQWEGHMNBVCUASXZ";

inti;

printf("Theoriginalstring:%S\n",a);

insert(a);

printf("Thestringaftersorting:%S\n\n",a);

)

34.下列給定程序中,函數(shù)fun()的功能是:根據(jù)以下公式求n的值,并

作為函數(shù)值返回。例如,給指定精度的變量eps輸入0.0005時,應當輸

出Pi=3.140578o

n/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9.......

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(doubleeps)

{doubles,t;intn=t;

s=0.0;

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

t=l;

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

while(t>eps)

{s+=t;

t=t*n/(2*n+l);

n++;

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

return(s);

)

main()

{doublex;

printf("\nPleaseenteraprecision:");

scanf("%lf',&x);

printf("\nPi=%lf\n",fun(x));

35.下列給定程序是建立一個帶頭結(jié)點的單向鏈表,并用隨機函數(shù)為各

結(jié)點賦值。函數(shù)fun()的功能是:將單向鏈表結(jié)點(不包括頭結(jié)點)數(shù)據(jù)域

為偶數(shù)的值累加起來,并作為函數(shù)值返回。

其累加和通過函數(shù)值返回main。函數(shù)。例如,若n=5,則應輸出8.391667。

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

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

[試題源程序]

#include<stdio.h>

#include<stdiib.h>

typedefstructaa

{

intdata;

structaa*next;

}NODE;

intfun(NODE*h)

intsum=O;

NODE*P;

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

p=h;

while(P->next)

{

if(p->data%2==0)

sum+=p->data;

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

p=h->next;

)

returnsum;

)

NODE*creatlink(intn)

{

NODE*h,*p,*s,*q;

inti,x;

h=p=(NODE*)malloc(sizeof(NODE));

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

{

s=(NODE*)malloc(sizeof(NODE));

s->data=rand()%16;

s->next=p->next;

p->next=s;

p=p->next;

)

p->next=NULL;

returnh;

)

outlink(NODE*h,FILE*Pf)

NODE*p;

p=h->next;

fprintf(Pf,"\n\nTHELIST:\n\nHEAD");

while(P)

{

fprintf(Pf,>%d",p->data);p=p->next;

)

fprintf(pf,"\n");

}

outresult(ints,FILE*pf)

(

fprintf(Pf,"\nThesumofevennumbers:%d\n",s);

)

main()

(

NODE*head;inteven;

head=creatlink(l2);

head->data=9000;

outlink(head,stdout);

even=fun(head);

printf("\nTheresult:\n");outresult(even,stdout);

)

36.給定程序M0D11.C中函數(shù)fun的功能是:為一個偶數(shù)尋找兩個素

數(shù),這兩個素數(shù)之和等于該偶數(shù),并將這兩個素數(shù)通過形參指針傳回主

函數(shù)。

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

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

^include<stdio.h>

?include<math.h>

voidfun(inta,int*brint*c)

(int1,j,d,y;

for(i-3;i<-a/2;i-i42)(

/…………-found……■……/

Y-l;

for(j-2;j<-sqrt((double)i);

j++)

if(i%j??0)y?0;

if(y-1)(

/????,found**,,?

dw?a-i;

13for(j-2;j<-sqrt((double)d);

j++)________

if(d%j??0)y?0;

15if(y-1)

16{*b-i;*c-d;|

18

19

20main()

21(inta.b,G

22do

23(printf(w\nlnputa:*);scanf

(rd-,4a);)

24while(a%2);

25fun(a,&b.£c);

26printf("XnXnld-id?Qd\n”.a,b.c);

27

37.下列給定程序中,函數(shù)fun()的功能是:根據(jù)整型形參n,計算如下

公式的值。

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

例如,若n=10,則應輸出0.192582。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

floatfun(intn)

{.....................................................

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

intA=1;

inti;

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

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

A=1.0/(5+A);

returnA;

)

main()

{

intn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

,,

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

}

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

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

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

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

?include<stdio.h>

2*defineM5

3/?????”。口田

4intfun(intn,intxx[][])

5{inti,j9sum?0;

w

6printf("\nThe%dx%dmatrix:\n,

M,M);

7for(i-0;i<M;i+4)

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

9/found…………/

10printf(w%fxx[i][j]);

11printf(w\nR);

12}

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

14sum+-xx[i][i]*xx[i][n-i-1];

15return(sum);

16I

17main()

18{intaa[M][M)-{{1,2,3,4,5),

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

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

19printf(H\nThesumofallelements

on2diagnalsis%d.fun(Mraa));

20

39.下列給定程序中,函數(shù)fun()的功能是:計算s所指字符串中含有t

所指字符串的數(shù)目,并作為函數(shù)值返回。

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

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

試題程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

#defineN80

intfun(char*s,char*t)

{intn;

char*p,*r;

n=0;

while(*s)

{P=s;

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

r=P;

while(*r)

if{*r==*p){r++;p++;}

elsebreak;

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

if(*r==0)

n++;

s++;

)

returnn;

)

main()

{chara[N],b[N];intm;

clrscr();

printf("\nPleaseenterstringa:");

gets(a);

printf("\nPleaseentersubstringb:");

gets(b);

m=fun{a,b);

printf("\nTheresultis:m=%d\n",m);

)

40.給定程序中函數(shù)fun的功能是:根據(jù)整型形參m,計算如下公式的

值。

例如,若m中的值為5,則應輸出:1.463611。

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

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

[試題源程序]

#include<stdiO.h>

doublefun(intm)

(

doubley=1.0;

inti;

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

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

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

y+=l/(i*i);

retum(y);

)

main()

(

intn=5;

printf("\nTheresultis%1f\n",fun(n));

)

五、程序改錯題(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)。試題程序:

nincludeVNdg.

proHmt<>

//????found????

swiidi(g)i

cawOtreturnOi

//????lound????

CBM11CSMi?mum11

rvium<proc(t1)4procfg2)1i

voidlaainC)

lon<AbiMMnt

phtitfc*Input■?&f>>i

pntirf<*a?%d'n'.nh

fibmproc<n)t

prmtfC.fibMKd\n\n*.5b)i

42.下列給定程序中,函數(shù)proc()的功能是:在字符串str中找出ASCH

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

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

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

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

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

構(gòu)。

試題程序:

#include<?tdio.h>

//????found*???

voidproc(chart)

(

charmax,■qiinii=01

max=t[i].

while=0)

(

if

{

//**??found????

t=q+i;max=t[ijj

)

i++$

}

while(q>O

<

?q??(q-1)?

q------I

}

t[o]-max,

)

voidmain()

charstr[80j?

printfC"Enterastring:w)?gcts(Mr)t

printfCH\nTheoriginalstring:*)t

puts(str)i

proc(s(r)t

printf(*\nThesiringaftermoving:M)\

pul^(^tr)sprinif("\n\n*)?

六、操作題(2題)

43.以下函數(shù)的功能是刪除字符串s中的所有數(shù)字字符。請?zhí)羁铡?/p>

voiddele(char*s)

(

intn=0,i;

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

if([1)

s[n++]=s[i];

s[n]=[】;

)

44.funl函數(shù)的功能是將3個整數(shù)按由大到小的順序調(diào)整后依次放入a、

b、c3個變量中,a中放最大數(shù),fun2函數(shù)的功能是交換兩個變量中的

值。補足所缺語句。

fun2(int*x,int*y)

{intt;

t=*x;*x=*y;*y=t;

)

funl(int*pI,int*p2,int*p3)

{if(*p3>*p2)fun2(*P2,*p3);

if(*pl<*p3)fun2();

if(*pl<*p2)fun2();

)

main()

{inta,b,c;

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

funl(&a,&b,&c);

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

參考答案

l.(x%i==O)(x%i==O)解析為判數(shù)x是否是素數(shù),預置變量y的值為l(x

可能是素數(shù)),然后用2至x/2的整數(shù)i測試對x的整除性,若x能被其

中的某個整數(shù)整除,則x是合數(shù),置y的值為。(即x不是素數(shù)),結(jié)束

循環(huán)測試;若循環(huán)中i都不能整除X,則x為素數(shù)。一般可用求余運算

x%i是否等于0來判定i能否整除x,所以程序中的空格處可填(x%i==O)。

2.x.link=&z;或x.link=y.link;或x.link=x.link->link;或

x.link=*(x.link).link;x.link=&z;或x.link=y.link;或x.link=x.link->link;

或x.link=*(x.link).link;解析:要刪除結(jié)點y,只需讓結(jié)點x的指針域

指向y結(jié)點的指針域所指向的后續(xù)結(jié)點就可,因此把結(jié)點z的地址賦給

x的指針域就可以了,即讓結(jié)點x的指針域指向結(jié)點zo而結(jié)點z的地

址保存在結(jié)點y的指針域中,因此只需把結(jié)點y的指針域賦值給結(jié)點X

的指針域即可。

解析:本題,已知結(jié)果z=16.00,即16.0=a/2+b*x/y+l/2,分別

把a、b,代入,得到16.0=9/2+2*x/l.l+l/2。因為a=9,a是整型,所以

9/2的值在沒有進行類型轉(zhuǎn)換時,等于4,1/2同理,等于0。代入求一

元一次方程,很容易就可以得出x=6.6o

4.

在main函數(shù)中,調(diào)用reverse函數(shù)將b數(shù)組中的前8個成員進行互

置,執(zhí)行完畢后,b數(shù)組中的成員為{8,7,6,5,4,3,2,1,9,

10),然后再執(zhí)行for循環(huán)結(jié)構(gòu),將b[6],b[7]…b[9]的值相加,結(jié)果為

盟。

\r\n

\r\n

5.n%base[d]n%base[d]解析:程序中的字符數(shù)組b存儲了十六進制16

個數(shù)字的字符,整型數(shù)組C用于存儲轉(zhuǎn)換的十六進制數(shù)的各位數(shù)值。將

整數(shù)n轉(zhuǎn)換成它的各位十六進制數(shù)值,需采用除以16取余的方法,即

求n除以16的余,得到它的十六進制的末位數(shù),接著將n除以16,在

n不等于0的情況下循環(huán),順序求出n的十六進制的倒數(shù)第一、第二、

第三位數(shù)等。程序中變量base已預置16,所以在第一處填n%base。當

n的十六進制數(shù)的倒數(shù)第一、第二、第三位等依次存放于數(shù)組c中后,

就從最高位至最低位,參照數(shù)組c[i]的內(nèi)容d(以其內(nèi)容為下標),取十六

進制數(shù)字符表中的字符b[d)輸出,所以在第二處填[d]。

6.11解析:邏輯運算中,非1即0,非。即1,!a=0,++a為邏輯1,所

以。和1相或結(jié)果為lo

7.cc解析:該題考查以下兩個知識點:

⑴用一個指定的標識符(即名字)來代表一個字符串,它的一般形式為

#define標識符字符串

(2)在MYSWAP宏定義中,利用中間變量z來交換x和y的值,所以要

實現(xiàn)a和b的交換,只需通過中間變量即可,所以,此處應填c。

8.11

9.43344334解析:函數(shù)的參數(shù)傳遞形參的改變不會影響實參的值。

調(diào)用函數(shù)swap(x,y)時,將x,y進行交換再輸出,輸出為43,但主

函數(shù)中的a、b值并沒有改變,最后輸出a、b的值,為34。

10.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。

11.A

12.B

13.C

14.DD選項中將字符串常量“aa”賦給字符變量a是錯誤的。故本題答案

為D選項。

15.Cf函數(shù)的功能是對形參a的各個成員用結(jié)構(gòu)體變量b的各個成員進

行賦值后,然后返回變量a。

16.D

124的2進制值為1111100,要輸出為248即124*2,則2進制值為

11111000,即右移1位,所以選D。

17.D

18.C解析:當p指向s數(shù)組的首地址時,表示數(shù)組元素s[i]的表達式應

當有:①s[i],②,(s+i),③*(p+i),④p[i]四種形式。選項C)錯誤的原

因是,數(shù)組的地址是不可變的,指針的地址是可以變的。

19.B

20.C

21.

【解析】求出str所指字符串中指定字符的個數(shù),可以通過將str所指字

符串中每一個字符與指定字符相比較,變量i中存放字符串中指定字符

的個數(shù),最后返回給主函數(shù)。

22.longfun(char*p)

(、

longn=0;

intflag=l;

if(*p==,」)/*負數(shù)時置flag為-1*/

{p++;flag=-l;}

elseif(*p==4+,)/*正數(shù)時置flag為1*/

P++;

while(*p!=t\0,)

{n=n*10+*p-\(T;/*將字符串轉(zhuǎn)換成相應的整數(shù)*/

P++;

returnn*flag;

if語句的作用是判斷該字符串為正數(shù)還是負數(shù),while循環(huán)的作用是將

字符串轉(zhuǎn)換成相應的整數(shù)。注意:*P是一個字符(如9、4),并不是一

個數(shù),要將其轉(zhuǎn)換成相應的數(shù)字需令其減去'0'(而不是'\\0'),即*止'0'就

得到*P這個字符的相應數(shù)字,如0-0=0、8-0=8等。

23.voidfun(STREC*a)

\n{

\ninti;

\na->ave=O.0;

\nfor(i=0;i<N;i++)

\na->ave=a->ave+a->s[i];

\n/*求各門課程成績的總和*/

\na->ave=a->ave/N;/*求平均分*/

\n}

\n【解析】本題考查的是指向結(jié)構(gòu)體類型的指針變量做參數(shù)和結(jié)構(gòu)體類

型成員的運算。fun函數(shù)中求出平均成績,要帶回主函數(shù)則必須定義一

個指針類型的形參STREC*a,同時引用成員使用指向運算符,a-〉ave和

a->s[i]o

\n

24.

【考點分析】

要刪除字符串中所有*號需要用循環(huán)語句遍歷字符串,用

判斷語句判斷字符是否為*號,由此可以決定該程序應使用循

環(huán)判斷結(jié)構(gòu)。

【解題思路】

25.1voidfun(intm,intk,intxx[])

2{

3inti,j,n;

4for(i=m+l,n=0;n

<k;i++)p*<>找大于m的素數(shù),循環(huán)k次,即找出緊靠m的k個素數(shù)

*/5{for(j=2;j<i;j++)p*#]斷一<>個M否為素數(shù),如果不是,跳出此循環(huán),

判斷下一個數(shù)*/6if(i%j==0)break;7if(j>=i)/*如果是素數(shù),存入數(shù)組XX中

*/8xx[n++]=i;9}10}本題主要考查素數(shù)的判定方法。如果一個數(shù)不能被除

了1和其自身以外的數(shù)整除,則這個數(shù)為素數(shù)。本程序使用循環(huán)語句控

制需要判斷的數(shù),在循環(huán)體中判斷該數(shù)是否為素數(shù),若是則存入數(shù)組XX

中。當數(shù)組XX的素數(shù)個數(shù)為k個時,退出循環(huán)。</i;j++)p*#]斷一

<></k;i++)p*<>

26.

程序設(shè)計題解析:

【考點分析】

本題考查:指針型變量定義;while循環(huán)語句;if語句條件表達式;字

符串結(jié)束標識、(V。

【解題思路】

函數(shù)fun的功能:除了字符串前導的*號之外,將串中其他。號全部刪

除。解答本題,(1)定義一個臨時指針P,初始指向原串首地址;(2)利

用循環(huán)語句把字符串前導*號拷貝到原串;(3)繼續(xù)移動指針,把串中和

串尾的非*號字符拷貝到原串;(4)為修改后的字符串賦結(jié)束字符,NT。

【解題寶典】

要刪除字符串中的指定字符,通常采用保留非指定字符的方法??梢?/p>

將非指定字符保留在原串,即將需要保留的字符從原串的起始位置重

新賦值;也可以保留到新串,即新建一個字符串,存放要保留的字

符。

27.

【解析】按照題目中要求,求除首、尾字符外,將其余7個字符按ASCII

碼值降序排列。首先需要判斷除首、尾字符之外,其余7個字符ASCII

碼值的大小,將不符合順序要求的字符互換。

28.

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

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

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

后的字符串輸出即可。

29.\n\tvoidproc(char*str)\n

\n

\n\t{\n

\n

\n\tchar*p=str:\n

\n

\n\twhile(*p==*)p++;//通過P的移動來達\n

\n

\n\t到使P指向第一個不是*號的字符\n

\n

\n\tfor(;*p!=\0;p++,str++)//把從第一個巾

\n

\n\t不是*號的字符放到a中,\n

\n

\n\t*str=*P:\n

\n

\n\t*str=\0;//最后用\0作為字符串結(jié)束標志\n

\n

\n\t}\n

\n

\n\t【解析】題目中要求將字符串中的前導*號全部刪除首先將指針p

移動到第一個不是*的字符,將指針P之后的字符放入原來的字符串

中,并為新的字符串添加結(jié)束符。\n

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

2{

3Inti;

4*k=0;/*k所指的數(shù)是數(shù)組的下

5標*/

6for(i=0;i<t;i++)hif(s[*k]<s[i])*k=i;/*找到數(shù)組中值最大的元素,把該元

素的下標賦給k所指的數(shù)*/

7returns[*k];/*返回數(shù)組的最大元素*/

8)

<t;i++)

<>本題中使用指針變量k作為值最大的元素的下標。使用時要注意對

k進行指針運算。程序一開始讓k指向數(shù)組中的第1個元素,即

*k=0o通過for循環(huán)與數(shù)組各個元素比較,找到最大值。<></t;i++)

31.(1)錯誤:for(i=2;i<m;i++)正確:for(i=2;i<=m;i++)(2)錯誤:y-

=l/(i*i);正確:y-=1.0/(i*i);⑴錯誤:for(i=2;i<m;i++)正確:for(i=2;i

<=m;i++)\r\n(2)錯誤:y-=l/(i*i);正確:y-=1.0/(i*i);解析:該題是

一道簡單的計算題,循環(huán)條件for(i=2;i<m;i++)中忽略了i=m時的一種

情況,因為題目中i是從2到m的一個計算公式,y-=l/(i*i);的錯誤很

明顯,是語法錯誤,由定義doubley=1.0可知,應該是y-=1.0/(i*i);,而

非y-=l/(i*i);o

32.(1)錯誤:intfun(chart

溫馨提示

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

評論

0/150

提交評論