通过对大家第六次编程作业的查看情况,做出下面的总结。因为第六次作业只有五道题,而且题目也比较简单,大家的错误出现的比较少,很多都是一些部分错误,就是题目没有考虑完全,遗漏了一种情况,希望大家在之后的编程中要注意细节,考虑完整。下面是具体的题目出现的错误。

7-31

逻辑错误:遗漏了n本身的情况,进行i++的循环条件不是i>n,应该是i>=n

还有的根本没有考虑到求出来的值要满足大于等于n;

很多的错误都是没有看清楚题目,输入的是一个数n(0<n<10000),输出的是一个大于等于n且满足要求的最小值,这个值i不一定也非要满足(0<i<10000)的;

逻辑错误:韩信点兵的条件是(i%5==1)&&(i%6==5)&&(i%7==6)&&(i%11==10),而对这个条件取非并不是直接在前面加!,!(i%5==1)&&(i%6==5)&&(i%7==6)&&(i%11==10)这个只是对第一个小的条件i%5==1取非,需要加括号!((i%5==1)&&(i%6==5)&&(i%7==6)&&(i%11==10));

7-32

逻辑错误:忘记考虑n=0的情况,这样区域就是1;

逻辑错误:对区域的计算公式错误,当有n(n>0)条直线时,区域数应该是1+1+2+……+n;

编译错误:赋值语句不能是不等式,一定是等式;

7-33

这道题跟之位数对调那道题题本质是一样的,只不过这个是先把一个数反转过来再判断与原数相不相等。11月7日的答疑文稿里介绍秦九韶算法里也提到了那道题,大家有疑问的可以看一下。

很多同学用的是数组把每一位数存下来,这样需要把输入的数当作字符串来读取,在之后的学习中数组,字符串的时候可以这样做。

7-34

逻辑错误:

  1. 计算n的m次方,c语言中的写法使用pow函数为pow(n,m), 切记写成数学表示n^b,^在c语言中为异或符号
  2. 计算二进制时,使用ans += pow(2,n-i) * digit,digit为该位上的数为0或1, pow(2, n-i)为权重,注意不要遗漏digit,遗漏会导致默认digit为1, 导致错误
  3. 计算二进制对应位的权重错误
  4. 题目中的输入是未知的,不要写针对题目特例的代码。
  5. 变量未经过初始化或赋值操作,就用于运算
  6. 相邻两个循环使用同一个循环变量,第一个循环后,未将循环变量重新赋值,导致第二个循环错误。

编译错误:

  1. 语句后少分号,scanf使用错误,缺少&符号(取地址符号)。

格式错误:

  1. 本题应该使用int型进行数据的存储,有同学错误使用double类型进行存储。
  2. 输出格式错误,忘记去除用于调试的输出语句,导致输出格式错误。

7-35

非0返回:缺少return 0;语句

逻辑错误:

  1. 变量未初始化或赋值就用于计算,变量未初始化或赋值,变量的取值是随机的,不能用于运算
  2. 循环条件书写错误,本题中循环条件应为while(fabs(当前项)>=1e-8)。
  3. 循环变量使用问题,使用循环变量控制循环时,需要特别注意,可能会造成死循环或循环次数不对。
  4. 本题由于精度原因,应该使用double类型的变量,使用float会导致精度不够,导致答案错误。

运行超时:

1.在程序中使用了不必要的循环,如:在计算阶乘的时候,假设f(n)表示n的阶乘,由于f(n)=n*f(n-1),没有必要每次都用一个循环去计算一遍,要充分利用f(n-1)去计算f(n)。

  1. 题目给出了循环结束的条件对应的精度为1e-8,计算第n项时,应该比较fabs(x^n/n!) 与 1e-8,而不是与0进行比较。

输入格式错误:

double n; double类型应该使用scanf("%lf",&n)格式进行输入。

在本题中,应该按照题目给的方法去计算e^x,不要使用c语言头文件math.h提供的exp函数。

在提交时,注意将调试输出的printf语句进行删除或注释,防止造成答案错误。

编译错误:

  1. 变量未定义就使用
  2. 定义多个变量,多个变量之间缺少逗号
  3. scanf("%d",&n); 缺少取地址符

注意不要在循环中使用break语句,请写其对应的等价表达式。

You have no rights to post comments