如何将 while 中的 if-else 语句放入 for 循环中?

How do I put this if-else statement from the while, in a for loop?

所以,最初我在 while 循环中嵌套了这个 if-else,将所有奇数的平方加到数字之间。例如,如果这两个数是 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 (int i = firstNum; i <= secondNum; i++) {
    // checks if number is odd or even
    if (i % 2 != 0) {
        sumOdds += i * i;
        i++;
    }
}
printf("\n");

您可以用 for 循环替换,并以 ++i 作为其终止语句;然后,您可以省去整个 else {...} 块并将 i += 2 (在 if 块中)替换为另一个 ++i (与终端增量相结合,将有与 i += 2).

相同的净效应

像这样:

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

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.

类型

您可以使用没有增量的 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 循环完全相同的行为。