张钰康熙王朝董鄂妃:求计算机编程 高手来

来源:百度文库 编辑:高考问答 时间:2024/03/29 20:10:26
这是我门TC考试的一道题请懂的帮我编个程序
题目是:
用下面的公式sin x=(x/1)- (x的三次方/3的阶乘)+(x的5次方/5的阶乘)-(x的7次方/7的阶乘)+…………+[(-1)的n-1次方]*[x的(2n-1)次方/(2n-1)的阶乘]。
题目就是这样了 由于不会打 所以我只有尽可能用语言叙述出来 希望大家能看得懂。
请大家帮我编个TC的程序 要能运算的哦
在这我先谢谢大家了
要是程序编得好我还会追加奖励……
最后的那一项是
+[(-1)的n-1次方]乘以[x的(2n-1)次方/(2n-1)的阶乘]
这项的乘号不太清楚
“/”是除号
这题目是求sin x的近似值 不好意思 忘说了…………

#include <stdio.h>
#include <stdlib.h>
#define MIN 0.00005 /* 设置运算停止条件 */

/*------------------------------------------------------------------------------*/
/* 计算弧度数为angle的角的正弦值第i项 */
/*------------------------------------------------------------------------------*/
float spill(int i,float angle) /* 计算第i项 */
{
int symbol,j;
float temp = angle; /* 临时变量 */

if (i % 2) /* 设置该项的符号 */
symbol = 1;
else
symbol = -1;

if (i == 1) /* 若只需要计算一项,直接返回角度值 */
return (angle);

for (j = 2;j <= i;j++) /* 循环计算一项的值 */
{
temp *= angle * angle / ((2 * j - 2) * (2 * j - 1));
}

temp *= symbol;

return (temp);
}

/*------------------------------------------------------------------------------*/
/* 递归求解sin(angle)的近似值,其中angle表示用户输入的弧度值 */
/*------------------------------------------------------------------------------*/
float f(int i,float angle)
{
float temp; /* 临时变量 */

if (i == 1) /* 递归出口 */
return angle;

temp = spill(i,angle); /* 需要加上的项 */

return (f((i - 1),angle) + temp); /* 递归运算 */
}

/*------------------------------------------------------------------------------*/
/* 计算需要的级数的项数,其中angle表示用户输入的弧度值 */
/*------------------------------------------------------------------------------*/
int loopTime(float angle)
{
int i = 1;
float seed = angle; /* 临时变量 */
while ((seed >= MIN) || (seed <= (-1 * MIN))) /* 循环条件 */
{
i++;
seed *= angle * angle /((2 * i -1) * (2 * i - 2)) * (-1);
}

return i;
}

/*------------------------------------------------------------------------------*/
/* 主程序 */
/*------------------------------------------------------------------------------*/
void main()
{
float x; /* 用来保存用户输入的弧度数 */
int count = 1; /* 用来保存需要递归的次数 */
float sinOfAngle = 0; /* 用来保存最终结果 */

printf("请输入一个浮点数,它代表一个弧度值:");
scanf("%f",&x); /* 用户从键盘输入一个弧度数 */

count = loopTime(x);
sinOfAngle = f(count,x);

printf("sin %f 的近似值为 %f.\n",x,sinOfAngle); /* 在屏幕上打印出最终结果 */
}

我是用VC的,TC没用过,不过我用的C语言,TC应该能通过.
我用VC调试后跟系统给的sin函数所得的值一样.

#define MYFLOAT double//计算使用的变量类型

//功能说明:计算多项式的第n个项.
//参数说明:x:要计算的数 count:n
MYFLOAT getitem( MYFLOAT x , int count )
{
MYFLOAT a = ((count%2)==0) ? -1 : 1; //计算 [(-1)的n-1次方]
count = count * 2 - 1;
MYFLOAT b = x;
MYFLOAT c = 1;
for( int i = 1 ; i < count ; )
{
b *= x;//计算 x的(2n-1)次方
i++;
c *= i;//计算 (2n-1)的阶乘
}
return a*b/c;
}

//功能说明:同系统的sin函数
//参数说明:x:要计算的数
MYFLOAT mysin( MYFLOAT x )
{
MYFLOAT a = 0;
for( int i = 1 ; i < 20 ; i++ )//精确度为20(到底是多少位我也不清楚)
{
a += getitem( x , i );
}
return a;
}

//大致的调用方法
#include <math.h>
void main()
{
MYFLOAT b = sin( (MYFLOAT)2 );
MYFLOAT c = mysin( (MYFLOAT)2 );
}