c语言 (1)主函数中定义二维数组floatscore[4][3],用来存放四名同学的3门功课(语文、数学、英语)成绩,定义数组intno[4]存放四位同学的学号,定义数组floataverscore[4]存放四名同学的平均成绩并赋初值为0。(2)主函数中使用循环依次输入每位同学的学号,以及每位同学的:语文,数学,英语成绩,并分别存放于数组intno[4]和数组floatscore[4][3]中。(3)编写函数voidaver(float(*p_score)[3],int*p_no,intnum,floatp_averscore[4])实现对每位同学的三门课程的平均分的计算,然后根据平均分值从高到低的原则对四位同学进行排序,最后输出排序后的学生学号、各科成绩及其平均成绩。其中:p_score接收二维数组floatscore[4][3]的地址score;p_no接收数组intno[4]的地址no;num接收学生人数;p_averscore接收数组floataverscore[4]的地址averscore;(4)编写函数voidsearch(floatp_score[][3],intp_no[],floatp_averscore[4])实现对学生按学号进行检索,并输出相应同学的各科成绩、平均成绩及排名,其中:p_score接收二维数组floatscore[4][3]的地址score;p_no接收数组intno[4]的地址no;p_averscore接收数组floataverscore[4]的地址averscore;(5)主函数中调用上述(3)(4)函数,完成题目要求。
时间: 2023-11-19 19:05:26 浏览: 126
以下是代码实现:
```c
#include <stdio.h>
void aver(float (*p_score)[3], int* p_no, int num, float* p_averscore);
void sort(float (*p_score)[3], int* p_no, float* p_averscore);
void search(float (*p_score)[3], int* p_no, float* p_averscore);
int main()
{
float score[4][3], averscore[4] = {0};
int no[4], i;
// 输入学生信息
for (i = 0; i < 4; i++)
{
printf("请输入第%d个学生的学号:", i + 1);
scanf("%d", &no[i]);
printf("请输入第%d个学生的语文、数学、英语成绩:", i + 1);
scanf("%f %f %f", &score[i][0], &score[i][1], &score[i][2]);
}
aver(score, no, 4, averscore); // 计算平均分并排序
search(score, no, averscore); // 按学号检索
return 0;
}
void aver(float (*p_score)[3], int* p_no, int num, float* p_averscore)
{
int i, j;
float sum;
// 计算平均分
for (i = 0; i < num; i++)
{
sum = 0;
for (j = 0; j < 3; j++)
{
sum += p_score[i][j];
}
p_averscore[i] = sum / 3;
}
sort(p_score, p_no, p_averscore); // 排序
}
void sort(float (*p_score)[3], int* p_no, float* p_averscore)
{
int i, j, max;
float temp;
// 选择排序
for (i = 0; i < 4; i++)
{
max = i;
for (j = i + 1; j < 4; j++)
{
if (p_averscore[j] > p_averscore[max])
{
max = j;
}
}
if (max != i)
{
temp = p_averscore[i];
p_averscore[i] = p_averscore[max];
p_averscore[max] = temp;
temp = p_no[i];
p_no[i] = p_no[max];
p_no[max] = temp;
for (j = 0; j < 3; j++)
{
temp = p_score[i][j];
p_score[i][j] = p_score[max][j];
p_score[max][j] = temp;
}
}
}
// 输出排序后的学生信息
printf("学号\t语文\t数学\t英语\t平均分\n");
for (i = 0; i < 4; i++)
{
printf("%d\t%.1f\t%.1f\t%.1f\t%.1f\n", p_no[i], p_score[i][0], p_score[i][1], p_score[i][2], p_averscore[i]);
}
}
void search(float (*p_score)[3], int* p_no, float* p_averscore)
{
int i, s_no, rank = 0;
printf("请输入要检索的学生学号:");
scanf("%d", &s_no);
// 按学号检索
for (i = 0; i < 4; i++)
{
if (s_no == p_no[i])
{
printf("学号\t语文\t数学\t英语\t平均分\t排名\n");
printf("%d\t%.1f\t%.1f\t%.1f\t%.1f\t%d\n", p_no[i], p_score[i][0], p_score[i][1], p_score[i][2], p_averscore[i], rank + 1);
return;
}
if (p_averscore[i] < p_averscore[i + 1])
{
rank++;
}
}
printf("未找到该学生!\n");
}
```
阅读全文