/*
purpose:sin和cos函数的实现
author:Zhang can
created:2011/10/27 15:19:15
*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main()
{
int nfun=1;
double dsin=0.0,dcos=0.0,dtemp=1.0,darc=0.0; /* 变量声明初始化 */
int k=0;
double pi=3.1415926,dmin=0.000001,ddegree=0.0;
double dloper,droper,dresult;
while(nfun!=9)
{
system("cls"); //clrscr();
printf(" ----------------------------\n"); /* 构造功能菜单 */
printf(" 加法运算---------->1\n");
printf(" 减法运算---------->2\n");
printf(" 除法运算---------->3\n");
printf(" 乘法运算---------->4\n");
printf(" sinx运算---------->5\n");
printf(" cosx运算---------->6\n");
printf(" 退出-------------->9\n");
printf(" ----------------------------\n");
printf(" 请输入功能选择:"); /* 在屏幕上显示提示信息 */
scanf("%d",&nfun);
switch(nfun)
{
case 1: /* 加法运算过程 */
printf(" 请输入两个操作数:");
scanf("%lf%lf",&dloper,&droper);
dresult=dloper+droper;
printf(" 计算结果为:%8.3lf\n",dresult);
printf(" 按任意键返回菜单.\n");
getch();
break;
case 2: /* 减法运算过程 */
printf(" 请输入两个操作数:");
scanf("%lf%lf",&dloper,&droper);
dresult=dloper-droper;
printf(" 计算结果为:%8.3lf\n",dresult);
printf(" 按任意键返回菜单.\n");
getch();
break;
case 3: /* 除法运算过程 */
printf(" 请输入两个操作数:");
scanf("%lf%lf",&dloper,&droper);
if(droper==0)
{
printf(" 右操作数不能为0\n");
return;
}
else
dresult=dloper/droper;
printf(" 计算结果为:%8.3lf\n",dresult);
printf(" 按任意键返回菜单.\n");
getch();
break;
case 4: /* 乘法运算过程 */
printf(" 请输入两个操作数:");
scanf("%lf%lf",&dloper,&droper);
dresult=dloper*droper;
printf(" 计算结果为:%8.3lf\n",dresult);
printf(" 按任意键返回菜单.\n");
getch();
break;
case 5: /* sinx运算过程 */
printf(" 请输入弧度:");
scanf("%lf",&ddegree);
dtemp=ddegree*pi/180; /* 进行角度度量转换 */
darc=ddegree*pi/180;
while(fabs(dtemp)>dmin) /* 特勒展开项是否达到精度 */
{
dsin+=dtemp; /* sin函数的特勒展开式 */
k+=2; /* 利用前次运算结果计算特勒展开项的值 */
dtemp=(-1)*dtemp*darc*darc/((k+1)*k);
}
printf(" sin(%f)=%lf\n",ddegree,dsin);
printf(" 按任意键返回菜单.\n");
getch();
break;
case 6: /* cosx运算过程 */
printf(" 请输入弧度:");
scanf("%lf",&ddegree); /* 输入计算的弧度数据 */
darc=ddegree*pi/180; /* 进行角度度量转换 */
while(fabs(dtemp)>dmin) /* 特勒展开项是否达到精度 */
{
dcos+=dtemp; /* cos函数的特勒展开式 */
k+=2;
dtemp=(-1)*dtemp*darc*darc/((k-1)*k); /* 利用前次运算结果计算特勒展开项的值 */
}
printf(" cos(%f)=%lf\n",ddegree,dcos);
printf(" 按任意键返回菜单.\n");
getch();
break;
case 9:
break;
default:
printf(" 输入的选项编码错误!按任意键返回菜单.\n");
getch();
}
}
}