定义5个元素的struct STUDENT 数组a[5],编写函 数(结构体数组名作为函数参数)下实现如功能:

1.定义5个元素的struct STUDENT 数组a[5],编写函
数(结构体数组名作为函数参数)下实现如功能:
(1)从键盘输入 5 个学生的姓名、年龄、语文成绩、数
学成绩保存到数组中。
(2)计算这 5 个学生的均分并保存到相应的结构体成
员 average 中。
(3)按照总分降序排序。
(4)输出这 5 个学生排序后的列表。

#include<stdio.h>
#include<string.h>
main()
{
struct STUDENT
{
char name[80];
int age;
float chinese;
float math;
float average;
}a[5];
int i,j,k;
float max;
struct STUDENT temp;
for(i=0;i<5;i++)
{
a[i].average=0;
scanf("%s%d%f%f",a[i].name,&a[i].age,&a[i].chinese,&a[i].math);
a[i].average+=(a[i].chinese+a[i].math)/2;
}
for(i=0;i<4;i++)
{
max=a[i].average;
k=i;
for(j=i;j<=4;j++)
{
if(a[j].average>max)
k=j;
}
if(k!=i)
{
strcpy(temp.name,a[k].name);
temp.age=a[k].age;
temp.chinese=a[k].chinese;
temp.math=a[k].math;
temp.average=a[k].average;
strcpy(a[k].name,a[i].name);
a[k].age=a[i].age;
a[k].chinese=a[i].chinese;
a[k].math=a[i].math;
a[k].average=a[i].average;
strcpy(a[i].name,temp.name);
a[i].age=temp.age;
a[i].chinese=temp.chinese;
a[i].math=temp.math;
a[i].average=temp.average;
}
}
printf("姓名\t年龄\t语文\t数学\t平均分\n");
for(i=0;i<=4;i++)
{
printf("%s\t%d\t%.2f\t%.2f\t%.2f\n",a[i].name,a[i].age,a[i].chinese,a[i].math,a[i].average);
}
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-10-19
#include<iostream>
#include<vector>
#include<list>
#include<iterator>
#include<algorithm>
#include<string>
struct STUDENT{
std::string Name;
unsigned int Age;
unsigned int ReadGrade;
unsigned int MathGrade;
unsigned int average;
};
std::vector<STUDENT> sort(std::vector<STUDENT>tmp)
{
using namespace std;
list<int>T;
for (int i = 0; i<tmp.size(); i++)
{
tmp[i].average = (tmp[i].ReadGrade + tmp[i].MathGrade) / 2;
T.push_back(tmp[i].average);
}
T.sort();
vector<STUDENT>trans;
while (!T.empty())
{
for (int i = 0; i<tmp.size(); i++)
{
if (tmp[i].average == T.back())
{
trans.push_back(tmp[i]);
tmp.erase(tmp.begin() + i);
T.pop_back();
break;
}
}
}
return trans;
}
int main()
{
using namespace std;
vector<STUDENT>a(5);
for (int i = 0; i < 5; i++)
{
cout << "学生" << i<<endl;
cin >> a[i].Name >> a[i].Age >> a[i].ReadGrade >> a[i].MathGrade;
}
a = sort(a);
    for(int i = 0;i<5;i++)
cout << a[i].Name << ' ' << a[i].Age << ' ' << a[i].ReadGrade << ' ' << a[i].MathGrade << ' ' << a[i].average << endl;
        system("pause");
        return 0;

相似回答