




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
二、上機改錯題。
1、給定程序MODILC是建立一個帶頭結點的單向鏈表,并用隨機函數(shù)為各結點賦值。函數(shù)
fun的功能是將單向鏈表結點(不包括頭結點)數(shù)據(jù)域為偶數(shù)的值累加起來,并且作為函數(shù)
值返回。
請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
#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);
)
試題分析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:本題中,題面中要求:在將該單向鏈表結點數(shù)據(jù)域為偶數(shù)的值累加起來時
不包括頭結點,因此指針p應指向該單向鏈表頭結點的下一個結點;又由于指針h指向
了單向鏈表的頭結點,因此語句應改為^p^h-next;"。
參考答案:p=h->next;
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:本題中是用指針P來遍歷該單向鏈表各結點,當在循環(huán)體中,執(zhí)行
sum+=p->data;
語句后,應該使指針p指向p當前所指向結點的下一個結點,而在程序中為:
p=h->next;
因為h為頭結點,造成p只能指向頭結點的下一個結點的情況,因此語句應改為
“p=p->next
參考答案:p=p->next;
2、給定程序MODILC中函數(shù)fun的功能是:求k!(k<13),所求階乘的值作為函數(shù)值返
回。例如:若k=10,則應輸出:3628800o
請改正程序中的錯誤,使它能得出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
??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ù),調用函數(shù),輸出數(shù)據(jù),關閉文件。*/
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);
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:C語言中,If語句后的邏輯表達式需要用括號括起來,而本題的語句:
ifk>0
不符合該要求。即該語句應改為:“if(k>0)”;
參考答案:if(k>0)
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:
題目要求計算k!,在程序的fun函數(shù)中,使用遞歸的算法來求k!,并利用if塊語句來判斷
k的值,當k為0時,則遞歸計算結束。因此函數(shù)的語句:
elseif(k=0)
是判斷當k的值等于0就結束遞歸;在C語言中,表示賦值運算,要判斷兩變量是否
相等,應該用“==”運算符,因此該語句應改為“elseif(k=0)”;
參考答案:elseif(k==0)或其他等效語句
3、給定程序M0DI1.C中fun函數(shù)的功能是:將p所指字符串中每個單詞的最后一個字母
改成大寫。(這里的“單詞”是指由空格隔開的字符串)。
例如,若輸入"Iamastudenttotaketheexamination.則應輸出"IaMAstudenTtO
takEthEexamination."<>
請修改程序中的錯誤之處,使它能得出正確的結果。
注意:不要改動main函數(shù),不得刪行,也不得更改程序的結構!
#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()
(
/*請在此函數(shù)內打開文件,輸入測試數(shù)據(jù),調用fun函數(shù),輸出數(shù)據(jù),關閉文件。*/
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);
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:
題目已經說明,各單詞之間使用空格分隔,在程序中使用語句:
if(k){)
進行當?shù)阶址Y束后的判斷,如果其后一個字符為空格的話,則該單詞結束。程序中
使用:
if(p='')
語句來判斷指針變量P所指向的存儲單元內容是否為空格,要取指針P所指向的存儲單元
內容應該用“*P”,因此該語句應改為“if(*p=,,)”;
參考答案:if(*p=='')或其他等效語句。
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:C語言中,每個語句的最后必須有一個分號,因此應該在該語句后加一個分
號“;”,即該語句應改為“*(p-1)=toupper(*(p-1));”。
參考答案:*(p-1)=toupper(*(p-1));
4、給定程序M0DILC中函數(shù)fun的功能是:求出s所指字符串中最后一次出現(xiàn)的t所指子字
符串的地址,通過函數(shù)值返回,在主函數(shù)中輸出從此地址開始的字符串;若未找到,則函
數(shù)值為NULL。
例如,當字符串中的內容為:"abcdabfabcdx”,t中的內容為:”ab〃時,輸出結果應是:
abcdxo
當字符串中的內容為:"abcdabfabcdx”,t中的內容為:"abd"時,則程序輸出未
找到信息:notbefound!o
請改正程序中的錯誤,使它能得出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
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");
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:C語言中,要使一個指針變量指向空,應將其賦為,MLL”而不是個ull”(因
為在c語言中,區(qū)分大小寫),因此該語句應改為“a=NULL;"。
參考答案:a=NULL;
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:本題fun函數(shù)的內層while循環(huán)中,是用if語句判斷指針r、p所指向的內存
單元的內容是否相同,若相同,再判斷r、p所指向內存單元的下一個單元的內容是否相同,
直到r指向字符串的結束(即*r='\0');而不是判斷指針r、p所指向的內存單元的地址是否
相同,因此該語句應改為“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中指定部位的錯誤,使它能得出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
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);
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:本題要求的是整數(shù)x的y次方的低3位值,而for循環(huán)中,循環(huán)變量表示累乘
的次數(shù),其初始值為1,其循環(huán)終值應該是y,所以for循環(huán)的結束條件應該是“i<=y"(注意
包括邊界值y),這樣該語句應改為"for(i=l;i<=y;i++)”。
參考答案:for(i=l;i<=y;i++)或其它等效語句
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:本題要求的是“???低3位值”,這可通過將t對1000進行求余運算來實現(xiàn),
注意應該用部”求余運算符,而不是用“/”除法運算符,因此該語句應改為“廿t%1000;”;
參考答案:t=t%1000;或其它等效語句
6、給定程序MODI1.C中函數(shù)fun的功能是:由形參給定n個實數(shù),輸出平均值,并統(tǒng)計在
平均值以上(含平均值)的實數(shù)個數(shù)。
例如,n=8時,輸入:
193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763
所得平均值為:195.838745,在平均值以上的實數(shù)個數(shù)應為:5
請改正程序中的錯誤,使程序能輸出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
#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));
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:C語言中,在定義函數(shù)時,函數(shù)體應該用大括號”{產括起來,因此該語句
的最開始處缺少即該語句應改為"{intj,c=0;floatxa=0.0;”;
參考答案:{intj,c=0;floatxa=0.0;
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:該語句是判斷當x[j]的值大于等于xa時,計數(shù)變量就加1;C語言中,
表示“大于等于''的運算符是“>=”,而不是“=>”,因此該語句應改為“if(x[j]>=xa)”;
參考答案:if(x[j]>=xa)或其他等效語句
7、給定程序M0DILC中函數(shù)fun的功能是:將tt所指字符串中的小寫字母都改為對應的
大寫字母,其他字符不變。
例如,若輸入"Ab,cD”,則輸出"AB,CD*.
請改正程序中的錯誤,使它能統(tǒng)計出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
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()
(
/*請在此函數(shù)內打開文件,輸入測試數(shù)據(jù),調用fun函數(shù),輸出數(shù)據(jù),關閉文件。*/
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);
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:根據(jù)題意知道,該if語句的條件表達式是(注
意其中的“且”),因此,該語句中的“U”(或)運算符應改為“&&”(與),即該語句應改
為“if(('a'<=tt[i])&&(tt[i]<='z'))”;
參考答案:if(('a'<=tt[i])&&(tt[i]<='z'))
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:ASCH碼表中,小寫字母的ASCII值比大寫字母大,如'a'的ASCII值是97,
'A'的ASCII值是65,因此將一字符串中小寫字母改為對應的大寫字母,應將其ASCII值減去
32,即該語句應改為"tt[i]-=32;”;
參考答案:tt[i]-=32;
8、給定程序M0DILC中函數(shù)fun的功能是:將s所指字符串中位于奇數(shù)位置的字符或ASCH
碼為偶數(shù)的字符放入t所指數(shù)組中(規(guī)定第一個字符放在第0位中)?
例如,字符串中的數(shù)據(jù)為:AABBCCDDEEFF,
則輸出應當是:ABBCDDEFF,
請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
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);
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:題面中要求的是:“將s所指字符串中位于奇數(shù)位置的字符或ASCII碼為偶
數(shù)的字符放入t所指數(shù)組中”,注意其中的“或",因此該if語句條件表達式中的應改為
,,
“I巴即該語句應改為“if(i%2||s[i]%2==0);
參考答案:if(i%2||s[i]%2==0)或其它等效語句
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:本題中,變量j中記錄的是t所指數(shù)組中最后一個字符的下標,因此在t所
指向數(shù)組的末尾加上,\0',應該用;”語句;
參考答案:或其他等效語句
9、給定程序MODI1.C中函數(shù)fun和funx的功能是:用二分法求方程2x3-4x2+3x-6=0的一個
根,并要求絕對誤差不超過0.001。
例如,若給m輸入TOO,給n輸入90,則函數(shù)求得的一個根值為2.000。
請改正程序中的錯誤,使它能得出正確結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。
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);
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:本題在用二分法求方程根的過程中,用變量r存儲已求得根的平均值,因
此應將變量r定義為double型或是float型而不是int型;因此該語句應改為"doubler;"
或“floatr;";
參考答案:doubler;或floatr;或其它等效語句
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:本題要求.絕對誤差不超過0.001",fun函數(shù)中while循環(huán)能繼續(xù)進行的
條件是:m、n的絕對值大于0.001,而不是小于0.001;因此該語句應改為
4<while(fabs(n-m)>0.001)^^;
參考答案:while(fabs(n-m)>0.001)或其它等效語句
10、給定程序MODI1.C中函數(shù)fun的功能是:從s所指字符串中刪除所有小寫字母c。
請改正程序中的錯誤,使它能計算出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
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");
}
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:for循環(huán)中,變量j記錄的是刪除c后形成的新字符串最后一個字符在新數(shù)組
中的下標,因此,當用“s[j]=s[i]”語句對s[j]賦值后,應該使該索引加1,以使再對s[j]
賦值不是覆蓋當前s[j]元素的值;故"5口]=5]訂”后應該新增語句力++”,且兩語句應用“{}”
括起來,即改為“{s[j]=s[i];j++;}”,而且根據(jù)要求這兩條語句必須寫在同一行。
另一種簡便的答案是“s[j++]=s[i]
參考答案:{s[j]=s[i];j++;}或其它等效語句
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:for循環(huán)中,變量j記錄的是刪除c后形成的新字符串最后一個字符在新數(shù)
組中的下標,因此在新字符串最后加上'\0',應是對s[j]賦值,即該語句應改為
“s[j]='\O';”;
參考答案:或其它等效語句
11、給定程序M0DI1.C中函數(shù)fun的功能是:計算n的5次方的值(規(guī)定n的值大于2、小于
8),通過形參指針傳回主函數(shù);并計算該值的個位、十位、百位上數(shù)字之和作為函數(shù)值
返回。例如,7的5次方是16807,其低3位數(shù)的和值是15。
請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
[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);
}
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:本題是用for循環(huán)計算n的5次方,通過累乘的辦法將結果保存在變量d中,
因此變量d的初始值應為1而不是0,即該語句應改為"d=l;s=0;”;
參考答案:d=l;s=0;
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:該語句的作用是:在for循環(huán)中,通過除法運算求得n的5次方除以10后
的商,而在C語言中,除法運算符是“/”而不是“\”,即該語句應改為“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ù)。
請改正程序中的錯誤,使它能得出正確結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。
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");
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:該語句的功能是將k除以10求得k的十位數(shù),注意這里是“除以10”而不是“除
以10(0這里為字母)”,因此該語句應改為“a2=k/10;”;
參考答案:a2=k/10;
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:本題fun函數(shù)的for循環(huán)中,k是循環(huán)變量,記錄符合條件數(shù)的個數(shù)的變
量是i,因此,應返回變量i,即該語句應改i;”;
參考答案:returni;
13、給定程序MODILC中fun函數(shù)的功能是:將n個無序整數(shù)從小到大排序。
請改正程序中的錯誤,使它能得出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
??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);
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:本題中,n個無序整數(shù)是存儲在數(shù)組a口中的,數(shù)組a□的下標是從0到n-1;
fun函數(shù)的外層循環(huán)中,j最大可以是『-2",內層循環(huán)中,由于有“i=j+l”,因此,i最大
可以是“n-l”,從而內層循環(huán)的循環(huán)條件應是“i<=n-l",這樣才可以使得內層循環(huán)用a[i]
取到數(shù)組a口中的每一個元素;綜上,該語句應改為“for(i=j+l;i<=n-l;i++)”或
其它等效語句;
參考答案:for(i=j+l;i<=n-l;i++)或其它等效語句
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:fun函數(shù)的外層循環(huán)中,先將j賦給p,即使p、j值相同;然后用內層for循
環(huán),判斷a[j]之后的數(shù)組各元素是否比a[j]小,若小,就將其索引由變量p記錄下來,以便
于隨后用t作為中間變量,將a[j]與a[p]兩數(shù)組元素的值互換;因此,該語句應將i的值
賦給變量P而不是t,即該語句應改為、=i;";
參考答案:p=i;或其它等效語句
14、給定程序M0DI1.C中函數(shù)fun的功能是:按以下遞歸公式求函數(shù)值。
r10(n=l)
fun(n)=H
」£xm1)+2Cn>l)
例如,當給n輸入5時,函數(shù)值為18;當給n輸入3時,函數(shù)值為14。
請改正程序中的錯誤,使它能得出正確結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。
#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));
)
試題分析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:fun函數(shù)需要返回int型變量c,因此在聲明fun函數(shù)時,應為其加上返回
值的類型標識符“int”,即該語句應改為“intfun(n)”;
參考答案:mtfun(n)或其它等效語句
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:該if語句的作用是“如果n的值等于1,就??.”;在C語言中,判斷兩變量
的值是否相等應該用小二”運算符,而“二”是賦值運算符;因此,該語句應改為“if(n=D";
參考答案:if(n=l)或其它等效語句
15、給定程序MODILC中函數(shù)fun的功能是:根據(jù)輸入的三個邊長(整型值):判斷能否
構成三角形;構成的是等邊三角形,還是等腰三角形。若能構成等邊三角形函數(shù)返回3,
若能構成等腰三角形函數(shù)返回2,若能構成一般三角形函數(shù)返回1,若不能構成三角形函
數(shù)返回0。
請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
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);
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:fun函數(shù)有返回值,它會根據(jù)不同的情況返回0、1、2或3,因此在定義fun
函數(shù)時,其返回值的類型標識符不應該是“void”而應該是“int”,即該語句應改為“int
fun(inta,intb,intc)”;
參考答案:intfun(inta,intb,intc)
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:該語句是語法錯誤:函數(shù)的返回值應該用“retwrn”語句而不是"etrun”,
且C語言中每個語句都應以分號“;”結束,即該語句應改為“elsereturn1;”;
參考答案:elsereturn1;
16、給定程序M0DILC中函數(shù)fun的功能是:讀入一個字符串(長度V20),將該字符
串中的所有字符按ASCH碼升序排序后輸出。
例如,若輸入:edcba,則應輸出:abode0
請改正程序中的錯誤,使它能統(tǒng)計出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
^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()
(
/*請在此函數(shù)內打開文件,輸入測試數(shù)據(jù),調用fun函數(shù),輸出數(shù)據(jù),關閉文件。*/
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);
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:fun函數(shù)中,字符數(shù)組t口各元素的下標為0至strlen(t)-l;因此fun函數(shù)外
層循環(huán)的循環(huán)變量i的初始值應是“strlen(t)T”而不是“strlen(t)”,這樣內層for循環(huán)中,
由“j<i”可知j最大可以是“strlen(t)-2",但由“t[j+1]”恰好可以遍歷字符數(shù)組t口各
元素;否則,外層循環(huán)的循環(huán)變量i的初始值若為strlen(t),程序在運行時會出現(xiàn)數(shù)組下
標越界錯誤;
因此,該語句應改為"for(i=strlen(t)-1;i;i一)”:
參考答案:for(i=strlen(t)-1;i;i—)或其它等效語句
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:本題是要將字符串中的所有字符按ASCII碼升序排序,因此,根據(jù)程序算法
該語句的功能是:字符數(shù)組t口中從小到大排列,所以前面的值一定比后面的小,當下標為
j的元素比下標為j+1的元素ASCII碼大(注意不是“小”),就將該兩字符互換位置;故
該語句應該改為為f(t[j]>t[j+1])”;
參考答案:if(t[j]>t[j+1])或其它等效語句
17、給定程序MODIl.C中函數(shù)fun的功能是:輸出M行M列整數(shù)方陣,然后求兩條對角線上元素
之和,返回此和數(shù)。
請改正程序中的錯誤,使它能得出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
#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));
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:在定義fun函數(shù)時,應顯式地指明其形參xx門□每一維的長度,以使系統(tǒng)
知道如何地為其分配內存;對于本題中已經說明輸出為M行M列的方陣,并且語句
“printf("\nThe%dx%dmatrixAn"*,M,M);”中的M就應為xx的行列數(shù),因此,該語
句應改為“intfun(intn,int
參考答案:intfun(intn,intxx[M][M])或其它等效語句
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:fun函數(shù)的形參xx□□是int類型,因此輸出語句中printf函數(shù)的格式控制
應該用而不是券戶,即該語句應改為“printf("%dxx[i][j])
參考答案:printf(級d",xx[i][j]);
18、給定程序MODILC中函數(shù)fun的功能是:在字符串的最前端加入n個*號,形成新串,并
且覆蓋原串。
注意:字符串的長度最長允許為79。
請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
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);
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:通過分析可知,該語句的功能應是使指針P指向字符數(shù)組S口,因此應是將
s賦值給P;又由于題面要求:“加入的n個*號覆蓋原串”,因此,指針p不應是指向字符數(shù)
組$[]的首地址,而應是指向字符數(shù)組s口的首地址向后偏移n個字符這個位置;綜上,
該語句應改為、=$+!!;”;
參考答案:p=s+n;或其它等效語句
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:do-while循環(huán)體中,用語句“a[i]=*p;”將p所指向的字符賦值給a[i]
后,并沒有使指針P偏移,這樣就不能使P所指向的字符數(shù)組中的各元素依次地被復制到
數(shù)組a口中;因此,應在該語句中使指針p偏移,也就是通過p的自增運算使指針p指向
當前所指向字符的下一個字符;因此該語句應改為“}while(*p++);”;
參考答案:}while(*p++);或其它等效語句
19、給定程序MODI1.C中函數(shù)fun的功能是:將s所指字符串中的字母轉換為按字母序列的后
續(xù)字母(但Z轉換為A,z轉換為a),其他字符不變。
請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!
??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);
)
試題解析:
在給定的程序中有二個標識行,因此本題共有二個錯誤。本題要求考生根據(jù)題目要求和
程序,找出錯誤行所在位置并修改。
錯誤點1:第一個錯誤標識下一行。
錯誤點說明:fun函數(shù)中while循環(huán)的循環(huán)條件是:*$所表示的字符不是該字符串的結束;
在C語言中,是以,\0,表示字符串的結束,因此該語句應改為“while(*s!='\0')”;
參考答案:while(*s!=’\O')或其它等效語句
錯誤點2:第二個錯誤標識下一行。
錯誤點說明:"(*s)++”表示的是取*s所表示的字符,然后將該字符的ASCH碼加1,不
符合本題需要;而該語句的實際功能應是:將指針s進行自增運算,使其指向當前所指向字
符的下一個字符位置;因此,該語句應改為“s++;”或其它等效語句;
參考答案:s++;或其它等效語句
20、假定整數(shù)數(shù)列中的數(shù)不重復,并存放在數(shù)組中。給定程序MODILC中函數(shù)fun的功能是:
刪除數(shù)列中值為x的元素。n中存放的是數(shù)列中元素的個數(shù)。
請改正程序中的錯誤,使它能得出正確結果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。
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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO/CIE 11664-5:2024 EN Colorimetry - Part 5: CIE 1976 L*u*v* colour space and u,v'uniform chromaticity scale diagram
- 【正版授權】 ISO 15004-2:2024 EN Ophthalmic instruments - Fundamental requirements and test methods - Part 2: Light hazard protection
- 2025年基因工程項目合作計劃書
- 2025年冷光源:EL冷光片項目合作計劃書
- 2025年度公路橋梁鋼筋供應與施工承包協(xié)議
- 2025年度辦公樓物業(yè)環(huán)境監(jiān)測與改善服務協(xié)議
- 2025年度特色餐飲店品牌獨家承包經營合同協(xié)議
- 2025年度全國巡演活動場地租賃合同范本
- 急診病人流量預測與管理計劃
- 2025年無菌包裝用包裝材料合作協(xié)議書
- 甘肅省蘭州市蘭煉一中2025屆數(shù)學高一上期末統(tǒng)考試題含解析
- EPC總承包項目工程設計各階段的服務承諾
- 期末試卷(試題)-2024-2025學年三年級上冊數(shù)學冀教版
- “小學英語對話教學”研究課題方案
- 城市地下管網建設工程投標書(范文)
- 2024-2030年中國達克羅行業(yè)運行態(tài)勢與前景展望分析報告
- 聯(lián)合體三方協(xié)議合同模板
- 五上數(shù)學簡便運算500道及答案
- 2023屆高考英語全國甲卷試卷講評課件
- 山東省臨沂市2024年中考物理真題
- 第2課《“友邦驚詫”論》(教學設計)-【中職專用】高二語文同步課堂(高教版2024·拓展模塊上冊)(同課異構)
評論
0/150
提交評論