要用结构体方式解决,怎么编程呢?

结构体还掌握不熟悉,还搞不懂,麻烦看看怎么用结构体的方式编程解决呢?

img

可采纳

img

#include <stdio.h>
#include <string.h>

#define MAX_NAME_LEN 20
#define MAX_STUDENTS 100
//结构体存放学生姓名 和三门的成绩
typedef struct {
    char name[MAX_NAME_LEN + 1];
    int lang_grade;
    int ds_grade;
    int algo_grade;
} Student;

int main() {
    //int n;
    Student students[MAX_STUDENTS];

    // 输入学生信息
    //printf("请输入学生人数:");
    //scanf("%d", &n);
    //printf("输入学生信息:\n");
    for (int i = 0; i < 4; i++) {
        scanf("%s %d %d %d", students[i].name, &students[i].lang_grade, &students[i].ds_grade, &students[i].algo_grade);
    }

    // 找出总分最高的学生
    int max_score = -1;
    char max_name[MAX_NAME_LEN + 1];
    for (int i = 0; i < 4; i++) {
        int total_score = students[i].lang_grade + students[i].ds_grade + students[i].algo_grade;
        if (total_score > max_score) {
            max_score = total_score;
            strcpy(max_name, students[i].name);
        }
    }

    // 输出总分最高的学生姓名
    printf("%s %d\n", max_name,max_score);

    return 0;
}

基于百度GPT


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_NAME_LENGTH 20
#define MAX_STUDENTS 100

typedef struct {
    char name[MAX_NAME_LENGTH];
    int language;
    int data_structure;
    int algorithm;
    int total;
} Student;

int compare_students(const void *a, const void *b) {
    Student *student_a = (Student *)a;
    Student *student_b = (Student *)b;
    if (student_a->total < student_b->total) {
        return 1;
    } else if (student_a->total > student_b->total) {
        return -1;
    } else {
        return 0;
    }
}

int main() {
    Student students[MAX_STUDENTS];
    int n, i, max_total = 0;
    char max_name[MAX_NAME_LENGTH];

    printf("输入学生人数:");
    scanf("%d", &n);

    printf("输入学生信息:\\n");
    for (i = 0; i < n; i++) {
        printf("%d. ", i+1);
        scanf("%s %d %d %d", students[i].name, &students[i].language, &students[i].data_structure, &students[i].algorithm);
        students[i].total = students[i].language + students[i].data_structure + students[i].algorithm;
    }

    qsort(students, n, sizeof(Student), compare_students);

    printf("总分第一名的学生姓名:%s %d\\n", students[0].name, students[0].total);

    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/1077820
  • 你也可以参考下这篇文章:写一个程序,对用户输入的整数进行求和。当用户输入任意字符时,结束程序并打印结果
  • 除此之外, 这篇博客: 数码管的段选和位选是什么中的 初选单片机的时候,数码管是一个绕不过去的弯,对于初学者来说,数码管的段选和位选总是一脸懵。那么数码管的段选和位选是什么呢? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    位选,选位置。我要选择哪一位数码管亮。

    段选,选一段。我要选择哪一段LED亮.

     

     

  • 您还可以看一下 刘伶华老师的软件测试经典面试题剖析课程中的 你觉得作为一名软件测试工程师,应该要具备什么素质?小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我可以回答这个问题。

    结构体是一种自定义类型,能够封装多个数据类型来表示不同的数据结果,能够在一个类型中保存多种数据类型。我们可以通过结构体的方式来编程解决问题。如下:

    //定义两个结构体变量,用来分别表示一段 LED struct LED { //存储的是一段8位LED的GPIO端口控制信息 uint8_t GPIO_INFO;

    //存储的是该段LED是否点亮标志位
    uint8_t LED_FLAG;
    

    };

    //定义一个结构体变量,用来存储一个数码管 struct NUMTUBE { //存储这个数码管上的所有段的数据信息,未编码,即ABCDEFGH LED Tube_A; LED Tube_B; LED Tuve_C; LED Tube_D; LED Tube_E; LED Tube_F; LED Tube_G; };

    //创建一个NUMTUBE的实例,用来表示一个数码管 struct NUMTURE Numture_1;

    Numture_1.Tube_A.GPIO_INFO = 1; Numture_1.Tube_A.LED_FLAG = 0;

    Numture_1.Tube_B.GPIO_INFO = 2; Numture_1.Tube_B.LED_FLAG = 1;

    Numture_1.Tube_C.GPIO_INFO = 3; Numture_1.Tube_C.LED_FLAG = 1; //以下类比,这里只是解释了如何使用结构体来存储。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^