用C语言,某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。(注:定义一个结构体类型,用结构指针作为函数参数)
时间: 2024-01-02 09:02:32 浏览: 156
10个学生5门课的成绩统计 C语言
4星 · 用户满意度95%
好的,以下是使用C语言编写的程序,实现上述需求:
```c
#include<stdio.h>
#include<string.h>
#define N 5 // 学生数量
struct Student {
int id; // 学号
char name[20]; // 姓名
float score[3]; // 3门课程的成绩
float average; // 平均成绩
int rank; // 名次
};
void Input(struct Student *stu) { // 输入学生信息
int i, j;
for(i = 0; i < N; i++) {
printf("请输入第%d个学生的学号:", i+1);
scanf("%d", &(stu+i)->id);
printf("请输入第%d个学生的姓名:", i+1);
scanf("%s", (stu+i)->name);
printf("请输入第%d个学生的3门课程成绩:", i+1);
for(j = 0; j < 3; j++) {
scanf("%f", &(stu+i)->score[j]);
}
}
}
void Calculate(struct Student *stu) { // 计算平均成绩及名次
int i, j, cnt;
float sum;
for(i = 0; i < N; i++) {
sum = 0.0;
for(j = 0; j < 3; j++) {
sum += (stu+i)->score[j];
}
(stu+i)->average = sum / 3;
}
for(i = 0; i < N; i++) {
cnt = 1;
for(j = 0; j < N; j++) {
if((stu+i)->average < (stu+j)->average) {
cnt++;
}
}
(stu+i)->rank = cnt;
}
}
void Output(struct Student *stu) { // 输出学生信息
int i;
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\t名次\n");
for(i = 0; i < N; i++) {
printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%d\n", (stu+i)->id, (stu+i)->name, (stu+i)->score[0], (stu+i)->score[1], (stu+i)->score[2], (stu+i)->average, (stu+i)->rank);
}
}
int main() {
struct Student stu[N];
Input(stu);
Calculate(stu);
Output(stu);
return 0;
}
```
程序实现的基本思路是:先定义一个结构体类型 `Student`,包括学号、姓名、3门课程的成绩、平均成绩和名次等字段;然后使用 `Input` 函数输入每个学生的信息;接着使用 `Calculate` 函数计算每个学生的平均成绩及名次;最后使用 `Output` 函数输出所有学生的信息。
在 `Calculate` 函数中,计算平均成绩时使用了一个循环嵌套,分别对每个学生的3门课程成绩进行累加求和,然后除以3即可得到平均成绩。计算名次时也使用了一个循环嵌套,对于每个学生,都先将其名次初始化为1,然后再遍历所有学生,如果发现有其他学生的平均成绩比当前学生高,就将当前学生的名次加1。
希望我的回答能够帮助到你,如果你还有其他问题,可以继续提出。
阅读全文