2021年湖南省岳陽市全國計算機等級考試C語言程序設計真題(含答案)_第1頁
2021年湖南省岳陽市全國計算機等級考試C語言程序設計真題(含答案)_第2頁
2021年湖南省岳陽市全國計算機等級考試C語言程序設計真題(含答案)_第3頁
2021年湖南省岳陽市全國計算機等級考試C語言程序設計真題(含答案)_第4頁
2021年湖南省岳陽市全國計算機等級考試C語言程序設計真題(含答案)_第5頁
已閱讀5頁,還剩38頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2021年湖南省岳陽市全國計算機等級考試

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

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

一、2.填空題(10題)

1.軟件維護活動包括以下幾類:改正性維護、適應性維護、【】維護和

預防性維護。

2.對軟件是否能達到用戶所期望的要求的測試稱為【】。

3.若有以下程序:

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%d\n",a,b,C);

)

執行后輸出結果是【】。

4.當循環隊列非空且隊尾指針等于隊頭指針時,說明循環隊列已滿,不

能進行入隊運算。這種情況稱為【】。

5.已有定義如下:

structnode

{intdata;

structnode*next;

)*P;

以下語句調用malloc函數,使指針p指向一個具有structnode類型的動

態存儲空間。請填空。

p=(structnode*)malloc([]);

6.下列程序的運行結果是____o

main()

{inti,a[10];

a[0]=a[l]=l;

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

a[i]=a[i-2]+a[i-l];

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

{if(i%2==0)printf("\n");

printf("%d",a[i]);

)

)

7.以下程序的輸出結果是【】。

voidreverse(inta[],intn)

{inti,t;

for(i=0;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);

8.函數mycmp(char*s,char*t)的功能提比較字符串s和t的大小,當s等

于t時返回0,當s>t返回正值,當s<t時返回負值。請填空。

mycmp(char*s,char*t)

{while(*s==*t)

{if(*s=='\0')return0;

++s;++t;

)

return([])

)

9.在面向對象方法中,類之間共享屬性和方法的機制稱為o

10.關系代數是關系操作語言的一種傳統表示方式,它以集合代數為基

礎,它的運算對象和運算結果均為()。

二、單選題(10題)

11.有以下程序段

#include<stdio.h>

voidfun(char*fname,char*st)

{FILE*myf;

inti;

myf=fopen(fname,"w");

for(i=O;i<strlen(st);i++)iputc(st[i],myf);

fclose(myf);

main()

{fun("test.t","newworld");

fun("test.t","hello,");}

程序執行后,文件test.t中的內容是

A.A.hello,

B.newworldhello,

C.newworld

D.hello,rld

12.下面程序的輸出結果是o#include<stdio.h>

main(){char*p[]={"BOOL","OPK","H","SP"};inti:for(i=3;i>

=0;i-,i-)printf("%c",*p[i]);printf("\n");!

A.SOB.SPC.SPOPKD.SHOB

13.

(5)數據庫設計的四個階段是:需求分析、概念設計、邏輯設計和().

A)編碼設計B)測試階段C)運行階段D)物理設計

14.有以下程序:

intfun(intx)

{intp;

if(x==0||x==l)return(3);

p=x-fun(x-2);

returnp;

mam

{printf("%d\n",fun(7));}

執行后的結果是()。

A.7B.3C.2D.O

15.關于C語言中數的表示,以下敘述中正確的是()o

A.只有整型數在允許范圍內能精確無誤地表示,實型數會有誤差

B.只要在允許范圍內整型數和實型數都能精確地表示

C.只有實型數在允許范圍內能精確無誤地表示,整形數會有誤差

D.只有用八進制表示的數才不會有誤差

16.給出以下定義:charx止"abcdefg";chary口={宜,};則正確

的敘述為()。

A.數組x和數組y等價B.數組x和數組y的長度相同C.數組x的長度

大于數組y的長度D.數組x的長度小于數組y的長度

17.有以下程序(提示:程序中fseek(fp-2L*sizeof(int),SEEK_END);語

句的作用是使位置指針從文件末尾向前移2*sizeof(ing)字節)#include

<stdio.h>main(){FILE*fp;inti,a[4]={l,2,3,4},b;

fp=fopen("data.dat","wb");for(i=0;i<4;i++)fwrite(&a[i],sizeof(int),l,fp);

fclose(fp);fp=fopen("data.dat","rb");fseek(fp,-2L*sizeof(int),SEEK_END);

fread(&b,sizeof(int),l,fp);/*從文件中讀取sizeof(int)字節的數據到變量

b中*/fclose(fp);printf("%d\n",B);}執行后輸出結果是

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

18.在一個無向圖中,所有頂點的度數之和等于所有邊數的()倍。

A.1/2B.1C.2D,4

29)有以下程序:

