c语言•设班里有n位同学,每位同学的数据包括以下内容:学号(长整型)、姓名(字符串)、数学成绩(整型)、程序设计(课程名称为:程序设计,整型)。设计程序完成以如下功能 •1) 成绩录入; •2) 显示学生成绩 •3) 按照总分排名(从高到低) •4)输入一个学生的学号能查找到学生的成绩。 注:输入数据时,要求学号不能相同,姓名可以相同。建议采用结构体数组。 •具体要求如下 程序运行时,首先显示主菜单如下 1)学生成绩录入 2)总分排序 3)查询 4)数据显示。 学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息; (提示:查询到满足条件的结果后,查询即可结束)
时间: 2023-06-23 08:10:01 浏览: 123
以下是实现功能的C代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
typedef struct {
long id;
char name[20];
int math_score;
int prog_score;
int total_score;
} Student;
int num_students = 0;
Student students[MAX_STUDENTS];
void print_menu() {
printf("1) 学生成绩录入\n");
printf("2) 总分排序\n");
printf("3) 查询\n");
printf("4) 数据显示\n");
}
int find_student_by_id(long id) {
int i;
for (i = 0; i < num_students; i++) {
if (students[i].id == id) {
return i;
}
}
return -1;
}
void add_student() {
if (num_students >= MAX_STUDENTS) {
printf("学生人数已满,无法添加新的学生!\n");
return;
}
Student s;
printf("请输入学生学号:");
scanf("%ld", &s.id);
if (find_student_by_id(s.id) != -1) {
printf("已存在学号为%ld的学生!\n", s.id);
return;
}
printf("请输入学生姓名:");
scanf("%s", s.name);
printf("请输入学生数学成绩:");
scanf("%d", &s.math_score);
printf("请输入学生程序设计成绩:");
scanf("%d", &s.prog_score);
s.total_score = s.math_score + s.prog_score;
students[num_students++] = s;
printf("学生信息录入成功!\n");
}
void sort_students() {
int i, j;
Student temp;
for (i = 0; i < num_students - 1; i++) {
for (j = i + 1; j < num_students; j++) {
if (students[i].total_score < students[j].total_score) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("学生总分排序成功!\n");
}
void display_student(int index) {
printf("学号:%ld\n", students[index].id);
printf("姓名:%s\n", students[index].name);
printf("数学成绩:%d\n", students[index].math_score);
printf("程序设计成绩:%d\n", students[index].prog_score);
printf("总分:%d\n", students[index].total_score);
}
void query_student() {
long id;
printf("请输入要查询的学生学号:");
scanf("%ld", &id);
int index = find_student_by_id(id);
if (index == -1) {
printf("找不到学号为%ld的学生!\n", id);
return;
}
display_student(index);
}
void display_students() {
int i;
for (i = 0; i < num_students; i++) {
display_student(i);
}
}
int main() {
int choice = 0;
while (1) {
print_menu();
printf("请选择功能(输入数字1-4):");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
sort_students();
break;
case 3:
query_student();
break;
case 4:
display_students();
break;
default:
printf("无效的选项!\n");
break;
}
}
return 0;
}
```
程序首先定义了一个结构体 Student,用来存储每位同学的数据。然后定义了一个数组 students,用来存储所有同学的数据。
主函数中,使用一个 while 循环来不断显示菜单和接收用户输入,根据用户选择的功能分别调用 add_student()、sort_students()、query_student() 和 display_students() 函数。
add_student() 函数用来录入学生信息。它首先检查学生人数是否已满,如果已满则提示无法添加新学生;然后让用户输入学生的学号,检查该学号是否已经存在,如果已经存在则提示无法添加;最后让用户输入学生的姓名、数学成绩和程序设计成绩,并且计算出学生的总分,将学生信息存储在数组 students 中。
sort_students() 函数用来按照学生的总分排序。它使用两重循环,通过比较每个学生的总分来进行排序。
display_student() 函数用来显示一位学生的信息,它接收一个索引参数 index,用来指定要显示哪位学生的信息。该函数根据索引在数组 students 中找到对应的学生,然后输出该学生的学号、姓名、数学成绩、程序设计成绩和总分。
query_student() 函数用来查询学生信息。它让用户输入要查询的学生学号,然后在数组 students 中查找是否存在该学号的学生。如果找到则调用 display_student() 函数显示学生信息,否则提示未找到该学生。
display_students() 函数用来显示所有学生的信息,它通过遍历数组 students 来依次显示每位学生的信息。
以上就是实现功能的C代码,可以根据需要进行修改和扩展。