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

C语言实现float数组元素频次统计的编程问题求助

解决float数组元素频次统计的问题

问题分析

你当前的代码会对每个元素重复计算频次(比如数组中第二个1.5会再次遍历整个数组统计,导致最终输出重复结果),核心问题是没有标记已统计过的元素,所以需要添加标记机制避免重复处理。

修改后的代码

#include <stdio.h>

#define ARR_LEN 8

int main(void)
{
    float nums[ARR_LEN] = {1.5, -4.8, 2.9, 6.1, 4.2, 1.5, 2.9, 6.1};
    // 标记数组:记录对应位置的元素是否已被统计,初始全为0(未统计)
    int counted[ARR_LEN] = {0};

    for (int i = 0; i < ARR_LEN; i++)
    {
        // 如果当前元素已被统计,直接跳过
        if (counted[i])
            continue;

        int count = 0;
        // 遍历数组统计当前元素的出现次数
        for (int j = 0; j < ARR_LEN; j++)
        {
            if (nums[i] == nums[j])
            {
                count++;
                // 标记该位置元素已被统计,避免后续重复处理
                counted[j] = 1;
            }
        }
        // 打印元素和对应频次
        printf("数字 %.1f 的出现次数:%d\n", nums[i], count);
    }

    return 0;
}

关键说明

  • 标记数组counted:用int类型数组记录每个元素的统计状态,1表示已统计,0表示未统计。遍历到已标记的元素时直接跳过,避免重复计算。
  • 统计逻辑:对每个未被统计的元素,遍历整个数组计算出现次数,同时把所有相同元素的位置标记为已统计,确保后续不会再处理这些元素。
  • 浮点数比较注意:直接用==比较float类型在处理非精确浮点数时可能存在精度问题(比如存储的微小误差),如果需要处理这类场景,建议用差值小于极小值的方式判断相等,例如:if (fabs(nums[i] - nums[j]) < 1e-6),此时需要包含头文件<math.h>。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:00:58