/*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun, 它的功能是:把低于平均分的学生数据放在h所指的数组中,低于平均分的学生人数通过形参传回,平均分通过函数值返回。 注意:部分源程序存在考生文件夹下的文件prog86.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 */ #include "stdio.h" #define N 8 typedef struct { char num[10]; double s; } STREC; double fun(STREC *a,STREC *b,int *n) { } int main() { STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}}; STREC h[N]; int i,n;double ave; ave=fun(s,h,&n); printf("The %d student data which is lower than %7.3f:\n",n,ave); for(i=0;i<n;i++) printf("%s %4.1f\n",h[i].num,h[i].s); printf("\n"); }
时间: 2023-07-19 19:37:55 浏览: 34
下面是函数`fun`的实现:
```c
double fun(STREC *a, STREC *b, int *n) {
double sum = 0.0, ave;
int i;
*n = 0;
for (i = 0; i < N; i++) {
sum += a[i].s;
}
ave = sum / N;
for (i = 0; i < N; i++) {
if (a[i].s < ave) {
b[*n] = a[i];
(*n)++;
}
}
return ave;
}
```
该函数首先计算出给定学生数据的平均分,然后遍历整个学生数据数组,将低于平均分的学生数据存储到另一个数组`b`中,并通过指针`n`返回低于平均分的学生人数。最后返回平均分。需要注意的是,初始化指针`n`所指向的变量为0,以便在存储低于平均分的学生数据时使用。
相关问题
3、 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。
好的,我明白了。以下是代码实现:
```C++
#include <stdio.h>
#define N 100
struct Student {
char id[15]; // 学号
int score; // 成绩
};
void fun(Student s[], int n)
{
int i, j;
Student temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (s[i].score < s[j].score) {
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
}
int main()
{
Student s[N] = {
{"1001", 75},
{"1002", 85},
{"1003", 90},
//... 其他学生
};
int n = 3; // 学生数量
fun(s, n);
// 输出排好序的学生记录
for (int i = 0; i < n; i++) {
printf("学号:%s,成绩:%d\n", s[i].id, s[i].score);
}
return 0;
}
```
这个函数使用了冒泡排序,对数组中的学生记录按照成绩从高到低排序。在主函数中,我们先定义了一个结构体数组 `s`,将学生信息存入其中,然后调用排序函数 `fun` 将学生信息排好序,并输出结果。
学生得记录由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能时:按分数的高低排列学生的记录,高分在前。
可以使用冒泡排序或者快速排序来实现按分数高低排列学生记录的功能。
以下是使用冒泡排序的示例代码:
```c
void fun(struct student s[], int n)
{
int i, j;
struct student temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (s[j].score < s[j + 1].score) {
temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
}
```
其中,结构体student的定义如下:
```c
struct student {
int id; // 学号
int score; // 成绩
};
```
在主函数中,可以先读入n个学生的数据,然后调用fun函数进行排序:
```c
int main()
{
int n, i;
struct student s[MAX_N];
// 读入n个学生的数据
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d%d", &s[i].id, &s[i].score);
}
// 按分数高低排序
fun(s, n);
// 输出排序后的结果
for (i = 0; i < n; i++) {
printf("%d %d\n", s[i].id, s[i].score);
}
return 0;
}
```