P1888 三角函数

本题要求输入一组勾股数a,b,c,输出较小锐角的正弦值,并进行约分。通过选排确定最长边和最短边,利用辗转相除法求最大公因数,最终得到约分后的正弦值。

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

三角函数

题目描述

输入一组勾股数a,b,c(a≠b≠c),用分数格式输出其较小锐角的正弦值。(要求约分。)

输入输出格式

输入格式:

一行,包含三个数,即勾股数a,b,c(无大小顺序)。

输出格式:

一行,包含一个数,即较小锐角的正弦值

输入输出样例

输入样例#1:

3 5 4

输出样例#1:

3/5

说明

数据区间1~10^9
   本题的思路是用选排求出最长边和最短边,再用辗转相除法求出二者的最大公因数,用最大公因数分别除一下就能得出约分后的正弦值了
   为了防止有人不知道三角函数,还是科普一下吧,正弦值(sin)就是最短边除最长边的值。
本题属于养老向的

var
 a:array[0..3]of longint;
 i,j,c,ans:longint;
function chu(x,y:longint):longint;//辗转相除法
begin
 if y=0 then exit(x);
 chu:=chu(y,x mod y);
end;
begin
 for i:=1 to 3 do read(a[i]);
 for i:=1 to 2 do//选排
  for j:=i+1 to 3 do
   if a[i]>a[j] then
    begin
     a[0]:=a[i];
     a[i]:=a[j];
     a[j]:=a[0];
    end;
 c:=chu(a[1],a[3]);
 write(a[1] div c ,'/',a[3] div c);//求出约分后的正弦值
end.
### 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()`来进行运算,并最终显示两种不同方式下所获得的结果以便于观察差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值