【问题标题】:How do I put this if-else statement from the while, in a for loop?如何将 while 中的 if-else 语句放在 for 循环中?
【发布时间】:2021-02-15 20:32:26
【问题描述】:

所以,最初我做了这个 if-else 嵌套在一个 while 循环中,以将所有奇数的平方加到数字之间。例如,如果这两个数字是 10 和 20,则奇数的平方和将为 1165 (11^2 + 13^2 + 15^2 ...)。所以,现在我想使用 for 循环而不是 while 循环。我看过其他示例,但我无法使用我的示例来实现,因为这只是我第二次使用 C。

以下是while循环和答案的打印语句(我设置了“i”=firstNum,所以firstNum的值不会改变,firstNum和secondNum只是用户输入的):

i = firstNum;
while (i <= secondNum) {
    // checks if number is odd or even
    if (i % 2 != 0) {
        sumOdds += i * i;
        i += 2;
    }
    else {
        ++i;
    }
}
printf("\n");
printf("Sum of the squares of odd integers between %d and %d = %d\n", firstNum, secondNum, sumOdds);

【问题讨论】:

  • 为什么要一个 for 循环?是什么阻止你写一个?有什么问题?
  • 我感觉是变量i 让OP 无法理解他/她的头脑。
  • 我只想要一个 for 循环,因为我的导师说要转换我们之前作业中的所有 while 循环,而我无法理解的是 if-else 语句

标签: c loops for-loop sum integer


【解决方案1】:

for 循环可以如下所示

for ( int i = firstNum + ( firstNum % 2 == 0 ); i <= secondNum; i += 2 )
{
   sumOdds += i * i;
}

这是一个演示程序。

#include <stdio.h>

int main(void) 
{
    
    int firstNum = 0, secondNum = 0;
    
    printf( "Enter two numbers: " );
    scanf( "%d %d", &firstNum, &secondNum );
    
    if ( secondNum < firstNum )
    {
        int tmp = firstNum;
        firstNum = secondNum;
        secondNum = tmp;
    }
    
    long long int sumOdds = 0;
    
    for ( int i = firstNum + ( firstNum % 2 == 0 ); i <= secondNum; i += 2 )
    {
        sumOdds += ( long long int )i * i;
    }
    
    printf( "The sum of squares of odd numbers is %llu", sumOdds );
    
    return 0;
}

它的输出可能看起来像

Enter two numbers: 10 20
The sum of squares of odd numbers is 1165

程序的一些注释。首先,变量 i 仅在 for 循环中使用。所以应该在使用的最小范围内声明

for ( int i = firstNum + ( firstNum % 2 == 0 ); i <= secondNum; i += 2 )
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

其次,为了降低溢出风险,最好将变量 sumOdds 声明为至少具有 long long int 类型。

【讨论】:

  • 很高兴注意到 OP 的 else 只会被执行 一次 并且不应该是循环的一部分(即从循环中删除所有条件)。跨度>
  • 这太好了!
  • 谢谢,这对我们很有帮助而且很有见地!
  • 另外,由于我对此很陌生,您能否解释一下int i = firstNum + ( firstNum % 2 == 0 );,它是如何工作的?如果firstNum 是偶数,这会添加数字吗?
  • @osit0_solit0 如果 firstNum 是偶数,表达式 firstNum % 2 == 0 等于 1。否则等于 0。因此,如果 firstNum 是偶数,则 firstNum + ( firstNum % 2 == 0 ) 将产生该偶数之后的第一个奇数,并且您需要对奇数求和,
【解决方案2】:

您可以使用不带增量的 for 循环。

for(i = firstNum; i <= secondNum;) {
    // checks if number is odd or even
    if (i % 2 != 0) {
        sumOdds += i * i;
        i += 2;
    }
    else {
        ++i;
    }
}

为您提供与 while 循环完全相同的行为。

【讨论】:

    【解决方案3】:

    您可以用++i 作为其终端语句替换for 循环;然后,您可以放弃整个 else {...} 块并用另一个 ++i 替换 i += 2(在 if 块中)(与终端增量相结合,将具有与 i += 2 相同的净效果)。

    像这样:

    for (i = firstNum; i <= secondNum; ++i) {
        // checks if number is odd or even
        if (i % 2 != 0) {
            sumOdds += i * i;
            ++i;
        }
    }
    

    【讨论】:

      【解决方案4】:

      只需使用循环的增量,即可添加剩余值。

      for (int i = firstNum; i <= secondNum; i++) {
          // checks if number is odd or even
          if (i % 2 != 0) {
              sumOdds += i * i;
              i++;
          }
      }
      printf("\n");
      

      【讨论】:

      • int i = 0; 是什么(在 i = firstNum; before 循环之后)?
      猜你喜欢
      • 2014-07-01
      • 2015-11-08
      • 2015-04-07
      • 2016-10-22
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 2020-06-11
      相关资源
      最近更新 更多