You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在for循环中嵌入if语句?附5个小于10的数求平均值代码求助

帮你修正计算5个小于10的数字平均值的代码

我看了你的代码,里面有几个关键问题会导致程序运行出错或者结果不符合预期,我来一步步帮你梳理和修正:

原代码里的核心问题

  • 变量未初始化:sum没有初始化为0,程序启动时它会是一个随机的垃圾值,最终计算的总和肯定不对。
  • scanf参数错误:scanf("%d", num1);这里必须传变量的地址&num1,不然程序会直接操作内存里的随机地址,导致崩溃、乱码这类未定义行为。
  • 逻辑冗余且不安全:你用num2中转数值,但num2一开始没初始化,而且这个变量完全多余,直接把合法的num1加到sum里就够了。
  • 输入验证不严谨:当输入大于10的数字时,你只重新输入一次,但如果用户再次输入非法值,程序还是会继续执行,得用循环确保输入的数字符合要求。
  • 整数除法丢失精度:sum / 5是整数除法,比如总和是12,结果会是2而不是2.4,转成float也没法恢复精度,应该用浮点除法(比如sum / 5.0f)。

修正后的代码

#include <stdio.h>

int main() {
    int num; 
    int sum = 0; // 必须初始化sum为0,保证累加从正确的起点开始
    int i; 
    float average; 

    printf("Enter five numbers (each less than 10) to calculate the average:\n"); 
    for (i = 0; i < 5; i++) {
        // 用do-while循环强制用户输入合法数字,直到符合要求才退出
        do {
            printf("Enter number %d: ", i + 1);
            scanf("%d", &num); // 传递变量的内存地址,让scanf能正确写入输入值
            if (num >= 10) {
                printf("Error: Number must be less than 10! Please try again.\n");
            }
        } while (num >= 10);
        
        sum += num; // 直接把合法的输入值加到总和里
    }

    average = sum / 5.0f; // 用5.0f触发浮点除法,保留小数精度
    printf("Average is: %.2f\n", average); // 用%.2f控制输出两位小数,结果更美观

    return 0;
}

代码说明

  1. 初始化sum为0:确保总和从0开始累加,彻底避免垃圾值的干扰。
  2. 修正scanf参数:&num是变量的内存地址,scanf需要通过地址才能把输入值写入变量中。
  3. 完善输入验证:do-while循环会先执行一次输入操作,然后检查是否合法,不合法就重复提示输入,直到用户输入符合要求的数字。
  4. 去掉冗余变量:删掉了没必要的num2,直接用num存储每次输入,逻辑更简洁。
  5. 浮点除法:5.0f是浮点类型,这样sum会被自动转换为浮点型参与计算,结果能保留小数部分的精度。
  6. 友好的交互提示:给每个输入加上序号提示,错误提示更明确,输出平均值时控制小数位数,可读性更强。

内容的提问来源于stack exchange,提问作者Guilherme Fazenda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:01:57