版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三年級數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)匯編及答案集錦
- 學(xué)校苗木種植合同模板
- 合伙經(jīng)營磚廠合同范例
- 合作建房定金合同范例
- 書籍稿件出版合同范例
- 大型公司購銷合同范例
- 定制家具售后合同范例
- 司法擔(dān)保合同模板
- 2024年度圖書出版發(fā)行合同
- 會所做飯合同范例
- 國開(甘肅)2024年春《地域文化(專)》形考任務(wù)1-4終考答案
- 檔案整理及數(shù)字化服務(wù)方案(技術(shù)標(biāo) )
- 機(jī)器人學(xué)課程教學(xué)大綱
- 浙江世貿(mào)君瀾酒店集團(tuán)介紹
- GHTF—質(zhì)量管理體系--過程驗(yàn)證指南中文版
- 鋁及鋁合金焊接作業(yè)指導(dǎo)書
- 水利工程質(zhì)量與安全監(jiān)督工作實(shí)務(wù)PPT課件
- 放射性口腔粘膜炎的發(fā)病機(jī)制及危險(xiǎn)因素
- 加油站特殊作業(yè)安全管理制度(完整版)
- 質(zhì)量風(fēng)險(xiǎn)抵押金管理辦法
- 村紀(jì)檢監(jiān)督小組工作職責(zé)
評論
0/150
提交評論