计算机二级C语言考试改错题(二)_第1页
计算机二级C语言考试改错题(二)_第2页
计算机二级C语言考试改错题(二)_第3页
计算机二级C语言考试改错题(二)_第4页
计算机二级C语言考试改错题(二)_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

改错题

第01套

给定程序MODU.C中函数fun的功能是:计算n!。

例如,给n输入5,则输出120.000000。

请改正程序中的错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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));

解题思路:

第一处:条件语句书写格式错误,应改为:if(n==0)。

第二处:语句后缺少分号。

第02套

给定程序MODU.C中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字

符串。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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);

}

解题思路:

第一处:要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j

来控制新字符串的位置,所以应改为:s[j++]=s[i];。

第二处:置新字符串的结束符,所以应改为:s[j]=\(y;.

第03套

给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1

的值。

请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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);

解题思路:

第一处:指向刚分配的结构指针,所以应改为:p=(NODE*)malloc(sizeof(NODE));

第二处:在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,

最后返回不能使用P,是因为p的位置已经发生了变化,所以应改为返回h。

第04套

给定程序MODU.C中函数fun的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原串。

注意:字符串的长度最长允许为79。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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应指向S,所以应改为:p=s;«

第二处:死循环,当dowhile循环执行一次,临时变量p应该指向字符串的下一位置,所以

应改为:while(*p++);o

第05套

给定程序MODI1.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(mW10)名

学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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);

)

解题思路:

第一处:语句最后缺少分号。

第二处:应该使用方括号,而不是圆括号。像此类,使用编译,即可发现。

第06套

给定程序MODU.C中函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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));

解题思路:

第一处:试题要求返回字符串的首地址,所以应改为:char*fun(char*s,char*。

第二处:取字符串指针ss的下一个位置,所以应改为:SS++;。

第三处:取字符串指针tt的下一个位置,所以应改为:注++;。

第07套

给定程序MODI1.C中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、

次最大数和a[l]中的数对调。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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");

)

解题思路:

第一处:外循环每循环一次,把当前位置i赋值给m,所以应改为:m=i;0

第二处:通过内循环来找出最大的一个数的位置k,所以应改为:if(a[k]>a[m])m=k;。

第08套

给定程序MODI1.C中函数fun的功能是:求k!(k<13),所求阶乘的值作为函数值返回。例如:若k=10,

则应输出:3628800»

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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));

)

解题思路:

第一处:条件判断缺少圆括号。

第二处:判断相等的符号是二=。

第09套

给定程序MODI1.C中函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转

换为A,z转换为a),其它字符不变。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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循环来判断字符串指针s是否结束,所以应改为:while(*s)o

第二处:取字符串指针s的下一个位置,所以应改为:S++;。

第10套

给定程序MODI1.C中fun函数的功能是:根据整型形参m,计算如下公式的值。

例如,若主函数中输入5,则应输出-0.283333。

请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#include<stdio.h>

doublefun(intm)

(

doublet=1.0;

inti;

for(i=2;i<=m;i++)

t=1.0-1/i;改为:t-=L/i;

应填returnt;

main()

(

intm;

printf("XnPleaseenter1integernumbers:\n");

scanf(n%d'\&m);

printf("\n\nTheresultis%lf\n'\fun(m));

解题思路:

第一处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为

第二处:应是返回公式的值,函数中公式的值是存放在临时变量t中,所以应填returnt;。

第11套

给定程序MODI1.C中函数firn的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返

回。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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来实现的,再根据下面while循环体中语句可知,所以应改为:r=t;o

第二处:是判断相等的条件,所以应改为:if(*r=0)o

第12套

给定程序MODU.C中函数fun的功能是:将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字

符放入t所指数组中(规定第一个字符放在第0位中)。

例如,字符串中的数据为:AABBCCDDEEFF,贝IJ输出应当是:ABBCDDEFFo

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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);

)

解题思路:

第一处:根据试题分析,两个条件之间应该是“或”的关系,而不是“与”的关系,所以应改为:if(i%2ll

s[i]%2==0)o

第二处:当字符串处理结束后,应该补上字符串的结束符,那么字符串t的位置是由i来控制,所以应改为:

t[j]=O;«

第13套

给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作

用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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循环语句和结合结构指针p来找到数据域中的最大值。

第一处:p指向形参结构指针h的next指针,所以应改为:p=h->next;o

第二处:p指向自己的下一个结点,所以应改为:p=p->next,

第14套

给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单

向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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);

)

解题思路:

本题是考察如何使用单向链表把数据域的值按条件进行累加。

第一处:试题要求不计算头结点,所以应改为:p=h->next;

第二处:指向p的下一个结点来实现循环,所以应改为:p=p->next;

第15套

给定程序MODI1.C中函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。

插入法的基本算法是:先对字符串中的头两个元素进行排序。然后把第三个字符插入到前两个字符中,插

入后前三个字符依然有序;再把第四个字符插入到前三个字符中,……。待排序的字符串已在主函数中赋

