计算机等级考试二级上机改错题详细分析5

文章作者 100test 发表时间 2007:03:10 17:17:58
来源 100Test.Com百考试题网


5、给定程序MODI1.C中,函数fun的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到则函数值为NULL。
  例如,当字符串s中的内容为:abcdabfabcdx,子串t中的内容为:abc时,输出结果应为:abcdx。当子串t中的内容为:abd时,输出未找到信息:Notbe found!。
  请改正函数fun中指定部位的错误,使它能得出正确的结果。
  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
  试题源程序如下:
  #include <stdio.h>
  /**********found**********/
  char fun( char *s, char *t )
  { char *p, *r, *a.
   a=NULL.
  /**********found**********/
   while( s )
  { p=s. r=t.
   while(*r)
  /**********found**********/
   if( r==p ) r . p . }
     else break.
   if( *r==0 ) a=s.
     s .
  }
  /**********found**********/
   retrun a.
  }
  main()
  { char s[50]= "abcdabfabcdx", t[50], *p.
   printf("The string s: %s\n\n",s ).
   printf("Enter substring: "). gets(t).
   p=fun(s,t).
   if(p)printf("\nThe result is: %s\n", p ).
    else printf("\nNot be found !\n").
  }分析:(1)对以上程序进行编译,给出出错信息:Misplaced else,指出else放错了位置;检查else语句,本身没有错,察看有关的if语句,可以发现if子句应是一个复合语句,但缺了左括号,进行改正。
  (2)再次进行编译,在函数的最后出错,显示出错信息:Undefined symbol retrun,指出错在retrun。在此把return拼错,进行改正。
  (3)编译无错,运行程序,输入子串:abc,输出结果也是:abc,显然不对。需进一步检查程序。
  (4)函数中,形参指针s、t分别指向主函数中的主串s和子串t,为叙述简单,直接称s串和t串;函数中定义p、r和a为工作指针,从return语句看,指针a存放字符串中最后一次出现子字符串的地址。
  (5)主函数中,fun函数返回的值放在指针p中,因此fun函数值应是地址,fun函数的类型应是基类型为char的指针,但是程序中fun函数的类型为char,应当改正为char*。改正后运行程序,仍不正确<绦觳槌绦颉?BR>  (6)外层while循环的判断条件应当是逐个检查s串中的字符是否为字符串结束标志,若是字符串结束标志则循环应结束;而此处用s(地址)作为循环控制表达式是不合理的,应该改为*s。
  (7)查看外层while的循环体,第一条语句在p中放入s当前所指地址,在r中放入t当前所指地址。内嵌的while循环体把s串和子串中的字符逐个进行比较,如果在子串结束前有不同的字符,则执行break退出此内循环,s指向下一个字符重新再比较;反之,若相同,则r和p同时向后移,继续比较直到遇到子串结束;因此内循环中if语句的表达式应是*r==*p;进行改正。
  (8)改正后按要求输入子串,得到正确结果。
  (9)提示:本题的改错虽有语法错的部分,但要完全得到正确结果,必须读懂程序,理解算法。这样的改错题有一定的难度。



相关文章


1.4TurboC2.0的安装和启动
专家献出计算机等级考试三大高分策略
计算机等级考试二级上机改错题详细分析5
山东:第17次全国计算机等级考试成绩对外公布
1.3TurboC概述
山东:职称计算机考试7月中旬开始8月中旬结束
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