学生的属性包括姓名、学号、5门课程的成绩、平均成绩与总成绩。已知一个学生的姓名、学号与5门课程的成绩,你的任务是计算该学生的平均成绩与总成绩,并将该学生的5门课程成绩按照从高到底进行排序,最后将这个同学的完整信息输出。学生的姓名中只能包含大小写字母与空格字符,不会超过20个字符;学生的学号是个长度不会超过20的字符串,只包含数字字符;课程成绩均为0—100的整数。 要求: 1.在本题中,你要设计一个结构来存储学生的信息。在此结构中,需要有一个字符数组来存储姓名;一个字符数组来存储学号;一个长度为5的整型数组来存储5门课程的成绩;一个双精度浮点型变量存储平均成绩,一个整型变量存储总成绩。 2.在对结构变量的成员进行赋值与排序的时候,你要使用“结构变量名+‘.’+结构成员名”这种方式访问变量,如“student.score”;而在输出学生信息时,你要用一个结构指针指向该结构,然后用结构指针访问结构中的变量,即“结构指针名+‘->’+结构成员名”,如“ptr->score”。 输入格式: 学生信息的输入按照姓名、学号、5门课程成绩的顺序输入,共占三行,具体格式见样例。 输出格式: 姓名占一行;学号占一行;5门成绩中间用空格分开,最后一个成绩后是换行符,从高到底进行排序,占一行;平均成绩与总成绩用空格分隔,占一行,平均成绩保留两位小数。
时间: 2024-02-13 09:02:45 浏览: 151
好的,这是一个典型的结构体计算问题,可以按照以下步骤进行解决:
1. 定义结构体类型,包括姓名、学号、5门课程的成绩、平均成绩与总成绩等成员变量;
2. 根据输入的格式,定义一个结构体变量,并读入学生的姓名、学号、5门课程的成绩;
3. 根据学生的成绩计算平均成绩与总成绩;
4. 根据学生的成绩进行排序;
5. 输出学生的姓名、学号、5门课程的成绩、平均成绩与总成绩。
下面是一份示例代码,供您参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5
typedef struct student {
char name[21];
char id[21];
int score[N];
double average;
int total;
} Student;
// 从高到低排序
void sort(Student *s) {
int i, j;
for (i = 0; i < N - 1; i++) {
for (j = i + 1; j < N; j++) {
if (s->score[i] < s->score[j]) {
int temp = s->score[i];
s->score[i] = s->score[j];
s->score[j] = temp;
}
}
}
}
int main() {
Student s;
scanf("%[^\n]%*c", s.name);
scanf("%[^\n]%*c", s.id);
int i;
for (i = 0; i < N; i++) {
scanf("%d", &s.score[i]);
}
double sum = 0.0;
for (i = 0; i < N; i++) {
sum += s.score[i];
}
s.average = sum / N;
s.total = (int)sum;
sort(&s);
printf("%s\n%s\n", s.name, s.id);
for (i = 0; i < N - 1; i++) {
printf("%d ", s.score[i]);
}
printf("%d\n", s.score[N - 1]);
printf("%.2f %d\n", s.average, s.total);
return 0;
}
```
以上是一个简单的解决方案,实现了输入、计算、排序和输出等基本功能。但是,如果您需要根据不同的需求进行修改,可以灵活调整代码。
阅读全文