計(jì)算機(jī)編程 上機(jī)改錯題_第1頁
計(jì)算機(jī)編程 上機(jī)改錯題_第2頁
計(jì)算機(jī)編程 上機(jī)改錯題_第3頁
計(jì)算機(jī)編程 上機(jī)改錯題_第4頁
計(jì)算機(jī)編程 上機(jī)改錯題_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

二、上機(jī)改錯題。

1、給定程序MODILC是建立一個帶頭結(jié)點(diǎn)的單向鏈表,并用隨機(jī)函數(shù)為各結(jié)點(diǎn)賦值。函數(shù)

fun的功能是將單向鏈表結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域?yàn)榕紨?shù)的值累加起來,并且作為函數(shù)

值返回。

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

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

#include<stdio.h>

ttinclude<conio.h>

ttinclude<stdlib.h>

typedefstructaa

{intdata;structaa*next;}NODE;

intfun(NODE*h)

{intsum=0;

NODE*p;

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

P=h;

while(p)

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

sum+=p->data;

/***********foiind**********/

p=h->next;

)

returnsum;

)

NODE*creatlink(intn)

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

inti,x;

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

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

clrscr();

head=creat1ink(12);

head->data=9000;

outlink(head,stdout);

even=fun(head);

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

)

試題分析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題中,題面中要求:在將該單向鏈表結(jié)點(diǎn)數(shù)據(jù)域?yàn)榕紨?shù)的值累加起來時

不包括頭結(jié)點(diǎn),因此指針p應(yīng)指向該單向鏈表頭結(jié)點(diǎn)的下一個結(jié)點(diǎn);又由于指針h指向

了單向鏈表的頭結(jié)點(diǎn),因此語句應(yīng)改為^p^h-next;"。

參考答案:p=h->next;

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題中是用指針P來遍歷該單向鏈表各結(jié)點(diǎn),當(dāng)在循環(huán)體中,執(zhí)行

sum+=p->data;

語句后,應(yīng)該使指針p指向p當(dāng)前所指向結(jié)點(diǎn)的下一個結(jié)點(diǎn),而在程序中為:

p=h->next;

因?yàn)閔為頭結(jié)點(diǎn),造成p只能指向頭結(jié)點(diǎn)的下一個結(jié)點(diǎn)的情況,因此語句應(yīng)改為

“p=p->next

參考答案:p=p->next;

2、給定程序MODILC中函數(shù)fun的功能是:求k!(k<13),所求階乘的值作為函數(shù)值返

回。例如:若k=10,則應(yīng)輸出:3628800o

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

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

??include<conio.h>

^include<stdio.h>

longfun(intk)

(

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

ifk>0

return(k*fun(k-l));

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

elseif(k=0)

return1;

)

main()

