结构类型struct Stu描述学生成绩记录;函数void input(struct Stu s[], int n)功能是输入n个学生的成绩记录(包括学号、姓名和两门课成绩);函数void average(struct Stu s[], int n)功能是计算每个学生2门课的平均成绩并存入对应记录的aver单元;函数void sort(struct Stu s[], int n)功能是按平均成绩的升序对学生记录进行排序。main函数调用以上函数,并输出结果,题目保证每个学生的平均分都不一样,请在五个空格之间填写内容。 输入格式: 输入为三行,每行包含学号,姓名,两门课成绩(以空格隔开)。 输出格式: 输出为三行,按平均成绩升序依次输出,每行包含学号,姓名,平均分(小数点后保留两位小数),请用指针法实现
时间: 2024-02-10 20:10:39 浏览: 80
使用指针的实现方式与使用数组的实现方式类似,只需要将数组的索引改为指针的偏移即可。代码如下:
#include <stdio.h>
#include <string.h>
#define MAXN 100
struct Stu{
char id[20];
char name[20];
double score1;
double score2;
double aver;
};
void input(struct Stu s[], int n){
for(int i = 0; i < n; i++){
scanf("%s %s %lf %lf", (s + i)->id, (s + i)->name, &(s + i)->score1, &(s + i)->score2);
}
}
void average(struct Stu s[], int n){
for(int i = 0; i < n; i++){
(s + i)->aver = ((s + i)->score1 + (s + i)->score2) / 2;
}
}
void sort(struct Stu s[], int n){
for(int i = 0; i < n - 1; i++){
for(int j = i + 1; j < n; j++){
if((s + i)->aver > (s + j)->aver){
struct Stu temp = *(s + i);
*(s + i) = *(s + j);
*(s + j) = temp;
}
}
}
}
int main(){
struct Stu s[MAXN];
int n = 3;
input(s, n);
average(s, n);
sort(s, n);
for(int i = 0; i < n; i++){
printf("%s %s %.2lf\n", (s + i)->id, (s + i)->name, (s + i)->aver);
}
return 0;
}
输入样例:
1001 Tom 80 90
1002 Jerry 85 95
1003 Alice 90 92
输出样例:
1001 Tom 85.00
1002 Jerry 90.00
1003 Alice 91.00