第三次编程作业总结

    在这次作业中同学们犯的比较多的错误是逻辑错误,主要是在程序编写的过程中存在的流程错误,考虑问题时没有注意到特殊情况的处理。还存在着一些语法错误,导致程序出现编译错误。

    通过这次作业,对同学们提出两个十分必要的建议。一是编写代码时,希望同学们养成良好的代码风格,包括编写代码注释、代码块中的缩进、变量命名最好有意义、空行等来提高代码的可读性。有良好的代码风格,对于代码的调试、编写大型程序都是极其重要的,代码注释可以显著提高改bug和读程序的效率。二是,希望同学们在提交代码时,可以自定义一些测试用例,先在online judge上的测试区先对自己编写的代码进行测试,测试发现程序错误则对程序进行修改,直到测试时能通过自定义的测试用例再进行提交,如下图所示

image.png

选取了一些有良好编程风格的代码和一些编程风格不好的代码进行对比,请同学们注意好自己的代码格式。左边同学写了注释,并且注意了代码块中代码的缩进,空行的使用增加了代码的可读性。

 

 image 1.pngimage 2.png

下面对于各个题目中的问题做一个总结,请同学们自查。

 

7-14
 

段错误:错误写法scanf("%d",n),忘记取地址符。正确写法scanf("%d",&n)

编译错误: 错误写法2b-1,运算符不可少,正确写法2*b-1, 缺少相应的头文件#include<stdio.h>

格式错误,该题中有同学打印输出了多余的空格,被系统判为格式错误。在oj中不要输出多余的提示语句 如:printf("xxxx"),要按照题目的格式来编写程序,不要有多余的输出。以下这段代码输出了多余的空格,所以oj系统判定为错误。

image 3.png

运行超时:循环结束条件未设置正确,导致死循环。

逻辑错误:数组下标从0开始,[0,n), [1,n]存在n个元素 题目要求的n是不固定的,注意审题,一些同学把n固定为了5来进行程序的编写。特别要注意循环的边界,防止多循环一次或少循环一次。

 

7-12

逻辑错误:当y==0时候,x的y次幂为1,x == 0 时候, x的y次幂为,0这点很多同学未考虑,所以得80分, 变量未初始化就用于计算

逻辑错误: 运行超时,未考虑y为0的情况,导致死循环在编写循环时,要特别注意是否会死循环。

编译错误:输出格式错误,int型输出应该为 printf("%d",num); 而不是printf("%d",&c),注意不要把printf和scanf函数的用法搞混淆。

不要使用#include<cmath>,这是c++的头文件格式,c语言的头文件格式#include<math.h>

逻辑错误: if else 之后的语句,不管if else是否得到执行,都会被执行。

编译错误:语句缺少; if缺少括号 运算符书写错误等

 

7-15

格式错误: printf("%lld",d); d为long long 类型 ,输出格式错误

逻辑错误: if else 输出语句的位置 应该放在if else的{}内部,题目要求的是前n项和,给出的公式是An 不是Sn ,注意审题。

运行超时: 未控制好循环的结束条件,导致死循环

编译错误: 存在语法错误,变量未定义就使用,缺少结尾的分号,中英文分号混用

 

7-16

格式错误,用来存储百分比得数应该是float类型或者double类型,因为要保留两位小数,而不是int类型,读每一个数用的也是scanf,int型而不能用getchar(),char型可以使用getchar()函数

编译错误,==错用为=,除法/错用为\

格式错误,在用float型时输入两位小数应该是%.2f,double类型是%.2lf

这道题应该用的是while循环,循环条件是读取得数不为0,用设置一个大数来进行for循环虽然最后系统在判断时可能因为你设置得数比较大能过,但这种做法还是不可取对每一个读进来的数应该是先判断是不是0再进行操作,而不是先操作再判断是不是0

 

7-17

格式错误,在判断一个价格的区间时,不能只判断一边的大于等于情况,还要判断另一边的小于情况来确定价格减去多少钱,而且应该使用&&,而不是||

逻辑错误,忘记考虑到价格大于等于500的情况和小于100的情况

逻辑错误,在判断一行的价格之后对下一行价格重新计算总和时忘记对这个价格归零

这道题的逻辑其实是两个for循环结构,要注意两个for循环的缩进,两个循环不能使用同一个计数的int型;此外的错误点就是保证对所有的价格区间都能判断到,不遗漏

 

7-13

判断不够全面,比如中英文字母的判断是ASCII码'a'-'z'和'A'-'Z'两段,中间不是连续的

判断使用的是ASCII码,例如'0'<=c&&c<='9'而不能写成0<=c&&c<=9,这样就是判断ASCII码为0到9之间的字符了

格式错误,不能用int型来试图直接读取一个字符的ASCII码数

在书写代码中,不要使用break、continue、switch、goto

You have no rights to post comments