目标:创建一个结构体ST,成员有num(学号),name(姓名),score(成绩),
从键盘输入N个人员信息,按score(成绩)降序输出每个学生的记录,在main函数中输入数据,在另一个函数中排序并输出。
运行结果:output后面没有东西了
# include <iostream>
using namespace std;
#include <iomanip>
#include<string>
void sort();
int N;
struct ST
{
int num;
string name;
float score;
};
ST a[100];
int main()
{
int i;
cout<<"请输入学生的数量 ";
cin>>N;
cout<<"请分别输入"<<N<<"个学生的学号,姓名,成绩。用空格分开 ";
for(i=0; i<N; i++)
{
cin>>a[i].num>>a[i].name>>a[i].score;
}
sort();
return 0;
}
void sort()
{
ST t;
int i;
for(i=0; i<N; i++)
{
for(i=0; i<N--; i++)
{
while(a[i].score<a[i+1].score)
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
cout<<"output: "<<endl;
for(i=0; i<N; i++)
{
cout<<setw(12)<<a[i].num<<setw(8)<<a[i].name<<setw(8)<<a[i].score<<endl;
}
}
给排序输出函数sort增加一个结构参数,用于传入main函数获取的学生结构信息数组。
然后修改了下sort函数排序成绩的逻辑,修改如下:
# include <iostream>
using namespace std;
#include <iomanip>
#include<string>
int N;
struct ST
{
int num;
string name;
float score;
};
ST a[100];
void sort(ST * a);
int main()
{
int i;
cout<<"请输入学生的数量 ";
cin>>N;
cout<<"请分别输入"<<N<<"个学生的学号,姓名,成绩。用空格分开 ";
for(i=0; i<N; i++)
{
cin>>a[i].num>>a[i].name>>a[i].score;
}
sort(a);
return 0;
}
void sort(ST * a)
{
ST t;
int i,j;
for(i=0; i<N-1; i++) //第一个for循环变量每一个数组每一个成员
{
for(j=i; j<N; j++) //第二个for循环用于遍历当前的j下成绩和数组后面的成绩相比较
{
while(a[i].score<a[j].score)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
cout<<"output: "<<endl;
for(i=0; i<N; i++)
{
cout<<setw(12)<<a[i].num<<setw(8)<<a[i].name<<setw(8)<<a[i].score<<endl;
}
}