对不起,如果这是一个愚蠢的错误,我只是一个初学者。我正在回答“C编程现代方法”一书中的一个问题。这要求打印1和给定数字之间的所有偶数平方。
这是我的原始代码:
#include <stdio.h>
int main(void)
{
int n, i;
printf("Enter a number: ");
scanf ("%d", &n);
for (int i = 2; i <= n ; i += 2) {
printf("%d %d\n", i * i, n);
}
return 0;
}
问题是它只会在一万次击中时停止,所以我在for循环中划分了“n”:
for (int i = 2; i <= n / 10 ; i += 2) {
printf("%d %d\n", i * i, n);
}
任何人都可以解释为什么会发生这种情况
答案 0 :(得分:1)
i * i <= n
之前停止,则循环检查应为n
for (int i = 2; i * i <= n ; i += 2) {
答案 1 :(得分:0)
此代码打印从2
到n
的每个偶数的平方。例如,让我们循环几次:
i = 2
,n = 100
i = 4
,n = 100
i = 6
,n = 100
...
i = 96
,n = 100
i = 98
,n = 100
i = 100
,n = 100
在第51次添加2 i
时,它将为102,大于n
,因此循环将退出。
要打印所有偶数方格,直到n
,你想做更多的事情:
for(auto i = 2, j = i * i; n >= j; i += 2; j = i * i){
printf("%d %d\n", j, n);
}
请注意,
条件中的for
允许我执行多个初始化和多个增量,因此我将i
踩到2并{{1只是重新分配j
每个增量的平方。