垃圾代码评析——关于《C程序设计伴侣》6.2(一)

【题目】

  西安交大的计算机专业2011级有6个班,每个班的人数不等,但最多不超过100个。现在期末考试结束后,香港服务器租用,老师要统计每个班的平均成绩并将各个班级的成绩按照班级平均成绩的次序打印出来(也就是按照从低到高的顺序,先打印平均成绩较低的班级的成绩)。老师希望你帮他写一个程序来完成这一工作。    ——陈良乔 ,《C程序设计伴侣》,香港服务器,人民邮电出版社,2012年10月,p104

【评析】

  作为例题或练习来说,这个题目很垃圾。最垃圾的地方在于那个“100”。这非但与实际不合,而且使得代码基本无法测试,因为通常做练习时不可能真的输入600个数据进行测试。既然不能较完整地进行测试,代码的正确性就难免大打折扣。

【样本】向二维数组输入数据

  定义二维数组之后,接下来的任务,自然是利用scanf()函数将数据输入到这个数组中。因为这是一个二维数组,所以我们需要一个嵌套的for语句,第一层for语句在数组的第一个维度循环(从0到5),第二层for语句则在数组的第二个维度循环(从0到99)。这样才有可能访问到数组中的所有数据。因为每个班级的人数并不一定是100人,所以我们还需要在输入的时候用条件结构对输入数据进行判断,服务器空间,如果输入数据是0,则表示这个班级的输入结束,可以开始下一个班级的循环。经过这样的分析,我们可以将程序的输入数据部分实现如下:    ——陈良乔 ,《C程序设计伴侣》,人民邮电出版社,2012年10月,p104

【评析】

  “如果输入数据是0,则表示这个班级的输入结束”,这其实是一个很拙劣的假设,因为根据常识分数是有可能为0的。除此之外,这还会带来其他问题,导致代码错误。

【样本】

1. #include <stdio.h>2. #include <stdLib.h>3. #include <memory.h>4. 5. int main() 6. {. . const int classnum = 6;10. const int stnum = 100;11. int scores[classnum][stnum];12. memset(scores,0,classnum*stnum*sizeof(int));13.. . for(int i = 0; i < classnum;++i)17. {,i+1);.for(int j = 0; j < stnum; ++j)21.{.scanf(,&scores[i][j]);24…if(0 == scores[i][j])28.break;29.}30. }31..34. return 0;35. }这种精神使人能在旅行中和大自然更加接近,

垃圾代码评析——关于《C程序设计伴侣》6.2(一)

相关文章:

你感兴趣的文章:

标签云: