关于遍历数组元素计算及读取TXT数据存入二维数组的技术问询
遍历二维读数数组的实用方案
嘿,你已经把6480条读数规整到float readings[90][72]这个二维数组里了对吧?遍历计算其实就用你存数据时的嵌套循环逻辑就行,给你几个贴合你场景的实用方案:
基础遍历(按天→按每日读数)
这是和你存储数据完全对应的顺序,最容易理解,适合做按天维度的计算(比如每天的平均值、极值)。直接复用你写的循环结构,在内部加入计算逻辑即可:
// 初始化计算用的变量 float daily_avg[90] = {0.0}; // 存储每天的平均值 float total_sum = 0.0; // 所有读数的总和 const int TOTAL_DAYS = 90; const int READS_PER_DAY = 72; // 遍历每一天 for (int days = 0; days < TOTAL_DAYS; days++) { float day_sum = 0.0; float day_max = -INFINITY; float day_min = INFINITY; // 遍历当天的72条读数 for (int rperday = 0; rperday < READS_PER_DAY; rperday++) { float current_reading = readings[days][rperday]; // 示例1:累加当天总和,用于计算日平均 day_sum += current_reading; // 示例2:累加所有读数总和,用于计算整体平均 total_sum += current_reading; // 示例3:统计当天的最大值和最小值 if (current_reading > day_max) day_max = current_reading; if (current_reading < day_min) day_min = current_reading; // 如果你需要做单条读数的特殊处理(比如阈值告警) if (current_reading > 100.0) { printf("Day %d, Reading %d exceeds threshold: %.2f\n", days+1, rperday+1, current_reading); } } // 计算并打印当天的统计结果 daily_avg[days] = day_sum / READS_PER_DAY; printf("Day %d | Avg: %.2f | Max: %.2f | Min: %.2f\n", days+1, daily_avg[days], day_max, day_min); } // 计算并打印整体统计结果 float overall_avg = total_sum / (TOTAL_DAYS * READS_PER_DAY); printf("\nOverall average across 90 days: %.2f\n", overall_avg);
反向遍历(按读数时段→按天)
如果你的需求是不按天分组,而是按同一时段的跨天数据计算(比如每天第1条读数的趋势),可以调换循环顺序:
const int TOTAL_DAYS = 90; const int READS_PER_DAY = 72; // 遍历每个时段的读数位置 for (int rperday = 0; rperday < READS_PER_DAY; rperday++) { float slot_sum = 0.0; // 遍历所有天的该时段读数 for (int days = 0; days < TOTAL_DAYS; days++) { slot_sum += readings[days][rperday]; } // 计算该时段的90天平均 float slot_avg = slot_sum / TOTAL_DAYS; printf("Slot %d average across 90 days: %.2f\n", rperday+1, slot_avg); }
小提示
- 数组索引从0开始,所以打印时加1(比如
days+1)会让输出更符合日常的“第1天”“第1条读数”的表述 - 如果需要处理大量计算,可以把数组定义为
static或者放在堆上,避免栈溢出 - 计算极值时记得初始化
day_max为极小值、day_min为极大值(比如用-INFINITY和INFINITY,需要包含math.h头文件)
内容的提问来源于stack exchange,提问作者D3FTY
相关产品推荐
相关产品推荐

