定义职工工资结构体类型定义某车间职工工资结构体数组。编写四个函数分别用于: ①输入全车间职工的工号、姓名、基本工资、岗位工资、医疗住房基金与税金。 ②计算每一个职工实发工资,计算公式:实发工资=基本工资+岗位工资-医疗住房基金-税金。 ③按实发工资降序排序。 ④输出全车间职工的工号、姓名、基本工资、岗位工资、医疗住房基金、税金与实发工资。 在主函数中定义职工工资数组,调用四个函数完成输入、计算实发工资、排序、输出工作。
时间: 2023-05-23 12:03:47 浏览: 50
C知道:
首先,我们需要定义一个职工工资结构体类型,可以使用以下代码:
typedef struct{
int id; // 工号
char name[20]; // 姓名
float base_salary; // 基本工资
float post_salary; // 岗位工资
float medical_housing_fund; // 医疗住房基金
float tax; // 税金
float real_salary; // 实发工资
} Worker;
接下来,我们可以编写输入职工信息的函数:
void inputWorkersInfo(Worker* workers, int n){
int i;
for(i=0; i<n; i++){
printf("请输入第 %d 个职工的信息:", i+1);
scanf("%d %s %f %f %f %f", &workers[i].id, workers[i].name, &workers[i].base_salary, &workers[i].post_salary, &workers[i].medical_housing_fund, &workers[i].tax);
workers[i].real_salary = workers[i].base_salary + workers[i].post_salary - workers[i].medical_housing_fund - workers[i].tax;
}
}
计算每个职工的实发工资并存储在 Worker 结构体数组中的 real_salary 字段中。
接下来,我们可以编写按照实发工资降序排序的函数:
void sortWorkersByRealSalaryDesc(Worker* workers, int n){
int i, j;
Worker temp;
for(i=0; i<n-1; i++){
for(j=i+1; j<n; j++){
if(workers[i].real_salary < workers[j].real_salary){
temp = workers[i];
workers[i] = workers[j];
workers[j] = temp;
}
}
}
}
最后,我们可以编写输出职工信息的函数:
void outputWorkersInfo(Worker* workers, int n){
int i;
printf("全车间职工的工号、姓名、基本工资、岗位工资、医疗住房基金、税金与实发工资:\n");
for(i=0; i<n; i++){
printf("%d %s %.2f %.2f %.2f %.2f %.2f\n", workers[i].id, workers[i].name, workers[i].base_salary, workers[i].post_salary, workers[i].medical_housing_fund, workers[i].tax, workers[i].real_salary);
}
}
可以看到,其中实发工资的计算公式为:实发工资=基本工资+岗位工资-医疗住房基金-税金。
在主函数中,我们可以至少定义一个 Worker 结构体数组,例如:
Worker workers[100];
然后按顺序调用上述四个函数,完成输入、计算实发工资、排序、输出。完整代码如下: