計(jì)算機(jī)二級(jí)C語言考試改錯(cuò)題(二)_第1頁
計(jì)算機(jī)二級(jí)C語言考試改錯(cuò)題(二)_第2頁
計(jì)算機(jī)二級(jí)C語言考試改錯(cuò)題(二)_第3頁
計(jì)算機(jī)二級(jí)C語言考試改錯(cuò)題(二)_第4頁
計(jì)算機(jī)二級(jí)C語言考試改錯(cuò)題(二)_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論