用c语言编写以下程序某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。(注:定义一个结构体类型,用结构指针作为函数参数) 输入样例: 201701 zhao 29.8 85.4 65.4 201702 qian 96.5 87.5 65.4 201703 sun 85.4 65.4 84.6 201704 li 63.4 95.4 86.3 201705 zhou 65.9 84.6 97.5 输出样例: Number: Name: score: Average: rank: 201701 zhao 29.8 85.4 65.4 60.2 5 201702 qian 96.5 87.5 65.4 83.1 1 201703 sun 85.4 65.4 84.6 78.5 4 201704 li 63.4 95.4 86.3 81.7 3 201705 zhou 65.9 84.6 97.5 82.7 2
时间: 2023-12-30 18:05:50 浏览: 31
好的,以下是用 C 语言编写的程序,实现了上述要求:
```c
#include <stdio.h>
#include <string.h>
#define N 5 // 学生人数
// 定义学生信息结构体
struct student {
char number[10]; // 学号
char name[10]; // 姓名
float score[3]; // 3门课程成绩
float average; // 平均成绩
int rank; // 名次
};
// 计算平均成绩
void calculate_average(struct student *stu) {
for (int i = 0; i < N; i++) {
float sum = 0;
for (int j = 0; j < 3; j++) {
sum += stu[i].score[j];
}
stu[i].average = sum / 3;
}
}
// 计算名次
void calculate_rank(struct student *stu) {
for (int i = 0; i < N; i++) {
int rank = 1;
for (int j = 0; j < N; j++) {
if (stu[j].average > stu[i].average) {
rank++;
}
}
stu[i].rank = rank;
}
}
// 输出学生信息
void print_info(struct student *stu) {
printf("Number:\tName:\t\tscore:\t\tAverage:\trank:\n");
for (int i = 0; i < N; i++) {
printf("%s\t%s\t", stu[i].number, stu[i].name);
for (int j = 0; j < 3; j++) {
printf("%.1f ", stu[i].score[j]);
}
printf("\t%.1f\t\t%d\n", stu[i].average, stu[i].rank);
}
}
int main() {
struct student stu[N] = {0};
// 输入学生信息
for (int i = 0; i < N; i++) {
scanf("%s %s %f %f %f", stu[i].number, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
}
// 计算平均成绩和名次
calculate_average(stu);
calculate_rank(stu);
// 输出学生信息
print_info(stu);
return 0;
}
```
这个程序首先定义了一个结构体 `student`,包含了学号、姓名、3门课程成绩、平均成绩和名次。然后定义了三个函数用于计算平均成绩、计算名次和输出学生信息。在 `main` 函数中,先输入学生信息,然后调用前面定义的函数计算平均成绩和名次,并最终输出学生信息。