题目
读入两个整数 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