开发者社区 问答 正文

循环写法为什么输出值不同,求自然数立方和大于1000000时的值

1.main()
{
int i, sum = 0;
for (i = 1; sum < 1000000; i++)
{
sum = sum + iii;
}
printf("%d",i);
system("pause");
}
输出46
2.main()
{
int i, sum = 0;
for (i = 1; ; i++)
{
sum = sum + iii;
if (sum > 1000000)
{
break;
}
}
printf("%d",i);
system("pause");
}
输出45
3.main()
{
int i;
int sum = 0;
bool b = false;
for (i = 0; !b; i++)
{
sum = sum + iii;
b = sum > 1000000;
}
printf("当i为 %d 时,其立方和大于1000000", i);
system("pause");
}
输出46
4.main()
{
int i;
int sum = 0;
bool b = false;
for (i = 0; !b; i++)
{
b = sum > 1000000;
sum = sum + iii;
}
printf("当i为 %d 时,其立方和大于1000000", i);
system("pause");
}
输出47
5.书上给的源码是这个,不明白为什么i--
main()
{
int i, sum = 0;
for (i = 1; ; i++)
{
sum = sum + iii;
if (sum > 1000000)
{
break;
}
}
i--;

printf("%d",i);
system("pause");
}

展开
收起
a123456678 2016-03-23 14:34:58 2385 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • 这个问题就是for(初始化;条件;调整)语句的执行顺序,第一次顺序:初始化->条件->语句;第二次顺序:调整->条件->语句;第三步顺序:调整->
    条件->语句......最后一步也是一样。
    1中最后一步从上一步得到i=44,i++,sum1000000,但是接下来的是调整,i++,所以i=46;
    第2个就显而易见了,i=44时sum<1000000所以不会跳出,输出i=45
    第3个和第1个一样
    第4个明显i=44时,b=0;再循环一圈i=45时,b=0;在循环一圈i=46时,b=1继续执行下面的语句,然后进行调整i++得到47在进行!b判断。

    2019-07-17 19:11:02 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等