第二章 循环结构程序设计

技巧:\sqrt{x}

\sqrt{x} 取整的时候用到 floor(sqrt(x+0.5)),其中floor() 是抹零取整函数

错误:double x = 1 / (2 * i + 1);

改正:double x = 1.0 / (2 * i + 1);

方法:scanf循环(简单版本)

while (scanf("%d", &x) == 1),拍入 组合键 Ctrl-Z 就是 EOF,即可退出。

方法:文件输入输出重定向

freopen("input.txt", "r", stdin);

freopen("output.txt", "w", stdout);

方法:文件使用(常规方法)

FILE *fin, *fout;

fin = fopen("data.in", "rb"); fout = fopen("data.out", "wb");

fscanf(fin,"%d", &x); fprintf(fout, "%d %d %.3f\n", min, max, (double)s / n);

fclose(fin); fclose(fout);

陷阱:溢出

又乘又除的算法,例如c_n^m=\frac{n!}{m!*{(n-m)!}} ,先约分处理n!/m!,可以减少溢出的概率。

技巧:printf的高级用法

printf("%*.*lf\n", 8, 4, (double)10/3);会输出8个字宽保留4位小数的浮点数运算结果

注意:浮点数

浮点数(double)之所以不能用 == 和 != ,是因为浮点数在内存中都是按精度来存储的,所以你看到的 3.12也许本来是3.123456取的小数点后2位位精度,所以当与另一个 3.12进行比较时可能会出现很多种情况,如果另一个3.12其实是3.121111取的小数点后2位位精度的话,那么两个数你看着相等,其实是不等的。

posted @ 2019-03-25 09:12  雷小军  阅读(82)  评论(0编辑  收藏  举报