看了这次大家的编程作业,首先一个问题就是保证代码的可读性,不要写的代码只有自己能够看懂,让其他人也能看懂。比如标识符的命名不要一直是a,b,c,d这些,通过标识符的命名就可以知道这个标识符的作用是什么。比如最大值最小值总值那道题,最好适用max,min,sum这些命名,大部分同学都是这样的命名,保证代码的规范。还有就是在if,else if这种判断很多时的缩进,要让人一眼就看出每个if的下面是哪个语句。以及徐老师说过,最好不要用break,continue这些语句。希望大家在一开始写代码的时候就养成良好的习惯,会对之后的代码编程以及团队一起写代码的时候有很大帮助。下面是具体的每题出现的一些错误。

7-18

部分错误:很多同学都是部分错误,而且是在判断最大最小值的时候出现错误,可以将第一个数赋值给最大值max和最小值min,保证之后读入的每一个数都能与最大值最小值比较,然后根据比较大小更新最大值最小值。还有一些是在循环次数出错,有些同学是先读取了一个数,后面进循环的时候循环次数自然要少一次。在初始给max赋值一个很小的值,min赋值一个很大的值也是不合适的。

编译错误:想用数组来存储读进的数,但直接写出 int n; int a[n]; 只是不被允许的,因为n不是一个确定的值,不能知道给a[n]具体分布多大的空间。

7-19

逻辑错误:在字母不是x,y,z和X,Y,Z的时候转换的字母直接是ASCII码+3,而是这几个字母时就不是ASCII码+3了,需要单独考虑。

编译错误:在读取字符char类型时,可以用char=getchar(),也可以scanf("%c",&char)。循环的条件是char!='\n','\n'的ASCII码是10,而不是换行符'\r',ASCII码是13。而且不能写出char=getchar()!='\n',可以写出(char=getchar())!='\n'或者char=getchar()&&char!='\n'。

编译错误:在判断一个字符与ASCII码的大小时,直接用字符就可以判断,比如char>='A',而不用将这个字符转换为int型再进行判断。

7-20

逻辑错误:考虑不周全。score<0||score>100而不是&&。

逻辑错误:保证不重复进行判断,每个if,else if独立。

7-21

逻辑错误:判断m的质数时,没有考虑(int)sqrt(m)这个因子。题目要求统计每一行的质数,忘记,统计完一行后,忘记变量清0。

题目的测试用例没有考虑数为0,1的情况,出于严谨性,建议在代码中加入这一特殊情况的处理。

逻辑错误: 循环条件编写不断,导致死循环。

在循环中使用break的同学注意,在循环中禁止使用break来跳出循环,希望循环只有一个入口和一个出口,通过修改循环条件可以同样达到一样的效果

使用goto的同学注意,不要使用goto语句来编程,遵循循环一个入口和一个出口。

运行超时:在判断一个数是否为素数时,不必判断其所有因子的个数,当它有两个以上因子时,必不是素数,所以可以修改循环条件来提前退出循环,避免超时。还可以通过判断数m在[2, (int)sqrt(m)]上是否有因子,如果有,必定不是素数。

编译错误:还是存在缺失分号的情况。

7-22

逻辑错误:变量未初始化就用于运算,代码逻辑错误, 注意审题,题目意思曲解。

编译错误: for语句语法错误。

运行超时: if语句错写为while语句,导致死循环。

7-23

逻辑错误:赋值运算符=错写为比较运算符==,这个错误好像经常犯,请同学们注意。逻辑错误,打印最后一行的逻辑错误。 题目要求行和列是通过用户输入指定的,不是固定的。

行列弄混,循环范围错误,注意编写for循环时候,循环的次数,[0, n)之间有n个数,[1,n]之间也是n个数,注意for循环的次数。

编译错误: 头文件写错,变量未定义就使用。

运行超时: 内外层使用同一个循环变量导致循环条件不可控,导致有些情况运行超时。

 

You have no rights to post comments