如何在C++中计算角度制的sin、cos、tan值?开发科学计算器遇问题
问题分析与解决办法
嘿,这问题其实挺常见的,我刚学C++写计算器的时候也踩过一模一样的坑!
核心问题:搞反了正三角函数的转换方向
math.h里的sin()、cos()、tan这几个正三角函数,要求传入的参数必须是弧度值,但你应该是给程序输入了角度值对吧?你现在的代码是把函数返回的结果(本来就是三角函数的比值,根本不是弧度!)乘以180.0/PI,这完全搞错了逻辑顺序。
而反三角函数asin()、acos()、atan()的逻辑是对的:它们输入的是三角函数比值,输出的是弧度制的角度,所以你把输出值转成角度制的操作*180.0/PI完全正确,这就是为什么反三角部分能正常工作。
修正后的代码示例
首先要确保你正确定义了PI,比如在代码开头加上:
#define PI 3.14159265358979323846 // 或者有些编译器支持直接用M_PI,不过需要先定义#define _USE_MATH_DEFINES再包含math.h
然后把正三角函数的代码改成这样:
case 7: cout<<"Enter the number : "; cin>>a; cout<<endl; cout<<"Sin = "<<sin(a * PI / 180.0) <<endl; break; case 8: cout<<"Enter the number : "; cin>>a; cout<<endl; cout<<"Cos = "<<cos(a * PI / 180.0) <<endl; break; case 9: cout<<"Enter the number : "; cin>>a; cout<<endl; cout<<"Tan = "<<tan(a * PI / 180.0) <<endl; break;
总结一下转换逻辑
- 正三角函数(sin/cos/tan):用户输入角度 → 先转成弧度传给函数:
角度值 * PI / 180,函数返回的就是该角度对应的三角函数比值(无需再转角度) - 反三角函数(asin/acos/atan):用户输入比值 → 函数返回弧度制角度 → 转成角度制输出:
返回值 * 180 / PI
内容的提问来源于stack exchange,提问作者Zain Abedin




