#include<stdio.h> struct Stu { int num; char name[20]; int score1,score2; float aver; }; void input(struct Stu s[], int n) { int i; for(i=0;i<n;i++) scanf("%d%s%d%d",/*1*/ /*1*/); } void average(struct Stu s[], int n) { /*2*/ /*2*/ } void sort(struct Stu s[], int n) { /*3*/ /*3*/ } int main() { struct Stu s[3]; int i; input(s,3); /*4*/ /*4*/; //调用average sort(s,3); for(i=0;i<3;i++) printf("%d %s %.2f\n",/*5*/ /*5*/); return 0; }
时间: 2024-02-01 21:02:09 浏览: 79
下面是完整的程序代码,包括填写后的内容:
```c
#include<stdio.h>
struct Stu {
int num;
char name[20];
int score1,score2;
float aver;
};
void input(struct Stu s[], int n) {
int i;
for(i=0;i<n;i++)
scanf("%d%s%d%d", &s[i].num, s[i].name, &s[i].score1, &s[i].score2);
}
void average(struct Stu s[], int n) {
int i;
for(i=0;i<n;i++)
s[i].aver = (s[i].score1 + s[i].score2) / 2.0;
}
void sort(struct Stu s[], int n) {
int i,j;
struct Stu temp;
for(i=0;i<n-1;i++) {
for(j=0;j<n-i-1;j++) {
if(s[j].aver < s[j+1].aver) {
temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
}
int main() {
struct Stu s[3];
int i;
input(s,3);
average(s,3);
sort(s,3);
for(i=0;i<3;i++)
printf("%d %s %.2f\n", s[i].num, s[i].name, s[i].aver);
return 0;
}
```
程序中 input() 函数中的 scanf() 函数已经填写了格式化字符串和参数,以正确读入学生信息。格式化字符串为 "%d%s%d%d",参数为 &s[i].num、s[i].name、&s[i].score1、&s[i].score2。
average() 函数中的 for 循环已经遍历结构体数组,计算每个学生的平均分,将结果存储在 s[i].aver 中。计算平均分的公式为(score1 + score2)/ 2.0。
sort() 函数中的冒泡排序算法已经按照学生的平均分从大到小排序。使用了两层循环,外层循环遍历每一个学生,内层循环将当前学生与后面的学生比较,如果后面的学生平均分比当前学生高,则交换两个学生的位置。
main() 函数中调用 average() 函数计算每个学生的平均分。调用方式为 average(s,3)。
main() 函数中使用 printf() 函数输出排序后的学生信息。输出格式为学号、姓名、平均分。格式化字符串为 "%d %s %.2f",参数为 s[i].num、s[i].name、s[i].aver。
阅读全文