这是《小白C语言编程实战》系列的第22篇。
上一篇:小白C语言编程实战(21):折半(二分)查找
某部门有n
名销售员,假设n=5
时他们的年终销售业绩如下表(单位:万元):
姓名 | 任务量 | 完成量 | 效益工资 |
---|---|---|---|
emp1 | 50 | 35 | |
emp2 | 50 | 48 | |
emp3 | 50 | 18 | |
emp4 | 50 | 42.5 | |
emp5 | 50 | 60 |
(1)先计算完成比例p,p=完成量/任务量,然后根据p计算每个人的效益工资,计算规则为:
① 当p<40%时,效益工资为0;
② 当40%≤p<80%时,超出40%的部分按8‰提成,即:效益工资=(完成比例-40%)× 8‰ ×任务量;(**注意!**8‰是指千分之八)
③ 当p≥80%时,超出部分按1%提成,即:效益工资=(完成比例-80%)×1%×任务量+40%×8‰×任务量 。
(2)将这n个人按效益工资由高到低排序,输出排序后每个人的所有信息。
(1)销售员属于复杂数据对象,可以定义销售员结构体类型SalesPerson
来表示销售员,并定义一个结构体数组存放这n位销售员的所有信息(姓名name、任务量task、完成量sales、效益工资bonus)。
#define N 5
struct SalesPerson {
char name[15];
float task,sales,bonus;
} persons[N]= {
"emp1",50,35,0,
"emp2",50,48,0,
"emp3",50,18,0,
"emp4",50,42.5,0,
"emp5",50,60,0
};
(2)输出每个人信息时采用下面格式:
printf("%8s%8.0f%8.1f%8.4f\n",
persons[i].name,
persons[i].task,
persons[i].sales,
persons[i].bonus);
最终输出结果如下:
emp5 50 60.0 0.3600
emp2 50 48.0 0.2400
emp4 50 42.5 0.1850
emp1 50 35.0 0.1200
emp3 50 18.0 0.0000
#include
#include
#define N 5
struct SalesPerson {
char name[15];
float task,sales,bonus;
} persons[N]= {
"emp1",50,35,0,
"emp2",50,48,0,
"emp3",50,18,0,
"emp4",50,42.5,0,
"emp5",50,60,0
};
// 选择排序: 对全局变量persons,按照效益工资由大到小进行排序
void sort() {
int i,j;
for(i=0;i<N;i++) {
for(j=i+1;j<N;j++) {
if(persons[i].bonus < persons[j].bonus) {
struct SalesPerson t = persons[i];
persons[i] = persons[j];
persons[j] = t;
}
}
}
}
int main() {
int i;
//定义一个结构体指针变量
struct SalesPerson *p;
for(i=0; i<N; i++) {
p = &persons[i];
float per = (*p).sales/(*p).task;
if(per >= 0.8) {
(*p).bonus = (((per-0.8)*0.01) + 0.4*0.008)*(*p).task;
} else if(per >= 0.4) {
(*p).bonus = (per-0.4)*0.008*(*p).task;
}
}
//选择排序
sort();
//输出
for(i=0; i<N; i++) {
printf("%8s%8.0f%8.1f%8.4f\n",
persons[i].name,
persons[i].task,
persons[i].sales,
persons[i].bonus
);
}
return 0;
}