问题描述:
下面代码是设计出的根据员工考核发工资的代码,代码和结果如下,分析一下代码中的循环结构,以及循环结构中break和continue的作用是什么呢?
// Created by 黑马程序员.
#include "iostream"
#include "random"
using namespace std;
/**
* 某公司,账户余额有1W元,给20名员工发工资。
* 员工编号从1到20,从编号1开始,依次领取工资,每人可领取1000元
* 领工资时,财务判断员工的绩效分(1-10)(随机生成),如果低于5,不发工资,换下一位
* 如果工资发完了,结束发工资。
*
* 提示:
* 使用循环对员工依次发放工资
* continue用于跳过员工,break直接结束发工资
*/
int get_random_num(int min, int max)
{
// 创建一个随机数生成器
random_device rd;
mt19937 gen(rd());
// 定义一个均匀分布的整数范围
uniform_int_distribution<> dis(min, max);
// 生成一个随机数并输出
int random_number = dis(gen);
return random_number;
}
int main()
{
// 1. 定义一个变量,记录余额
int money = 10000;
// 2. for循环进入发工资流程
for (int id = 1; id <= 20; id++)
{
// 如果工资发完了,结束发工资
if (money <= 0)
{
cout << "工资发放完成,下一个月在来。" << endl;
break;
}
// 随机得到绩效分
int score = get_random_num(1, 10);
if (score < 5)
{
cout << "不好意思,员工:" << id << ",绩效分:" << score << ",小于5分,不发工资,下一位" << endl;
continue;
}
// 开始发工资了
money -= 1000;
cout << "员工:" << id << "领取工资1000,当前余额剩余:" << money << "元" << endl;
}
return 0;
}
D:\CLion_code\cmake-build-debug\CLion_code.exe
员工:1领取工资1000,当前余额剩余:9000元
不好意思,员工:2,绩效分:1,小于5分,不发工资,下一位
不好意思,员工:3,绩效分:4,小于5分,不发工资,下一位
员工:4领取工资1000,当前余额剩余:8000元
员工:5领取工资1000,当前余额剩余:7000元
员工:6领取工资1000,当前余额剩余:6000元
不好意思,员工:7,绩效分:1,小于5分,不发工资,下一位
不好意思,员工:8,绩效分:4,小于5分,不发工资,下一位
员工:9领取工资1000,当前余额剩余:5000元
不好意思,员工:10,绩效分:2,小于5分,不发工资,下一位
员工:11领取工资1000,当前余额剩余:4000元
员工:12领取工资1000,当前余额剩余:3000元
员工:13领取工资1000,当前余额剩余:2000元
员工:14领取工资1000,当前余额剩余:1000元
员工:15领取工资1000,当前余额剩余:0元
工资发放完成,下一个月在来。
Process finished with exit code 0
问题解答:
代码分析
这段代码模拟了一个公司发放员工工资的过程,根据员工的绩效分数决定是否发放工资。程序使用了一个for
循环来遍历每个员工,判断他们是否能领到工资,并通过continue
和break
控制循环的执行。
循环结构
-
for
循环:- 该循环从员工编号1开始,依次递增到编号20。
- 每次循环代表给一个员工发工资的过程。
- 如果工资余额为0,循环终止,停止发放工资。
-
continue
语句:- 当员工的绩效分数低于5时,
continue
语句被触发。 continue
会立即跳过当前循环的剩余部分,直接进入下一次循环(即跳过发工资的步骤),使得该员工未能领取工资。
- 当员工的绩效分数低于5时,
-
break
语句:- 当公司账户的余额不足以发放下一笔工资时(即余额小于等于0),
break
语句被触发。 break
会立即终止整个for
循环,结束发放工资的过程。
- 当公司账户的余额不足以发放下一笔工资时(即余额小于等于0),
代码执行流程
-
初始化余额:
- 初始余额为10000元。
-
开始循环发放工资:
- 从员工1开始,逐个检查每个员工的绩效分数。
- 如果员工绩效分数小于5,则输出一条信息表示该员工未能领取工资,并直接进入下一位员工的考核 (
continue
作用)。 - 如果员工绩效分数大于或等于5,则扣除1000元工资,并输出当前员工领取工资的信息。
- 如果在发放过程中余额降至0元或以下,输出结束发工资的消息,并立即停止发放 (
break
作用)。
输出分析
根据代码的执行,程序输出了员工编号和他们的绩效分数,并根据绩效分数判断是否发放工资。以下是代码的一部分输出结果分析:
- 员工1:绩效分数满足条件,成功领取工资,余额减少到9000元。
- 员工2、3:绩效分数不符合条件,未能领取工资。
- 员工4到15:符合条件的员工依次领取工资,直到余额为0。
当余额为0时,程序输出“工资发放完成,下一个月再来。”并结束程序。
break
和continue
的作用
break
:用于立即终止循环,停止发放工资。这在余额不足的情况下发挥作用,防止继续执行不必要的操作。continue
:用于跳过当前循环的剩余部分,直接进入下一次循环。这里用于跳过不符合绩效分数要求的员工,使他们无法领取工资。
总结
这段代码通过for
循环、break
和continue
语句有效地控制了员工工资的发放过程,保证了根据绩效分数发放工资,并在余额不足时及时终止发放。