题目:已知5个学生的4门课成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将学生的成绩排序记录(成绩最高的学生排在数组最前面的行,成绩最低的学生排在数组最后面的行)。
分析:对于5个学生4门课成绩,考虑用二维数组来表示数据,即用二维数组s[5][4]存储学生成绩。题目要求求出每个学生的平均成绩,并按高低排序,所以二维数组可以加一列存储每个学生的平均成绩。由于只有5个学生,排序是采用最简单的冒泡排序,同时根据排序结果,学生的各科成绩也随着平均成绩的排序交换位置。综合以上分析设计了以下程序:
程序1:
程序1结果:
程序1结果完全符合预期设计,按每个学生的平均成绩进行了排序,同时各科成绩也谁平均成绩交换了。
程序2:
程序2结果:
其实程序2与程序1基本完全相同,唯一的差别就是程序2比程序1多了一个分号(以上用绿色方框标记),但却造成了两种截然不同的结果。原因是程序2的分号使得输出时内循环没有执行。
结论:
1.编译器可以查找语法错误,但不能找出逻辑错误,所以应该加强练习,养成良好的代码风格,这样有利于减少好多错误,节省时间。
2.在出现逻辑错误时,可以用编译器进行单步调试,跟踪程序的运行状态,或者可以在适当的地方加上输出语句,以定位逻辑错误位置。