{intk=10;

clrscr();

printf("%d!=%ld\n”,k,fun(k));

NONO();

)

NONO()

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

FILE*rf,*wf;

inti,k;

rf=fopen("gc02.in","r");

wf=fopen("gc02.out","w");

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

fscanf(rf,"%d,",&k);

fprintf(wf,"%d!=%ld\n”,k,fun(k));

)

fclose(rf);

fclose(wf);

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:C語言中,If語句后的邏輯表達(dá)式需要用括號括起來,而本題的語句:

ifk>0

不符合該要求。即該語句應(yīng)改為:“if(k>0)”;

參考答案:if(k>0)

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:

題目要求計(jì)算k!,在程序的fun函數(shù)中,使用遞歸的算法來求k!,并利用if塊語句來判斷

k的值,當(dāng)k為0時,則遞歸計(jì)算結(jié)束。因此函數(shù)的語句:

elseif(k=0)

是判斷當(dāng)k的值等于0就結(jié)束遞歸;在C語言中,表示賦值運(yùn)算,要判斷兩變量是否

相等,應(yīng)該用“==”運(yùn)算符,因此該語句應(yīng)改為“elseif(k=0)”;

參考答案:elseif(k==0)或其他等效語句

3、給定程序M0DI1.C中fun函數(shù)的功能是:將p所指字符串中每個單詞的最后一個字母

改成大寫。(這里的“單詞”是指由空格隔開的字符串)。

例如,若輸入"Iamastudenttotaketheexamination.則應(yīng)輸出"IaMAstudenTtO

takEthEexamination."<>

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

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

#include<conio.h>

??include<ctype.h>

#include<stdio.h>

voidfun(char*p)

(

intk=0;

for(;*p;p++)

if(k)

(

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

if(p='')

(

k=0;

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

*(p-1)=toupper(*(p-1))

)

)

else

k=1;

)

main()

(

charchrstr[64];

intd;

clrscr();

printf("\nPleaseenteranEnglishsentencewithin63letters:");

gets(chrstr);

d=strlen(chrstr);

chrstr[d]='';

chrstr[d+1]=0;

printf(*\n\nBeforechanging:\n%s”,chrstr);

fun(chrstr);

printf(^\nAfterchanging:\n%s”,chrstr);

N0N0();

)

NONO()

(

/*請?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/

charsi[81];

FILE*rf,*wf;

rf=fopen("g05?in","r");

wf=fopen("g05?out","w");

fgets(si,80,rf);

fun(sl);

fprintf(si);

fclose(rf);

fclose(wf);

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:

題目已經(jīng)說明,各單詞之間使用空格分隔,在程序中使用語句:

if(k){)

進(jìn)行當(dāng)?shù)阶址Y(jié)束后的判斷,如果其后一個字符為空格的話,則該單詞結(jié)束。程序中

使用:

if(p='')

語句來判斷指針變量P所指向的存儲單元內(nèi)容是否為空格,要取指針P所指向的存儲單元

內(nèi)容應(yīng)該用“*P”,因此該語句應(yīng)改為“if(*p=,,)”;

參考答案:if(*p=='')或其他等效語句。

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:C語言中,每個語句的最后必須有一個分號,因此應(yīng)該在該語句后加一個分

號“;”,即該語句應(yīng)改為“*(p-1)=toupper(*(p-1));”。

參考答案:*(p-1)=toupper(*(p-1));

4、給定程序M0DILC中函數(shù)fun的功能是:求出s所指字符串中最后一次出現(xiàn)的t所指子字

符串的地址,通過函數(shù)值返回,在主函數(shù)中輸出從此地址開始的字符串;若未找到,則函

數(shù)值為NULL。

例如,當(dāng)字符串中的內(nèi)容為:"abcdabfabcdx”,t中的內(nèi)容為:”ab〃時,輸出結(jié)果應(yīng)是:

abcdxo

當(dāng)字符串中的內(nèi)容為:"abcdabfabcdx”,t中的內(nèi)容為:"abd"時,則程序輸出未

找到信息:notbefound!o

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

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

ttinclude<conio.h>

^include<stdio.h>

ttinclude<string.h>

char*fun(char*s,char*t)

{

char*p,*r,*a;

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

a=Null;

while(*s)

{P=S;r=t;

while(*r)

/************foiind************/

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

elsebreak;

if(*r='\0')a=s;

s++;

}

returna;

)

main()

(

chars[100],t[100],*p;

clrscr();

printf("\nPleaseenterstringS;scanf('%s”,s);

printf("\nPleaseentersubstringtscanf('%s”,t);

p=fun(s,t);

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

elseprintf("\nNotfound!\n");

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:C語言中,要使一個指針變量指向空,應(yīng)將其賦為,MLL”而不是個ull”(因

為在c語言中,區(qū)分大小寫),因此該語句應(yīng)改為“a=NULL;"。

參考答案:a=NULL;

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題fun函數(shù)的內(nèi)層while循環(huán)中,是用if語句判斷指針r、p所指向的內(nèi)存

單元的內(nèi)容是否相同,若相同,再判斷r、p所指向內(nèi)存單元的下一個單元的內(nèi)容是否相同,

直到r指向字符串的結(jié)束(即*r='\0');而不是判斷指針r、p所指向的內(nèi)存單元的地址是否

相同,因此該語句應(yīng)改為“if(*r=*p){r++;p++;}”。

參考答案:if(*r=*p){r++:p++;)或其他等效語句

5、給定程序MODILC中函數(shù)fun的功能是:求整數(shù)x的y次方的低3位值。例如,整數(shù)5的6次

方為12625,此值的低3位值為625。

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

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

ftinclude<stdio.h>

longfun(intx,inty,long*p)

{inti;

longt=l;

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

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

t=t*x;

*p=t;

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

t=t/1000;

returnt;

)

main()

{longt,r;intx,y;

printf("\nlnputxandy:");scanf&x,&y);

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

printf('\n\nx=%d,y=%d,r=%ld,last=%ld\n\n”,x,y,r,t);

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題要求的是整數(shù)x的y次方的低3位值,而for循環(huán)中,循環(huán)變量表示累乘

的次數(shù),其初始值為1,其循環(huán)終值應(yīng)該是y,所以for循環(huán)的結(jié)束條件應(yīng)該是“i<=y"(注意

包括邊界值y),這樣該語句應(yīng)改為"for(i=l;i<=y;i++)”。

參考答案:for(i=l;i<=y;i++)或其它等效語句

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題要求的是“???低3位值”,這可通過將t對1000進(jìn)行求余運(yùn)算來實(shí)現(xiàn),

注意應(yīng)該用部”求余運(yùn)算符,而不是用“/”除法運(yùn)算符,因此該語句應(yīng)改為“廿t%1000;”;

參考答案:t=t%1000;或其它等效語句

6、給定程序MODI1.C中函數(shù)fun的功能是:由形參給定n個實(shí)數(shù),輸出平均值,并統(tǒng)計(jì)在

平均值以上(含平均值)的實(shí)數(shù)個數(shù)。

例如,n=8時,輸入:

193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763

所得平均值為:195.838745,在平均值以上的實(shí)數(shù)個數(shù)應(yīng)為:5

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

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

#include<conio.h>

ftinclude<stdio.h>

intfun(floatx[],intn)

/************fotind************/

intj,c=0;floatxa=0.0;

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

xa+=x[j]/n;

printf("ave/f'n”,xa);

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

/************fotind************/

if(x[j]=>xa)

c++;

returnc;

)

main()

{floatx[100]={193.199,195.673,195.757,196.051,196.092,196.596,196.579,

196.763};

clrscr();

printf("%d\n”,fun(x,8));

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:C語言中,在定義函數(shù)時,函數(shù)體應(yīng)該用大括號”{產(chǎn)括起來,因此該語句

的最開始處缺少即該語句應(yīng)改為"{intj,c=0;floatxa=0.0;”;

參考答案:{intj,c=0;floatxa=0.0;

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:該語句是判斷當(dāng)x[j]的值大于等于xa時,計(jì)數(shù)變量就加1;C語言中,

表示“大于等于''的運(yùn)算符是“>=”,而不是“=>”,因此該語句應(yīng)改為“if(x[j]>=xa)”;

參考答案:if(x[j]>=xa)或其他等效語句

7、給定程序M0DILC中函數(shù)fun的功能是:將tt所指字符串中的小寫字母都改為對應(yīng)的

大寫字母,其他字符不變。

例如,若輸入"Ab,cD”,則輸出"AB,CD*.

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

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

ttinclude<conio.h>

ftinclude<stdio.h>

ttinclude<string.h>

char*fun(chartt[])

(

inti;

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

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

if(('a'<=tt[i])||(tt[i]<='z'))

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

tt[i]+=32;

return(tt);

}

main()

(

inti;

chartt[81];

clrscr();

printf("\nPleaseenterastring:");

gets(tt);

printf("\nTheresultstringis:\n%s”,fun(tt));

NONO();

)

NONO()

(

/*請?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/

chartt[81],ch;

FILE*rf,*wf;

rf=fopen("glO.in","r");

wf=fopen("glO.out","w");

fgets(tt,80,rf);

fun(tt);

fprintf(wf,"%s",tt);

fclose(rf);

fclose(wf);

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:根據(jù)題意知道,該if語句的條件表達(dá)式是(注

意其中的“且”),因此,該語句中的“U”(或)運(yùn)算符應(yīng)改為“&&”(與),即該語句應(yīng)改

為“if(('a'<=tt[i])&&(tt[i]<='z'))”;

參考答案:if(('a'<=tt[i])&&(tt[i]<='z'))

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:ASCH碼表中,小寫字母的ASCII值比大寫字母大,如'a'的ASCII值是97,

'A'的ASCII值是65,因此將一字符串中小寫字母改為對應(yīng)的大寫字母,應(yīng)將其ASCII值減去

32,即該語句應(yīng)改為"tt[i]-=32;”;

參考答案:tt[i]-=32;

8、給定程序M0DILC中函數(shù)fun的功能是:將s所指字符串中位于奇數(shù)位置的字符或ASCH

碼為偶數(shù)的字符放入t所指數(shù)組中(規(guī)定第一個字符放在第0位中)?

例如,字符串中的數(shù)據(jù)為:AABBCCDDEEFF,

則輸出應(yīng)當(dāng)是:ABBCDDEFF,

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

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

ttinclude<conio.h>

#include<stdio.h>

ttinclude<string.h>

ttdefineN80

voidfun(char*s,chart[])

{inti,j=0;

for(i=0;i<strlen(s);i++)

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

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

t[j++]=s[i];

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

t[i]='\0';

)

main()

{chars[N],t[N];

clrscrO;

printf("\nPleaseenterstrings:;gets(s);

fun(s,t);

printf(,\nTheresultis:%s\n”,t);

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:題面中要求的是:“將s所指字符串中位于奇數(shù)位置的字符或ASCII碼為偶

數(shù)的字符放入t所指數(shù)組中”,注意其中的“或",因此該if語句條件表達(dá)式中的應(yīng)改為

,,

“I巴即該語句應(yīng)改為“if(i%2||s[i]%2==0);

參考答案:if(i%2||s[i]%2==0)或其它等效語句

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題中,變量j中記錄的是t所指數(shù)組中最后一個字符的下標(biāo),因此在t所

指向數(shù)組的末尾加上,\0',應(yīng)該用;”語句;

參考答案:或其他等效語句

9、給定程序MODI1.C中函數(shù)fun和funx的功能是:用二分法求方程2x3-4x2+3x-6=0的一個

根,并要求絕對誤差不超過0.001。

例如,若給m輸入TOO,給n輸入90,則函數(shù)求得的一個根值為2.000。

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

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

ttinclude"stdio.h"

ttinclude"math,h”

doublefunx(doublex)

{return(2*x*x*x-4*x*x+3*x-6);}

doublefun(doublem,doublen)

/************foiind************/

{intr;

r=(m+n)/2;

/************fourid************/

while(fabs(n-m)<0.001)

{if(funx(r)*funx(n)<0)m=r;

elsen=r;

r=(m+n)/2;

)

returnr;

)

main()

{doublem,n,root;

printf("Entermn:\n");scanf&m,&n);

root=fun(m,n);

printf("root=%6.3f\n”,root);

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題在用二分法求方程根的過程中,用變量r存儲已求得根的平均值,因

此應(yīng)將變量r定義為double型或是float型而不是int型;因此該語句應(yīng)改為"doubler;"

或“floatr;";

參考答案:doubler;或floatr;或其它等效語句

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題要求.絕對誤差不超過0.001",fun函數(shù)中while循環(huán)能繼續(xù)進(jìn)行的

條件是:m、n的絕對值大于0.001,而不是小于0.001;因此該語句應(yīng)改為

4<while(fabs(n-m)>0.001)^^;

參考答案:while(fabs(n-m)>0.001)或其它等效語句

10、給定程序MODI1.C中函數(shù)fun的功能是:從s所指字符串中刪除所有小寫字母c。

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

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

ttinclude<stdio.h>

voidfun(char*s)

{inti,j;

for(i=j=0;s[i]!=,\0';i++)

if(s[i]!-c')

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

s[j]=s[i];

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

s[i]='\0';

)

main()

{chars[80];

printf("Enterastring:");gets(s);

printf("Theoriginalstring:");puts(s);

fun(s);

printf("Thestringafterdeleted:");puts(s);printf('\n\n");

}

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:for循環(huán)中,變量j記錄的是刪除c后形成的新字符串最后一個字符在新數(shù)組

中的下標(biāo),因此,當(dāng)用“s[j]=s[i]”語句對s[j]賦值后,應(yīng)該使該索引加1,以使再對s[j]

賦值不是覆蓋當(dāng)前s[j]元素的值;故"5口]=5]訂”后應(yīng)該新增語句力++”,且兩語句應(yīng)用“{}”

括起來,即改為“{s[j]=s[i];j++;}”,而且根據(jù)要求這兩條語句必須寫在同一行。

另一種簡便的答案是“s[j++]=s[i]

參考答案:{s[j]=s[i];j++;}或其它等效語句

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:for循環(huán)中,變量j記錄的是刪除c后形成的新字符串最后一個字符在新數(shù)

組中的下標(biāo),因此在新字符串最后加上'\0',應(yīng)是對s[j]賦值,即該語句應(yīng)改為

“s[j]='\O';”;

參考答案:或其它等效語句

11、給定程序M0DI1.C中函數(shù)fun的功能是:計(jì)算n的5次方的值(規(guī)定n的值大于2、小于

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

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

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

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

[include<stdio.h>

ttinclude<math.h>

intfun(intn,int*value)

{intd,s,i;

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

d=0;s=0;

for(i=l;i<=5;i++)d=d*n;

*value=d;

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

{s=s+d%10;

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

d=d\10;

)

returns;

)

main()

{intn,sum,v;

do

{printf(^XnEntern(2<n<8):");scanf&n);}

while(n<=2||n>=8);

sum=fun(n,&v);

printf('\n\nTheresult:\nvalue=%dsum=%d\n\n”,v,sum);

}

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題是用for循環(huán)計(jì)算n的5次方,通過累乘的辦法將結(jié)果保存在變量d中,

因此變量d的初始值應(yīng)為1而不是0,即該語句應(yīng)改為"d=l;s=0;”;

參考答案:d=l;s=0;

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:該語句的作用是:在for循環(huán)中,通過除法運(yùn)算求得n的5次方除以10后

的商,而在C語言中,除法運(yùn)算符是“/”而不是“\”,即該語句應(yīng)改為“d=d/10;”;

參考答案:d=d/10;

12、給定程序M0DILC中函數(shù)fun的功能是:從整數(shù)1到55之間,選出能被3整除、且有

一位上的數(shù)是5的那些數(shù),并把這些數(shù)放在b所指的數(shù)組中,這些數(shù)的個數(shù)作為函數(shù)值返

回。規(guī)定,函數(shù)中al放個位數(shù),a2放十位數(shù)。

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

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

ttinclude<stdio.h>

fun(int*b)

{intk,al,a2,i=0;

for(k=10;k<=55;k++)

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

{a2=k/10;

al=k-a2*10;

if((k%3=0&&a2==5)||(k%3==0&&al=5))

{b[i]=k;i++;)

)

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

returnk;

}

main()

{intaElOO],k,m;

m=fun(a);

printf("Theresultis:\n");

for(k=0;k<m;k++)printf(*%4d*,a[k]);printf("\n");

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:該語句的功能是將k除以10求得k的十位數(shù),注意這里是“除以10”而不是“除

以10(0這里為字母)”,因此該語句應(yīng)改為“a2=k/10;”;

參考答案:a2=k/10;

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題fun函數(shù)的for循環(huán)中,k是循環(huán)變量,記錄符合條件數(shù)的個數(shù)的變

量是i,因此,應(yīng)返回變量i,即該語句應(yīng)改i;”;

參考答案:returni;

13、給定程序MODILC中fun函數(shù)的功能是:將n個無序整數(shù)從小到大排序。

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

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

??include<conio.h>

^include<stdio.h>

Sinclude<stdlib.h>

fun(intn,int*a)

{inti,j,p,t;

for(j=0;j<n-l;j++)

{P=j;

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

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

if(a[p]>a[i])

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

t=i;

if(p!=j)

{t=a[j];a[j]=a[p];a[p]=t;}

}

)

putarr(intn,int*z)

{inti;

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

{printf("%4d",*z);

if(!(i%10))printf("\n");

}printf("\n");

)

main()

{intaa[20]={9,3,0,4,1,2,5,6,8,10,7},n=ll;

clrscrO;

printf("\n\nBeforesorting%dnumbers:、、,n);putarr(n,aa);

fun(n,aa);

printf("\nAftersorting%dnumbers:、、,n);putarr(n,aa);

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題中,n個無序整數(shù)是存儲在數(shù)組a口中的,數(shù)組a□的下標(biāo)是從0到n-1;

fun函數(shù)的外層循環(huán)中,j最大可以是『-2",內(nèi)層循環(huán)中,由于有“i=j+l”,因此,i最大

可以是“n-l”,從而內(nèi)層循環(huán)的循環(huán)條件應(yīng)是“i<=n-l",這樣才可以使得內(nèi)層循環(huán)用a[i]

取到數(shù)組a口中的每一個元素;綜上,該語句應(yīng)改為“for(i=j+l;i<=n-l;i++)”或

其它等效語句;

參考答案:for(i=j+l;i<=n-l;i++)或其它等效語句

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:fun函數(shù)的外層循環(huán)中,先將j賦給p,即使p、j值相同;然后用內(nèi)層for循

環(huán),判斷a[j]之后的數(shù)組各元素是否比a[j]小,若小,就將其索引由變量p記錄下來,以便

于隨后用t作為中間變量,將a[j]與a[p]兩數(shù)組元素的值互換;因此,該語句應(yīng)將i的值

賦給變量P而不是t,即該語句應(yīng)改為、=i;";

參考答案:p=i;或其它等效語句

14、給定程序M0DI1.C中函數(shù)fun的功能是:按以下遞歸公式求函數(shù)值。

r10(n=l)

fun(n)=H

」£xm1)+2Cn>l)

例如,當(dāng)給n輸入5時,函數(shù)值為18;當(dāng)給n輸入3時,函數(shù)值為14。

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

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

#include<stdio.h>

/************fourid************/

fun(n)

{intc;

/************fotind************/

if(n=l)

c=10;

else

c=fun(n-l)+2;

return(c);

)

main()

{intn;

printf("Entern:");scanf&n);

printf(^Theresult:%d\n\n",fun(n));

)

試題分析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:fun函數(shù)需要返回int型變量c,因此在聲明fun函數(shù)時,應(yīng)為其加上返回

值的類型標(biāo)識符“int”,即該語句應(yīng)改為“intfun(n)”;

參考答案:mtfun(n)或其它等效語句

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:該if語句的作用是“如果n的值等于1,就??.”;在C語言中,判斷兩變量

的值是否相等應(yīng)該用小二”運(yùn)算符,而“二”是賦值運(yùn)算符;因此,該語句應(yīng)改為“if(n=D";

參考答案:if(n=l)或其它等效語句

15、給定程序MODILC中函數(shù)fun的功能是:根據(jù)輸入的三個邊長(整型值):判斷能否

構(gòu)成三角形;構(gòu)成的是等邊三角形,還是等腰三角形。若能構(gòu)成等邊三角形函數(shù)返回3,

若能構(gòu)成等腰三角形函數(shù)返回2,若能構(gòu)成一般三角形函數(shù)返回1,若不能構(gòu)成三角形函

數(shù)返回0。

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

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

ttinclude<math.h>

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

voidfun(inta,intb,intc)

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

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

return3;

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

return2;

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

elseretrun1

)

elsereturn0;

)

main()

{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=fun(a,b,c);

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

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:fun函數(shù)有返回值,它會根據(jù)不同的情況返回0、1、2或3,因此在定義fun

函數(shù)時,其返回值的類型標(biāo)識符不應(yīng)該是“void”而應(yīng)該是“int”,即該語句應(yīng)改為“int

fun(inta,intb,intc)”;

參考答案:intfun(inta,intb,intc)

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:該語句是語法錯誤:函數(shù)的返回值應(yīng)該用“retwrn”語句而不是"etrun”,

且C語言中每個語句都應(yīng)以分號“;”結(jié)束,即該語句應(yīng)改為“elsereturn1;”;

參考答案:elsereturn1;

16、給定程序M0DILC中函數(shù)fun的功能是:讀入一個字符串(長度V20),將該字符

串中的所有字符按ASCH碼升序排序后輸出。

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

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

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

^include<conio.h>

ttinclude<stdio.h>

voidfun(chart[])

(

charc;

inti,j;

/**********fourid***********/

for(i=strlen(t);i;i-)

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

/**********fourid***********/

if(t[j]<t[j+1])

(

c=t[j];

t[j]=t[j+1];

t[j+1]=c;

)

)

main()

(

chars[81];

clrscr();

printf("\nPleaseenteracharacterstring:");

gets(s);

printf('\n\nBeforesorting:\ns);

fun(s);

printf("\nAftersortingdecendingly:\ns);

N0N0();

)

N0N0()

(

/*請?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/

chartt[81];

FILE*rf,*wf;

rf=fopen("g09.in","r");

wf=fopen("g09.out","w");

fgets(tt,80,rf);

fun(tt);

fprintf(wf,"%s",tt);

fclose(rf);

fclose(wf);

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:fun函數(shù)中,字符數(shù)組t口各元素的下標(biāo)為0至strlen(t)-l;因此fun函數(shù)外

層循環(huán)的循環(huán)變量i的初始值應(yīng)是“strlen(t)T”而不是“strlen(t)”,這樣內(nèi)層for循環(huán)中,

由“j<i”可知j最大可以是“strlen(t)-2",但由“t[j+1]”恰好可以遍歷字符數(shù)組t口各

元素;否則,外層循環(huán)的循環(huán)變量i的初始值若為strlen(t),程序在運(yùn)行時會出現(xiàn)數(shù)組下

標(biāo)越界錯誤;

因此,該語句應(yīng)改為"for(i=strlen(t)-1;i;i一)”:

參考答案:for(i=strlen(t)-1;i;i—)或其它等效語句

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:本題是要將字符串中的所有字符按ASCII碼升序排序,因此,根據(jù)程序算法

該語句的功能是:字符數(shù)組t口中從小到大排列,所以前面的值一定比后面的小,當(dāng)下標(biāo)為

j的元素比下標(biāo)為j+1的元素ASCII碼大(注意不是“小”),就將該兩字符互換位置;故

該語句應(yīng)該改為為f(t[j]>t[j+1])”;

參考答案:if(t[j]>t[j+1])或其它等效語句

17、給定程序MODIl.C中函數(shù)fun的功能是:輸出M行M列整數(shù)方陣,然后求兩條對角線上元素

之和,返回此和數(shù)。

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

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

#include<conio.h>

ftinclude<stdio.h>

ftdefineM5

/************foiind************/

intfun(intn,intxx[][])

{inti,j,sum=0;

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

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

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

/************foiind************/

printf("%f",xx[i][j]);

printf('\n");

)

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

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

return(sum);

)

main()

{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}};

clrscr();

printf(*\nThesumofallelementson2diagnalsis%d.",fun(M,aa));

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:在定義fun函數(shù)時,應(yīng)顯式地指明其形參xx門□每一維的長度,以使系統(tǒng)

知道如何地為其分配內(nèi)存;對于本題中已經(jīng)說明輸出為M行M列的方陣,并且語句

“printf("\nThe%dx%dmatrixAn"*,M,M);”中的M就應(yīng)為xx的行列數(shù),因此,該語

句應(yīng)改為“intfun(intn,int

參考答案:intfun(intn,intxx[M][M])或其它等效語句

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:fun函數(shù)的形參xx□□是int類型,因此輸出語句中printf函數(shù)的格式控制

應(yīng)該用而不是券戶,即該語句應(yīng)改為“printf("%dxx[i][j])

參考答案:printf(級d",xx[i][j]);

18、給定程序MODILC中函數(shù)fun的功能是:在字符串的最前端加入n個*號,形成新串,并

且覆蓋原串。

注意:字符串的長度最長允許為79。

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

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

ftinclude<stdio.h>

#include<string.h>

#include<conio.h>

voidfun(chars[],intn)

(

chara[80],*p;

inti;

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

s二p;

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

do

{a[i]=*p;

i++;

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

}while(*p);

a[i]=0;

strcpy(s,a);

)

main()

{intn;chars[80];

clrscr();

printf("\nEnterastring:");gets(s);

printf("\nThestring\〃%s\"\n",s);

printf(^XnEntern(numberof*):");scanf&n);

fun(s,n);

printf("\nThestringafterinster:\"%s\"\n",s);

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:通過分析可知,該語句的功能應(yīng)是使指針P指向字符數(shù)組S口,因此應(yīng)是將

s賦值給P;又由于題面要求:“加入的n個*號覆蓋原串”,因此,指針p不應(yīng)是指向字符數(shù)

組$[]的首地址,而應(yīng)是指向字符數(shù)組s口的首地址向后偏移n個字符這個位置;綜上,

該語句應(yīng)改為、=$+!!;”;

參考答案:p=s+n;或其它等效語句

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:do-while循環(huán)體中,用語句“a[i]=*p;”將p所指向的字符賦值給a[i]

后,并沒有使指針P偏移,這樣就不能使P所指向的字符數(shù)組中的各元素依次地被復(fù)制到

數(shù)組a口中;因此,應(yīng)在該語句中使指針p偏移,也就是通過p的自增運(yùn)算使指針p指向

當(dāng)前所指向字符的下一個字符;因此該語句應(yīng)改為“}while(*p++);”;

參考答案:}while(*p++);或其它等效語句

19、給定程序MODI1.C中函數(shù)fun的功能是:將s所指字符串中的字母轉(zhuǎn)換為按字母序列的后

續(xù)字母(但Z轉(zhuǎn)換為A,z轉(zhuǎn)換為a),其他字符不變。

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

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

??include<stdio.h>

#include<ctype.h>

^include<conio.h>

voidfun(char*s)

(

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

while(*s!=,@')

{if(*s>='A'&*s<=,Z'||*s>=,a&&*s<=9z')

{if(*s='Z')*s='A';

elseif(*s==z)*s=a;

else*s+=1;

)

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

(*s)++;

)

)

main()

{chars[80];

clrscr();

printf("\nEnterastringwithlength<80.:\n\n");gets(s);

printf("\nThestring:\n\n");puts(s);

fun(s);

printf("\n\nTheCords:\n\n");puts(s);

)

試題解析:

在給定的程序中有二個標(biāo)識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和

程序,找出錯誤行所在位置并修改。

錯誤點(diǎn)1:第一個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:fun函數(shù)中while循環(huán)的循環(huán)條件是:*$所表示的字符不是該字符串的結(jié)束;

在C語言中,是以,\0,表示字符串的結(jié)束,因此該語句應(yīng)改為“while(*s!='\0')”;

參考答案:while(*s!=’\O')或其它等效語句

錯誤點(diǎn)2:第二個錯誤標(biāo)識下一行。

錯誤點(diǎn)說明:"(*s)++”表示的是取*s所表示的字符,然后將該字符的ASCH碼加1,不

符合本題需要;而該語句的實(shí)際功能應(yīng)是:將指針s進(jìn)行自增運(yùn)算,使其指向當(dāng)前所指向字

符的下一個字符位置;因此,該語句應(yīng)改為“s++;”或其它等效語句;

參考答案:s++;或其它等效語句

20、假定整數(shù)數(shù)列中的數(shù)不重復(fù),并存放在數(shù)組中。給定程序MODILC中函數(shù)fun的功能是:

刪除數(shù)列中值為x的元素。n中存放的是數(shù)列中元素的個數(shù)。

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

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

ttinclude<stdio.h>

^defineN20

fun(int*a,intn,intx)

{intp=0,i;

a[n]=x;

while(x!=a[p])

p=p+l;

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

if(P=n)return-1;

else

{for(i=p;i<n;i++)

溫馨提示

  • 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

提交評論