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

五种奖学金计算程序未输出预期结果,求技术排查

奖学金计算C语言程序调试问题

需求说明

  • 一共设置五种奖学金,获奖名额无限制,学生可以同时获得多项奖学金
  • 目标是计算每位学生能拿到的奖学金总额,但当前代码无法输出预期结果

你提供的代码片段

#include <stdio.h>
struct Student {
    char name[21];
    int score1;
    int score2;
    char leader;
    char west;
    int paper;
    int sum;
};
int main(void) {
    struct Student stu[100];
    int money_get(struct Student stu[],int m);
    int i,n;
    scanf("%d",&n); //n is the number of stud...的内容

问题分析&修正思路

从你给出的代码片段来看,目前存在几个关键缺失:

  • 核心函数实现缺失:你声明了money_get函数,但没有写出它的具体实现——这个函数应该是计算奖学金的核心逻辑,没它肯定算不出结果
  • 学生信息读取缺失:只读取了学生数量n,但没有循环读取每个学生的姓名、成绩、干部身份等信息,结构体里的数据都是空的
  • 结果计算与输出缺失:没有调用money_get计算奖学金,也没有打印每位学生的最终奖学金金额

给你补一个完整的示例框架,你可以根据实际的奖学金规则调整细节:

补充完整的代码示例

#include <stdio.h>
struct Student {
    char name[21];
    int score1;
    int score2;
    char leader;
    char west;
    int paper;
    int sum;
};

// 实现奖学金计算函数
int money_get(struct Student stu[], int m) {
    int total_expense = 0;
    // 这里的奖学金规则是示例,你要换成实际要求的规则
    for (int i = 0; i < m; i++) {
        stu[i].sum = 0;
        // 1. 优秀学生干部奖学金:1000元
        if (stu[i].leader == 'Y') {
            stu[i].sum += 1000;
        }
        // 2. 西部生源奖学金:2000元
        if (stu[i].west == 'Y') {
            stu[i].sum += 2000;
        }
        // 3. 论文奖学金:每篇1000元
        stu[i].sum += stu[i].paper * 1000;
        // 4. 学业一等奖学金:总分>160分,8000元
        if (stu[i].score1 + stu[i].score2 > 160) {
            stu[i].sum += 8000;
        }
        // 5. 单科优秀奖:单科>80且有论文,2000元
        if ((stu[i].score1 > 80 || stu[i].score2 > 80) && stu[i].paper >= 1) {
            stu[i].sum += 2000;
        }
        total_expense += stu[i].sum;
    }
    return total_expense; // 返回学校总奖学金支出,不需要的话可以去掉
}

int main(void) {
    struct Student stu[100];
    int i, n;
    scanf("%d", &n);
    // 读取每个学生的信息,注意处理char输入的空格问题
    for (i = 0; i < n; i++) {
        // 输入格式示例:张三 90 85 Y N 2
        scanf("%s %d %d %c %c %d", stu[i].name, &stu[i].score1, &stu[i].score2, &stu[i].leader, &stu[i].west, &stu[i].paper);
        // 如果输入时char前面有换行导致读取错误,可以在scanf前加:getchar();
    }
    // 计算奖学金
    money_get(stu, n);
    // 打印每位学生的结果
    for (i = 0; i < n; i++) {
        printf("%s %d\n", stu[i].name, stu[i].sum);
    }
    return 0;
}

注意事项

  • 一定要根据实际的奖学金规则修改money_get里的判断逻辑,比如学业奖学金的分数阈值、论文的奖励标准等
  • 读取char类型数据时,要注意输入的空格/换行问题,如果出现读取错误,可以在scanf前用getchar()跳过多余的换行符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:01:00