在C语言中计算数组索引百分比时出错,求问题排查与修正
C语言数组任务错误排查
任务说明
- 创建大小为6的数组A,从标准输入读取元素值;
- 遍历数组:将偶数索引元素的75%存入数组B对应位置,奇数索引元素的25%存入数组B对应位置;
- 输出数组B中偶数索引元素的总和、奇数索引元素的总和,结果保留两位小数。
输入输出规范
- 输入格式:7个整数(第一个为数组大小,后续6个为数组A的元素),所有元素值大于0且小于100;
- 样例输入:
6 10 20 30 40 50 60
- 样例输出:
67.50 30.00
问题代码
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> int main() { int A[6], i; float B[6], esum = 0, osum = 0; for(i = 0; i < 6; i++) { scanf("%d", &A[i]); } for(i = 0; i < 6; i++) { if(i % 2 == 0) { B[i] = 0.75 * A[i]; } else { B[i] = 0.25 * A[i]; } } for(i = 0; i < 6; i++) { if(i % 2 == 0) { esum = B[i] + esum; } else { osum = B[i]+ osum; } } printf("%.2f\n%.2f", esum, osum); return 0; }
错误原因
你的代码直接跳过了输入的第一个整数(样例中的6),把输入的前6个值(6、10、20、30、40、50)存入了数组A,而题目要求的是读取输入中第2到第7个值(10、20、30、40、50、60)作为数组A的元素。这就导致后续计算的所有数值都错位,最终输出结果与预期不符。
修正后的代码
#include <stdio.h> int main() { int A[6], i, dummy_size; float B[6], esum = 0.0f, osum = 0.0f; // 读取并丢弃第一个输入的数组大小值 scanf("%d", &dummy_size); // 读取数组A的6个目标元素 for(i = 0; i < 6; i++) { scanf("%d", &A[i]); } // 计算数组B的元素 for(i = 0; i < 6; i++) { if(i % 2 == 0) { B[i] = 0.75f * A[i]; } else { B[i] = 0.25f * A[i]; } } // 计算两类元素的总和 for(i = 0; i < 6; i++) { if(i % 2 == 0) { esum += B[i]; } else { osum += B[i]; } } printf("%.2f\n%.2f", esum, osum); return 0; }
额外优化说明
- 移除了不必要的头文件(
string.h、math.h、stdlib.h),精简代码; - 使用
+=操作符简化求和逻辑,提升可读性; - 浮点常量添加
f后缀(如0.75f),明确为单精度浮点类型,避免隐式转换。
内容的提问来源于stack exchange,提问作者GlitchBot
相关产品推荐
相关产品推荐