/include<stdio.h>

intf(intt[],intn);

main()

{inta[4]={l,2,3,4J,s;

s=f(a,2);printf(,'%d\n,,,s);

}

intRintt[],intn)

{if((n>0)&&(n<5))returnt[n+1]+f(t,n-l);

elsereturn0;

}

程序運行后的輸出結果是()。

19.A)4B)7C)10D)6

20.函數filecopy的功能是,將fin所指文件中的內容輸出到fout所指文

件中,但函數不完整:

voidfilecopy(FILE*fin,FILE*fout)

{charch;

ch=getc(fin);

while()

{putc(ch,fout);

ch=getc(fin);

)

)

其中下劃線處應填入的是OO

A.!feof(fin)B.!feof(fout)C.feof(fin)==lD.feof(fout)==l

三、程序設計題(10題)

21.

請編寫fun()函數,其功能是:計算并輸出3?m所有素數的平方根之

和。例如,若主函數從鍵盤給m輸入50后,則輸出為s=63.665791。

注意:m的值要大于2但不大于100o部分源程序給出如下。請勿改動

main()函數與其他函數中的任何內容,僅在函數fun()的花括號中

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

9b>

3tncliMleVitdio.h>

cicMiblciatm>

voidm*in()

UMMII

douMv*|

FILE?ouu

*\n\nlnpuim.*)i

*on”-%d.?&■》.

fun<in)a

pnfi<R*\n\n?wK(\n\n**>>?

out■fop<flk(e<MtGW.dat-?*w*》?

lor(tn-OimVl(hnB++)

fpnniftour??%f\?*?(un<m十SO))3

kkuc^out11

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

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

若字符串中的內容為****a*bc*def*g。***,刪除后,字符串中的內容則

應當是****a*bc*def*g。注意:部分源程序給出如下。請勿改動主函

數main和其他函數中的任何內容,僅在函數proc的花括號中填入所編

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

與includeVwtd*o.h>

winclwicVcomcKh>

voidproHehar?*tr)

voednuam<>

rluif*C,I

pnntfea&)vcr?MrifmAti*)i

l>roc<?>i

