公式根本没有执行。我尝试使用printf
进行调试,并在代码末尾为i
打印出0
#include <stdio.h>
int main()
{
int i, base, height;
printf("Lumber Cross-Sectional Moment of Section\n");
printf("Size Area Inertia Modulus\n");
for (i = 0; i > 35; i++)
{
if (i == 6 || i == 12 || i == 18|| i == 24 || i == 30)
{
base = base * 2;
height = 2;
}
if (i != 6 || i != 12 || i != 18 || i != 24 || i != 30)
{
height = height * 2;
}
printf("%d x %d %d %d %d \n", base, height, base * height, base * 2 + height);
}//for
return (0);
}//main
答案 0 :(得分:16)
应该是
for (i = 0; i < 35; i++)
循环体仅在条件为真时执行。
答案 1 :(得分:4)
应该是
for (i = 0; i < 35; i++)
比尔蜥蜴说的话。
for (i = 0; i > 35; i++)
在其条件下永远不是真的,因为0&lt; 35因此循环体永远不会被执行。
答案 2 :(得分:3)
你需要考虑你的条件意味着什么。其他人提到了循环不执行的原因。让我们看看另一个条件:
if (i != 6 || i != 12 || i != 18 || i != 24 || i != 30)
您认为上述情况何时会失败?我们需要看两个案例:
i
等于6.因此,i != 6
为false,但条件的其他部分(i != 12
等)为真。这是因为6只等于6,而没有其他数字。所以整体情况确实如此。i
不等于6.现在,i != 6
为真,因此整个条件都是正确的。因此,您上面的if
条件始终为真。
另外,想想如果你循环到一个大数字会发生什么,让我们说215.你想要有这样的条件:
if (i == 6 || i == 12 || ... || i == 210)
当然,必须做得更好。我认为您想要的是将base
乘以2,并在height
可被6整除时重置i
;否则将height
乘以2.代码结构变为:
/* not legal C */
if (i is divisible by 6) {
} else {
}
要将可分性测试为6,请记住,对于数字n
和m
,n % m
会为您提供余下的n
除以m
。
答案 3 :(得分:0)
正如以上两位伙伴所说 在条件为真之前,for循环不会执行。在这里问之前你应该自己调试一下。 :)
答案 4 :(得分:0)
我认为如果你重塑代码和条件,它会好很多。
你能将for循环更改为for (i=1 ; i<36 ; i++)
吗?这样你可以简化循环中的if条件,因为你可以看到你正在检查它是否是代码中的6的倍数。
你可以在这些方面思考。
更多指示:
答案 5 :(得分:0)
第一个循环永远不会执行。第一次检查(i> 35),在你的情况下我<35,所以循环不会执行。