为什么一个 for 循环按预期工作而另一个没有迭代?

Why is one for-loop working as wished but the other not iterating?

这里有两个相似的问题(1.-n 之前的奇数之和;2.-1/n 系列的和)使用 for 循环解决。 我选择了显示的策略,而对于第一个问题,我的循环按预期工作,对于第二个问题,它没有迭代。 我看不出有什么不同,无法理解最后一种情况出了什么问题。

----1----- :

int main()
{
 // Example: Input=5, Output=1+3+5=9
int  i, lastNum ,sumUneven;
 printf("Until what n should the uneven numbers be added: ");
 scanf("%d", &lastNum);
 sumUneven=0;

  for (i=1; 2*i-1<=lastNum; i++) {
     sumUneven=sumUneven + (2*i-1);
  }
  
  printf("Sum of uneven numbers until %d: %d", lastNum, sumUneven);
}

----2------------:

int main()
{
    //My goal: Input=n; Output= 1+ 1/2 + 1/3....+1/n.
    
    int i, n, sum;
    
  printf("Until what n should this series be calculated: ");

 scanf("%d", &n);
 sum=0;

  for (i=1; i<=n; i++) {
     sum = sum + 1/i;
  }
  
  printf("Sum of the series until 1/%d: %d", n, sum);
}

表达式 1/i 执行整数除法(截断任何小数部分),因为两个操作数的类型都是 int。因此,如果 i 大于 1,则除法结果为 0。变量 sum 也是类型 int,因此它不能保存小数。

1.0/i执行除法,这是浮点除法,因为一个参数的类型为double,并将sum的类型更改为double。还使用 %f 打印 sum.

int main()
{
    //My goal: Input=n; Output= 1+ 1/2 + 1/3....+1/n.
    
    int i, n;
    double sum;
    
    printf("Until what n should this series be calculated: ");
    scanf("%d", &n);

    sum=0;
    for (i=1; i<=n; i++)
    {
        sum = sum + 1.0/i;
    }
    printf("Sum of the series until 1/%d: %f", n, sum);
}

您正在使用 int 来跟踪浮点数,这将不起作用。

1/n 将是一个浮点数,一个简单的修复是

int main()
{
    //My goal: Input=n; Output= 1+ 1/2 + 1/3....+1/n.
    
    int i, n;

   float sum;
    
  printf("Until what n should this series be calculated: ");

 scanf("%d", &n);
 sum=0;

  for (i=1; i<=n; i++) {
     sum = sum + 1/i;
  }
  
  printf("Sum of the series until 1/%d: %f", n, sum);
}

你也可以使用双重声明

希望这对您有所帮助