洛谷 P1888 三角函数(C语言)

该博客介绍了如何使用C语言解决洛谷P1888题,即根据输入的勾股数求解较小锐角的正弦值并以分数形式输出。博主分享了通过‘打擂台’方式确定最小边和最大边,并讨论了如何自己实现约分功能而非直接使用库函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述
输入一组勾股数 a,b,c(a不等于 b不等于 c),用分数格式输出其较小锐角的正弦值。(要求约分。)

输入格式
一行,包含三个正整数,即勾股数 a,b,c(无大小顺序)。

输出格式
一行,包含一个分数,即较小锐角的正弦值

输入输出样例
输入
3 5 4
输出
3/5

个人理解:

  1. 正弦sinx,“大边对大角,小边对小角”,由此可知,找到a,b,c中的min和max即可。
  2. 如何比较大小? 采用“打擂台”的方式
	max=a;//把a的值先赋给max
	if(b>max) max=b;//依次比较,当b或c的值大于max,即大于a时,max的值变化为b或c。
	if(c>max) max=c;
	
	min=c;
### C语言中实现三角函数 在C语言中,可以通过自定义函数来实现常见的三角函数,如正弦(sin)、余弦(cos)等。下面将以`mySin`为例展示如何编写一个近似计算正弦值的程序[^3]。 #### 自定义 `mySin` 函数 为了提高精度并减少误差,在这里采用泰勒级数展开的方式来逼近真实值: \[ \sin(x)=x-\frac{x^{3}}{3!}+\frac{x^{5}}{5!}-\cdots \] ```c #include <stdio.h> #include <math.h> // 计算阶乘辅助函数 long long factorial(int n){ if (n==0 || n==1) return 1; else return n*factorial(n-1); } double mySin(double x, int terms){ // 参数terms表示要使用的项数 double sum=0.0; for(int i=0;i<terms;i++){ sum+=pow(-1,i)*pow(x,(2*i)+1)/factorial((2*i)+1); } return sum; } ``` 此段代码实现了基于泰勒公式的简单版本的`mySin`函数,其中包含了两个部分:一个是用于求解阶乘的帮助函数;另一个则是核心逻辑所在之处——利用循环累加每一项直到指定次数为止。 #### 主函数测试 接下来是在主函数里调用上述方法,并打印出结果以及比较内置的标准库函数的结果: ```c int main(){ double angle; printf("请输入角度(弧度制):%lf\n",angle); scanf("%lf",&angle); double mysin_result=mySin(angle,10); // 使用前10项进行估算 double libsinf_result=sin(angle); printf("使用自制函数得到的结果:%f\n",mysin_result); printf("使用标准库函数得到的结果:%f\n",libsinf_result); return 0; } ``` 这段代码展示了如何接收用户的输入作为参数传递给`mySin()`来进行运算,并最终显示两种不同方式下所获得的结果以便于观察差异。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值