为什么这个代码的答案在每个数字上打印3次,直到它是正确的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么这个代码的答案在每个数字上打印3次,直到它是正确的?相关的知识,希望对你有一定的参考价值。
这个代码的结果真的有问题.基本上,我想打印数字除以3的总和,直到20.它正在做我要求它做的事情,但它正在打印每个加法3次,因为某些原因,而我想要的是它打印一次最终结果!帮助我,请谢谢你!。
#include <stdio.h>
int main()
int i=1;
int sum=0;
for(i=1;i<21;i++)
if(i%3 == 0)
sum += i;
printf("%d\n", sum);
return 0;
也许你忘了""和"",因为有标签。这是有道理的。
if语句没有大括号,所以它只影响下一行。你只有在sum被3整除时才会累计,但printf在循环的所有实例中都在执行。
你应该用大括号包围if块。
#include <stdio.h>
int main()
int i=1;
int sum=0;
for(i=1;i<21;i++)
if(i%3 == 0)
sum += i;
printf("%d\n", sum);
return 0;
适当缩进以显示流程
#include <stdio.h>
int main()
int i=1;
int sum=0;
for(i=1;i<21;i++)
if(i%3 == 0)
sum += i;
printf("%d\n", sum);
return 0;
这样可以更好地显示出只有你的 sum += i
属于 if
.
为了解决你问题的第一部分,用大括号去掉了每个数字的附加打印。
#include <stdio.h>
int main()
int i=1;
int sum=0;
for (i=1;i<21;i++)
if (i%3 == 0)
sum += i;
printf("%d\n", sum);
return 0;
如果一个... if
语句中包含多条语句,需要使用大括号来包围该块。一般情况下,省略大括号后的 if
, for
, while
等块是很危险的,因为添加一个语句不会导致它被包含。
始终正确地缩进你的代码,这有助于在错误发生之前捕捉到这样的错误。
你问题的第二部分涉及到只打印最终结果。你在循环中进行了打印,所以每次条件为真时都会发生。
#include <stdio.h>
int main()
int i=1;
int sum=0;
for (i=1;i<21;i++)
if (i%3 == 0)
sum += i;
printf("%d\n", sum);
return 0;
将 printf
在for循环的外面。
"......我只想让它打印一次最后的结果!"
你为什么要用 printf("%d\n", sum);
那么在循环的内部?
for (i = 1; i < 21; i++)
if (i % 3 == 0)
sum += i;
printf("%d\n", sum);
应该是
for (i = 1; i < 21; i++)
if (i % 3 == 0)
sum += i;
printf("%d\n", sum);
另外,把所有的正整数相加,除以 k
小于或等于 n*k
可以做封闭式的 k*n*(n + 1)/2
.
以上是关于为什么这个代码的答案在每个数字上打印3次,直到它是正确的?的主要内容,如果未能解决你的问题,请参考以下文章
牛牛想对一个数做若干次变换,直到这个数只剩下一位数字。 变换的规则是:将这个数变成 所有位数上的数字的乘积。比如285经过一次变换后转化成2*8*5=80. 问题是,要做多少次变换,使得这个数变成个位