班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。(注:定义一个结构体类型,用结构指针作为函数参数)用c语言编写
时间: 2024-03-08 17:47:23 浏览: 55
好的,以下是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 5
#define MAX_NAME_LENGTH 20
typedef struct {
int id;
char name[MAX_NAME_LENGTH];
int grades[3];
float average;
int rank;
} Student;
void calculate_average(Student *students, int num_students);
void calculate_rank(Student *students, int num_students);
void print_students(Student *students, int num_students);
int main() {
Student students[MAX_STUDENTS] = {
{1, "Alice", {85, 90, 95}},
{2, "Bob", {75, 80, 85}},
{3, "Charlie", {90, 95, 100}},
{4, "David", {60, 65, 70}},
{5, "Eve", {80, 85, 90}}
};
calculate_average(students, MAX_STUDENTS);
calculate_rank(students, MAX_STUDENTS);
print_students(students, MAX_STUDENTS);
return 0;
}
void calculate_average(Student *students, int num_students) {
for (int i = 0; i < num_students; i++) {
float sum = 0;
for (int j = 0; j < 3; j++) {
sum += students[i].grades[j];
}
students[i].average = sum / 3;
}
}
void calculate_rank(Student *students, int num_students) {
// sort students by average grade
for (int i = 0; i < num_students; i++) {
for (int j = 0; j < num_students - 1; j++) {
if (students[j].average < students[j+1].average) {
Student temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
// assign ranks
int rank = 1;
for (int i = 0; i < num_students; i++) {
if (i > 0 && students[i].average < students[i-1].average) {
rank++;
}
students[i].rank = rank;
}
}
void print_students(Student *students, int num_students) {
printf("%-5s%-10s%-7s%-7s%-7s%-7s\n", "ID", "Name", "Grade1", "Grade2", "Grade3", "Avg");
for (int i = 0; i < num_students; i++) {
printf("%-5d%-10s%-7d%-7d%-7d%-7.2f%d\n", students[i].id, students[i].name, students[i].grades[0], students[i].grades[1], students[i].grades[2], students[i].average, students[i].rank);
}
}
```
这个程序首先定义了一个 `Student` 结构体,包含每个学生的学号、姓名、成绩、平均成绩和名次。然后在 `main` 函数中定义了一个包含 5 个学生信息的数组,并调用了 `calculate_average` 函数和 `calculate_rank` 函数来计算每个学生的平均成绩和名次。最后调用 `print_students` 函数打印出所有学生的信息。