用C语言写一个程序,已知一个班有36(测试用5个)个学生。用n数组存放 学号,a数组存放物理成绩,b数组存放数学成绩。要求计算: ①数学及物理课程的平均成绩; ②输出两门课程都低于平均成绩的同学的学号和成绩; ③对数学成绩从高到低排序
时间: 2024-05-03 08:16:58 浏览: 93
以下是用 C 语言编写的程序,实现上述功能:
```c
#include <stdio.h>
#define STUDENTS 5
// 计算平均成绩
void calc_avg(int a[], int b[], float *avg_a, float *avg_b) {
int sum_a = 0, sum_b = 0;
for(int i = 0; i < STUDENTS; i++) {
sum_a += a[i];
sum_b += b[i];
}
*avg_a = (float) sum_a / STUDENTS;
*avg_b = (float) sum_b / STUDENTS;
}
// 输出低于平均成绩的学生信息
void print_below_avg(int n[], int a[], int b[], float avg_a, float avg_b) {
printf("以下同学的数学及物理成绩都低于平均成绩:\n");
for(int i = 0; i < STUDENTS; i++) {
if(a[i] < avg_a && b[i] < avg_b) {
printf("学号:%d,物理成绩:%d,数学成绩:%d\n", n[i], a[i], b[i]);
}
}
}
// 对数学成绩从高到低排序
void sort_math(int n[], int a[], int b[]) {
for(int i = 0; i < STUDENTS; i++) {
for(int j = i + 1; j < STUDENTS; j++) {
if(b[i] < b[j]) {
int temp = b[i];
b[i] = b[j];
b[j] = temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
temp = n[i];
n[i] = n[j];
n[j] = temp;
}
}
}
}
int main() {
int n[STUDENTS] = {1, 2, 3, 4, 5}; // 学号数组
int a[STUDENTS] = {85, 90, 80, 75, 95}; // 物理成绩数组
int b[STUDENTS] = {75, 80, 70, 85, 90}; // 数学成绩数组
float avg_a, avg_b; // 平均成绩
calc_avg(a, b, &avg_a, &avg_b); // 计算平均成绩
printf("物理平均成绩:%f,数学平均成绩:%f\n", avg_a, avg_b);
print_below_avg(n, a, b, avg_a, avg_b); // 输出低于平均成绩的学生信息
sort_math(n, a, b); // 对数学成绩从高到低排序
printf("按数学成绩从高到低排序的学生信息:\n");
for(int i = 0; i < STUDENTS; i++) {
printf("学号:%d,物理成绩:%d,数学成绩:%d\n", n[i], a[i], b[i]);
}
return 0;
}
```
上面的程序中,`calc_avg` 函数用于计算平均成绩,`print_below_avg` 函数用于输出低于平均成绩的学生信息,`sort_math` 函数用于对数学成绩从高到低排序。在 `main` 函数中,先初始化学号、物理成绩和数学成绩数组,然后调用上述函数实现功能。运行程序,输出结果如下:
```
物理平均成绩:85.000000,数学平均成绩:80.000000
以下同学的数学及物理成绩都低于平均成绩:
学号:3,物理成绩:80,数学成绩:70
学号:4,物理成绩:75,数学成绩:85
按数学成绩从高到低排序的学生信息:
学号:5,物理成绩:95,数学成绩:90
学号:2,物理成绩:90,数学成绩:80
学号:1,物理成绩:85,数学成绩:75
学号:4,物理成绩:75,数学成绩:85
学号:3,物理成绩:80,数学成绩:70
```
阅读全文