为什么这个简单的程序给我看似不正确的输出?

问题描述:

这是一个简单的程序,我有一个任务要做。为什么这个简单的程序给我看似不正确的输出?

  • 要求一个号码,你可以假设为1或更大的三分球
  • 计数的用户,从1打印数字0到用户号码;例如高达15:1,4,7,10,13 o在一行上打印数字 o另外,找到这些数字的总和并在下一行打印,在这种情况下打印35
  • 1在程序中求解用一个while循环,然后再次循环

这是我的代码

#include<stdio.h> 

int main(){ 

int number; 
int i = 1; 
int sum = 0; 


printf("Please enter a number greater than 1: "); 
scanf("%d", &number); 


while(i < number){ 
    printf("%d ", i); 
    i+=3; 

    sum = sum + i; 
} 

printf("\nThe sum of these numbers is: %d\n", sum); 


    return 0; 
} 

这是示例输出:

请输入一个大于1:15

这些数字的总和是:50

我不能为我的生活弄清楚为什么数( 15)正被添加到总和中。输入15被加到1,4,7,10和13的总和上。 在这个程序的什么位置我是否等于数字?

对不起,如果这并没有很大的意义。任何帮助表示赞赏。我想了解我做错了什么。谢谢。

+0

你写的代码;你应该知道它做了什么。 –

+0

调试器逐步检查值,然后执行。 –

+0

请将'i + = 3;'语句放在循环体的末尾,因为在添加之前您正在更改已处理的数字。 –

在将其添加到总和之前,您正在增加i!如果每个数字已经增加了3,那么在这种情况下,您的总误差将加起来为15。

确保你增加i你在每次迭代使用完之后才:

while(i < number){ 
    printf("%d ", i); 
    sum = sum + i; 

    i+=3; 
} 
+1

噢,天啊! 就是这样!我应该知道这一点。 我一直盯着这一个小时试图找出我做错了什么。 非常感谢你学到这个教训! – MissAnnThropic

+1

随时!另一个提示:如果你在这个特定场景中使用了for循环,你可能没有遇到这个问题:'for(int i = 1; i frslm

你不能从

1 + 4 + 7 + 10 + 13 + number 

而得到50,这是

4 + 7 + 10 + 13 + 16 

相同

(1 + 3) + (4 + 3) + (7 + 3) + (10 + 3) + (13 + 3)" 

(1 + 4 + 7 + 10 + 13 + (3+3+3+3+3) 

错误的总和恰好等于number,但它并没有来自number

只是反转线计算的总和和一个加3我。