用c语言设计一个职工文件emp.dat,包含员工工资(salary)信息,按照工资salary对所有职工记录进行递减排序。
时间: 2024-10-23 07:02:39 浏览: 172
在C语言中,你可以使用结构体(struct)来表示一个职工,并创建一个动态数组或链表来存储数据。这里是一个简单的例子,我们首先定义一个名为Employee的结构体,然后使用qsort函数进行降序排序。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义职工结构体
typedef struct {
char name[50]; // 员工姓名
int salary; // 工资
} Employee;
// 比较函数,用于qsort
int compare(const void *a, const void *b) {
const Employee *e1 = (const Employee *) a;
const Employee *e2 = (const Employee *) b;
return e2->salary - e1->salary; // 降序排列
}
void sortEmployees(Employee employees[], int count) {
qsort(employees, count, sizeof(Employee), compare);
}
int main() {
Employee *empArray = NULL; // 动态数组
int numEmployees = 0, salaryInput;
// 输入员工信息并添加到数组
printf("请输入员工数量: ");
scanf("%d", &numEmployees);
empArray = (Employee*) malloc(numEmployees * sizeof(Employee));
for (int i = 0; i < numEmployees; i++) {
printf("输入员工 %d 的名字和工资: ", i+1);
scanf("%s%d", employees[i].name, &employees[i].salary);
}
// 对员工数组按工资进行排序
sortEmployees(empArray, numEmployees);
// 输出排序后的员工信息
printf("\n按照工资降序排列的员工:\n");
for (int i = 0; i < numEmployees; i++) {
printf("%s 的工资: %d\n", employees[i].name, employees[i].salary);
}
// 释放内存
free(empArray);
return 0;
}
```
在这个程序中,用户会被提示输入员工数量和他们的姓名以及工资。输入的数据会按照工资进行降序排序,最后再显示出来。记得运行此程序前,需要链接标准库`math.h`,因为`qsort`函数来自那里。
阅读全文