用matlab写下面的题目 某公司员工的工资计算方法如下。 (1)工作时数超过120h者,超过部分加发15%。 (2)工作时数低于60h者,扣掉700元。 (3)其余按每小时84元计发。 试编程按输入的工号和员工的工时数,计算应发工资。
时间: 2023-12-14 19:38:19 浏览: 23
下面是用 MATLAB 写的代码:
```matlab
% 输入工号和工作时数
id = input('请输入员工的工号:');
hours = input('请输入员工的工作时数:');
% 计算应发工资
if hours > 120
salary = 120 * 84 + (hours - 120) * 84 * 1.15;
elseif hours < 60
salary = hours * 84 - 700;
else
salary = hours * 84;
end
% 输出结果
fprintf('员工%s的应发工资为%.2f元。\n', id, salary);
```
运行该程序后,可以输入员工的工号和工作时数,然后程序会根据上述计算方法计算出员工的应发工资并输出。注意,这里假设每小时的工资为 84 元,如果实际情况不是这样,需要修改程序中的相应部分。
相关问题
使用MATLAB,某公司员工的工资计算方法如下。 (1)工作时数超过120h者,超过部分加发15%。 (2)工作时数低于60h者,扣掉700元。 (3)其余按每小时84元计发。 试编程按输入的工号和员工的工时数,计算应发工资。
以下是使用 MATLAB 实现该公司员工工资计算方法的代码:
```matlab
% 输入员工工号和工作时数
employee_id = input('请输入员工工号:');
work_hours = input('请输入员工工作时数:');
% 根据不同情况计算应发工资
if work_hours > 120
salary = 120 * 84 + (work_hours - 120) * 84 * 1.15;
elseif work_hours < 60
salary = work_hours * 84 - 700;
else
salary = work_hours * 84;
end
% 输出结果
fprintf('员工%d的应发工资为%.2f元。\n', employee_id, salary);
```
运行程序后,输入员工工号和工作时数,即可计算出该员工的应发工资。注意,程序中使用了 `fprintf` 函数输出结果,并使用了格式化字符串控制输出结果的格式,其中 `%d` 表示输出整数,`%.2f` 表示输出小数点后两位的浮点数。
CODES SEGMENT ASSUME CS:CODES START: MOV DS,AX MOV AH,00H MOV AL,13H INT 10H MOV DX,40 AGAIN: MOV CX,0 AGAIN_X: PUSH CX PUSH DX CMP CX,80 JB XBELOW SUB CX,80 JMP XSQUARE XBELOW: MOV BX,80 SUB BX,CX MOV CX,BX XSQUARE: MOV AX,CX MUL CX MOV CX,AX AGAIN_Y: POP DX PUSH DX CMP DX,120 JB YBELOW SUB DX,120 JMP YSQUARE YBELOW: MOV BX,120 SUB BX,DX MOV DX,BX YSQUARE: MOV AX,DX MUL DX MOV DX,AX HANDLE: ADD CX,DX MOV BX,CX POP DX POP CX CMP BX,6400 JA LAST MOV AH,0CH MOV AL,3 INT 10H LAST: INC CX CMP CX,160 JB AGAIN_X INC DX CMP DX,310 JB AGAIN MOV AH,4CH INT 21H CODES ENDS END START对以上代码做出注释
下面是对代码的详细注释:
```
CODES SEGMENT
ASSUME CS:CODES
START:
MOV DS,AX ; 将DS寄存器设为AX,AX中保存着程序的段地址
MOV AH,00H ; 将AH寄存器设为0
MOV AL,13H ; 将AL寄存器设为13H,设置视频模式为320x200,16色
INT 10H ; BIOS中断,设置视频模式
MOV DX,40 ; 将DX寄存器设为40H,设置Y轴的起始位置为64
AGAIN:
MOV CX,0 ; 将CX寄存器清零
AGAIN_X:
PUSH CX ; 将CX寄存器的值压入堆栈中,保存当前的X轴位置
PUSH DX ; 将DX寄存器的值压入堆栈中,保存当前的Y轴位置
CMP CX,80 ; 比较CX寄存器的值和80H
JB XBELOW ; 如果CX小于80H,则跳转到XBELOW标签处
SUB CX,80 ; 如果CX大于等于80H,则将CX寄存器的值减去80H
JMP XSQUARE ; 跳转到XSQUARE标签处
XBELOW:
MOV BX,80 ; 如果CX小于80H,则将BX寄存器设为80H
SUB BX,CX ; 计算出需要向左移动的像素数
MOV CX,BX ; 将CX寄存器设为BX寄存器的值
XSQUARE:
MOV AX,CX ; 将AX寄存器设为CX寄存器的值
MUL CX ; 将AX和CX寄存器中的值相乘,结果保存在AX寄存器中
MOV CX,AX ; 将CX寄存器设为AX寄存器中的值
AGAIN_Y:
POP DX ; 弹出堆栈中保存的Y轴位置,恢复之前保存的值
PUSH DX ; 将Y轴位置再次压入堆栈中,保存当前的Y轴位置
CMP DX,120 ; 比较DX寄存器的值和120H
JB YBELOW ; 如果DX小于120H,则跳转到YBELOW标签处
SUB DX,120 ; 如果DX大于等于120H,则将DX寄存器的值减去120H
JMP YSQUARE ; 跳转到YSQUARE标签处
YBELOW:
MOV BX,120 ; 如果DX小于120H,则将BX寄存器设为120H
SUB BX,DX ; 计算出需要向上移动的像素数
MOV DX,BX ; 将DX寄存器设为BX寄存器的值
YSQUARE:
MOV AX,DX ; 将AX寄存器设为DX寄存器的值
MUL DX ; 将AX和DX寄存器中的值相乘,结果保存在AX寄存器中
MOV DX,AX ; 将DX寄存器设为AX寄存器中的值
HANDLE:
ADD CX,DX ; 将CX和DX寄存器中的值相加,得到当前像素的地址
MOV BX,CX ; 将BX寄存器设为当前像素的地址
POP DX ; 弹出堆栈中保存的Y轴位置,恢复之前保存的值
POP CX ; 弹出堆栈中保存的X轴位置,恢复之前保存的值
CMP BX,6400 ; 比较BX寄存器的值和6400H
JA LAST ; 如果BX大于6400H,则跳转到LAST标签处,结束程序
MOV AH,0CH ; 将AH寄存器设为0CH,设置颜色
MOV AL,3 ; 将AL寄存器设为3,设置颜色为红色
INT 10H ; BIOS中断,显示当前像素
JMP HANDLE ; 跳转到HANDLE标签处,绘制下一个像素
LAST:
INC CX ; CX寄存器加1
CMP CX,160 ; 比较CX寄存器的值和160H
JB AGAIN_X ; 如果CX小于160H,则跳转到AGAIN_X处
INC DX ; DX寄存器加1
CMP DX,310 ; 比较DX寄存器的值和310H
JB AGAIN ; 如果DX小于310H,则跳转到AGAIN处
MOV AH,4CH ; 将AH寄存器设为4CH,结束程序
INT 21H ; DOS中断,结束程序
CODES ENDS
END START
```