C语言部分上机改错题详细分析

出处:www.examlink.com 作者:小罗 日期:2007年01月23日 13时25分

3 、给定程序MODI1.C中,函数fun的功能是:给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数的个数。
  例如,n的值为8时,输入28.3、41.5、19.0、89.5、55.8、74.2、22.4、68.9,所得平均值为49.949997;在平均值以上(含平均值)的实数的个数为4。
  请改正函数fun中的错误,使它能得出正确的结果。
  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
  试题源程序如下:
  #include "stdio.h"
  int fun(float x[],int n)
  /**********found**********/
  int i;
  /**********found**********/
  float xn=0.0;
  for(i=0;i<n;i++)
  /**********found**********/
  xn=xn+x[j]/n;
  printf("ave=%f\n",xn);
  for(i=0;i<n;i++)
  /**********found**********/
  if(x[i]=>xn)c++;
  return c;
  }
  main()
  { float x[20]={28.3,41.5,19.0,89.5,55.8,74.2,22.4,68.9};
  printf("The number over average value:%d\n",fun(x,8));
  }分析:(1)当对以上程序进行编译时,给出的第一个出错信息是:Declaration syntax error,指出在说明语句int i;中有语法错,仔细观察,可以发现在说明语句前却少了函数体开始的左花括号,应当添加左花括号。
  (2)修改后进行编译,在第一个for循环体处给出一个警告出错信息:Possible use of'xn'beforedefintion,提示xn有确定的值之前使用了它。此处,变量xn用于存放累加和,xn出现在赋值号的右边,在第一次累加时它应当有初值,向上寻找,没有发现给它赋过初值,因此应当在定义语句中给它赋初值0。float xn;改成float xn=0.0;
  (3)修改后再次进行编译,编译提示if语句中的关系表达式有语法错,出错信息是:Expressionsyntax;查看关系表达式,可发现关系运算符"=>"写错,应该是">=",应进行修正。
  (4)修改后再次进行编译,编译指出在c++;处有错,出错信息是:Undefined symbol'c',指出符号'c'没有经过定义;此处变量c用以统计数组中高于、等于平均值的实数的个数,查看函数开头处的定义语句,未曾对c进行过定义,因此应该在int语句中添加。
  (5)修改后再次进行编译,编译给出出错信息:Undefined symbol'c',指出变量c没有定义。所以说明语句应写成int i,c=0;。因为函数用c进行累加,它应当先赋初值0,
  (6)进行了以上的修改后,编译已无错误,运行程序得到正确的结果。

 

最后更新时间:2008-05-28 11:40:36
文章评论
共有 0 位网友发表了评论
用户名: 新注册) 密码: 匿名评论 [查看所有评论]

评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
您可以用以下几种方式找到此文章

考试全流程