1215787625 发表于 2023-11-2 15:32:46

为什么这个代码运行结果有不正确的答案

#include <stdio.h>

int main(void)
{
    int s, a, sum, n;
    a = 0;
    float p;
    printf("the number of students:");
    scanf("%d", &n);
    if (n <= 0)
    {
      sum = 0;
      printf("the scores:");
      printf("average=%.2f", sum);
    }
    else
    {
      printf("the scores:");
      do
      {
            scanf("%d", &s);
            sum += s;
            a++;
      } while (a < n);
      p = 1.0 * sum / n;
      printf("average=%.2f", p);
    }
    return 0;
}

Mike_python小 发表于 2023-11-2 15:34:05

问题分析:

根据你提供的代码,有以下可能导致运行结果不正确的问题:

1. 变量 sum 在初始化时没有赋初值,可能包含未知的垃圾值。
2. 在计算平均分的时候,整数除法可能导致结果被截断。

修改后的代码如下:


#include <stdio.h>

int main(void) {
    /*Begin*/
    int s, a = 0, sum = 0, n;
    float p;

    printf("the number of students: ");
    scanf("%d", &n);

    if (n <= 0) {
      sum = 0;
      printf("average=%.2f", sum);
    } else {
      printf("the scores: ");
      do {
            scanf("%d", &s);
            sum += s;
            a++;
      } while (a < n);
      
      p = 1.0 * sum / n;
      printf("average=%.2f", p);
    }
    /*End**/

    return 0;
}


代码解释:

1. 将变量 sum 初始化为 0,以确保在累加学生分数之前不包含任何垃圾值。
2. 在计算平均分时,将 sum 与 n 都转换为浮点数,以避免整数除法结果被截断。

希望这个回答能够帮助到你!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-11-2 15:38:01

问题出在变量sum没有初始化。在C语言中,如果一个变量没有被初始化,它的初始值是不确定的,可能是一个随机值。在这段代码中,变量sum没有被初始化,所以它的初始值是不确定的。这就导致了程序的运行结果不正确。

为了解决这个问题,我们需要在变量sum的声明处给它一个初始值。在这个代码中,我们可以将sum的初始值设为0,即sum = 0;。这样,在后续的计算中,sum的值就会正确地累加每个学生的分数。

修改后的代码如下:

#include <stdio.h>

int main(void)
{
    int s, a, sum = 0, n; // 初始化sum为0
    a = 0;
    float p;
    printf("the number of students:");
    scanf("%d", &n);
    if (n <= 0)
    {
      sum = 0;
      printf("the scores:");
      printf("average=%.2f", sum);
    }
    else
    {
      printf("the scores:");
      do
      {
            scanf("%d", &s);
            sum += s;
            a++;
      } while (a < n);
      p = 1.0 * sum / n;
      printf("average=%.2f", p);
    }
    return 0;
}


通过给sum变量初始化为0,我们可以确保程序运行时sum的初始值是确定的,从而得到正确的结果。
页: [1]
查看完整版本: 为什么这个代码运行结果有不正确的答案