C语言如何避免循环中的初值错误问题?

发布于:2024-03-15 ⋅ 阅读:(72) ⋅ 点赞:(0)

一、问题

        在⼀些进⾏累加、累乘、累减的计算中,要对累积的变量赋初值,然后进⾏循环,不断地累积计算。但是当忘记为累积变量赋初值,或者赋初值的位置不当时,便会出现累积错误,应如何避免这种错误呢?

二、解答

        ⾸先分析⼀个例⼦,1~100之间的整数的累计和,代码如下:

#include <stdio.h>
int main()
{
    int i = 1;
    int sum = 0;
    while (i <= 100)
    {
        sum = sum + i;
        i++;
    }
    printf("Sum of first 100 natural numbers is %d\n", sum);
    return 0;
}

        在程序代码中,sum 表示累加计算的结果,i 表示1到100 间的数字。为sum 赋值为0,i 赋值为1。使⽤ while 语句判断 i 是否⼩于等于100,如果条件为真,则执⾏跟着的语句块中的内容;如果条件为假,则跳过语句块执⾏后⾯的内容。在语句块中,总和 sum等于之前的计算的总和加上现在 i 表示的数字,完成累加操作。

        程序运⾏结果如下所示。

Sum of first 100 natural numbers is 5050

假设将累加变量的赋初值语句:

int sum = 0;

换成:

int sum;

        会出现什么现象呢?运⾏程序,改变程序后的结果如下所示。

Sum of first 100 natural numbers is -858988410

        通过结果图可以看到,这不是正确的结果,由于 sum 的值未赋值,所以它的值不确定,导致最后的结果也不正确。

        解决这⼀问题的办法就是将累加变量赋值,假设将代码改为:

#include <stdio.h>
int main()
{
    int i = 1;
    int sum;
    while (i <= 100)
    {
        sum = 0;
        sum = sum + i;
        i++;
    }
    printf("Sum of first 100 natural numbers is %d\n", sum);
    return 0;
}

程序运⾏结果如下所示。

Sum of first 100 natural numbers is 100

        很明显,改变后的程序不对,为什么会这样呢?这是由于将累加变量的赋值语句放在了循环体中,sum 实际并没有累加,当第⼆次执⾏循环时,sum 的值⼜变为0,所以加 的是i最后⼀次的值,最后才会出现结果为100 的情况。

三、总结

        从上⾯的学习可以了解到,在循环结构中,若累积变量未赋初值或者位置不当,将会 导致累积错误,不能产⽣预期的效果。为了避免这种情况的发⽣,⼀定要为累积变量赋初 值,且在循环体内不断改变它的值。