Promise的基本用法
当 i=4 时,m=1×2×3×4,sum=1+1×2+1×2×3+1×2×3×4。
看出规律来了吗?m 的值是一直往下乘,乘以 i 之前 m 的值是(i–1)的阶乘,乘以 i 之后 m 的值就是 i 的阶乘了。这样 i 循环到多少,m. 就立刻将这个数的阶乘计算出来,然后加到 sum 中。
2) for 和 if 的嵌套使用。求 1 到 100 之间所有能被 3 整除的数之和。
# includeint main(void){ int i; int sum = 0; for (i=3; i<100; ++i) { if (0 == i%3) { sum = sum +i; } } printf("sum = %d/n", sum); return 0;}
输出结果是:
sum = 1683
大家想想如果不用 if,这个程序能不能写出来?当然能,能被 3 整除的数肯定是 3 的倍数,只要 i 每次自加 3 就行了。我们将这个程序写一下:
# includeint main(void){ int i; int sum = 0; for (i=3; i<100; i+=3) { sum = sum +i; } printf("sum = %d/n", sum); return 0;}
因为 ++i 每次只加 1,而 i+=3 每次加 3,所以这种写法与第一种写法比较起来计算机少执行很多步,所以执行起来更快。由此可知,完成相同的功能,算法不一样则效果就不一样。对计算机而言当然是执行得越快越好。
3) 编写程序,输出 1~1000 之间所有的完全平方数。
# include# include//要用sqrt()int main(void){ int i; //循环变量 int x; //存储每个数的二次方根 for (i=1; i<1000; ++i) { x = sqrt(i); /.果i不是完全平方数, 那么sqrt(i)肯定是小数, 而i是int型, 所以x是sqrt(i)取整后的值, 这样x.肯定不等于i. if (x. == i) { printf("%d/t", i); // /t是跳到下一个Tab位置 } } printf("/n"); return 0;}
输出结果是:
1 4 9 16 25 36 49 64 81 100
121 144 169 196 225 256 289 324 361 400
441 484 529 576 625 676 729 784 841 900
961
其实这个程序还有更简单的算法,不需要使用 sqrt()。下面将这个程序也写下来:
# includeint main(void){ int i; //循环变量 for (i=1; i.<1000; ++i) { printf("%d/t", i .i); // /t是跳到下一个Tab位置 } printf("/n"); return 0;}
输出结果是:
1 4 9 16 25 36 49 64 81 100
121 144 169 196 225 256 289 324 361 400
441 484 529 576 625 676 729 784 841 900
961