在这个问题中,需要计算参数的正弦,并且禁止使用 sin 函数,即我们使用泰勒级数。签名:第一行包含一个整数 N - 您要为其计算正弦的参数数量 (1<=N<=10^5)。然后有 N 行,每行一个实数 X。每个数字都是要计算其正弦的数字。所有 X 数字的绝对值不超过 1(以弧度表示)。您需要输出 N 行,每行一个实数,它等于输入数据中相应参数的 sin X。建议以“%0.15lf”格式输出数字,以便显示小数点后 15 位。每个答案的误差不应超过 10^12。这是我的程序,但无论更改多少,它都无法通过测试系统。
#include<stdio.h>
int main(){
int N;
double k;
double s;
int n;
n=1;
k=x;
s=0;
scanf("%d", &N);
for(int i=0; i<N; i++){
scanf("%d\n", &k);
while(fabs(k)>eps){
s+=k;
n++;
k*=-x*x/(2.*n-1.0)/(2.0*n-2.0);
printf("%0.15lf", s);
}
}
}
upd:这是我的程序的新版本,但现在它只是零,每个参数 N 次......
#include<stdio.h>
#include<math.h>
#define eps 0.000001
double Sin(double x){
double d, s;
int n;
s=d=x;
n=1;
while(fabs(d)>eps){
d *= n*n;
d *= x*x;
+n;
d /= n;
++n;
d /= n;
s+=d;
}
return s;
}
int main(){
int N;
double x, h;
scanf("%d", &N);
for(int i=0; i<N; i++){
scanf("%d\n", &x);
printf("%0.15lf\n", Sin(x));
}
}
upd 2.0:我真诚地尝试,但我的程序不理解它:) 现在我的类型在主要部分和函数中不匹配。总的来说,直觉表明系统不会接受这样的程序。有没有接近真相的地方?
#include<stdio.h>
#include<math.h>
#define eps 0.000000000001
double Sin(double x, N){
double d, s;
int n;
s=d=x;
if(fabs(d)>eps){
for(n=1; n<=N; n++){
s+=d;
d *= (-1)*x*x/(2*n)/(2*n+1);
}
}
return s;
}
int main(){
int N;
double x;
scanf("%d", &N);
for(int i=0; i<N; i++){
scanf("%d\n", &x);
printf("%0.15lf\n", Sin(x, N));
}
}
upd 3.0:另一个更新 :) 再一次,不是很成功。所有警告和错误消息都消失了,但现在输入的每个参数都有一个不正确的响应。虽然公式是正确的。也许循环中有错误?
#include<stdio.h>
#include<math.h>
#define eps 0.000000000001
double Sin(double x){
double d, s;
int n, N;
scanf("%d", &N);
s=d=x;
if(fabs(d)>eps){
for(n=1; n<=N; n++){
s+=d;
d *= (-1)*x*x/(2*n)/(2*n+1);
}
}
return s;
}
int main(){
int N;
double x;
for(int i=0; i<N; i++){
scanf("%lf\n", &x);
printf("%0.15lf\n", Sin(x));
}
}
1 个回答