1.根据题意,先创建出一个结构体类型
typedef struct SalaryTable
{
char name[50];
int jiBen;
int jiXiao;
int jiangJin;
int jiangCheng;
} Salary;//这里直接选择用typedef重命名
2.创建结构体数组,并进行初始化
Salary salarys[] = {
{"张三",8000,5200,1000,-2000}
,{"李四",5000,4230,800,500}
,{"王五",9000,3200,2300,260}
,{"朱八",5000,500,100,-200}
,{"郭七",5000,3800,500,500}
,{"高六",8000,1350,500,-600}
};
3.遍历结构体数组
//创建结构体指针数组并指向结构体
Salary* p_salarys[6];
for (int i = 0; i < 6; i++)
{
p_salarys[i] = &salarys[i];
}
//开始遍历
for (int i = 0; i < 6; i++)
{
printf("姓名:%-6s 基本工资:%-6d 绩效工资:%-6d 奖金:%-6d 奖惩工资:%-6d 实发工资:%-6d\n"
, salarys[i].name
, salarys[i].jiBen
, salarys[i].jiXiao
, salarys[i].jiangJin
, salarys[i].jiangCheng
, salarys[i].jiBen
+ salarys[i].jiXiao
+ salarys[i].jiangJin
+ salarys[i].jiangCheng);
}
4.利用指针数组进行排序
for (int s = 0; s < 6 - 1; s++)
{
for (int b = s + 1; b < 6; b++)
{
if (
p_salarys[s]->jiBen < p_salarys[b]->jiBen
|| p_salarys[s]->jiBen == p_salarys[b]->jiBen
&& p_salarys[s]->jiXiao < p_salarys[b]->jiXiao
)
{
Salary* t;
t = p_salarys[s];
p_salarys[s] = p_salarys[b];
p_salarys[b] = t;
}
}
}
5.打印结果
//排序后
for (int i = 0; i < 6; i++)
{
printf("姓名:%-6s 基本工资:%-6d 绩效工资:%-6d 奖金:%-6d 奖惩工资:%-6d\n"
, p_salarys[i]->name
, p_salarys[i]->jiBen
, p_salarys[i]->jiXiao
, p_salarys[i]->jiangJin
, p_salarys[i]->jiangCheng);
}