予。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

给定源程序:

#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);

解题思路:

第一处:函数应该使用圆括号,所以应改为:n=strlen(aa);o

第二处:变量c没有定义,但后面使用的是ch变量,所以应改为:ch=aa[i];。

第16套

给定程序MODILC中fun函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的

“单词”是指由空格隔开的字符串)。

例如,若输入"Iamastudenttotaketheexamination.",则应输出MIaMAstudenTtOtakEthE

examination."o

请修改程序中的错误之处,使它能得出正确的结果。

注意:不要改动main函数,不得删行,也不得更改程序的结构!

给定源程序:

#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中函数fun的功能是:在p所指字符串中找出ASCII码值最大的字符,将其放在第一

个位置上;并将该字符前的原字符向后顺序移动。

例如,调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为:eABCDFGH。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

给定源程序:

#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");

)

解题思路:

第一处:在语句后缺少分号,所应改为:q=p+i;o

第二处:保留字while写错,所应改为:while(q>p)o

第18套

给定程序MODI1.C中函数fun的功能是:将s所指字符串中最后一次出现的与tl所指字符串相同的子

串替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求tl和t2所指字符串的长度相

同。例如,当s所指字符串中的内容为:"abcdabfabc”,tl所指子串中的内容为:“ab”,t2所指子串中

的内容为:“99”时,结果,在w所指的数组中的内容应为:"abcdabf99c",

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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指针所指的值是否是结束符,应改为:while(*w)。

第二处:if错写成If。

第19套

给定程序MODI1.C中函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。

各字符串在主函数中输入,并放入一个字符串数组中。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

给定源程序:

#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);

)

解题思路:

第一处:要求返回字符串的首地址,所以应改为:char*fun(char(*sq)[M])o

第二处:返回一个由变量sp控制的字符串指针,所以应改为:returnsp;o

第20套

给定程序MODI1.C中函数fun的功能是:统计字符串中各元音字母(即:A、E、I、O、U)的个数。

注意:字母不分大、小写。

例如:若输入:THIsisaboot,则输出应该是:1、0、2、2、0。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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初始化错误,应为:num[k]=0;o

第二处:由于s是指针型变量,所以应改为:switches)。

第21套

给定程序MODI1.C的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出

此文本行(这里的“单词”是指由空格隔开的字符串)。

例如,若输入:Iamastudenttotaketheexamination.,

则应输出:IAmAStudentToTakeTheExamination..

请改正程序中的错误,使程序能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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);

)

解题思路:

第一处:包含头文件的标识错误,在include前漏写了#。

第二处:由于传入的参数是字符串,所以应为upfst(char*p)。

第22套

给定程序MODI1.C中fun函数的功能是:将n个无序整数从小到大排序。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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循环的终止值应该<n或者是<=n-l。

第二处:使用临时变量p来保存最小值位置i,所以应改为:p=i;o

第23套

给定程序MODI1.C中函数fun的功能是:交换主函数中两个变量的值。例如:若变量a中的值原为8,b

中的值为3。程序运行后a中的值为3,b中的值为8。

请改正程序中的错误,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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);

)

解题思路:

第一处:函数形参定义不正确,在定义第2个形参时,也应加上int。由于通过该函数实现

两数交换,在C语言中,必须交换地址中的值,所以应定义为int*x,int*y。

第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为t=*x;*x=*y;*y=t;。

第24套

假定整数数列中的数不重复,并存放在数组中。给定程序MODILC中函数fun的功能是:删除数列中值

为x的元素。n中存放的是数列中元素的个数。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

给定源程序:

#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错写成大写P了。

第二处:删除元素,应该是后面位置的元素值赋值给前面的位置上,所以应改为:a[i]=a[i+l];,

第25套

给定程序MODH.C中函数fun的功能是:从s所指字符串中,找出与t所指字符串相同的子串的个数作

为函数值返回。

例如,当s所指字符串中的内容为:"abcdabfab",t所指字符串的内容为:“ab",则函数返回整数3。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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);

解题思路:

第一处:语句后缺少分号。

第二处:判断r的当前字符是否是字符串结束符,所以应改为:if(*==O)。

第26套

给定程序MODI1.C中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。

请修改程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行和删行,也不得更改程序的结构!

给定源程序:

#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("排序前的数据:");

for(i=0;i<m;i++)printf(M%dM,a[i]);printf("\nn);

fun(a,m);

printf("排序后的数据:“);

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

}

解题思路:

第一处:语句后缺少分号。

第二处:保存最小值的位置,所以应改为:p=i;。

第27套

给定程序MODI1.C中函数fun的功能是:统计substr所指子字符串在str所指字符串中出现的次数。例

如,若字符串为aaaslkaaas,子字符串为as,则应输出2。

请改正程序中的错误,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#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));

解题思路:

第一处:循环for语句中应有分号。

第二处:if错写成开。

第28套

给定程序MODI1.C中函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和

表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论