为什么这个简单的程序给我看似错误的输出?

时间:2017-10-19 20:56:38

标签: c output

这是一个简单的程序,我有一个任务要做。

  
      
  • 向用户询问一个数字,您可以假设该数字为1或更大
  •   
  • 按3秒计数,打印数字从1到用户编号;例如,高达15:1,4,7,10,13   o在一行打印数字   o另外,找到这些数字的总和并在下一行打印,本例中为35
  •   
  • 在1个程序中使用while循环解决,然后再使用for循环解决
  •   

这是我的代码

#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的数字

     

1 4 7 10 13

     

这些数字的总和是:50

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

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

3 个答案:

答案 0 :(得分:6)

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

确保只有在每次迭代中使用它后才增加while(i < number){ printf("%d ", i); sum = sum + i; i+=3; }

function Add-TempLocalAdmin {
[CmdletBinding()]
param(
    [Parameter(Position=0, ValueFromPipeline=$true, Mandatory=$true)]
    [string[]]$ComputerName,
    [Parameter(Position=1, Mandatory=$true)]
    [string]$Trustee,
    [Parameter(Mandatory=$true)]
    [string]$Requester,
    [Parameter(Mandatory=$true)]
    [string]$ServiceNowCR,
    [Parameter(Mandatory=$true)]
    [datetime]$StartDate = Select-Date,
    [Parameter(Mandatory=$true)]
    [datetime]$EndDate = Select-Date,
    [Parameter(Mandatory=$true)]
    [string]$Grantor = $env:USERNAME
    )
Write-Host $ComputerName $Trustee $Requester $ServiceNowCR $StartDate $EndDate $grantor
}

答案 1 :(得分:3)

你没有从

获得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,但并非来自 case 'f': printf ("Great!!! lets create your fixed account\n"); printf ("\nA minimum purchase of 1000 units is required for this account\n"); printf ("\nPrice per unit as of Sep. 15 is $52.69\n") ; printf ("\nPlease enter required amount of units\n"); scanf("%d",&amount); if (isdigit(amount)) { printf ("invalid input\n"); success = 'f'; break;

答案 2 :(得分:1)

只需反转计算总和的行和将i加3的行。