题目

读入两个整数 a、b 和一个字符运算符(+、-、*、/),输出运算结果;除法时若 b 为 0 则提示错误。

输入格式:一行输入两个整数和一个字符运算符(+、-、*、/),以空格分隔。

输出格式:输出一个整数表示运算结果;若遇到除以 0 或非法字符,输出对应提示信息并换行。

数据范围与约定:-105 ≤ a, b ≤ 105。

思路与算法

1. 分支结构选型
单字符选择场景适合使用 switch(op) 语句,底层常被优化为跳转表;各个 case 块末尾必须加上 break 避免穿透执行。

2. 格式化读入字符
使用 scanf("%d %d %c", &a, &b, &op) 时,格式串中的空格会自动跳过数字与运算符之间的空白字符(空格、制表符、换行符),确保正确读取运算符。

3. 除法与异常防御
遇到除法 / 时提前判断 b != 0;default 分支统一兜底未知运算符。

完整程序

#include <stdio.h>

int main(void)
{
    int a, b;
    char op;

    // 格式串中的空格会自动跳过数字与运算符之间的空白字符(空格、换行符)
    if (scanf("%d %d %c", &a, &b, &op) != 3) {
        return 1;
    }
    switch (op) {
    case '+':
        printf("%d\n", a + b);
        break;
    case '-':
        printf("%d\n", a - b);
        break;
    case '*':
        printf("%d\n", a * b);
        break;
    case '/':
        // 除法特判:除数不能为 0,防止除零崩溃
        if (b != 0) {
            printf("%d\n", a / b);
        } else {
            printf("除数为 0\n");
        }
        break;
    default:
        printf("未知运算符\n");
        break;
    }
    return 0;
}

运行示例

输入:

10 3 *

输出:

30

其它写法

下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。

if-else 代替 switch

程序:

#include <stdio.h>

int main(void)
{
    int a, b;
    char op;
    if (scanf("%d %d %c", &a, &b, &op) != 3) {
        return 1;
    }
    if (op == '+') {
        printf("%d\n", a + b);
    } else if (op == '-') {
        printf("%d\n", a - b);
    } else if (op == '*') {
        printf("%d\n", a * b);
    } else if (op == '/') {
        if (b != 0) {
            printf("%d\n", a / b);
        } else {
            printf("除数为 0\n");
        }
    } else {
        printf("未知运算符\n");
    }
    return 0;
}

输入:

10 3 *

输出:

30