在这次编程作业中,出现比较多的错误是编译错误和逻辑错误,对于编译错误,请同学们在提交代码之前,使用测试用例先进行测试,或者使用本地编译器进行测试,能够发现相应的编译错误,对于逻辑错误,可以尽可能多地设计测试用例,进行测试。
6-1
编译错误:
- y=2x-1,在c语言中应该写成y=2*x-1
- 变量未定义就使用
- 1<= x <= 10,正确写法为 x >= 1 && x <= 10
- 函数缺少函数头,缺少返回类型,注意函数的语法
逻辑错误 :
- if else if else 多分支条件表达式书写错误
- 函数没有返回语句
- == 与 =误用,赋值运算符与比较运算符使用错误
- 函数原型书写错误,函数声明书写错误
- 多分支中的执行语句书写错误,导致最后的答案错误
格式错误:
- 所需提交的代码只需包括函数代码,无需其他的比如main函数。
这个题最多的错误是编译错误 ,其次是逻辑错误。
6-2
编译错误
- 函数头缺少返回值,函数头书写错误。
- break拼写错误。
逻辑错误
- 判断是否是闰年代码逻辑错误,注意运算符的优先级,不确定优先级可以使用括号来提高运算优先级。
- 逻辑错误,闰年是指(年份能够被4整除并且不能被100整除)或者 (年份能够被400整除)。
- 闰年2月是29天,平年为28天。
这个题出现的问题主要是判断闰年的逻辑代码错误。
6-3
编译错误:
- 函数名书写错误,导致函数只有声明,而找不到定义
- 书写函数时,在函数头后多加了分号
- 函数末尾缺少return语句
- scanf 拼写错误
逻辑错误:
- 运行超时:表达式书写错误导致死循环
- 变量定义后未初始化就使用
- 变量未定义就使用
- 逻辑错误,if else的逻辑错误
- 类型错误,使用int类型来存储long long可能会导致溢出
6-4
编译错误:
- 变量重定义
- for语句语法错误
- 变量未定义就使用
逻辑错误:
- 循环变量未更改导致程序陷入死循环
- 循环条件编写错误
这个题目使用数组的同学试试不用数组如何解答这个问题。
6-5
部分错误:使用do while循环时没有考虑到指数为0的情况,因为do while循环一定会执行一次导致失去指数为0的值。
逻辑错误:多算了一次次方,导致结果错误。
逻辑错误:次方计算错误,x=x*x的循环是错误的,而是result=result*x;以及不用考虑指数为负数的情况,题目中的前提条件已经是非负整数。
编译错误:函数的返回值应该在循环终止之后,而不是在循环里面,这会每循环一次就要返回一次,导致编译错误。
6-6
逻辑错误:这道题主要注意的就是一个三角形从大范围到小范围。首先是判断能不能构成三角形,如果能,按照不规则,直角,等腰,等边三角形来判断。其实是在能构成三角形的时候,按照等边,等腰,直角,不规则三角形来判断。根据题目的要求是输出最小的范围。比如,如果是一个等腰直角三角形,应该输出的是等腰三角形,而不是直角三角形。但因为题目要求输入的是三个整数,所以其实不可能有这种情况。只是在判断的过程中先从最小的范围来判断。
逻辑错误:如果在判断是不是等腰三角形时的判断条件时(a==b||b==c||a==c)这样就会把等边三角形也输出成等腰三角形。
逻辑错误:缺少直角三角形的判断。
编译错误:判断等边三角形的条件时 (a==b==c)这样书写错误,应该是(a==b&&b==c)。
编译错误:==写成=。
编译错误:保证一个函数的返回值只有一个,有的同学在判断时多个if而没有用if多个else if导致函数会重复输出返回值。
6-7
运行超时:
和之前一道判断是不是素数的题目类似,在求数的因子时,不能用1到其本身循环,否则会超时,要用1到其开根号,可以用求根号函数sqrt(n)。很多同学时循环到1到n/2,也是可以的。在使用1到sqrt(n)时,注意一个数i如果n%i==0成立,要把i和n/i都加入进去,所有满足的i和n/i都加入进去求和判断和n是否相等。
答案错误:
注意打印完全数的所有因子时的最后一个因子时的格式。以及输出的时候是从小到大输出。
函数定义如下:
// 返回类型 函数名 (参数列表)
return_type function_name( parameter list )
{
body of the function // 函数体
}
函数声明如下:
return_type function_name(parameter list);
You have no rights to post comments