因为用到了这块,所以转了一篇文章。
原文地址http://blog.sina.com.cn/s/blog_5f777ddd0100chbl.html
设有学生情况登记表如图所示,用选择排序法对该表按从小到大进行排序。
学生情况登记表
学号num | 姓名name[8] | 性别sex | 年龄age |
成绩score |
101 | zhang | m | 19 | 95.6 |
102 | zhao | m | 20 | 89.0 |
103 | wang | f | 18 | 96.5 |
104 | shan | m | 20 | 94.0 |
105 | chen | f | 20 | 76.5 |
106 | han | f | 19 | 87.0 |
107 | cui | m | 20 | 78.8 |
108 | ding | f | 18 | 98.4 |
109 | chu | m | 19 | 90.0 |
110 | gao | m | 20 | 97.3 |
程序代码如下:
#include<iostream>
#include<iomanip>
using namespace std;
struct STUDENT
{
int num;
char name[8];
char sex;
int age;
double score;
};
void sort(STUDENT *p[],int n)
{
int i,j,k;
struct STUDENT *w;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if((*p[j]).score<(*p[k]).score)
k=j;
if(k!=i)
{
w=p[i];
p[i]=p[k];
p[k]=w;
}
}
return;
}
int main()
{
int i;
STUDENT stu[10]={{101,"zhang",'m',19,95.6},
{102,"zhao",'m',20,89.0},{103,"wang",'f',18,96.5},
{104,"shan",'m',20,94.0},{105,"chen",'f',20,76.5},
{106,"han",'f',19,87.0},{107,"cui",'m',20,78.8},
{108,"ding",'f',18,98.4},{109,"chu",'m',19,90.0},
{110,"gao",'m',20,97.3}};
struct STUDENT *p[10];
for(i=0;i<10;i++)
p[i]=&stu[i];
cout<<"NO. NAME SEX AGE SCORE\n";
cout<<setiosflags(ios::fixed);//浮点数以十进制小数形式输出
cout<<setiosflags(ios::left); //输出数据左对齐
cout<<setprecision(2); //小数点后两位
for(i=0;i<10;i++)
{
cout<<setw(8)<<(*p[i]).num<<setw(9)<<(*p[i]).name;
cout<<setw(8)<<(*p[i]).sex<<setw(8)<<(*p[i]).age;
cout<<setw(5)<<(*p[i]).score<<endl;
}
cout<<endl;
sort(p,10);
cout<<"NO. NAME SEX AGE SCORE\n";
for(i=0;i<10;i++)
{
cout<<setw(8)<<(*p[i]).num<<setw(9)<<(*p[i]).name;
cout<<setw(8)<<(*p[i]).sex<<setw(8)<<(*p[i]).age;
cout<<setw(5)<<(*p[i]).score<<endl;
}
return 0;
}
编程心得:
在本程序中,将学生信息定义为结构体类型变量,在函数的调用时,用结构体类型指针变量做函数参数,由于传送的是地址,因此,被调函数中改变结构体类型形参所指向的地址中的值也就改变了结构体类型指针实参所指向地址的值,即学生的排序得以改变。本例中,选择排序法也得到了重要的应用。