前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >c/c++ 实现三角函数(不使用库函数) sin/cos/tan/cot

c/c++ 实现三角函数(不使用库函数) sin/cos/tan/cot

作者头像
程序员小涛
发布2020-12-03 12:19:39
发布2020-12-03 12:19:39
4.2K00
代码可运行
举报
文章被收录于专栏:涛的程序人生涛的程序人生
运行总次数:0
代码可运行

c/c++ 实现三角函数(不使用库函数) sin/cos/tan/cot

代码语言:javascript
代码运行次数:0
运行
复制
#include <iostream>
#include <cstdlib>
#include <iomanip>

constexpr auto PI = 3.1415926;

int menu_select() {
    int select;
    std::cout << "-------Welcome to Snow Calculator-------" << std::endl;
    std::cout << "               1. sin x                 " << std::endl;
    std::cout << "               2. cos x                 " << std::endl;
    std::cout << "               3. tan x                 " << std::endl;
    std::cout << "               4. cot x                 " << std::endl;
    std::cout << "               5. Clean screen          " << std::endl;
    std::cout << "               0. to quit               " << std::endl;
    std::cout << "----------------------------------------" << std::endl;
    std::cin >> select;
    return select;
}

double inputtrans(void) {
    double x;

    std::cout << "Please input x: " << std::endl;
    std::cin >> x;
    while (x >= 360.0)
    {
        x -= 360.0;
    }
    return (x * PI / 180.0);
}

double factorial(double n) {
    if (n <= 1) {
        return n;
    }
    else {
        return n * factorial(n - 1);
    }
}

//下面为求绝对值函数
double myabs(double num1)
{
    return((num1 > 0) ? num1 : -num1);
}

//下面为求sin(x)的值
double snowsin(double num2)
{
    int i = 1, negation = 1;//取反
    double sum;
    double index = num2;//指数
    double Factorial = 1;//阶乘
    double TaylorExpansion = num2;//泰勒展开式求和
    do
    {
        Factorial = Factorial * ((__int64)i + 1) * ((__int64)i + 2);//求阶乘
        index *= num2 * num2;//求num2的次方
        negation = -negation;//每次循环取反
        sum = index / Factorial * negation;
        TaylorExpansion += sum;
        i += 2;
    } while (myabs(sum) > 1e-15);
    return(TaylorExpansion);
}

double snowcos(double x) {
    x = (PI / 2) - x;
    return sin(x);
}

double snowtan(double x) {
    return (snowsin(x) / snowcos(x));
}

double snowcot(double x) {
    return (1 / snowtan(x));
}

int main()
{
    double result = 0.0;
    double x = 0.0;
    int menu = menu_select();
    while (menu != 0)
    {
        switch (menu)
        {
        case 1:
            x = inputtrans();
            result = snowsin(x);
            std::cout << std::fixed << std::setprecision(5) << "Result =  " << result << std::endl;
            break;
        case 2:
            x = inputtrans();
            result = snowcos(x);
            std::cout << std::fixed << std::setprecision(5) << "Result =  " << result << std::endl;
            break;
        case 3:
            x = inputtrans();
            result = snowtan(x);
            std::cout << std::fixed << std::setprecision(5) << "Result =  " << result << std::endl;
            break;
        case 4:
            x = inputtrans();
            result = snowcot(x);
            std::cout << std::fixed << std::setprecision(5) << "Result =  " << result << std::endl;
            break;
        case 5:
            system("cls");
            break;
        case 0:
            break;
        default:
            std::cout << "Wrong input, please input again!" << std::endl;
            break;
        }
        if (menu == 0) {
            break;
        }
        menu = menu_select();
    }
    
    std::cout << "Thank you for using!\nPress any key to exit.\n";
    system("pause");
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • c/c++ 实现三角函数(不使用库函数) sin/cos/tan/cot
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档