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

C语言分组输出学生ID仅显示每组最后一个,如何修正?

问题分析与解决

问题根源

你当前代码中使用gr1、gr2、gr3三个单个整数变量存储分组ID,每次循环时新的符合条件的ID会直接覆盖变量中之前存储的值,因此最终只能输出每组最后一个输入的ID。要保存同一组的所有ID,必须使用数组来存储,同时需要额外的变量记录每组实际存储的元素数量。另外,你代码最后输出第三组时误写为Grupa 1,这也是需要修正的小问题。

修正后的代码

#include <stdio.h>

#define MAX_STUDENTS 1000  // 最多支持1000名学生

int main() {
    int n;
    scanf("%d", &n);

    // 定义三个数组存储三组ID,以及对应的计数器记录每组的元素数量
    int group1[MAX_STUDENTS], group2[MAX_STUDENTS], group3[MAX_STUDENTS];
    int count1 = 0, count2 = 0, count3 = 0;

    for (int i = 0; i < n; ++i) {
        int br;
        scanf("%d", &br);
        int last_digit = br % 10;  // 提取ID末位数字

        if (last_digit >= 0 && last_digit <= 2) {
            group1[count1++] = br;  // 将ID加入第一组,计数器加1
        } else if (last_digit >= 3 && last_digit <= 5) {
            group2[count2++] = br;  // 将ID加入第二组,计数器加1
        } else {
            group3[count3++] = br;  // 将ID加入第三组,计数器加1
        }
    }

    // 输出第一组
    printf("Grupa 1\n");
    for (int i = 0; i < count1; ++i) {
        printf("%d ", group1[i]);
    }
    printf("\n");

    // 输出第二组
    printf("Grupa 2\n");
    for (int i = 0; i < count2; ++i) {
        printf("%d ", group2[i]);
    }
    printf("\n");

    // 输出第三组(修正原代码的笔误)
    printf("Grupa 3\n");
    for (int i = 0; i < count3; ++i) {
        printf("%d ", group3[i]);
    }
    printf("\n");

    return 0;
}

代码说明

  1. 数组与计数器:用group1、group2、group3三个数组分别存储三组学生ID,count1、count2、count3记录每组的实际元素个数,确保输出时只遍历有效数据。
  2. 简化判断逻辑:通过last_digit >= 0 && last_digit <=2替代多个||判断,代码更简洁易读。
  3. 修正输出笔误:将原代码最后输出的Grupa 1改为Grupa 3,匹配第三组的输出。
  4. 格式优化:输出每组ID时用空格分隔,最后换行,符合你期望的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:10:31