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

在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;
}

额外优化说明

  1. 移除了不必要的头文件(string.h、math.h、stdlib.h),精简代码;
  2. 使用+=操作符简化求和逻辑,提升可读性;
  3. 浮点常量添加f后缀(如0.75f),明确为单精度浮点类型,避免隐式转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:43:19