定义职工工资结构体类型定义某车间职工工资结构体数组
时间: 2023-05-10 19:55:30 浏览: 41
可以使用以下代码定义职工工资结构体类型和某车间职工工资结构体数组:
```
// 定义职工工资结构体类型
typedef struct {
char name[20]; // 姓名
int basicSalary; // 基本工资
int bonus; // 奖金
int fine; // 罚款
int totalSalary; // 总工资
} EmployeeSalary;
// 定义某车间职工工资结构体数组
EmployeeSalary workshopSalary[100];
```
以上代码定义了一个职工工资结构体类型,包含了职工的姓名、基本工资、奖金、罚款和总工资等信息。同时,定义了一个某车间职工工资结构体数组,可以存储最多100个职工的工资信息。
相关问题
:定义职工工资结构体类型定义某车间职工工资结构体数组。编写四个函数分别用于: ①输入全车间职工的工号、姓名、基本工资、岗位工资、医疗住房基金与税金。 ②计算每一个职工实发工资,计算公式:实发工资=
基本工资+岗位工资-医疗住房基金-税金。③按照实发工资从高到低排序。④输出全车间职工的工号、姓名、实发工资。
```c
#include <stdio.h>
#include <string.h>
#define MAX_WORKERS 100
typedef struct {
int id; // 工号
char name[20]; // 姓名
double base_salary; // 基本工资
double post_salary; // 岗位工资
double medical_fund; // 医疗住房基金
double tax; // 税金
double real_salary; // 实发工资
} Worker;
Worker workers[MAX_WORKERS];
int num_workers = 0;
void input_workers()
{
while (1) {
if (num_workers >= MAX_WORKERS) {
printf("超过最大职工数%d,无法继续添加\n", MAX_WORKERS);
break;
}
printf("请输入第%d个职工信息:\n", num_workers + 1);
Worker *w = &workers[num_workers++];
printf("工号:");
scanf("%d", &w->id);
printf("姓名:");
scanf("%s", w->name);
printf("基本工资:");
scanf("%lf", &w->base_salary);
printf("岗位工资:");
scanf("%lf", &w->post_salary);
printf("医疗住房基金:");
scanf("%lf", &w->medical_fund);
printf("税金:");
scanf("%lf", &w->tax);
printf("\n");
if (getchar() == '\n') {
break;
}
}
}
void calculate_salary()
{
for (int i = 0; i < num_workers; i++) {
Worker *w = &workers[i];
w->real_salary = w->base_salary + w->post_salary - w->medical_fund - w->tax;
}
}
int compare_worker(const void *p1, const void *p2)
{
const Worker *w1 = (const Worker *)p1;
const Worker *w2 = (const Worker *)p2;
if (w1->real_salary > w2->real_salary) {
return -1;
} else if (w1->real_salary < w2->real_salary) {
return 1;
}
return 0;
}
void sort_workers()
{
qsort(workers, num_workers, sizeof(Worker), compare_worker);
}
void output_workers()
{
printf("工号\t姓名\t实发工资\n");
for (int i = 0; i < num_workers; i++) {
Worker *w = &workers[i];
printf("%d\t%s\t%.2lf\n", w->id, w->name, w->real_salary);
}
}
int main()
{
input_workers();
calculate_salary();
sort_workers();
output_workers();
return 0;
}
```
定义职工工资结构体类型定义某车间职工工资结构体数组。编写四个函数分别用于: ①输入全车间职工的工号、姓名、基本工资、岗位工资、医疗住房基金与税金。 ②计算每一个职工实发工资,计算公式:实发工资=基本工资+岗位工资-医疗住房基金-税金。 ③按实发工资降序排序。 ④输出全车间职工的工号、姓名、基本工资、岗位工资、医疗住房基金、税金与实发工资。 在主函数中定义职工工资数组,调用四个函数完成输入、计算实发工资、排序、输出工作
以下是C知道的回答:
这是一个典型的结构体数组操作问题,可以使用以下代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_WORKERS 100
// 定义职工工资结构体类型
typedef struct {
int id; // 工号
char name[20]; // 姓名
float base_salary; // 基本工资
float position_salary; // 岗位工资
float medical_fund; // 医疗住房基金
float tax; // 税金
float real_salary; // 实发工资
} Worker;
Worker workers[MAX_WORKERS]; // 职工工资结构体数组
int num_workers = 0; // 职工数量
// 输入全车间职工的工号、姓名、基本工资、岗位工资、医疗住房基金与税金
void input_workers() {
printf("请输入职工数量:");
scanf("%d", &num_workers);
for (int i = 0; i < num_workers; i++) {
printf("请输入第%d个职工的信息:\n", i + 1);
workers[i].id = i + 1;
printf("工号:");
scanf("%d", &workers[i].id);
printf("姓名:");
scanf("%s", workers[i].name);
printf("基本工资:");
scanf("%f", &workers[i].base_salary);
printf("岗位工资:");
scanf("%f", &workers[i].position_salary);
printf("医疗住房基金:");
scanf("%f", &workers[i].medical_fund);
printf("税金:");
scanf("%f", &workers[i].tax);
}
}
// 计算每一个职工实发工资
void calculate_real_salary() {
for (int i = 0; i < num_workers; i++) {
workers[i].real_salary = workers[i].base_salary + workers[i].position_salary - workers[i].medical_fund - workers[i].tax;
}
}
// 按实发工资降序排序
void sort_workers() {
for (int i = 0; i < num_workers - 1; i++) {
for (int j = i + 1; j < num_workers; j++) {
if (workers[i].real_salary < workers[j].real_salary) {
Worker temp = workers[i];
workers[i] = workers[j];
workers[j] = temp;
}
}
}
}
// 输出全车间职工的工号、姓名、基本工资、岗位工资、医疗住房基金、税金与实发工资
void output_workers() {
printf("工号\t姓名\t基本工资\t岗位工资\t医疗住房基金\t税金\t实发工资\n");
for (int i = 0; i < num_workers; i++) {
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", workers[i].id, workers[i].name, workers[i].base_salary, workers[i].position_salary, workers[i].medical_fund, workers[i].tax, workers[i].real_salary);
}
}
int main() {
input_workers();
calculate_real_salary();
sort_workers();
output_workers();
return 0;
}
```
如果您有任何问题或需要进一步的帮助,请随时联系我。