C语言判断学生等级和绩点

img


从键盘输入三名学生某课程的分数,将三名学生的分数按从小到大的顺序输出,再输出成绩最好的学生的等级和绩点

以下回复来自ChatGPT
首先,你需要定义一个数据结构来存储学生的信息,包括学生的名字、分数、等级和绩点。

然后,你需要使用循环读入三名学生的分数,并根据分数计算出学生的等级和绩点。

接着,你需要使用某种排序算法(例如冒泡排序)将学生的分数从小到大排序。

最后,你可以使用循环输出三名学生的分数,并输出成绩最好的学生的等级和绩点。

以下是一个示例代码,你可以根据需要进行修改:

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

#define MAX_NAME_LEN 50  // 学生名字的最大长度
#define MAX_STUDENTS 3   // 最多学生数

// 定义学生信息的数据结构
typedef struct {
  char name[MAX_NAME_LEN + 1];  // 学生名字
  int score;                     // 学生分数
  char grade;                    // 学生等级
  double gpa;                    // 学生绩点
} Student;

// 计算学生等级和绩点的函数
void calc_grade_and_gpa(Student *s) {
  if (s->score >= 90) {
    s->grade = 'A';
    s->gpa = 4.0;
  } else if (s->score >= 80) {
    s->grade = 'B';
    s->gpa = 3.0;
  } else if (s->score >= 70) {
    s->grade = 'C';
    s->gpa = 2.0;
  } else if (s->score >= 60) {
    s->grade = 'D';
    s->gpa = 1.0;
  } else {
    s->grade = 'F';
    s->gpa = 0.0;
  }
}

// 交换两个学生信息的函数
void swap_students(Student *s1, Student *s2) {
  Student temp = *s1;
  *s1 = *s2;
  *s2 = temp;
}

int main(void) {
  // 定义学生信息数组
  Student students[MAX_STUDENTS];

  // 读入学生信息
  for (int i = 0; i < MAX_STUDENTS; i++) {
    printf("输入第%d名学生的信息:\n", i + 1);
    printf("名字:");
    scanf("%s", students[i].name);
    printf("分数:");
    scanf("%d", &students[i].score);

    // 计算学生的等级和绩点
    calc_grade_and_gpa(&students[i]);
  }

  // 对学生信息进行排序
  for (int i = 0; i < MAX_STUDENTS - 1; i++) {
    for (int j = 0; j < MAX_STUDENTS - 1 - i; j++) {
      if (students[j].score > students[j + 1].score) {
        swap_students(&students[j], &students[j + 1]);
      }
    }
  }

  // 输出学生信息
  printf("\n排序后的学生信息:\n");
  for (int i = 0; i < MAX_STUDENTS; i++) {
    printf("名字:%s,分数:%d,等级:%c,绩点:%.1f\n", students[i].name, students[i].score, students[i].grade, students[i].gpa);
  }

  // 输出成绩最好的学生的信息
  printf("\n成绩最好的学生信息:\n");
  printf("名字:%s,分数:%d,等级:%c,绩点:%.1f\n", students[MAX_STUDENTS - 1].name, students[MAX_STUDENTS - 1].score, students[MAX_STUDENTS - 1].grade, students[MAX_STUDENTS - 1].gpa);

  return 0;
}

在上述代码中,我们使用了 scanf 函数从键盘读入学生的分数,并使用 printf 函数输出学生的信息。我们还使用了冒泡排序算法将学生的分数从小到大排序,并使用 calc_grade_and_gpa 函数计算出学生的等级和绩点。

注意:这仅是一个示例代码,实际应用中可能会有更多的要求和细节需要注意。例如,你可能需要使用不同的输入输出函数,或者考虑到学生的名字可能很长,需要使用更加灵活的方式来存储学生的名字。
希望对您有所帮助