版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
改錯(cuò)題
第01套
給定程序MODU.C中函數(shù)fun的功能是:計(jì)算n!。
例如,給n輸入5,則輸出120.000000。
請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
doublefun(intn)
{doubleresult=1.0;
/************found亭**X********/
ifn==0改為:if(n==0)
return1.0;
while(n>1&&n<170)
/************‘ound字***********/
result*=n-改為:result*=n-;
returnresult;
main()
{intn;
printf(nInputN:M);
scanfC^d",&n);
printf(n\n\n%d!=%lftn\n",n,fun(n));
解題思路:
第一處:條件語句書寫格式錯(cuò)誤,應(yīng)改為:if(n==0)。
第二處:語句后缺少分號(hào)。
第02套
給定程序MODU.C中函數(shù)fun的功能是:依次取出字符串中所有數(shù)字字符,形成新的字符串,并取代原字
符串。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
voidfun(char*s)
{inti,j;
for(i=O,j=O;s[i]!=W;i++)
if(s[i]>=,0,&&s[i]<=9')
/**********found**********/
s[j]=s[i];改為:s[j++]=s[i];
/**********found*****'****/
s[j]="\O";改為:sIj]='\O';.
main()
{charitem[80];
printfC'XnEnterastring:n);gets(item);
printf(M\n\nThestringis:\',%s\n\n,,,item);
fun(item);
printf(M\n\nThestringofchangingis:\n%s\u\n",item);
}
解題思路:
第一處:要求是取出原字符串中所有數(shù)字字符組成一個(gè)新的字符串,程序中是使用變量j
來控制新字符串的位置,所以應(yīng)改為:s[j++]=s[i];。
第二處:置新字符串的結(jié)束符,所以應(yīng)改為:s[j]=\(y;.
第03套
給定程序MODI1.C中的函數(shù)Creatlink的功能是創(chuàng)建帶頭結(jié)點(diǎn)的單向鏈表,并為各結(jié)點(diǎn)數(shù)據(jù)域賦0到m-1
的值。
請(qǐng)改正函數(shù)Creatlink中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#include<stdlib.h>
typedefstructaa
{intdata;
structaa*next;
}NODE;
NODE*Creatlink(intn,intm)
{NODE*h=NULL,*p,次s;
inti;
/**********found*****'*****/
p=(NODE)malloc(sizeof(NODE));改為:p=(NODE*)malloc(sizeof(NODE));
h=p;
p->next=NULL;
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;
returnp;改為:returnh;
}
outlink(NODE*h)
{NODE*p;
p=h->next;
printf("\n\nTHELIST:\n\nHEAD");
while(p)
{printf(M->%dM,p->data);
p=p->next;
printf(n\nn);
main()
{NODE*head;
head=Creatlink(8,22);
outlink(head);
解題思路:
第一處:指向剛分配的結(jié)構(gòu)指針,所以應(yīng)改為:p=(NODE*)malloc(sizeof(NODE));
第二處:在動(dòng)態(tài)分配內(nèi)存的下一行語句是,使用臨時(shí)結(jié)構(gòu)指針變量h保存p指針的初始位置,
最后返回不能使用P,是因?yàn)閜的位置已經(jīng)發(fā)生了變化,所以應(yīng)改為返回h。
第04套
給定程序MODU.C中函數(shù)fun的功能是:在字符串的最前端加入n個(gè)*號(hào),形成新串,并且覆蓋原串。
注意:字符串的長(zhǎng)度最長(zhǎng)允許為79。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#include<string.h>
voidfun(chars[],intn)
(
chara[80],*p;
inti;
/**********found***********/
s=p;改為:p=s;
for(i=0;i<n;i++)
do
{a[i]=*p;
i++;
)
/**********found**¥********/
while(*p++)改為:while(*p++);
a[i]=0;
strcpy(s,a);
)
main()
{intn;chars[80J;
printf("\nEnterastring:");gets(s);
printf(n\nThestring\"%s\“\n”,s);
printf(n\nEntern(numberof*):");scanf(u%dM,&n);
fun(s,n);
printf("\nThestringafterinsert:V'%sV'\n",s);
解題思路:
第一處:指針P應(yīng)指向S,所以應(yīng)改為:p=s;?
第二處:死循環(huán),當(dāng)dowhile循環(huán)執(zhí)行一次,臨時(shí)變量p應(yīng)該指向字符串的下一位置,所以
應(yīng)改為:while(*p++);o
第05套
給定程序MODI1.C中函數(shù)fun的功能是:對(duì)N名學(xué)生的學(xué)習(xí)成績(jī),按從高到低的順序找出前m(mW10)名
學(xué)生來,并將這些學(xué)生數(shù)據(jù)存放在一個(gè)動(dòng)態(tài)分配的連續(xù)存儲(chǔ)區(qū)中,此存儲(chǔ)區(qū)的首地址作為函數(shù)值返回。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#include<alloc.h>
#include<string.h>
#defineN10
typedefstructss
{charnum[10];
ints;
}STU;
STU*fun(STUa[],intm)
{STUb[N],*t;
inti,j,k;
/**********found***¥*¥****/
t=(STU*)calloc(sizeof(STU),m)改為:t=(STU*)calloc(sizeof(STU),m);
for(i=0;i<N;i++)b[i]=a[i];
for(k=0;k<m;k++)
{for(i=j=0;i<N;i++)
if(b[i].s>bU].s)j=i;
/**********found*****'****/
t(k)=b(j);改為:t[k]=b[j];
b[j|.s=O;
)
returnt;
)
outresult(STUa[],FILE*pf)
{inti;
for(i=0;i<N;i++)
fprintf(pf,"No=%sMark=%d\n",a[i].num,a[i].s);
fprintf(pf,n\n\nn);
)
main()
{STUa[N]={{"A01';81},{“A02”,89},{“A03”,66),{"A04n,87},{"A05';77},
{,'A06',,90},{nA07",79},{uA08",61},{"A09',,80},{,,A10,1,71}};
STU*pOrder;
inti,m;
printf("*****TheOriginaldata*****\n");
outresult(a,stdout);
printf("\nGivethenumberofthestudentswhohavebetterscore:");
scanf("%d",&m);
while(m>10)
{printf(M\nGivethenumberofthestudentswhohavebetterscore:");
scanf("%d",&m);
}
pOrder=fun(a,m);
printf(”*****THERESULT*****\n”);
printf(nThetop:\n");
for(i=0;i<m;i++)
printf(,f%s%d\nn,pOrder[i].num,pOrder[i].s);
free(pOrder);
)
解題思路:
第一處:語句最后缺少分號(hào)。
第二處:應(yīng)該使用方括號(hào),而不是圓括號(hào)。像此類,使用編譯,即可發(fā)現(xiàn)。
第06套
給定程序MODU.C中函數(shù)fun的功能是:比較兩個(gè)字符串,將長(zhǎng)的那個(gè)字符串的首地址作為函數(shù)值返回。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
/**********found**字*******/
charfun(char*s,char*1)改為:char*fun(char*s,char*t)
{intsl=0,H=0;char*ss,*tt;
ss=s;tt=t;
while(*ss)
{sl++;
/**********found***¥*¥****/
(*ss)++;改為:ss++;
while(*tt)
{tl++;
/**********found**********/
(*tt)++;改為:tt++;
)
if(tl>sl)returnt;
elsereturns;
main()
{chara[80],b[80],*p,*q;inti;
printf("\nEnterastring:");gets(a);
printf(M\nEnterastringagain:");gets(b);
printf(M\nThelongeris:\n\n\M%sV'\nn,fun(a?b));
解題思路:
第一處:試題要求返回字符串的首地址,所以應(yīng)改為:char*fun(char*s,char*。
第二處:取字符串指針ss的下一個(gè)位置,所以應(yīng)改為:SS++;。
第三處:取字符串指針tt的下一個(gè)位置,所以應(yīng)改為:注++;。
第07套
給定程序MODI1.C中函數(shù)fun的功能是:求出數(shù)組中最大數(shù)和次最大數(shù),并把最大數(shù)和a[0]中的數(shù)對(duì)調(diào)、
次最大數(shù)和a[l]中的數(shù)對(duì)調(diào)。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#defineN20
intfun(int*a,intn)
{inti,m,t,k;
for(i=0;i<2;i++){
/**********found**¥*******/
m=0;改為:m=i;
for(k=i+l;k<n;k++)
/**********found**¥¥*¥****/
if(a[k]>a[m])k=m;改為:if(a[k]>a[m])m=k;
t=a[i];a[i]=a[m];a[m]=t;
main()
{intx,b[N]={11,5,12,0,3,6,9,7,10,8},n=10,i;
for(i=0;i<n;i++)printf(H%dn,b[i]);
printfC^n'1);
fun(b,n);
for(i=0;i<n;i++)printf(n%d",b[i]);
prinlf("\n");
)
解題思路:
第一處:外循環(huán)每循環(huán)一次,把當(dāng)前位置i賦值給m,所以應(yīng)改為:m=i;0
第二處:通過內(nèi)循環(huán)來找出最大的一個(gè)數(shù)的位置k,所以應(yīng)改為:if(a[k]>a[m])m=k;。
第08套
給定程序MODI1.C中函數(shù)fun的功能是:求k!(k<13),所求階乘的值作為函數(shù)值返回。例如:若k=10,
則應(yīng)輸出:3628800?
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
longfun(intk)
ifk>0改為:if(k>0)
return(k*fun(k-l));
/***********¥found************/
elseif(k=0)改為:elseif(k==0)
returnIL;
}
main()
{intk=10;
printf(n%d!=%ld\n",k,fun(k));
)
解題思路:
第一處:條件判斷缺少圓括號(hào)。
第二處:判斷相等的符號(hào)是二=。
第09套
給定程序MODI1.C中函數(shù)fun的功能是:將s所指字符串中的字母轉(zhuǎn)換為按字母序列的后續(xù)字母(但Z轉(zhuǎn)
換為A,z轉(zhuǎn)換為a),其它字符不變。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#include<ctype.h>
voidfun(char*s)
/**********found***********/
while(*s!='@')改為:while(*s)
{if(*s>='A,&*sv=ZII*s>='a'&&*sv='z')
{if(*s=='Z,)*s='A';
elseif(*s=='z')*s=a*;
else*s+=1;
)
/**********found***不*******/
(*s)++;改為:s++;
main()
{chars[80];
printf(M\nEnterastringwithlength<80.:\n\n");gets(s);
printf("\nThestring:\n\nn);puts(s);
fun(s);
printf(n\n\nTheCords:\n\n");puts(s);
解題思路:
第一處:使用while循環(huán)來判斷字符串指針s是否結(jié)束,所以應(yīng)改為:while(*s)o
第二處:取字符串指針s的下一個(gè)位置,所以應(yīng)改為:S++;。
第10套
給定程序MODI1.C中fun函數(shù)的功能是:根據(jù)整型形參m,計(jì)算如下公式的值。
例如,若主函數(shù)中輸入5,則應(yīng)輸出-0.283333。
請(qǐng)改正函數(shù)fun中的錯(cuò)誤或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使它能計(jì)算出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
doublefun(intm)
(
doublet=1.0;
inti;
for(i=2;i<=m;i++)
t=1.0-1/i;改為:t-=L/i;
應(yīng)填returnt;
main()
(
intm;
printf("XnPleaseenter1integernumbers:\n");
scanf(n%d'\&m);
printf("\n\nTheresultis%lf\n'\fun(m));
解題思路:
第一處:在除法運(yùn)算中,如果除數(shù)和被除數(shù)都是整數(shù),所么所除結(jié)果也是整數(shù),因此應(yīng)改為
第二處:應(yīng)是返回公式的值,函數(shù)中公式的值是存放在臨時(shí)變量t中,所以應(yīng)填returnt;。
第11套
給定程序MODI1.C中函數(shù)firn的功能是:計(jì)算s所指字符串中含有t所指字符串的數(shù)目,并作為函數(shù)值返
回。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#include<string.h>
#defineN80
intfun(char*s,char*t)
{intn;
char*p,*r;
n=0;
while(*s)
{P=s;
/*********found***¥******/
r=P;改為:r=t;
while(*r)
if(*r==*p){r++;p++;}
elsebreak;
/*********found****¥*¥***/
if(*r=0)改為:if(*r==O)
n++;
s++;
returnn;
main()
{chara[N],b[N];intm;
printf(H\nPleaseenterstringa:");gets(a);
printf(M\nPleaseentersubstringb:");gets(b);
m=fun(a,b);
printf(M\nTheresultis:m=%d\nn,m);
解題思路:
第一處:程序中子串是由變量t來實(shí)現(xiàn)的,再根據(jù)下面while循環(huán)體中語句可知,所以應(yīng)改為:r=t;o
第二處:是判斷相等的條件,所以應(yīng)改為:if(*r=0)o
第12套
給定程序MODU.C中函數(shù)fun的功能是:將s所指字符串中位于奇數(shù)位置的字符或ASCII碼為偶數(shù)的字
符放入t所指數(shù)組中(規(guī)定第一個(gè)字符放在第0位中)。
例如,字符串中的數(shù)據(jù)為:AABBCCDDEEFF,貝IJ輸出應(yīng)當(dāng)是:ABBCDDEFFo
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#include<string.h>
#defineN80
voidfun(char*s,chart[])
{inti,j=0;
for(i=0;i<strlen(s);i++)
/***********found**********/
if(i%2&&s[i]%2==0)改為:if(i%2IIs[i]%2==0)
t[j++]=s[i];
/***********found*字********/
l[i]='\0';改為:t[j]=o;
)
main()
{chars[N],t[N];
printf(H\nPleaseenterstrings:");gets(s);
fun(s,t);
printf("\nTheresultis:%s\n",t);
)
解題思路:
第一處:根據(jù)試題分析,兩個(gè)條件之間應(yīng)該是“或”的關(guān)系,而不是“與”的關(guān)系,所以應(yīng)改為:if(i%2ll
s[i]%2==0)o
第二處:當(dāng)字符串處理結(jié)束后,應(yīng)該補(bǔ)上字符串的結(jié)束符,那么字符串t的位置是由i來控制,所以應(yīng)改為:
t[j]=O;?
第13套
給定程序MODI1.C是建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,并用隨機(jī)函數(shù)為各結(jié)點(diǎn)數(shù)據(jù)域賦值。函數(shù)fun的作
用是求出單向鏈表結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域中的最大值,并且作為函數(shù)值返回。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#include<stdlib.h>
typedefstructaa
{intdata;
structaa*next;
}NODE;
fun(NODE*h)
{intmax=-1;
NODE*p;
/***********found*字********/
p=h;改為:p=h->next;
while(p)
{if(p->data>max)
max=p->data;
/***********found**********/
p=h->next;改為:p=p->next;
)
returnmax;
)
outresult(ints,FILE*pf)
{fprintf(pf,"\nThemaxinlink:%d\n'\s);}
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;
fprintfCpf/AnTHELIST:\n\nHEAD");
while(p)
{fprintf(pf,n->%dn,p->data);p=p->next;}
fprintf(pfj'n");
)
main()
{NODE*head;intm;
head=creatlink(12,100);
outlink(head,stdout);
m=fun(head);
printf("\nTHERESULT:\nH);outresult(m,stdout);
)
解題思路:
程序中是使用while循環(huán)語句和結(jié)合結(jié)構(gòu)指針p來找到數(shù)據(jù)域中的最大值。
第一處:p指向形參結(jié)構(gòu)指針h的next指針,所以應(yīng)改為:p=h->next;o
第二處:p指向自己的下一個(gè)結(jié)點(diǎn),所以應(yīng)改為:p=p->next,
第14套
給定程序MODI1.C是建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,并用隨機(jī)函數(shù)為各結(jié)點(diǎn)賦值。函數(shù)fun的功能是將單
向鏈表結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域?yàn)榕紨?shù)的值累加起來,并且作為函數(shù)值返回。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#include<stdlib.h>
typedefstructaa
{intdata;structaa*next;JNODE;
intfun(NODE*h)
{intsum=0;
NODE*p;
/***********found**********/
p=h;改為:p=h->next;
while(p)
{if(p->data%2==0)
sum+=p->data;
/***********found*字********/
p=h->next;改為:p=p->next;
returnsum;
NODE*creatlink(intn)
{NODE*h,*p,*s,*q;
inii,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,"\nH);
)
outresult(ints,FILE*pf)
{fprintf(pf,n\nThesumofevennumbers:%d\nM,s);}
main()
{NODE*head;inteven;
head=creatlink(12);
head->data=9000;
outlink(head,stdout);
even=fun(head);
printf("\nTheresult:\nn);outresult(even,stdout);
)
解題思路:
本題是考察如何使用單向鏈表把數(shù)據(jù)域的值按條件進(jìn)行累加。
第一處:試題要求不計(jì)算頭結(jié)點(diǎn),所以應(yīng)改為:p=h->next;
第二處:指向p的下一個(gè)結(jié)點(diǎn)來實(shí)現(xiàn)循環(huán),所以應(yīng)改為:p=p->next;
第15套
給定程序MODI1.C中函數(shù)fun的功能是:利用插入排序法對(duì)字符串中的字符按從小到大的順序進(jìn)行排序。
插入法的基本算法是:先對(duì)字符串中的頭兩個(gè)元素進(jìn)行排序。然后把第三個(gè)字符插入到前兩個(gè)字符中,插
入后前三個(gè)字符依然有序;再把第四個(gè)字符插入到前三個(gè)字符中,……。待排序的字符串已在主函數(shù)中賦
予。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
給定源程序:
#include<stdio.h>
#include<string.h>
#defineN80
voidinsert(char*aa)
{inti,j,n;charch;
/**********found**********/
n=strlen[aa];改為:n=strlen(aa);
for(i=1;i<n;i++){
/**********found***¥*¥****/
c=aa[i];改為:ch=aa[i];
j=i-l;
while((j>=0)&&(ch<aa[j]))
{aa[j+l]=aa[j];
j-;
aa[j+l]=ch;
)
main()
{chara[N]="QWERTYUIOPASDFGHJKLMNBVCXZn;
inti;
printf("Theoriginalstring:%s\n",a);
insert(a);
printf(nThestringaftersorting:%s\n\n",a);
解題思路:
第一處:函數(shù)應(yīng)該使用圓括號(hào),所以應(yīng)改為:n=strlen(aa);o
第二處:變量c沒有定義,但后面使用的是ch變量,所以應(yīng)改為:ch=aa[i];。
第16套
給定程序MODILC中fun函數(shù)的功能是:將p所指字符串中每個(gè)單詞的最后一個(gè)字母改成大寫。(這里的
“單詞”是指由空格隔開的字符串)。
例如,若輸入"Iamastudenttotaketheexamination.",則應(yīng)輸出MIaMAstudenTtOtakEthE
examination."o
請(qǐng)修改程序中的錯(cuò)誤之處,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<ctype.h>
#include<stdio.h>
voidfun(char*p)
intk=0;
for(;*p;p++)
if(k)
/**********found***********/
if(P==")改為:if(*p==,,)
k=0;
*(p-1)=toupper(*(p-1))改為:*(p-l)=toupper(*(p-1));
else
k=1;
main()
charchrstr|64];
intd;
printf(H\nPleaseenteranEnglishsentencewithin63letters:");
gets(chrstr);
d=strlen(chrstr);
chrstr[d]=";
chrstr[d+l]=0;
printf("\n\nBeforechanging:\n%s",chrstr);
fun(chrstr);
printf("\nAfterchanging:\n%s",chrstr);
第17套
給定程序MODI1.C中函數(shù)fun的功能是:在p所指字符串中找出ASCII碼值最大的字符,將其放在第一
個(gè)位置上;并將該字符前的原字符向后順序移動(dòng)。
例如,調(diào)用fun函數(shù)之前給字符串輸入:ABCDeFGH,調(diào)用后字符串中的內(nèi)容為:eABCDFGH。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
給定源程序:
#include<stdio.h>
fun(char*p)
{charmax,*q;inti=0;
max=p[i];
while(p[i]!=0)
{if(max<p[i])
{max=p[i];
/**********found**¥¥*¥****/
q=p+i改為:q=p+i;
i++;
wihle(q>p)改為:while(q>p)
{*q=*(q-l);
q--;
p[O]=max;
main()
{charstr[80];
printf(nEnterastring:");gets(str);
printf("\nTheoriginalstring:“);puts(str);
fun(str);
printf(n\nThestringaftermoving:");puts(str);printf("\n\n");
)
解題思路:
第一處:在語句后缺少分號(hào),所應(yīng)改為:q=p+i;o
第二處:保留字while寫錯(cuò),所應(yīng)改為:while(q>p)o
第18套
給定程序MODI1.C中函數(shù)fun的功能是:將s所指字符串中最后一次出現(xiàn)的與tl所指字符串相同的子
串替換成t2所指字符串,所形成的新串放在w所指的數(shù)組中。在此處,要求tl和t2所指字符串的長(zhǎng)度相
同。例如,當(dāng)s所指字符串中的內(nèi)容為:"abcdabfabc”,tl所指子串中的內(nèi)容為:“ab”,t2所指子串中
的內(nèi)容為:“99”時(shí),結(jié)果,在w所指的數(shù)組中的內(nèi)容應(yīng)為:"abcdabf99c",
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#include<string.h>
intfun(char*s,char*tl,char*t2,char*w)
(
inti;char*p,*a;
strcpy(w,s);
/***********¥found************/
while(w)改為:while(*w)
{p=w;r=11;
while(*r)
/************]ound************/
IF(*r==*p)改為:if(*r==*p)
{r++;p++;}
elsebreak;
if(*r==AO1)a=w;
w++;
)
r=t2;
while(*r){*a=*r;a++;r++;}
)
main()
(
chars[100],tl[100],t2[100],w[100];
printf("\nPleaseenterstringS:");scanf(u%sn,s);
printf(n\nPleaseentersubstringtl:");scanf(u%sn,tl);
printf(n\nPleaseentersubstringt2:M);scanf(u%sn,t2);
if(strlen(t1)==strlen(t2))
{fun(s,tl,t2,w);
printf("\nTheresultis:%s\n",w);
)
elseprintf(u\nError:strlen(tl)!=strlen(t2)\nH);
}
解題思路:
第一處:判斷W指針?biāo)傅闹凳欠袷墙Y(jié)束符,應(yīng)改為:while(*w)。
第二處:if錯(cuò)寫成If。
第19套
給定程序MODI1.C中函數(shù)fun的功能是:從N個(gè)字符串中找出最長(zhǎng)的那個(gè)串,并將其地址作為函數(shù)值返回。
各字符串在主函數(shù)中輸入,并放入一個(gè)字符串?dāng)?shù)組中。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
給定源程序:
#include<stdio.h>
#include<string.h>
#defineN5
#defineM81
/**********found**********/
fun(char(*sq)[M])改為:char*fun(char(*sq)[M])
{inti;char*sp;
sp=sq[O];
for(i=0;i<N;i++)
if(strlen(sp)<strlen(sq[i]))
sp=sq[i];
/**********found*****'****/
returnsq;改為:returnsp;
)
main()
{charstr[N][M],*longest;inti;
printf("Enter%dlines:\n",N);
for(i=0;i<N;i++)gets(str[i]);
printf("\nTheNstring:\n",N);
for(i=0;i<N;i++)puts(str[i]);
longest=fun(str);
printf(M\nThelongeststring:\n");puts(longest);
)
解題思路:
第一處:要求返回字符串的首地址,所以應(yīng)改為:char*fun(char(*sq)[M])o
第二處:返回一個(gè)由變量sp控制的字符串指針,所以應(yīng)改為:returnsp;o
第20套
給定程序MODI1.C中函數(shù)fun的功能是:統(tǒng)計(jì)字符串中各元音字母(即:A、E、I、O、U)的個(gè)數(shù)。
注意:字母不分大、小寫。
例如:若輸入:THIsisaboot,則輸出應(yīng)該是:1、0、2、2、0。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
fun(char*s,intnum[5])
{intk,i=5;
for(k=0;k<i;k++)
/**********found**'*******/
num[i]=0;改為:num[k]=O;
for(;*s;s++)
{i=-l;
/**********found**********/
switch(s)改為:switch(*s)
{case'a':case'A':{i=0;break;}
case'e':case'E':{i=l;break;}
case'i':caseT:{i=2;break;}
case'o':case'O':{i=3;break;}
caseU:caseU:{i=4;break;}
if(i>=0)
num|i]++;
main()
{charsl[81];intnuml[5],i;
printf("\nPleaseenterastring:");gets(si);
fun(si,numl);
for(i=0;i<5;i++)printf(”%d=num1[i]);printf(n\n");
解題思路:
第一處:num初始化錯(cuò)誤,應(yīng)為:num[k]=0;o
第二處:由于s是指針型變量,所以應(yīng)改為:switches)。
第21套
給定程序MODI1.C的功能是:讀入一個(gè)英文文本行,將其中每個(gè)單詞的第一個(gè)字母改成大寫,然后輸出
此文本行(這里的“單詞”是指由空格隔開的字符串)。
例如,若輸入:Iamastudenttotaketheexamination.,
則應(yīng)輸出:IAmAStudentToTakeTheExamination..
請(qǐng)改正程序中的錯(cuò)誤,使程序能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<ctype.h>
#include<string.h>
/************found************/
include<stdio.h>改為:#include<stdio.h>
/************1ound************/
upfst(charp)改為:upfst(char*p)
{intk=0;
for(;*p;p++)
if(k)
{if(*p==,,)k=0;}
elseif(*p!=*')
{k=1;*p=toupper(*p);}
)
main()
{charchrstr[81];
printf(n\nPleaseenteranEnglishtextline:");gets(chrstr);
printf("\n\nBeforechanging:\n%s",chrstr);
upfst(chrstr);
printf("\nAfterchangingAn%s\nu,chrstr);
)
解題思路:
第一處:包含頭文件的標(biāo)識(shí)錯(cuò)誤,在include前漏寫了#。
第二處:由于傳入的參數(shù)是字符串,所以應(yīng)為upfst(char*p)。
第22套
給定程序MODI1.C中fun函數(shù)的功能是:將n個(gè)無序整數(shù)從小到大排序。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#include<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++)改為:for(i=j+l;i<=n-l;i++)
if(a[p]>a[i])
/***********¥found************/
t=i;改為:p=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(',\nM);
}printfCAn'1);
)
main()
{intaa[20]={93,0,4,1,2,5,6,8,10,7},n=ll;
printf(n\n\nBeforesorting%dnumbersAn",n);putarr(n,aa);
fun(n,aa);
printf(n\nAftersorting%dnumbers:\nM,n);putarr(n,aa);
}
解題思路:
第一處:for循環(huán)的終止值應(yīng)該<n或者是<=n-l。
第二處:使用臨時(shí)變量p來保存最小值位置i,所以應(yīng)改為:p=i;o
第23套
給定程序MODI1.C中函數(shù)fun的功能是:交換主函數(shù)中兩個(gè)變量的值。例如:若變量a中的值原為8,b
中的值為3。程序運(yùn)行后a中的值為3,b中的值為8。
請(qǐng)改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
/*********found**********/
intfun(intx,inty)改為:intfun(int*x,int*y)
(
intt;
/*********found****¥*****/
t=x;x=y;y=t;改為:t=*x;*x=*y;*y=t;
}
main()
(
inta,b;
a=8;b=3;
fun(&a,&b);
prinlf("%d,%d\n",a,b);
)
解題思路:
第一處:函數(shù)形參定義不正確,在定義第2個(gè)形參時(shí),也應(yīng)加上int。由于通過該函數(shù)實(shí)現(xiàn)
兩數(shù)交換,在C語言中,必須交換地址中的值,所以應(yīng)定義為int*x,int*y。
第二處:要交換地址中的值,不能交換地址,必須指定地址中的值,因此應(yīng)改為t=*x;*x=*y;*y=t;。
第24套
假定整數(shù)數(shù)列中的數(shù)不重復(fù),并存放在數(shù)組中。給定程序MODILC中函數(shù)fun的功能是:刪除數(shù)列中值
為x的元素。n中存放的是數(shù)列中元素的個(gè)數(shù)。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
給定源程序:
#include<stdio.h>
#defineN20
fun(int*a,intn,intx)
{inip=O,i;
a[n]=x;
while(x!=a[p])
P=P+1;
/**********found**********/
if(P==n)return-1;改為:if(p==n)return-1;
else
{for(i=p;i<n;i++)
/**********found**'*******/
a[i+l]=a[i];改為:a[i]=a[i+l];
)
)
main()
{intw[N]={-3,0,1,5J,99,10,15,30,90},x,n,i;
n=10;
printf(MTheoriginaldata:\nH);
for(i=0;i<n;i++)printf(H%5dn,w[i]);
printf(n\nlnputx(todelete):");scanf("%d”,&x);
printf(nDelete:%d\n",x);
n=fun(w,n,x);
if(n==-l)printf("***Notbefound!***\n\n");
else
{printfC'Thedataafterdeleted:\n");
for(i=0;i<n;i++)printf(H%5dn,w[i]);printf(n\n\nH);
)
)
解題思路:
第一處:條件語句中的小寫p錯(cuò)寫成大寫P了。
第二處:刪除元素,應(yīng)該是后面位置的元素值賦值給前面的位置上,所以應(yīng)改為:a[i]=a[i+l];,
第25套
給定程序MODH.C中函數(shù)fun的功能是:從s所指字符串中,找出與t所指字符串相同的子串的個(gè)數(shù)作
為函數(shù)值返回。
例如,當(dāng)s所指字符串中的內(nèi)容為:"abcdabfab",t所指字符串的內(nèi)容為:“ab",則函數(shù)返回整數(shù)3。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#include<string.h>
intfun(char*s,char*t)
(
intn;char*p,*r;
n=0;
while(*s)
{p=s;r=t;
while(*r)
if(*r==*p){
r++;p++改為:r++;p++;
elsebreak;
/***********ijtfound***#********/
if(r==W)改為:if(*r==O)
n++;
s++;
returnn;
main()
chars[100],t[100];intm;
printf(M\nPleaseenterstringS:n);scanf(u%sn,s);
printf("\nPleaseentersubstringI:");scanf(n%s",t);
m=fun(s,t);
printf("\nTheresultis:m=%d\n",m);
解題思路:
第一處:語句后缺少分號(hào)。
第二處:判斷r的當(dāng)前字符是否是字符串結(jié)束符,所以應(yīng)改為:if(*==O)。
第26套
給定程序MODI1.C中函數(shù)fun的功能是:用選擇法對(duì)數(shù)組中的n個(gè)元素按從小到大的順序進(jìn)行排序。
請(qǐng)修改程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行和刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
#defineN20
voidfun(inta[],intn)
{inti,j,t,p;
for(j=0;j<n-l;j++){
/***********¥found************/
P=J改為:P=j
for(i=j;i<n;i++)
if(a[i]<a[p])
/************found************/
P=J;改為:p=i:
t=a[p];a[p]=a[j];a[j]=t;
main()
inta[N]={9,6,8,3,-l},i,m=5;
printf("排序前的數(shù)據(jù):");
for(i=0;i<m;i++)printf(M%dM,a[i]);printf("\nn);
fun(a,m);
printf("排序后的數(shù)據(jù):“);
for(i=0;i<m;i++)printf("%d",a[i]);printf("\n");
}
解題思路:
第一處:語句后缺少分號(hào)。
第二處:保存最小值的位置,所以應(yīng)改為:p=i;。
第27套
給定程序MODI1.C中函數(shù)fun的功能是:統(tǒng)計(jì)substr所指子字符串在str所指字符串中出現(xiàn)的次數(shù)。例
如,若字符串為aaaslkaaas,子字符串為as,則應(yīng)輸出2。
請(qǐng)改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include<stdio.h>
fun(char*str,char*substr)
{inti,j,k,num=O;
for(i=0,str[i],i++)改為:for(i=0;str[i];i++)
for(j=i,k=0;substr[k]==str|j];k4-+,j++)
If(substr[k+1]==1\0,)改為:if(substr[k+l]=d\(T)
{num++;
break;
}
returnnum;
)
main()
(
charstr[80],substr[80];
printf(nInputastring:");
gets(str);
printf("Inputasubstring:");
gets(substr);
printf(n%d\n'\fun(str,substr));
解題思路:
第一處:循環(huán)for語句中應(yīng)有分號(hào)。
第二處:if錯(cuò)寫成開。
第28套
給定程序MODI1.C中函數(shù)fun的功能是:通過某種方式實(shí)現(xiàn)兩個(gè)變量值的交換,規(guī)定不允許增加語句和
表達(dá)式。例如變量a中的值原為8,b中的值原為3,程序運(yùn)行后a中的值為3,b中的值為8。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人商鋪?zhàn)赓U合同(含裝修補(bǔ)償條款)3篇
- 二零二五年度建筑塔吊租賃及勞務(wù)分包施工合同
- 2025民法典合同編修訂版修訂咨詢合同3篇
- 2025年度個(gè)人擔(dān)保業(yè)務(wù)合同模板2篇
- 二零二五年度文化旅游項(xiàng)目派遣員工勞動(dòng)合同及文化交流協(xié)議4篇
- 養(yǎng)老院物業(yè)管理勞務(wù)合同范本(二零二五年度)3篇
- 2025年度美食城檔口租賃合同參考范本3篇
- 2025年度個(gè)人獨(dú)資企業(yè)股權(quán)轉(zhuǎn)讓合同范本與法律風(fēng)險(xiǎn)分析3篇
- 二零二五年度木工班組職業(yè)健康與安全協(xié)議合同3篇
- 2025年度農(nóng)業(yè)設(shè)施搭棚種植技術(shù)服務(wù)合同3篇
- 肺炎臨床路徑
- 外科手術(shù)鋪巾順序
- 創(chuàng)新者的窘境讀書課件
- 綜合素質(zhì)提升培訓(xùn)全面提升個(gè)人綜合素質(zhì)
- 如何克服高中生的社交恐懼癥
- 聚焦任務(wù)的學(xué)習(xí)設(shè)計(jì)作業(yè)改革新視角
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)任務(wù)三 APP的品牌建立與價(jià)值提供
- 電子競(jìng)技范文10篇
- 食堂服務(wù)質(zhì)量控制方案與保障措施
- VI設(shè)計(jì)輔助圖形設(shè)計(jì)(2022版)
- 眼科學(xué)??己?jiǎn)答題
評(píng)論
0/150
提交評(píng)論