给定n个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。 输入格式: 输入在一行中给出正整数n。随后n行,每行给出一位职员的信息,格式为“姓名 基本工资 浮动工资 支出”,中间以空格分隔。其中“姓名”为长度小于10的不包含空白字符的非空字符串,其他输入、输出保证在单精度范围内。
时间: 2023-05-31 19:21:04 浏览: 1294
计算员工工资
### 回答1:
题目描述:
给定n个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。
输入格式:
输入在一行中给出正整数n。随后n行,每行给出一位职员的信息,格式为“姓名 基本工资 浮动工资 支出”,中间以空格分隔。其中“姓名”为长度小于10的不包含空白字符的非空字符串,其他输入、输出保证在单精度范围内。
解题思路:
题目要求我们输入n个职员的信息,包括姓名、基本工资、浮动工资和支出,然后计算每个职员的实发工资,最后输出每个职员的姓名和实发工资。
我们可以使用一个结构体来存储每个职员的信息,然后使用一个循环来输入每个职员的信息,并计算实发工资,最后输出每个职员的姓名和实发工资。
代码实现:
### 回答2:
这道题目是一道基础的输入输出练习题目。根据题目的要求,我们需要依次读入n个职员的信息,然后计算出每个职员的实发工资,最后输出职员的姓名和实发工资。
我们可以通过数组来存储职员的信息,然后依次遍历数组,计算每个职员的实发工资,输出结果即可。
具体步骤如下:
1. 读入正整数n表示职员的数量。
2. 定义一个结构体Employee来存储每个职员的信息,包括姓名、基本工资、浮动工资和支出。
3. 定义一个Employee类型的数组emps,用来存放n个职员的信息。通过for循环遍历数组,依次读入每个职员的信息。
4. 在循环中,对于每个职员,计算出其实发工资,并将结果存放在结构体的实发工资字段中。
5. 最后再次遍历数组,输出每个职员的姓名和实发工资。
下面是一份C++程序,实现了上述算法过程。
```cpp
#include <iostream>
#include <string>
using namespace std;
struct Employee {
string name;
float basic_salary;
float float_salary;
float expense;
float real_salary;
};
int main() {
int n;
cin >> n;
Employee emps[n];
for (int i = 0; i < n; i++) {
cin >> emps[i].name >> emps[i].basic_salary >> emps[i].float_salary >> emps[i].expense;
emps[i].real_salary = emps[i].basic_salary + emps[i].float_salary - emps[i].expense;
}
for (int i = 0; i < n; i++) {
cout << emps[i].name << " " << emps[i].real_salary << endl;
}
return 0;
}
```
在程序中,我们首先读入正整数n,然后定义了一个长度为n的Employee类型的数组emps。在for循环中,依次读入每个职员的信息,并计算实发工资。最后再次遍历数组,输出每个职员的姓名和实发工资。
需要注意的是,为了避免精度问题,我们在存储浮点数时使用了float类型,而在计算实发工资时,需要将三个浮点数相加后再减去支出。这样做可以避免浮点数的精度丢失和舍入误差,得到正确的计算结果。
总之,这道题目需要注意精度问题,需要谨慎选择数据类型和计算方式,才能得到正确结果。
### 回答3:
解题思路:
根据题意,需要读入n个职员的信息,计算实发工资后按顺序输出每位职员的姓名和实发工资。因此可以先定义一个结构体,用来存储单个职员的信息,包括姓名、基本工资、浮动工资和支出。然后定义一个数组,用来存储所有职员的信息。接着依次读入每个职员的信息,计算实发工资并存储到数组中。最后按顺序输出每位职员的姓名和实发工资。
代码实现:
#include <stdio.h>
#include <string.h>
#define MAX_N 1000 // 最大职员数目
// 定义职员信息结构体
struct Employee {
char name[10]; // 姓名
float baseSalary; // 基本工资
float floatSalary; // 浮动工资
float expense; // 支出
float realSalary; // 实发工资
};
int main() {
int n;
int i, j;
struct Employee employees[MAX_N];
scanf("%d", &n);
for (i = 0; i < n; i++) {
// 逐个读入职员信息
scanf("%s%f%f%f", employees[i].name, &employees[i].baseSalary, &employees[i].floatSalary, &employees[i].expense);
// 计算实发工资
employees[i].realSalary = employees[i].baseSalary + employees[i].floatSalary - employees[i].expense;
}
// 排序
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (strcmp(employees[j].name, employees[j + 1].name) > 0) {
struct Employee tmp = employees[j];
employees[j] = employees[j + 1];
employees[j + 1] = tmp;
}
}
}
// 输出结果
for (i = 0; i < n; i++) {
printf("%s %.0f\n", employees[i].name, employees[i].realSalary);
}
return 0;
}
思路解释:
1. 定义结构体:结构体中需要包括姓名、基本工资、浮动工资和支出等信息。
2. 读入信息:先读入职员数目n,然后依次读入n个职员的信息,存储到数组中。
3. 计算实发工资:对于每个职员,需要计算实发工资,并存储到结构体中。
4. 排序:按照姓名的字典序排序,可以使用strcmp函数进行比较。
5. 输出:最后按顺序输出每个职员的姓名和实发工资。
注意事项:
1. 结构体中浮点型数据建议使用float类型,避免出现精度误差。
2. 使用scanf函数时,需要注意输入格式,例如上述代码中需要用%s读入字符串,用%f读入浮点数。
3. 排序时需要使用strcmp函数,需要包含string.h头文件。
阅读全文