《计算机二级C语言考试改错题(二).pdf》由会员分享,可在线阅读,更多相关《计算机二级C语言考试改错题(二).pdf(74页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、改 错 题第 01套给定程序MODU.C中 函 数 fu n 的功能是:计算n!。例 如,给 n 输入5,则输出120.000000。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include double fun(int n)double result=1.0;/*found亭*X*/if n=0 return 1.0;while(n 1&n 170)/*ound字*/result*=n-return result;改为:if(n=0)改为:result*=n-;main()int n;printf(nInput
2、 N:M);scanfCd,&n);printf(nnn%d!=%lftnn,n,fun(n);解题思路:第一处:条件语句书写格式错误,应改为:if(n=0)。第二处:语句后缺少分号。第 02 套给定程序MODU.C中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字 符串。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include void fun(char*s)int i,j;for(i=O,j=O;si!=W;i+)if(si=,0,&si=9)/*fou nd*/sj=
3、si;/*fou nd*/sj=O;改为:sj+=si;改为:sIj=O;.main()char item80;printfCXnEnter a string:n);gets(item);printf(MnnThe string is:,%snn,item);fun(item);printf(MnnThe string of changing is:n%sun,item);解题思路:第一处:要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j 来控制新字符串的位置,所以应改为:sj+=si;。第二处:置新字符串的结束符,所以应改为:sj=(y;.第 03 套给定程序MODI1
4、.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0 到 m-1 的值。请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include typedef struct aa int data;struct aa*next;NODE;NODE*Creatlink(int n,int m)NODE*h=NULL,*p,次s;int i;/*fou nd*/p=(NODE)malloc(sizeof(NODE);h=p;p-next=NULL;for(i=l
5、;idata=rand()%m;s-next=p-next;p-next=s;p=p-next;return p;outlink(NODE*h)NODE*p;p=h-next;printf(nnTHE LIST:nn HEAD);while(p)printf(M-%d M,p-data);改为:p=(NODE*)malloc(sizeof(NODE);改为:return h;p=p-next;printf(nnn);main()NODE*head;head=Creatlink(8,22);outlink(head);解题思路:第一处:指向刚分配的结构指针,所以应改为:p=(NODE*)mall
6、oc(sizeof(NODE);第二处:在动态分配内存的下一行语句是,使用临时结构指针变量h 保存p 指针的初始位置,最后返回不能使用P,是因为p 的位置已经发生了变化,所以应改为返回h。第 04 套给定程序MODU.C中函数fun的功能是:在字符串的最前端加入n 个*号,形成新串,并且覆盖原串。注意:字符串的长度最长允许为79。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include void fun(char s,int n)(char a80,*p;int i;/*fou nd*
7、/s=p;改为:p=s;for(i=0;in;i+)do ai=*p;i+;)/*found*/while(*p+)改为:while(*p+);ai=0;strcpy(s,a);)main()int n;char s80J;printf(nEnter a string:);gets(s);printf(nnThe string s“n”,s);printf(nnEnter n(number of*):);scanf(u%dM,&n);fun(s,n);printf(nThe string after insert:V%sV n,s);解题思路:第一处:指针P 应指向S,所以应改为:p=s;第二
8、处:死循环,当 do while循环执行一次,临时变量p 应该指向字符串的下一位置,所以 应改为:while(*p+);o第 05 套给定程序MODI1.C中函数fun的功能是:对 N 名学生的学习成绩,按从高到低的顺序找出前m(mW10)名 学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#include#define N 10 typedef struct ss char num10;
9、int s;STU;STU*fun(STU a,int m)STU bN,*t;int i,j,k;/*found*/t=(STU*)calloc(sizeof(STU),m)改为:t=(STU*)calloc(sizeof(STU),m);for(i=0;iN;i+)bi=ai;for(k=0;km;k+)for(i=j=0;ibU.s)j=i;/*fou nd*/t(k)=b(j);改为:tk=bj;bj|.s=O;)return t;)outresult(STU a,FILE*pf)int i;for(i=0;i10)printf(MnGive the number of the stu
10、dents who have better score:);scanf(%d,&m);pOrder=fun(a,m);printf(”*THE RESULT*n”);printf(nThe top:n);for(i=0;im;i+)printf(,f%s%dnn,pOrderi.num,pOrderi.s);free(pOrder);)解题思路:第一处:语句最后缺少分号。第二处:应该使用方括号,而不是圆括号。像此类,使用编译,即可发现。第 06 套给定程序MODU.C中函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的
11、结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/*found*字*/char fun(char*s,char*1)int sl=0,H=0;char*ss,*tt;ss=s;tt=t;while(*ss)sl+;/*found*/(*ss)+;改为:char*fun(char*s,char*t)改 为:ss+;while(*tt)tl+;/*found*/(*tt)+;)if(tlsl)return t;else return s;改为:tt+;main()char a80,b80,*p,*q;int i;printf(nEnter a s
12、tring:);gets(a);printf(MnEnter a string again:);gets(b);printf(MnThe longer is:nnM%sVnn,fun(ab);解题思路:第一处:试题要求返回字符串的首地址,所以应改为:char*fun(char*s,char*。第二处:取字符串指针ss 的下一个位置,所以应改为:SS+;。第三处:取字符串指针tt的下一个位置,所以应改为:注+;。第 07套给定程序MODI1.C中 函 数 fu n 的功能是:求出数组中最大数和次最大数,并把最大数和a0中的数对调、次最大数和al中的数对调。请改正程序中的错误,使它能得出正确的结果
13、。注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#define N 20 int fun(int*a,int n)int i,m,t,k;for(i=0;i2;i+)/*found*/m=0;for(k=i+l;kam)k=m;t=ai;ai=am;am=t;改为:m=i;改为:if(akam)m=k;main()int x,bN=11,5,12,0,3,6,9,7,10,8,n=10,i;for(i=0;in;i+)printf(H%d n,bi);printfCn1);fun(b,n);for(i=0;iam)m=k;。第 08 套给定程序
14、MODI1.C中函数fun的功能是:求 k!(k13),所求阶乘的值作为函数值返回。例如:若 k=10,则应输出:3628800请改正程序中的错误,使它能得出正确的结果。注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include long fun(int k)ifk 0return(k*fun(k-l);/*found*/else if(k=0)return IL;main()int k=10;printf(n%d!=%ldn,k,fun(k);)解题思路:第一处:条件判断缺少圆括号。第二处:判断相等的符号是二=。改为:if(k0)改为:else if(k
15、=0)第09套给定程序MODI1.C中函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转 换 为A,z转 换 为a),其它字符不变。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include void fun(char*s)/*found*/while(*s!=)if(*s=A,&*sv=Z II*s=a&*sv=z)if(*s=Z,)*s=A;else if(*s=z)*s=a*;else*s+=1;)/*fou nd*不*/(*s)+;改为:while(*s
16、)改为:s+;main()chars80;printf(Mn Enter a string with length 80.:nn);gets(s);printf(n The string:nn n);puts(s);fun(s);printf(nnn The Cords:nn);puts(s);解题思路:第一处:使 用while循环来判断字符串指针s是否结束,所以应改为:while(*s)o 第二处:取字符串指针s的下一个位置,所以应改为:S+;。第 10套给定程序MODI1.C中 fun函数的功能是:根据整型形参m,计算如下公式的值。例如,若主函数中输入5,则应输出-0.283333。请改正
17、函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include double fun(int m)(double t=1.0;int i;for(i=2;i=m;i+)t=1.0-1/i;改为:t-=L/i;应填 return t;main()(int m;printf(XnPlease enter 1 integer numbers:n);scanf(n%d&m);printf(nnThe result is%lfn fun(m);解题思路:第一处:在除法运算中,如果除数和被除数
18、都是整数,所么所除结果也是整数,因此应改为第二处:应是返回公式的值,函数中公式的值是存放在临时变量t 中,所以应填return t;。第 11套给定程序MODI1.C中函数firn的功能是:计算s 所指字符串中含有t 所指字符串的数目,并作为函数值返 回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#define N 80 int fun(char*s,char*t)int n;char*p,*r;n=0;while(*s)P=s;/*found*/r=P;while(*r
19、)if(*r=*p)r+;p+;else break;/*fou nd*/if(*r=0)n+;s+;改为:r=t;改为:if(*r=O)return n;main()char aN,bN;int m;printf(HnPlease enter string a:);gets(a);printf(MnPlease enter substring b:);gets(b);m=fun(a,b);printf(MnThe result is:m=%dnn,m);解题思路:第一处:程序中子串是由变量t来实现的,第二处:是判断相等的条件,所以应改为:再根据下面while循环体中语句可知,所以应改为:r=
20、t;o if(*r=0)o第 12套给定程序M O D U.C 中函数fun的功能是:将 s所指字符串中位于奇数位置的字符或ASCII码为偶数的字 符放入t所指数组中(规定第一个字符放在第0 位中)。例如,字符串中的数据为:A A B B C C D D E E F F,贝 I J 输出应当是:ABBCDDEFFo请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#define N 80void fun(char*s,char t)int i,j=0;for(i=0;istrle
21、n(s);i+)/*found*/if(i%2&si%2=0)tj+=si;/*fou nd*字*/li=0;)main()char sN,tN;printf(HnPlease enter string s:);gets(s);改为:if(i%2 II si%2=0)改为:tj=o;fun(s,t);printf(nThe result is:%sn,t);)解题思路:第一处:根据试题分析,两个条件之间应该是“或”的关系,而不是“与”的关系,所以应改为:if(i%2ll si%2=0)o第二处:当字符串处理结束后,应该补上字符串的结束符,那么字符串t 的位置是由i 来控制,所以应改为:tj=O
22、;第13套给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作 用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include typedef struct aa int data;struct aa*next;NODE;fun(NODE*h)int max=-1;NODE*p;/*fou nd*字*/p=h;改为:p=h-next;while(p)if(p-datamax
23、)max=p-data;/*found*/p=h-next;改为:p=p-next;)return max;)outresult(int s,FILE*pf)fprintf(pf,nThe max in link:%dns);NODE*creatlink(int n,int m)NODE*h,*p,*s,*q;int i,x;h=p=(NODE*)malloc(sizeof(NODE);h-data=9999;for(i=l;idata=rand()%m;s-next=p-next;p-next=s;p=p-next;p-next=NULL;return h;outlink(NODE*h,FI
24、LE*pf)NODE*p;p=h-next;fprintfCpf/AnTHE LIST:nn HEAD);while(p)fprintf(pf,n-%d n,p-data);p=p-next;fprintf(pfjn);)main()NODE*head;int m;head=creatlink(12,100);outlink(head,stdout);m=fun(head);printf(nTHE RESULT:nH);outresult(m,stdout);)解题思路:程序中是使用while循环语句和结合结构指针p 来找到数据域中的最大值。第一处:p 指向形参结构指针h 的 next指针,所
25、以应改为:p=h-next;o 第二处:p 指向自己的下一个结点,所以应改为:p=p-next,第 14套给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单 向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include typedef struct aa int data;struct aa*next;JNODE;int fun(NODE*h)int sum=0;NOD
26、E*p;/*found*/p=h;while(p)if(p-data%2=0)sum+=p-data;/*fou nd*字*/p=h-next;改为:p=h-next;改为:p=p-next;return sum;NODE*creatlink(int n)NODE*h,*p,*s,*q;ini i,x;h=p=(NODE*)malloc(sizeof(NODE);for(i=l;idata=rand()%16;s-next=p-next;p-next=s;p=p-next;)p-next=NULL;return h;)outlink(NODE*h,FILE*pf)NODE*p;p=h-next
27、;fprintf(pf,nnTHE LIST:nn HEAD );while(p)fprintf(pf,-%d,p-data);p=p-next;fprintf(pf,nH);)outresult(int s,FILE*pf)fprintf(pf,nnThe sum of even numbers:%dnM,s);main()NODE*head;int even;head=creatlink(12);head-data=9000;outlink(head,stdout);even=fun(head);printf(nThe result:nn);outresult(even,stdout);)
28、解题思路:本题是考察如何使用单向链表把数据域的值按条件进行累加。第一处:试题要求不计算头结点,所以应改为:p=h-next;第二处:指向p 的下一个结点来实现循环,所以应改为:p=p-next;第 15套给定程序MODI1.C中函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本算法是:先对字符串中的头两个元素进行排序。然后把第三个字符插入到前两个字符中,插 入后前三个字符依然有序;再把第四个字符插入到前三个字符中,。待排序的字符串已在主函数中赋 予。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给
29、定源程序:#include#include#define N 80 void insert(char*aa)int i,j,n;char ch;/*found*/n=strlen aa;for(i=1;i=0)&(chaaj)aaj+l=aaj;j-;改为:n=strlen(aa);改为:ch=aai;aaj+l=ch;)main()char aN=QWERTYUIOPASDFGHJKLMNBVCXZn;int i;printf(The original string:%sn,a);insert(a);printf(nThe string after sorting:%snn,a);解题思路:
30、第一处:函数应该使用圆括号,所以应改为:n=strlen(aa);o第二处:变量c 没有定义,但后面使用的是ch变量,所以应改为:ch=aai;。第 16套给定程序MODILC中 fu n 函数的功能是:将p 所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。例如,若 输 入 I am a student to take the examination.,则应输出 MI aM A studenT tO takE thE examination.o请修改程序中的错误之处,使它能得出正确的结果。注意:不要改动m ain函数,不得删行,也不得更改程序的结构!给定源
31、程序:#include#include void fun(char*p)int k=0;for(;*p;p+)if(k)/*found*/if(P=)改为:if(*p=,)k=0;*(p-1)=toupper(*(p-1 )改为:*(p-l)=toupper(*(p-1);elsek=1;main()char chrstr|64;int d;printf(HnPlease enter an English sentence within 63 letters:);gets(chrstr);d=strlen(chrstr);chrstrd=;chrstrd+l=0;printf(nnBefore
32、 changing:n%s,chrstr);fun(chrstr);printf(nAfter changing:n%s,chrstr);第 17套给定程序MODI1.C中函数fun的功能是:在 p 所指字符串中找出ASCII码值最大的字符,将其放在第一 个位置上;并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为:eABCDFGH。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include fun(char*p)char max,*q;int i=0;ma
33、x=pi;while(pi!=0)if(maxp)*q=*(q-l);q-;改为:while(qp)pO=max;main()char str80;printf(nEnter a string:);gets(str);printf(nThe original string:“);puts(str);fun(str);printf(nnThe string after moving:);puts(str);printf(nn);)解题思路:第一处:在语句后缺少分号,所应改为:q=p+i;o第二处:保留字while写错,所应改为:while(qp)o第 18套给定程序MODI1.C中 函 数 fu
34、 n 的功能是:将 s 所指字符串中最后一次出现的与t l 所指字符串相同的子 串替换成t2 所指字符串,所形成的新串放在w 所指的数组中。在此处,要求t l 和 t2所指字符串的长度相 同。例如,当 s 所指字符串中的内容为:abcdabfabc”,t l 所指子串中的内容为:“ab”,t2 所指子串中 的内容为:“99”时,结果,在 w 所指的数组中的内容应为:abcdabf99c,请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include int fun(char*s,char*tl,char*
35、t2,char*w)(int i;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+;else break;if(*r=A O1)a=w;w+;)r=t2;while(*r)*a=*r;a+;r+;)main()(char s100,tl100,t2100,w100;printf(nPlease enter string S:);scanf(u%sn,s);printf(nnPlease enter substring tl:);scanf
36、(u%sn,tl);printf(nnPlease enter substring t2:M);scanf(u%sn,t2);if(strlen(t 1 )=strlen(t2)fun(s,tl,t2,w);printf(nThe result is:%sn,w);)else printf(unError:strlen(tl)!=strlen(t2)nH);解题思路:第一处:判断W指针所指的值是否是结束符,应改为:while(*w)。第二处:if错写成If。第 19套给定程序MODI1.C中函数fun的功能是:从N 个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,
37、并放入一个字符串数组中。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#include#define N 5#define M 81/*found*/fun(char(*sq)M)改为:char*fun(char(*sq)M)int i;char*sp;sp=sqO;for(i=0;iN;i+)if(strlen(sp)strlen(sqi)sp=sqi;/*fou nd*/return sq;改为:return sp;)main()char strNM,*longest;int i;printf(Ente
38、r%d lines:n,N);for(i=0;iN;i+)gets(stri);printf(nThe N string:n,N);for(i=0;iN;i+)puts(stri);longest=fun(str);printf(MnThe longest string:n);puts(longest);)解题思路:第一处:要求返回字符串的首地址,所以应改为:char*fun(char(*sq)M)o第二处:返回一个由变量sp控制的字符串指针,所以应改为:return sp;o第 20套给定程序MODI1.C中 函 数 fu n 的功能是:统计字符串中各元音字母(即:A、E、I、O、U)的个数
39、。注意:字母不分大、小写。例如:若输入:THIs is a b o o t,则输出应该是:1、0、2、2、0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include fun(char*s,int num5)int k,i=5;for(k=0;k=0)num|i+;main()char sl81;int numl5,i;printf(nPlease enter a string:);gets(si);fun(si,numl);for(i=0;i 5;i+)printf(”d=num 1 i);printf(nn)
40、;解题思路:第一处:num初始化错误,应为:numk=0;o第二处:由于s 是指针型变量,所以应改为:switches)。第 21套给定程序MODI1.C的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出 此文本行(这 里 的“单词”是指由空格隔开的字符串)。例如,若输入:I am a student to take the examination.,则应输出:I Am A Student To Take The Examination.请改正程序中的错误,使程序能得出正确的结果。注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#incl
41、ude#include/*found*/include 改为:#include/*1ound*/upfst(char p)改为:upfst(char*p)int k=0;for(;*p;p+)if(k)if(*p=,)k=0;else if(*p!=*)k=1;*p=toupper(*p);)main()char chrstr81;printf(nnPlease enter an English text line:);gets(chrstr);printf(nnBefore changing:n%s,chrstr);upfst(chrstr);printf(nAfter changingAn
42、%snu,chrstr);)解题思路:第一处:包含头文件的标识错误,在 include前漏写了#。第二处:由于传入的参数是字符串,所以应为upfst(char*p)。第 22套给定程序MODI1.C中 fun函数的功能是:将 n 个无序整数从小到大排序。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include fun(int n,int*a)int i,j,p,t;for(j=0;jn-l;j+)(P=j;/*fou nd*不*/for(i=j+l;in-l;i+)改为:for(i=j+l;iai)
43、/*found*/t=i;改为:p=i;if(p!=j)t=aj;aj=ap;ap=t;)putarr(int n,int*z)int i;for(i=1;i=n;i+,z+)printf(4d”,*z);if(!(i%10)printf(,nM);printfCAn1);)main()intaa20=93,0,4,1,2,5,6,8,10,7,n=ll;printf(nnnBefore sorting%d numbersAn,n);putarr(n,aa);fun(n,aa);printf(nnAfter sorting%d numbers:nM,n);putarr(n,aa);解题思路:第
44、一处:for循环的终止值应该n或者是=n-l。第二处:使用临时变量p 来保存最小值位置i,所以应改为:p=i;o第 23套给定程序MODI1.C中函数fun的功能是:交换主函数中两个变量的值。例如:若变量a 中的值原为8,b 中的值为3。程序运行后a 中的值为3,b 中的值为8。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/*found*/int fun(int x,int y)改为:int fun(int*x,int*y)(int t;/*found*/t=x;x=y;y=t;改为:t=*x;*x
45、=*y;*y=t;main()(int a,b;a=8;b=3;fun(&a,&b);prinlf(%d,%dn,a,b);)解题思路:第一处:函数形参定义不正确,在定义第2 个形参时,也应加上int。由于通过该函数实现 两数交换,在 C 语言中,必须交换地址中的值,所以应定义为int*x,int*y。第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为t=*x;*x=*y;*y=t;。第 24套假定整数数列中的数不重复,并存放在数组中。给定程序MODILC中函数fu n 的功能是:删除数列中值 为 x 的元素。n 中存放的是数列中元素的个数。请改正程序中的错误,使它能得出正
46、确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#define N 20fun(int*a,int n,int x)ini p=O,i;an=x;while(x!=ap)P=P+1;/*found*/if(P=n)return-1;改为:if(p=n)return-1;else for(i=p;in;i+)/*found*/ai+l=ai;改为:ai=ai+l;)main()int wN=-3,0,1,5J,99,10,15,30,90,x,n,i;n=10;printf(MThe original data:nH);for(i=0;in;
47、i+)printf(H%5dn,wi);printf(nnlnput x(to delete):);scanf(d”,&x);printf(nDelete:%dn,x);n=fun(w,n,x);if(n=-l)printf(*Not be found!*nn);else printfCThe data after deleted:n);for(i=0;in;i+)printf(H%5dn,wi);printf(nnnH);)解题思路:第一处:条件语句中的小写p 错写成大写P 了。第二处:删除元素,应该是后面位置的元素值赋值给前面的位置上,所以应改为:ai=ai+l;,第 25套给定程序MOD
48、H.C中函数fun的功能是:从 s 所指字符串中,找出与t 所指字符串相同的子串的个数作 为函数值返回。例如,当 s 所指字符串中的内容为:abcdabfab,t 所指字符串的内容为:“ab,则函数返回整数3。请改正程序中的错误,使它能得出正确的结果。注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include int fun(char*s,char*t)(int n;char*p,*r;n=0;while(*s)p=s;r=t;while(*r)if(*r=*p)r+;p+改为:r+;p+;else break;/*ijtfou nd*#*
49、/if(r=W)n+;s+;改为:if(*r=O)return n;main()chars100,t100;int m;printf(MnPlease enter string S:n);scanf(u%sn,s);printf(nPlease enter substring I:);scanf(n%s,t);m=fun(s,t);printf(nThe result is:m=%dn,m);解题思路:第一处:语句后缺少分号。第二处:判断r 的当前字符是否是字符串结束符,所以应改为:if(*=O)。第 26套给定程序M O DI1.C中函数fun的功能是:用选择法对数组中的n 个元素按从小到大
50、的顺序进行排序。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行和删行,也不得更改程序的结构!给定源程序:#include#define N 20void fun(int a,int n)int i,j,t,p;for(j=0;j n-l;j+)/*found*/P=Jfor(i=j;i n;i+)if(ai ap)/*found*/改为:P=jP=J;t=ap;ap=aj;aj=t;改为:p=i:main()int aN=9,6,8,3,-l,i,m=5;printf(排序前的数据:);for(i=0;i m;i+)printf(M%d M,ai);printf