phnt(<*Th?**trmgaftrrdelrtr(ii\f>)t

put><*><

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

例如,字符串中原有的字符串為asdf9,則調用該函數后,串中的內容為

9fdsao

請勿改動main函數和其他函數中的任何內容,僅在函數proc的花括號

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

試題程序:

#include<string.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidfun(char*str)

(

)

voidmain

(

chara[N];

FILE*out:

printf("Enterastring:");

gets(a);

printf("Theorigiralstringis:");

puts(a);

fun(a):

printf("Thestringaftermodified:");

puts(a);

strcpy(a,"Welcome!");

fun(a);

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

fprintf(out,"%s".a);

fclose(out);

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

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

其功能是將s所指字符串中ASCII值為奇數的字符刪除,將剩余字符形

成的新字符串放在t所指數組中。

例如,若s所指字符串中的內容為“ABCDEFG12345”,其中字符A的

ASCII值為奇數,字符1的ASCII值也為奇數,都應當刪除,其他依

此類推。最后t所指的數組中的內容應是“BDF24”。

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[])

(

)

main()

(

chars[100],t[100],Msg[]=cTleaseenterstrings:";

printf(Msg);

scanf("%s”,s);

fun(s,t);

printf("\nTheresuit

)

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

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

其功能是找出一維整型數組元素中最大的值及其所在的下標,并通過形

參傳回。數組元素中的值已在主函數中賦予。

主函數中x是數組名,n表示x中的元素個數,max存放最大值,

index存放最大值所在元素的下標。

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

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

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

試題程序:

#include<time.h>

#include<stdlib.h>

#include<stdio.h>

voidfun(inta[],intn,int*max,int*d)

(

)

voidmain()

(

inti,x[20],max,index,n=10;

srand((unsigned)time(NULL));

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

(

x[i]=rand()%50;

printf("%4d,,,x[i]);

/*輸出一個隨機數組*/

)

printf(n\nH);

fun(xfnf&max,&index);

printf("Max=%5d,Index=%4d\n^^,max,index);

}

26.編寫函數proc(),它的功能是求m以內(不包括m)同時能被5與11

整除的所有自然數之和的平方根s,并作為函數值返回。

例如,m為100時,函數值應為s=7.416198o

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

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

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

試題程序:

#includeVstdlib.h>

*include<conio.h>

#includeVmaih.h>

#include<stdio.h>

doubleproc(intn)

voidmain()

(

system("CI-S")i

printf("s=%f\n".proc(100))i

27.

函數fun的功能是:將s所指字符串中下標為偶數同時ASCII值為奇數

的字符刪除,S所指串中剩余的字符形成的新串放在t所指的數組中。

例如,若s所指字符串中的內容為“ABCDEFG12345”,其中字符C的

ASCII碼值為奇數,在數組中的下標為偶數,因此必須刪除;而字符1的

ASCII碼值為奇數,在數組中的下標為奇數,因此不應當刪除,其他依

此類推。最后t所指的數組中的內容應是"BDF12345"o

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

請勿改動main函數和其他函數中的任何內容,僅在函數fun的花括號

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

試題程序:

#iDclude<stdio.h>

include<string.h>

voidfun(char*s?chart[D

(

)

mmn()

{.

chars[100],t[100];

printf(H\nPleaseenterstringS:n);

s);

fun(s.t);

printf("\nThereAultis:%s\nn,t);

)

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

的項目中包含一個源程序文件pggl.c。在此程序中,編寫函數fun(),

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

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

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

例如,當a=45,b=12,調用該函數后c=1425。

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(inta,intb,long*c)

main()

(

inta,b;

longc;

printf^Inputa,b:");

scanf^%d%d,,,&a,&b);

fun(a,b,&c);

printff'Theresultis:%ld\n,,,c);

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

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

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

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

語句。試題程序:

0inductVa如hh>

sinclude

SinciudeVnufecxh>

■NSI

in<pvocCcImr?Ur.rharc)

VtkidlIIMlillC)

(ciuirchi

*CLS*)?

prtBtfCe\nPleaRtEire??ir?ngi*>i

I

printfCa\nP1e?Mrmer■chart

ch-getch”()i

printfCe\nThenumberofthecharIJ?<Xd

?pcocKa?ch))<

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

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

該函數的功能是求出二維數組周邊元素之和,作為函數值返回。二維數

組中的值在主函數中賦予。例如,若二維數組中的值為

13579299946999813570則函數值為61。注意部分源程序在文件progl.c

中。請勿改動主函數main()和其他函數中的任何內容,僅在函數fun()的

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

l#include2#include3#include4#defineM45#defineN56intfun(inta[m][n])7{8

9}10voidmain()ll{12FILE*wf;13intaa[M][N]={{l,3,5,7,9},{2,9,9,9,4},{6,

9,9,9,8},{l,3,5,7,0}};14inti,j,y;15system("CLS");16printf("Theoriginaldatai

s:\n");17for(i=0;i<m;i++)

18{for(j=0;j<n;j++)

19printf("%6d",aa[i][j]);20printf("\n");21}22y=fun(aa);23printf("\nThesum:

%d\nM,y);24printf("\n");25/******************/26wf=fopen("out.dat","

w");27fprintf(wf,"%d",y);28fclose(wf)29/******************/30}

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

31.下列給定程序是建立一個帶頭結點的單向鏈表,并用隨機函數為各

結點數據域賦值。函數fun()的作用是求出單向鏈表結點(不包括頭結點)

數據域中的最大值,并且作為函數值返回。

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

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

typedefstructaa

{intdata;

structaa*next;

}NODE;

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

fun(NODE*h)

{intmax=-1;

NODE*p;

p=h->next;

while(p)

{if(p->data>max)

max=p->data;

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

p=h->next;

returnmax;

}

outresult(ints,FILE*pf)

{fprintf(pf,"\nThemaxinlink:%d\n

",s);J

NODE*creatlink(intn,intm)

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

inti,x;

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

h->data=9999;

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

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

s->data=rand()%m;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,"\nTheLIST:\n\nHEAD");

while(p)

{fprintf(pf,>%d",p->data);

p=p->next;}

fprintf(pf,"\n");

)

main()

{NODE*head;intm;

clrscr();

head=creatlink(12,100);

outlink(head,stdout);

m=fun(head);

printf("\nTheRESULT:\n");outresult

(m,stdout);

)

32.給定程序MODII.C中函數fun的功能是:將長整型數s中每一位

上為偶數的數依次取出,構成一個新數放在t中。高位仍在高位,低位

仍在低位。

例如,當s中的數為:87653142時,t中的數為:8642。

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

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

tinclude<stdio.h>

2voidfun(longs,long*t)

3{intd;

4longsl?l;

5?t-0;

6while(s>0)

7{d=s%10;

8founcjw

9if(d%2-0)

10(*t?d*sl**t;

11si**10;

12

13/?????*******found*****??****?/

14s\-10;

15)

16)

17main()

18{longs,t;

19printf("\nPleaseenters:R);

HR

scanf(%ldr&s);

20fun(s,6t);

Rw

21printf(Theresultis:%ld\nrt);

22

33.下列給定程序中,函數fun。的功能是;求出兩個數的最大公約數,

并作為函數值返回。例如,若給numl和num2輸入49和21,則輸出

的最大公約數為7:若給numl和num2分別輸入27和81,則輸出最大

公約數為27o

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

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<stdio.h>

intfun(inta,intb)

{intr,t;

if(a<b)

/******************found*****************I

{t=a;b=a;a=t;}

r=a%b;

while(r!=0)

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

/******************found*****************I

return(a);

)

main()

{intnuml,num2,a;

printf("Inputnumlnum2:");scanf("%d%d",&numl,&num2);

printf("numl=%dnum2=%d\n\n",numl,num2);

a=fun(numl,num2);

printf("Themaximuncommondivisoris%d\n\n",a);

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

數的數依次取出,構成一個新數放在沖。高位仍在高位,低位仍在低位。

例如,當s中的數為87653142時,t中的數為8642。

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

注意:不要改動main,?數,不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(longs,long*t)

{intd;

longsl=l;

*t=0;

while(s>0)

{d=s%10;

if(d%2=0)

{*t=d*sl+*t;

sl*=10

s\=10;

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");scanf

("%ld",&s);

fun(s,&t);

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

35.給定程序M0D11.C中函數fun的功能是:找出100至n(不大于

1000)之間三位數字相等的所有整數,把這些整數放在s所指數組中,個

數作為函數值返回。

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

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

1;tinclude<stdio.h>

2!tdefineN100

3intfun(int*s,intn)

4(int

5j-0;

6for(i?100;i<n;i++)(

7/???????★★??★/found/★

8k?n;

9a-k%10;k/-10;

10b=k%10;k/-10;

11/★…………[。口代?…………/

12c-k%10

13if(a-b&&a??c)s[j++]wi;

14)

15returnj;

16)

17main()

18{inta[N],n,num?0,i;

19do

20{printf(R\nEntern(<*1000):

www

);scanf(%dr&n);}

21while(n>1000);

22num-fun(a,n);

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

w

24for(i?0;i<num;i-H-)printf("%5d9

a[i]);

25printf(w\n\nw);

26

36.給定程序M0D11.C中函數fun的功能是:統計一個無符號整數中

各位數字值為零的個數,通過形參傳回主函數;并把該整數中各位上最

大的數字值作為函數值返回。例如,若輸入無符號整數30800,則數字

值為零的個數為3,各位上數字值最大的是8。

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

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

tinclude<stdio.h>

2intfun(unsignedn,int*zero)

3{intcount?0,max=0ft;

4do

5(t-n%10;

6

7if(t-0)

8counts*;

9if(max<t)max?t;

10n^n/lO;

11}while(n);

12/???★★?found/

13zero?count;

14returnmax;

15}

16main()

17{unsignedn;intzero,max;

18printf(w\nlnputn(unsigned):

scanf&n);

19max-fun(n,&zero);

20printf(w\nTheresult:max=%dzero=

%d\n”,max,zero);

21

37.給定程序MOD11C中函數fun的功能是根據形參m的值(2SmS9),

在m行m列的二維數組中存放如下所示規律的數據,由main函數輸

出。

例如,若輸入2|若輸入4

則輸出:|則輸出:

12|1234

24|2468

|36912

481216

請改正程序函數中的錯誤,使它能得出正確的結果。

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

finclude<conio.h>

2#include<stdio.h>

3#defineM10

4inta[M][M]-{0};

5/??www*w***w**founcj*w******

6voidfun(int**arintm)

7(intk;

8for(j?0;j<m;j++)

9for(k?0;k<m;k++)

10/??????一★★★★★found*

11a[j][k]-k*j;

12}

13main()

14(inti,j,n;

15printf(MEntern:H);scanf

w

(%d"r&n);

16fun(a,n);

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

18{for(j-O;j<n;ji)

19printf("4d。a[i][jl);

20printf(H\nw);

21

22

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

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

返回其下標值:反之,則返回-1。

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

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

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

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

>high,查找結束。

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

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<stdio.h>

#defineN10

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

voidfun(inta[],intm)

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

while(low<=high)

{mid=(low+high)/2;

if(m<a[mid])

high=mid-l;

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

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數組中的數據如下:");

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

39.下列給定程序中,函數fun()的功能是:輸出M行N列整數方陣,

然后求兩條對角線上的各元素的平方和,返回此和數。

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

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<conio.h>

#include<stdio.h>

#defineM5

intfun(intn,intXX[][M])

(

inti,j,sum=O;

printf("\nThe%dx%dmatrix:\n",M,M);

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

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

/*************^ound*************I

printf("%4d",XX[ij]);

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

printf('\n');

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

sum+=xx[i][i]*XX[i][i]+XX[i][n-i-1]

*XX[i][n-i-l];

return(sum);

)

main()

intaa[M][M)={{3,12,4,24,35),

{11,3,3,7,56},{61,27,58,49,24},

{17,28,7,36,85},{15,33,5,24,9});

clrscr();

printf("\nTheresultofallelementson2

diagnalsiS%d",fun(M,aa));

40.給定程序MODU.C中函數fun的功能是;從低位開始取出長整型

變量s中偶數位上的數,依次構成一個新數放在t中。高位仍在高位,

低位仍在低位。

例如,當s中的數為:7654321時,t中的數為:642。

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

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

1linclude<stdio.h>

2

3voidfun(longs,longt)

4(longsl-10;

5s/?10;

6*t-s%10;

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

8while(s<0)

9ss/100;

10*<s%10*sl?*t;

11si?10;

12

13

14main()

15(longs,t;

16printf(w\nPleaseenters:");scanf

("Id”,&s);

17fun(s,&t);

MH

18printf(Theresultis:%ld\nrt);

19

五、程序改錯題(2題)

41.下列給定程序中,函數proc()的功能是:給定n個實數,輸出平均

值,并統計平均值以上(含平均值)的實數個數。

例如,n=8時,輸入90.009,179.623,167.575,100.051,

6.092,154.986,12.432,45.765,所得平均值為94.566635,

在平均值以上的實數個數應為4o

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

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

構。

試題程序:

9mdudeVzdhh

彩mcludrVerno.

9include<sldi(x.

mtproHfloati£j?mtn)

I『,'????found????

mte-OaflfMHxa*0.0i

forRni

??'-nOJ/ni

prmifCSa*)i

(or(j-0i

if(M>

?i

murnci

midmam()

Hoet90.009.179.623.

1$7.$?5dOO.O5U

6?092??

12432.4S765,

?y?ietv><WCI5")?

?1))i

42.

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

并作為函數值返回。

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

numl和num2分別為27和81,

則輸也的最大公約數為27o

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

注意:不要改動main函數,不得增行或硼行,也不得更改程序的結構!

試題程序:

#tnclude<stdio.h>

iirtfiiD(>nt33ntb)

{int儂

if(a<b)

[4b==a^=l;

/****************《1md*****************/

)

r=a%b;

while(r!=O)

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

/*m“*******%11a[********?********/

I

voidmain()

{intnuml,num2ta;

,printf(MInputnum!num2:");

$canf(M%d%d,\&numl,&num2);

num1=%dnum2=%d\n\n*num1,num2);

a71un(numlfnum2);

ma)dn)uncommondivisoris%d\n\n"破

六、操作題(2題)

43.下列程序的運行結果是

#definePOW(r)(r)*(r)

main()

{intx=3,y=2,t;

t=POW(x+y);

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

44.請編寫函數fun,函數的功能是:將大于形參m且緊靠m的k個素

數存入xx所指的數組中。例如,若輸入17,5,則應輸出:19,23,

29,31,37o

注意:部分源程序在文件PROGLC文件中。

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花插

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

tinclude<stdio.h>

2Voidfun(intm,intk,intxx(])

3(

4

5}

6Main()

7(

8intm,n,zz(1000);voidNONO();

9printf(w\nPleaseentertwo

integers:w);

10scanf("%d%d",&n);

11fun(m,n,zz);

12for(m■0;m<n;m*+)

13printf(w%d”,zz[m]);

14printf(H\nH);

15NONOO;

16

17VoidNONO()

18{/*本函數用于打開文件,輸入測試數據,

調用fun函數,輸出數據,關閉文件.?/

19intm,n,zz[1000],1;

20FILE*rf,*wf;

www

21rf-fopen(in.datr"r);

22wf?fopen("out?dat","w");

23forti-0;i<10;i++)(

M

24fscanf(rf,"%d%dr&n);

25fun(mrn,zz);

26for(m■0;m<n;m++)fprintf

(wf,w%d”,zz(m]);

ww

27fprintf(wfr\n);

28}

29fclose(rf);

30fclose(wf);

31}

參考答案

L完善性軟件維護活動包括以下幾類:改正性維護,適應性維護、完善

性維護和預防性維護,完善性維護是指為了滿足用戶對軟件提出的新功

能與性能要求,需要修改或再開發軟件,以擴充軟件功能、增強軟件性

能、改進加工效率、提高軟件的可維護性。

2.有效性測試有效性測試

3.503503解析先判斷表達式a<b為假,不執行1=2,但執行“a=b;b=t;",

a的值為3,b的值為0。再判斷表達式a<C,值為真,所以執行后面的

3條語句“t=a;a=c;c=t",結果a的值為5,c的值為3,所以最后輸出

的結果為5、。和30

4.上溢上溢解析:入隊運算是指在循環隊列的隊尾加入一個新元素。這

個運算有兩個基本操作:首先將隊尾指針進一(即rear=rear+l),并當

rear=m+l時置rear=1;然后將新元素插入隊尾指針指向的位置。當循環

隊列非空(s=l)時且隊尾指針等于隊頭指針時,說明循環隊列已滿,不能

進行入隊運算,這種情況稱為“上溢”。

5.sizeof(structnode)或4sizeof(structnode)或4解析:malloc(sizeof(struet

node))的作用是開辟一個長度為sizeof(struetnode)的內存區。(structnode

*)的作用是使malloc返回的指針轉換為指向structnode類型數據的指

針。

6.11<CR>23<CR>5(<CR代表換行)11<CR>23<CR>5(<CR,

代表換行)解析:本題通過語句“for(i=2;i<5;i++)a[i]=a[i-2]+a[i-];”將數

組中前面兩項的和賦值給數組當前元素,得到a的值應為(1,1,2,3,5)。語

句if(i%2==0)pfintfC\\n)是要將數組中的元素以每行2個的形式輸出。

7.2222解析:在main函數中,調用reverse函數將b數組中的前8個成

員進行互置,執行完畢后,b數組中的成員為{8,7,6,5,4,3,2,

1,9,10),然后再執行for循環結構,將b[6],b⑺…b[9]的值相加,結

果為22。

8.*s-*t或-*t+*s*s-*t或-*t+*s解析:函數的兩個形參是兩個字符指

針變量,字符串的首地址是指針變量的值,*s和*t表示字符串數組S和

t的第一個字符,在while循環中,是通過s和t值的不斷變化來改變指

針所指向的字符,要改變s和t所指不同字符的ASCII碼的差值,必須

使用“*s-*t”得出。

9.繼承繼承解析:在面向對象的程序設計方法中,某些屬性和方法是可

以共享的,由于類從父類中繼承而來,這樣提高了軟件的可重用性。

1。.關系關系

11.D

本題主要考查文件的操作。在本題的程序中,首先定義了一個無返回

值的函數fun,該函數帶有兩個指針類型的形參,其中第一個形參指向

需要被操作文件的文件名,而第二個形參指向被操作的字符串。在函

數體中,首先定義一個文件指針,然后以只寫的方式打開第一個形參

所指向的文件,接著執行for循環,循環結束的條件是循環變量小于被

操作字符串的長度,循環體中的程序fputc(st[i]的功能是將字

符串中的當前字符輸入到文件中。由這些分析我們可以知道,函數fun

的作用是將字符串的內容寫入到文件中。

在主函數中,兩次調用函數fun,當第一次調用時,寫入文件的內容為

newworld,然后第二次調用函數,此時打開文件,文件的指針重新回

到開始,然后往文件中寫內容“hello,",由于此時文件中已經有內容

"newworld",則需要覆蓋前面一部分的內容,因此,程序的最終輸出

結果是hello,rid,本題的正確答案選D。

12.A解析:p⑼存放的是“BOOLWO”的首地址:p[l]存放的是“OPKWO”的

首址等。在printf語句中輸出的*p[i]表示p國字符串的第一個字符。在

for循環中,i的初值為3,那么輸出的第一個字符為“S”,接著兩次i--,

則輸出的值為*p[l],即字符“0",所以本題的輸出為SO。

13.D

14.C

調用函數fun(7)時,由于x的值為7,執行語句“p=x-fun(x-2);”,相當

于執行p=7-fun(5);\r\n調用函數fun(5)時,由于x的值為5,執行語

句"p=x-fun(x-2);”,相當于執行p=7-fun(3);\r\n調用函數fun(3)時,

由于x的值為3,執行語句“p=x-fun(x-2);”,相當于執行p=7-fun(l);

\r\n調用函數fun(l)時,由于X的值為1,執行語句“return(3);",函

數的返回值為3。\r\n因此函數調用fun(7)等價于7-(5-fun(3)),即7-(5

-(3-fun(l))),即7-(5-(3-3)),所以函數fun⑺的返回值為2。答案為C。

15.A

當數據類型是實數時,在存儲過程中,當小數部分無限長時,會存在

小數部分的截斷,會存在誤差,所以答案選擇A。

16.C解析:在C語言中,字符串以\\0作為結束符,因此數組x的長度

為7+1=8,而數組y的長度等于7。

17.D解析:函數fbpen(constchar"filename,constchar*mode)的功能是以

mode指定的模式打開filename指定的磁盤文件:fclose(FILE*fp)的功能

是關閉文件指針fp指向的文件;函數fscanf(FILE*fp,const

chat\*formatl,address,--])的功能是根據format中的格式從中指向的文件

中讀取數據,并存入到相應的address指向的變量中.函數

fprintf(FILE*fp,constchar*format[,argument--])的功能是把argument歹表

中的表達式值寫到ip所指向的文件中;函數fwfite(void*ptr,intsize,int

n,FILE*fp)的功能是把ptr指向的緩沖區中的sizexn個字節寫到文件指

針fp指向的文件中。本題中首先定義了一個文件指針fp,然后通過函

數fopen以可,wb'的方式打開文件'data.daft1直接通過一個for循環,每

循環一次調用函數fwrite將數組中的元素a國的值寫進fp所指的文件

中,該循環共循環4次,循環完后fp所指文件的內容為123,然后通過

fclose函數關閉fp所指文件.接著通過函數fopen以Tb”的方式打開文

件'data.daf,通過fseek函數讓指針中從文件末尾向前移動2個int型大

小字節的,然后通過函數fread從中所指的文件中讀取一個int型大小的

數據到變量b中,故此時b的值為3,因此最后輸出的,b的值為3,所

以,4個選項中選項D符合題意。

18.C

19.B

20.A

filecopy函數每次從fin文件指針調用getc函數讀取一個字符存放到ch

中,再通過while循環調用putc函數將ch寫入fout,直到fin指向文

件尾部為止。所以while的循環條件是判斷fin是否到文件尾部。這里

使用feof函數判斷:feof返回值為真時,表示fin指向了文件尾部,否

則表示fin未到文件尾部。所以while循環條件為!feof(fin)。故本題答

案為A選項。

21.

【解析】首先判斷循環中n是否為素數,如果不是素數,求其平方根的

累加和,并返回計算結果,否則跳出判斷循環。其中,對于平方根的求

解可以使用C語句中的sqrt()函數。

22.

【解析】要刪除字符串尾部的所有*,只要將尾部所有*中的第一個改為

字符串結束符即可。首先,將字符串指針移動到字符串最后一個位置,

檢查最后一個字符,是*則將指針前移,否則將指針后移一個位置賦值

作為結束符。

23.\n\tcharch;

\ninti,m,n;

\ni=0:

\nm=n=strlen(str)-1;//求字符串str長度

\nwhile(i<(n+l)/2)//循環逆置交換

\n(

\nch=str[i];

\nstr[i]=str[m];

\nstr[m]=ch:

\ni++;

\nm—;

\n}

\n【解析】在fun函數中,首先求行字符串的長度,然后通過循環進行

字符交換。要注意的是,如果字符串長度是奇數,則最中間的元素在

逆置前后的位置是沒有改變的。\n

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

(

inti,j=0,n;

n=strlen(s);

/*遍歷整個數組*/

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

/*如果元素的ASCII值為偶數*/

if(s[i]%2==0)

(

/*將元素保存到t中*/

t[j]=s[i];

j++;

)

)

要刪除ASCII值為奇數的字符,也就是要保留ASCII值為偶數的字符,

將ASCII值為偶數的字符保存到新字符串。所以本題的算法是對原字

符串從頭到尾進行掃描,找出ASCII值為偶數的字符并依次存入數組。

25.voidfun(inta[],intn,int*max,int*d)

inti;

*max=a[0];

*d=0;

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

if(*max<a[i])

{*max=a[i];*d=i;J

)

fun()函數形參max用來存放最大值,形參d用來存放最大值的下標。由

于它們都是指針變量,因此在引用所指向的變量時,要進行指針運算。

循環語句用來遍歷數組元素,找出最大值。條件語句用來判斷該數組元

素是否最大。

溫馨提示

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

評論

0/150

提交評論