7-66 找出总分最高的学生(15 分)

本文解析了一道经典的C语言编程竞赛题目,旨在寻找总分最高的学生信息。通过读取学生的基本信息,包括学号、姓名及三门课程的成绩,程序能够计算每位学生的总分,并输出总分最高的学生姓名、学号和总分。

7-66 找出总分最高的学生(15 分)

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。

输入格式:

输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。

输出格式:

在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。

输入样例:

5
00001 huanglan 78 83 75
00002 wanghai 76 80 77
00003 shenqiang 87 83 76
10001 zhangfeng 92 88 78
21987 zhangmeng 80 82 75

输出样例:

zhangfeng 10001 258

#include <stdio.h>
#include <string.h>
#define MAXN 11

int main(void) {
    int n;

    scanf("%d", &n);

    int max = -1, sum = 0, score1 = 0, score2 = 0, score3 = 0, result_sum = 0;
    char name[MAXN], result_name[MAXN], id[MAXN], result_id[MAXN];

    for (int i = 0; i < n; i++) {
        scanf("%s", id);
        scanf("%s", name);
        scanf("%d", &score1);
        scanf("%d", &score2);
        scanf("%d", &score3);
        sum = score1 + score2 + score3;
        if (sum > max) {
            max = sum;
            strcpy(result_name, name);
            strcpy(result_id, id);
            result_sum = sum;
        }
    }
    printf("%s %s %d\n", result_name, result_id, result_sum);

    return 0;
}
-3 学生信息的输入输出与求各门课的总分 15 作者 jibaoyu 单位 江西理工大学 用数据结构定义学生信息学号、姓名、5门课程的成绩,编一程序,输入n(n<=100)学生成绩,求出总分最高学生姓名并输出结果。要求编写3个函数,它们的功能别为: ① 输入函数,用于从键盘读入学号、姓名和五门课的成绩;学号和成绩使用int型,姓名长度不超过10个字符。 ② 计算总分函数,以计算每位学生总分; ③ 输出函数,显示每位学生的学号、总分数; 说明:这三个函数的形式参数均为结构体指针和整型变量,函数的类型均为void。 输入格式: 第一行输入学生的个数n 从第二行开始每一行输入一个学生的信息:学号、姓名、5门课程的成绩。 输出格式: 每一行输出每一个同学的学号、姓名、5门课的成绩及总分。每一个同学的成绩输出完毕后换行。 其中:学号占5个字符位置,姓名占10个字符位置,每门课占5个字符位置,总分10个字符位置,均右对齐。 输入样例: 在这里给出一组输入。例如: 3 001 zhang 50 60 70 80 90 002 li 60 70 60 70 80 003 wang 70 75 80 85 90 输出样例: 在这里给出相应的输出。例如: 1 zhang 50 60 70 80 90 350 2 li 60 70 60 70 80 340 3 wang 70 75 80 85 90 400 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB C (gcc) Selection deleted 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 #include <stdio.h> #include <string.h> #define N 100 // 最多100个学生 // 定义学生结构体 typedef struct { char id[6]; // 学号(5个字符+结束符) char name[11]; // 姓名(10个字符+结束符) int score[5]; // 5门课程成绩(样例为整数,用int更贴合) int total; // 总分 } Student; // ① 输入函数:输入n个学生信息 void input(Student stu[], int n) { for (int i = 0; i < n; i++) { scanf("%s %s %d %d %d %d %d", stu[i].id, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].score[3], &stu[i].score[4]); } } // ② 计算总分函数:计算每个学生总分 void calculate(Student stu[], int n) { for (int i = 0; i < n; i++) { stu[i].total = 0; for (int j = 0; j < 5; j++) { stu[i].total += stu[i].score[j]; } } } // ③ 输出函数:按样例格式显示每个学生的信息(带序号) void output(Student stu[], int n) { for (int i = 0; i < n; i++) { // 格式:序号 学号 姓名 5门成绩 总分(匹配样例的空格/占位) printf("%d %s %s %d %d %d %d %d %d\n", i + 1, // 输出序号(从1开始) stu[i].id, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].score[3], stu[i].score[4], stu[i].total); } } int main() { int n; Student stu[N]; int max_index = 0; // 记录总分最高学生下标 // 输入学生个数 scanf("%d", &n); // 调用输入、计算、输出函数 input(stu, n); calculate(stu, n); output(stu, n); // 找出总分最高学生(如需单独输出最高,可保留此逻辑) for (int i = 1; i < n; i++) { if (stu[i].total > stu[max_index].total) { max_index = i; } } // 若需要额外输出最高学生,取消下面注释 // printf("最高学生:%s %s 总分:%d\n", stu[max_index].id, stu[max_index].name, stu[max_index].total); return 0; }
最新发布
12-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值