小羊爱吃小草 发表于 2023-11-7 09:20:28

捐款题

#include <stdio.h>
#define SUM 100000

int main()
{
        float amount, total = 0, aver;
        int i = 1;
        while(i <= 1000)
        {
                printf("input the amount:\n");
                scanf("%f", &amount);
                total = total + amount;
                i = i++;
                if(total >= SUM);break;
        }
        aver = total / i;
        printf("num=%d\naver=%10.2f\n", i, aver);
        return 0;
}
为什么这个代码达不到目的

Mike_python小 发表于 2023-11-7 09:21:38

这段代码的目的是让用户输入金额,直到输入的金额总和达到100000,然后输出输入的次数和平均每次输入的金额。

在代码中有一个错误和一个潜在的问题。

1. 首先,#include <stdio.h> 和 #define SUM 100000 这两行之间应该有换行符,否则可能会导致预处理错误。应该修改为:
   
   #include <stdio.h>
   #define SUM 100000
   

2. 然后,在 while 循环内部,i = i++; 这行代码的作用不是递增 i 的值,而是将 i 赋值为当前的 i 值,因此循环条件无法得到满足。

   应该将 i = i++; 修改为 i++;,或者直接使用 i += 1; 或 i = i + 1;。

另外,循环条件 if(total >= SUM);break; 中的分号应该去掉,否则会导致循环无法正常工作。应该修改为:

if(total >= SUM)
    break;


修正后的代码如下所示:

#include <stdio.h>

#define SUM 100000

int main() {
    float amount, total = 0, aver;
    int i = 0;// 初始化 i 为 0,因为在循环中会先执行 i++
   
    while (i < 1000) {// 修改循环条件,避免无限循环
      printf("input the amount:\n");
      scanf("%f", &amount);
      total = total + amount;
      i++;// 修改递增方式

      if (total >= SUM)
            break;
    }

    aver = total / i;
    printf("num=%d\naver=%10.2f\n", i, aver);
    return 0;
}


这样修改后的代码应当能够实现预期的功能。

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

isdkz 发表于 2023-11-7 09:21:54

这个代码无法达到目的是因为存在几个问题:

1. 在循环中,使用i = i++;这个语句是错误的。 i++表示先使用i的值,然后再将i的值加1。所以这里应该使用i++或者i = i + 1来实现i的自增。

2. 在if(total >= SUM);break;这个语句中,分号;的位置错误。分号应该放在if语句的末尾,而不是在条件判断的后面。因此,应该修改为if(total >= SUM) break; 。

以下是修改后的代码:

#include <stdio.h>
#define SUM 100000

int main()
{
    float amount, total = 0, aver;
    int i = 1;
    while(i <= 1000)
    {
      printf("input the amount:\n");
      scanf("%f", &amount);
      total = total + amount;
      i++;
      if(total >= SUM) break;
    }
    aver = total / i;
    printf("num=%d\naver=%10.2f\n", i, aver);
    return 0;
}


这样修改后的代码应该能够正常运行并达到预期的目的。
页: [1]
查看完整版本: 捐款题