定义一个包含5个教师成员的结构体数组,教师信息包括职工号、姓名和工资。要求从键盘输入所有教师的信息,并设计一个sort函数实现结构体数组按教师工资由少到多排序。要有input函数和output函数。
时间: 2023-09-12 18:05:01 浏览: 243
结构体-二维坐标-第10章 复杂数据类型
### 回答1:
下面是一个示例代码实现:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct Teacher {
int id;
string name;
double salary;
};
void input(Teacher *arr, int n) {
for (int i = 0; i < n; i++) {
cout << "请输入教师信息(职工号、姓名、工资):" << endl;
cin >> arr[i].id >> arr[i].name >> arr[i].salary;
}
}
void output(Teacher *arr, int n) {
for (int i = 0; i < n; i++) {
cout << "教师信息:" << arr[i].id << " " << arr[i].name << " " << arr[i].salary << endl;
}
}
bool cmp(Teacher x, Teacher y) {
return x.salary < y.salary;
}
void sort(Teacher *arr, int n) {
std::sort(arr, arr + n, cmp);
}
int main() {
const int n = 5;
Teacher arr[n];
input(arr, n);
sort(arr, n);
output(arr, n);
return 0;
}
```
代码中定义了一个结构体 `Teacher`,包括职工号、姓名和工资。接着定义了三个函数:`input`、`output` 和 `sort`。`input` 函数用于从键盘输入教师信息,`output` 函数用于输出所有教师的信息,`sort` 函数用于按照工资从少到多排序。
在 `main` 函数中,先定义了一个包含 5 个教师成员的结构体数组 `arr`,然后调用 `input` 函数从键盘输入所有教师的信息,接着调用 `sort` 函数实现结构体数组按教师工资由少到多排序,最后调用 `output` 函数输出排序后的教师信息。
### 回答2:
定义一个包含5个教师成员的结构体数组如下:
```
struct Teacher {
char id[20];
char name[20];
float salary;
};
```
我们可以编写一个input函数用于从键盘输入教师信息:
```cpp
void input(struct Teacher teachers[]) {
for (int i = 0; i < 5; i++) {
printf("请输入第%d位教师的职工号、姓名和工资:\n", i+1);
scanf("%s %s %f", teachers[i].id, teachers[i].name, &teachers[i].salary);
}
}
```
接下来编写一个sort函数来实现结构体数组按教师工资由少到多排序,我们可以使用冒泡排序法来实现:
```cpp
void sort(struct Teacher teachers[]) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4-i; j++) {
if (teachers[j].salary > teachers[j+1].salary) {
struct Teacher temp = teachers[j];
teachers[j] = teachers[j+1];
teachers[j+1] = temp;
}
}
}
}
```
最后,编写output函数来输出排序后的教师信息:
```cpp
void output(struct Teacher teachers[]) {
for (int i = 0; i < 5; i++) {
printf("教师%d:职工号:%s,姓名:%s,工资:%.2f\n", i+1, teachers[i].id, teachers[i].name, teachers[i].salary);
}
}
```
完整代码如下:
```cpp
#include <stdio.h>
struct Teacher {
char id[20];
char name[20];
float salary;
};
void input(struct Teacher teachers[]) {
for (int i = 0; i < 5; i++) {
printf("请输入第%d位教师的职工号、姓名和工资:\n", i+1);
scanf("%s %s %f", teachers[i].id, teachers[i].name, &teachers[i].salary);
}
}
void sort(struct Teacher teachers[]) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4-i; j++) {
if (teachers[j].salary > teachers[j+1].salary) {
struct Teacher temp = teachers[j];
teachers[j] = teachers[j+1];
teachers[j+1] = temp;
}
}
}
}
void output(struct Teacher teachers[]) {
for (int i = 0; i < 5; i++) {
printf("教师%d:职工号:%s,姓名:%s,工资:%.2f\n", i+1, teachers[i].id, teachers[i].name, teachers[i].salary);
}
}
int main() {
struct Teacher teachers[5];
input(teachers);
sort(teachers);
output(teachers);
return 0;
}
```
通过以上代码,可以实现从键盘输入教师信息,然后按教师工资由少到多排序,最后输出排序后的教师信息。
### 回答3:
定义一个包含5个教师成员的结构体数组teacher,其中教师信息包括职工号、姓名和工资:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义教师结构体
typedef struct teacher{
int id; // 职工号
char name[20]; // 姓名
float salary; // 工资
}Teacher;
// 输入函数,从键盘输入所有教师的信息
void input(Teacher *teacher){
for(int i=0; i<5; i++){
printf("请输入第%d个教师的信息:\n",i+1);
printf("职工号:");
scanf("%d", &(teacher[i].id));
printf("姓名:");
scanf("%s", teacher[i].name);
printf("工资:");
scanf("%f", &(teacher[i].salary));
}
}
// 输出函数,输出所有教师的信息
void output(Teacher *teacher){
for(int i=0; i<5; i++){
printf("第%d个教师的信息:\n",i+1);
printf("职工号:%d\n", teacher[i].id);
printf("姓名:%s\n", teacher[i].name);
printf("工资:%.2f\n", teacher[i].salary);
}
}
// 排序函数,按教师工资由少到多排序
void sort(Teacher *teacher){
// 冒泡排序
for(int i=0; i<4; i++){
for(int j=0; j<4-i; j++){
if(teacher[j].salary > teacher[j+1].salary){
// 交换位置
Teacher tmp = teacher[j];
teacher[j] = teacher[j+1];
teacher[j+1] = tmp;
}
}
}
}
int main(){
Teacher teacher[5];
// 输入教师信息
input(teacher);
printf("排序前的教师信息:\n");
// 输出排序前的教师信息
output(teacher);
// 对教师信息进行排序
sort(teacher);
printf("排序后的教师信息:\n");
// 输出排序后的教师信息
output(teacher);
return 0;
}
```
运行以上代码,从键盘依次输入每个教师的职工号、姓名和工资,然后通过冒泡排序实现结构体数组按教师工资由少到多排序。最后输出排序前和排序后的教师信息。
阅读全文