如何在C++的switch case中使用sqrt()函数?求代码优化建议
关于在简易计算器中使用sqrt()及代码优化的建议
一、在switch case中使用sqrt()函数的方法
sqrt()是计算单个数字平方根的函数,不需要两个操作数,所以需要调整输入逻辑,根据运算符决定是否需要第二个数字。具体实现如下:
- 新增运算符(比如
s)代表开平方操作; - 先获取用户输入的运算符,再根据运算符类型决定输入1个还是2个数字;
- 在switch中新增对应case分支调用
sqrt(),同时增加负数开平方的错误提示。
核心逻辑示例:
cout << "请输入运算符(+、-、*、/、s:开平方):"; cin >> chart; if (chart != 's') { cout << "\n\t请输入第一个数字:\n"; cin >> a; cout << "\n\t请输入第二个数字:\n"; cin >> b; } else { cout << "\n\t请输入要开平方的数字:\n"; cin >> a; } switch (chart) { // 原有加减乘除分支... case 's': if (a < 0) { cout << "\n\t负数无法开平方\n"; } else { cout << "\n\t" << sqrt(a) << "\n"; } break; // default分支... }
二、代码优化建议
- 精简无用变量:代码中
y,z,x从未使用,直接删除,仅保留a,b,chart即可。 - 规范代码格式:统一缩进(比如每个代码块缩进4个空格),去掉不必要的空格(比如
using namespace std;前的空格),让代码结构更清晰。 - 删除冗余代码:加法分支中的
a+b;是无效语句,既无赋值也无输出,直接删除。 - 处理除法边界:当除数
b为0时会触发运行错误,需在除法分支增加判断:case '/': if (b == 0) { cout << "\n\t除数不能为0\n"; } else { cout << "\n\t" << a / b << "\n"; } break; - 优化输入提示:明确告知用户支持的运算符,根据不同操作给出对应提示(比如开平方时提示输入单个数字),提升用户体验。
- 避免滥用
using namespace std;:初学者可暂时使用,但建议逐步习惯std::cout、std::cin的写法,避免潜在命名冲突。 - 简化返回值:C++11及以后标准中,
main函数默认返回0,可省略return 0;,保留也可保证兼容性。
优化后的完整代码
#include <iostream> #include <cmath> int main() { float a, b; char op; std::cout << "请输入运算符(+、-、*、/、s:开平方):"; std::cin >> op; if (op != 's') { std::cout << "\n\t请输入第一个数字:\n"; std::cin >> a; std::cout << "\n\t请输入第二个数字:\n"; std::cin >> b; } else { std::cout << "\n\t请输入要开平方的数字:\n"; std::cin >> a; } switch (op) { case '+': std::cout << "\n\t" << a + b << "\n"; break; case '-': std::cout << "\n\t" << a - b << "\n"; break; case '*': std::cout << "\n\t" << a * b << "\n"; break; case '/': if (b == 0) { std::cout << "\n\t除数不能为0\n"; } else { std::cout << "\n\t" << a / b << "\n"; } break; case 's': if (a < 0) { std::cout << "\n\t负数无法开平方\n"; } else { std::cout << "\n\t" << std::sqrt(a) << "\n"; } break; default: std::cout << "\n\t不支持该运算符\n"; break; } return 0; }
内容的提问来源于stack exchange,提问作者Fakhar Haider
相关产品推荐
相关产品推荐

