2.编写程序,从标准输入分别读取两个整型操作数和一个运算符,整型操作数范围是0-2^32-1,运算符包括 + - * /,使用函数指针、结构体数组和for循环实现,计算过程中,通过try catch语句对加和乘运算进行溢出保护,对除法运算进行除零保护,并输出错误原因。
时间: 2024-09-10 22:08:56 浏览: 67
下面是一个使用函数指针、结构体数组和for循环实现的简单示例,它会从标准输入读取两个整数操作数和一个运算符,然后根据运算符执行相应的运算。同时使用了异常处理(try-catch)来处理溢出、除零等问题。
```cpp
#include <iostream>
#include <limits>
// 定义运算符和对应函数指针的结构体
struct Operation {
char op;
int (*func)(int, int);
};
// 函数指针对应的运算函数
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int multiply(int a, int b) {
try {
return static_cast<int>(a * b); // 使用static_cast防止溢出
} catch (const std::overflow_error& e) {
throw std::runtime_error("Overflow occurred during multiplication.");
}
}
int divide(int a, int b) {
if (b == 0) {
throw std::invalid_argument("Division by zero is not allowed.");
}
return a / b;
}
// 主函数
int main() {
const Operation operations[] = {
{'+', &add},
{'-', &subtract},
{'*', &multiply},
{'/', ÷}
};
int num1, num2;
char op;
std::cout << "Enter the first number: ";
std::cin >> num1;
std::cout << "Enter the second number: ";
std::cin >> num2;
std::cout << "Enter an operator (+, -, *, /): ";
std::cin >> op;
for (Operation o : operations) {
if (o.op == op) {
try {
int result = o.func(num1, num2);
std::cout << "Result of " << num1 << " " << o.op << " " << num2 << " is: " << result << "\n";
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << "\n";
}
break; // 执行一次运算就退出循环
}
}
return 0;
}
```
阅读全文