0x06:记录一次磕磕绊绊的完成作业之旅
要求:1-1/2+1/3-1/4+..+直到最后绝对值小于10-4为止。
#include <stdio.h> #include <math.h> int main(void) { int n=1; float term=1.0,sign=1,sum=0; while(fabs(term)>=1e-4){ term=sign/n; sum=sum+term; sign=-sign; n=n+1; } printf("sum=%f\n",sum); return 0; }
然而在写在代码的时候发生了一些可怕的事情:
首先发现:10的-4次方忘记怎么表示了,用0.0001表示又很low,上网查询后得到结果
1e-4 表达见前面的日记。
然而在解决了这个问题后,永远只能运算两项:1-0.5;后来找到问题语句(头发掉了一把才想到的):
找到问题是靠直接让abs(term)>=0 发现程序正常运行,从而得知是条件出现问题
while(abs(term)>=1e-4){
…可是上课听到了abs表示绝对值,只能上网查询,发现fabs才是用来对小数进行取绝对值的。
改正后程序变成了这个样子:
#include <stdio.h> #include <math.h> int main(void) { int n=1; float term=1.0,sign=1,sum=0; while(fabs(term)>=0){ term=sign/n; sum=sum+term; sign=-sign; n=n+1; } printf("sum=%f\n",sum); return 0; }
结果程序直接黑屏了…
你能发现又出现什么问题了吗?
经过短暂的查询,发现在前面的调试过程中把条件改成了>=0导致程序一直在运行,无法打印最终的结果,也就是死循环状态,程序结果一直不显示。
最后把这句话
while(fabs(term)>=1e-4){
成功运行出来。
程序员之路着实坎坷…