输入5个学生3门课的成绩存入结构体数组中;(2)输出学生信息;(3)求每个学生的平均分;(4)按平均分从高到低排列;(5)按平均分求每个学生的名次。要求:用结构体数组存放学生信息,每个功能都用函数实现。用C语言写出来。
时间: 2023-09-10 14:05:38 浏览: 96
### 回答1:
好的,以下是我的回答:
1. 首先,我们需要定义一个结构体来存放学生信息,包括学生姓名、学号、三门课的成绩和平均分。代码如下:
```
struct student {
char name[20];
int id;
float score[3];
float average;
};
```
2. 然后,我们可以编写一个函数来输入学生信息,代码如下:
```
void input(struct student *stu, int n) {
int i, j;
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", stu[i].name);
printf("请输入第%d个学生的学号:", i + 1);
scanf("%d", &stu[i].id);
printf("请输入第%d个学生的三门课成绩:", i + 1);
for (j = 0; j < 3; j++) {
scanf("%f", &stu[i].score[j]);
}
}
}
```
3. 接下来,我们可以编写一个函数来输出学生信息,代码如下:
```
void output(struct student *stu, int n) {
int i, j;
printf("学生信息如下:\n");
for (i = 0; i < n; i++) {
printf("姓名:%s,学号:%d,成绩:", stu[i].name, stu[i].id);
for (j = 0; j < 3; j++) {
printf("%.1f ", stu[i].score[j]);
}
printf(",平均分:%.1f\n", stu[i].average);
}
}
```
4. 然后,我们可以编写一个函数来求每个学生的平均分,代码如下:
```
void average(struct student *stu, int n) {
int i, j;
for (i = 0; i < n; i++) {
float sum = 0;
for (j = 0; j < 3; j++) {
sum += stu[i].score[j];
}
stu[i].average = sum / 3;
}
}
```
5. 接着,我们可以编写一个函数来按平均分从高到低排列,代码如下:
```
void sort(struct student *stu, int n) {
int i, j;
struct student temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (stu[j].average < stu[j + 1].average) {
temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
}
```
6. 最后,我们可以编写一个函数来按平均分求每个学生的名次,代码如下:
```
void rank(struct student *stu, int n) {
int i, j, r;
for (i = 0; i < n; i++) {
r = 1;
for (j = 0; j < n; j++) {
if (stu[j].average > stu[i].average) {
r++;
}
}
printf("%s的名次是:%d\n", stu[i].name, r);
}
}
```
完整代码如下:
### 回答2:
这里是一个简单的用C语言实现的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define NUM_STUDENTS 5
#define NUM_COURSES 3
// 定义存放学生信息的结构体
typedef struct {
char name[10];
int scores[NUM_COURSES];
float avg_score;
int rank;
} Student;
// 输入学生成绩函数
void input_scores(Student students[]) {
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", students[i].name);
printf("请输入该学生的成绩(依次输入%d门课的成绩):", NUM_COURSES);
for (int j = 0; j < NUM_COURSES; j++) {
scanf("%d", &(students[i].scores[j]));
}
}
}
// 输出学生信息函数
void print_students(Student students[]) {
printf("--------------------------------------\n");
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("学生姓名:%s\n", students[i].name);
printf("学生成绩:");
for (int j = 0; j < NUM_COURSES; j++) {
printf("%d ", students[i].scores[j]);
}
printf("\n");
}
printf("--------------------------------------\n");
}
// 计算平均分函数
void calculate_avg_scores(Student students[]) {
for (int i = 0; i < NUM_STUDENTS; i++) {
int sum = 0;
for (int j = 0; j < NUM_COURSES; j++) {
sum += students[i].scores[j];
}
students[i].avg_score = (float)sum / NUM_COURSES;
}
}
// 按平均分从高到低排列函数
void sort_students(Student students[]) {
for (int i = 0; i < NUM_STUDENTS - 1; i++) {
for (int j = 0; j < NUM_STUDENTS - 1 - i; j++) {
if (students[j].avg_score < students[j + 1].avg_score) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
// 按平均分求每个学生的名次函数
void calculate_ranks(Student students[]) {
for (int i = 0; i < NUM_STUDENTS; i++) {
students[i].rank = i + 1;
}
}
int main() {
Student students[NUM_STUDENTS];
input_scores(students);
calculate_avg_scores(students);
sort_students(students);
calculate_ranks(students);
print_students(students);
return 0;
}
```
在运行程序后,会依次提示输入5个学生的姓名和每门课的成绩。然后会按照平均分从高到低排列输出每个学生的信息,包括姓名、成绩和平均分,并且输出每个学生的名次。最后会输出一条分割线,标志学生信息的结束。
### 回答3:
以下是一个简单的用C语言实现的程序来完成题目要求:
```c
#include <stdio.h>
// 定义学生结构体
struct student {
char name[20];
int score[3];
float average;
int rank;
};
// 函数声明
void input(struct student arr[], int n);
void output(struct student arr[], int n);
void calculateAverage(struct student arr[], int n);
void sortByAverage(struct student arr[], int n);
void calculateRank(struct student arr[], int n);
int main() {
int n = 5;
struct student arr[n];
input(arr, n);
calculateAverage(arr, n);
sortByAverage(arr, n);
calculateRank(arr, n);
output(arr, n);
return 0;
}
// 输入学生信息
void input(struct student arr[], int n) {
printf("请输入学生信息:\n");
for (int i = 0; i < n; i++) {
printf("第%d个学生的姓名:", i+1);
scanf("%s", arr[i].name);
for (int j = 0; j < 3; j++) {
printf("请输入%s的第%d门课成绩:", arr[i].name, j+1);
scanf("%d", &arr[i].score[j]);
}
}
}
// 输出学生信息
void output(struct student arr[], int n) {
printf("\n学生信息如下:\n");
for (int i = 0; i < n; i++) {
printf("姓名:%s\n", arr[i].name);
printf("成绩:");
for (int j = 0; j < 3; j++) {
printf("%d\t", arr[i].score[j]);
}
printf("\n");
printf("平均分:%.2f\n", arr[i].average);
printf("名次:%d\n", arr[i].rank);
printf("\n");
}
}
// 计算每个学生的平均分
void calculateAverage(struct student arr[], int n) {
for (int i = 0; i < n; i++) {
float sum = 0;
for (int j = 0; j < 3; j++) {
sum += arr[i].score[j];
}
arr[i].average = sum / 3;
}
}
// 按平均分从高到低排列
void sortByAverage(struct student arr[], int n) {
struct student temp;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j].average < arr[j+1].average) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
// 计算每个学生的名次
void calculateRank(struct student arr[], int n) {
int rank = 1;
arr[0].rank = rank;
for (int i = 1; i < n; i++) {
if (arr[i].average == arr[i-1].average) {
arr[i].rank = rank;
} else {
rank = i + 1;
arr[i].rank = rank;
}
}
}
```
这个程序首先定义了一个学生结构体,包含学生的姓名、三门课的成绩、平均分和名次。然后通过`input()`函数输入学生信息,`calculateAverage()`函数计算每个学生的平均分,`sortByAverage()`函数按照平均分从高到低对学生进行排序,`calculateRank()`函数计算每个学生的名次,最后通过`output()`函数输出学生信息。
阅读全文