7-12 两个数的简单计算器 (10 分) 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。

输入格式:

输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。

输出格式:

当运算符为+、-、*、/、%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR。

输入样例1:

-7 / 2
输出样例1:

-3
输入样例2:

3 & 6
输出样例2:

ERROR

# include <stdio.h>
int main(void) {
    int a, b;
    char operate;
    scanf("%d %c %d", &a, &operate, &b);
    switch (operate) {
        case '+' :
            printf("%d", a+b); break;
        case '-' :
            printf("%d", a-b); break;
        case '*' :
            printf("%d", a*b); break;
        case '/':
            printf("%d", a/b); break;
        case '%':
            printf("%d", a%b); break;
        default :
            printf("ERROR");
    }

    return 0;
}
<think>好的,用户想用Shell脚本创建一个简易计算器,能够接收个数一个运算符,然后输出结果。我需要根据提供的引用内容来整理步骤。 首先,引用3提到使用read命令读取用户输入的数字运算符,并且有超时设置。可能需要三个read语句别获取数字1、运算符数字2。然后,需要验证输入是否有效,比如检查是否是数字,运算符是否合法。 引用4提到用grep来检查数字的有效性,比如用正则表达式匹配数字的正负整数。可能需要将数字通过echo输出并用grep -q来验证是否符合模式。如果符合,提示错误并退出。 引用2展示了如何执行运算,使用$(())来进行算术运算,但要注意运算符可能需要检查是否在支持的列表中,比如。此外,法可能需要处理零错误,以及整数法的结果。 接下来,步骤应该是: 1. 读取输入:三个变量num1, op, num22. 验证输入是否为数字,这里可以用正则表达式,例如^[-]?[0-9]+$,允许可能的负号。 3. 检查运算符是否在支持的范围,比如+、-、*、/。 4. 对于法,检查数是否为零,避免错误。 5. 执行运算输出结果,注意法符号可能需要转义,者使用exprbc处理浮点数,但用户可能只需要整数运算根据引用2的代码示例,直接使用$(($num1$op$num2))可能会有问题,特别是法符号*在shell中需要转义者用引号包裹。可能需要根据运算符调整表达式,比如将*替换为\*。 另外,引用1提到要确保用户输入个参数,但这里的情况是三次输入,所以可能需要别检查每个输入是否为空,是否为有效数字运算符。 然后,将这些步骤整合成一个脚本,添错误处理,比如输入非数字时提示,运算符支持时提示,数为零时提示,并退出脚本。 可能还需要考虑浮点数的情况,但根据引用中的例子,似乎都是整数处理,使用$(())可能只支持整数运算。如果用户需要小数,可能需要用到bc命令,比如echo "scale=2; $num1 $op $num2" | bc,但需要调整输入的验证部根据用户提供的引用内容,可能只需处理整数,所以保持简单。 现在,把这些思考整理成一个清晰的步骤,并写出脚本示例,同时注意引用对应的来源。</think>### 步实现Shell脚本计算器 #### 1. 读取用户输入 使用`read`命令别获取用户输入个数运算符,并设置超时限制[^3]: ```bash read -p "请输入一个数字:" num1 read -p "请输入运算符(+ - * /):" op read -p "请输入第二个数字:" num2 ``` #### 2. 验证输入合法性 - **检查是否为数字**:通过正则表达式`^[-]?[0-9]+$`验证输入是否为整数(允许正负数)[^4]: ```bash if ! echo "$num1" | grep -qE '^[-]?[0-9]+$'; then echo "错误:第一个输入是有效数字" exit 1 fi if ! echo "$num2" | grep -qE '^[-]?[0-9]+$'; then echo "错误:第二个输入是有效数字" exit 1 fi ``` - **检查运算符合法性**:确保运算符属于`+ - * /`中的一种: ```bash if [[ "$op" != "+" && "$op" != "-" && "$op" != "*" && "$op" != "/" ]]; then echo "错误:无效运算符" exit 1 fi ``` #### 3. 处理零错误 当运算符法时,检查第二个数字是否为0[^2]: ```bash if [[ "$op" == "/" && "$num2" -eq 0 ]]; then echo "错误:能为0" exit 1 fi ``` #### 4. 执行运算输出结果 通过`$(())`执行算术运算,注意法符号需转义为`\*`[^2]: ```bash result=$((num1 $op num2)) echo "运算结果:$num1 $op $num2 = $result" ``` #### 完整脚本示例 ```bash #!/bin/bash read -p "请输入一个数字:" num1 read -p "请输入运算符(+ - * /):" op read -p "请输入第二个数字:" num2 # 验证数字 if ! echo "$num1" | grep -qE '^[-]?[0-9]+$'; then echo "错误:第一个输入是有效数字" exit 1 fi if ! echo "$num2" | grep -qE '^[-]?[0-9]+$'; then echo "错误:第二个输入是有效数字" exit 1 fi # 验证运算符 if [[ "$op" != "+" && "$op" != "-" && "$op" != "*" && "$op" != "/" ]]; then echo "错误:无效运算符" exit 1 fi # 处理零错误 if [[ "$op" == "/" && "$num2" -eq 0 ]]; then echo "错误:能为0" exit 1 fi # 计算并输出结果 result=$((num1 $op num2)) echo "运算结果:$num1 $op $num2 = $result" ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值