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

C语言偶数数组乘0.02求均值取倒数输出0问题排查

C语言奇偶拆分后数组计算问题修复方案

错误原因

  • 变量类型不匹配:原有sum为int类型,累加浮点数时会截断小数部分;average声明为int类型,无法存储浮点计算结果,用%f打印int变量属于未定义行为,直接导致输出0.000000
  • 变量未重置:原有sum在之前计算Frequency逻辑中已经被赋值,计算新数组均值前没有清零,初始值错误
  • 有效长度计算冗余:可变长度数组Arr的有效元素数就是EVEN数组的元素数j,不需要通过sizeof计算,避免出现长度计算错误

正确完整实现

#include<stdio.h>

int main()
{
    int NUM[] = {1,2,3,4,5,6,7,8,9,10};
    int i,j,k;
    int len = sizeof NUM / sizeof * NUM;

    int ODD[len];
    int EVEN[len];

    j = 0;
    k = 0;

    // 单独定义int类型变量用于原有Frequency计算逻辑
    int int_sum = 0;
    int int_average;

    for(i = 0; i<len ; i++){
        if(NUM[i]%2 == 0){
            EVEN[j] = NUM[i];
            j++;
        }else{
            ODD[k] = NUM[i];
            k++;
        }
    }


    printf("Even numbers : ");
    for(i = 0;i<j; i++){
        printf("%d ",EVEN[i]);
    }

    printf("\nOdd numbers : ");
    for(i = 0;i<k; i++){
        printf("%d ",ODD[i]);
    }

    printf("\nFrequency of EVEN array is :");
    for(i = 0;i<j; i++){
        int_sum = int_sum + EVEN[i];
        int_average = int_sum / j;
        printf("%d ",int_average);
    }

    printf("\n");

    // 修正后的新逻辑代码
    double Arr[j]; // 直接用EVEN的有效长度j定义数组更稳妥
    double arr_sum = 0.0; // 用double类型存储浮点数累加和,避免截断
    double average, res;

    for(i=0;i<j;i++){
        Arr[i] = EVEN[i]*0.02;
        printf("转换后元素:%f ", Arr[i]);
        arr_sum += Arr[i]; // 遍历转换的同时直接累加,减少一次循环
    }

    average = arr_sum / j; // 直接用j作为有效元素数计算均值
    res = 1 / average; // 按需求计算平均值的倒数

    printf("\nEVEN转换后数组的平均值为:%f", average);
    printf("\n平均值的倒数为:%f\n", res);

    return 0;
}

运行结果

Even numbers : 2 4 6 8 10 
Odd numbers : 1 3 5 7 9 
Frequency of EVEN array is :0 1 2 4 6 
转换后元素:0.040000 转换后元素:0.080000 转换后元素:0.120000 转换后元素:0.160000 转换后元素:0.200000 
EVEN转换后数组的平均值为:0.120000
平均值的倒数为:8.333333

内容的提问来源于stack exchange,提问作者Ashton Stark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:12:04