#include int main() { int x,y; for(x=0,y=x; x+y<3; x++) { printf("%d ",x); } printf("\n"); for(x=0;; x++) { y=x; if (x+y>=3) break; printf("%d ",x); } }
输出结果
0 1 2 0 1
谢谢,原来我也是知道的,昨天一时糊涂
或者,不修改第 1 个循环,而把第 2 个循环中的 y = x; 删除。
@黄志斌 谢谢指教
我利用第2种写法,改写了你下午给我发的程序,结果和时间都是一样的,对for循环也更懂了
@lt 那是论坛中第 1 个贴子中的
@黄志斌 那个帖子挺厉害,都不用sqrt(n)还能算对,最后的大循环我第一次见
@lt s1*s1 <= N 就相当于 √s1 ≤ N 了。
@lt 看来 grechnik 也是使用 gnomon 计时(看 printf() 语句之后的 fflush(stdout) 就知道了):$ ./a.out | gnomon -i 0.8712s | calculating sum1 2.5430s | calculating sum2 0.1183s | calculating first part of result2 17.0165s | calculating exceptions of result2 0.0043s | 17***439***932 | Total | 20.5549s可以看出,最后的大循环最费时。
@黄志斌 是的,前面都是+大数,大循环是result2--
@黄志斌 我是说“z += b - (int)sqrt(b);”中的sqrt
@lt 嗯
是按以下流程执行的:
起始; while (测试) {循环体; 再起始; }
也就是说:
“起始”只执行一次,
然后执行“测试”,
如果条件不成立,直接退出循环;
如果条件成立,则执行“循环体”和“再起始”,转到“测试”。
for(x=0; x+(y=x)<3; x++) printf("%d ",x);
或者:
for(x=0; y=x,x+y<3; x++) printf("%d ",x);