樓上的我覺(jué)得不妥。這個(gè)
創(chuàng)新互聯(lián)公司制作網(wǎng)站網(wǎng)頁(yè)找三站合一網(wǎng)站制作公司,專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站制作、做網(wǎng)站,網(wǎng)站設(shè)計(jì),企業(yè)網(wǎng)站搭建,網(wǎng)站開(kāi)發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為超過(guò)千家服務(wù),創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)將一如既往的為我們的客戶(hù)提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣服務(wù)!
1、#define PI 3.14 //精度過(guò)于小,改為#define PI 3.14159265359
2、#define cos(x) cos(x/PI*180) //這個(gè)是宏定義,不是函數(shù),或者叫做偽函數(shù),盡量不要用。也千萬(wàn)不要迷戀所謂的效率。因?yàn)檫@個(gè)東西逃過(guò)了VC編譯器的靜態(tài)類(lèi)型檢查,很多隱藏的很深的錯(cuò)誤(尤其是當(dāng)復(fù)雜的時(shí)候)。現(xiàn)在基本用inline內(nèi)聯(lián)函數(shù)替代啦。而且調(diào)試過(guò)程中,無(wú)法查看相關(guān)量的值(這個(gè)不存在我指復(fù)雜一點(diǎn)的)。但是強(qiáng)烈建議開(kāi)始就養(yǎng)成好的編程習(xí)慣。
3、這個(gè)東西有誤解。(除非每一次都會(huì)去看它的定義)因?yàn)榻嵌纫彩莇ouble或float型,而弧度也是同樣,所以用的時(shí)候會(huì)有誤解。因?yàn)閹?kù)中原來(lái)的cos()要的是弧度?,F(xiàn)在你給重定義成了要角度。其中我想用cos()給其提供弧度的版本,結(jié)果也被這個(gè)宏替換成了要角度的版本。如:我想求cos(PI/2),結(jié)果被你替換成了cos(PI/2*180/PI),這個(gè)太可惡了。和原函數(shù)名字一模一樣!會(huì)給后面的維護(hù)工程師帶來(lái)大麻煩!
所以,明確的寫(xiě)一個(gè)。角度轉(zhuǎn)弧度的函數(shù) double RadToAngle (double); 還是用原來(lái)庫(kù)函數(shù) cos( RadToAngle (30)) 這個(gè)一看就知道 將30°換成弧度,并調(diào)用原來(lái)的cos()函數(shù)。
好運(yùn)!
#includestdio.h
#includemath.h
int
main(void)
{
double
x,
e,cosx;
double
funcos(double
e,int
x);
printf("e:
");
scanf("%lf",e);
printf("x:
");
scanf("%lf",x);
//這里是%lf
cosx=funcos(e,x);
printf("cos(x)=%.3f\n",cosx);
return
0;
}
double
funcos(double
e,int
x)
{
int
flag,a,i;
double
sum,item;
double
fact(int
n);
item=1;
//這個(gè)初始化要大于e,否則不執(zhí)行下面
flag=1;
a=0;
i=0;
sum=0;
while(fabs(item)=e){
item=(flag*pow(x,a))/fact(i);
sum=sum+item;
flag=-flag;
a=a+2;
i=i+2;
}
return
sum;
}
double
fact(int
n)
{
int
i;
double
result;
result=1;
for(i=1;i=n;i++){
result=result*i;
}
return
result;
}
//由于數(shù)學(xué)庫(kù)的cos接受的是弧度,所以要先進(jìn)行轉(zhuǎn)換,下面是示例代碼
#include?stdio.h
#include?math.h
const?double?deg_to_rad?=?atan(1.0)?/?45.0;//想把角度轉(zhuǎn)成弧度,只需要把角度值乘以這個(gè)常量即可
int?main(void)
{
printf("示例,45度角的余弦值為:%lf\n",?cos(45*deg_to_rad));
return?0;
}
我用VS2010,沒(méi)錯(cuò)啊
//?Cos.cpp?:?定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//
#include?"stdafx.h"
#include?"stdio.h"
#include?"math.h"
int?fact(int?x)
{
int?s=1;
int?i;
for(i=1;i=x;i++)
s=s*i;
return?s;
}
double?funcos(double?e,?double?x);
int?_tmain(int?argc,?_TCHAR*?argv[])
{
double?e,?sum,?x;
scanf("%le%le",?e,?x);
sum=funcos(e,x);
printf("sum?=?%f\n",?sum);
return?0;
}
double?funcos(double?e,?double?x)
{
double?s=1;
double?item;
int?i=2;
int?j=1;
item=(double)pow(x,i)/fact(i);
while(iteme)
{
if(j%2==1)
s=s-item;
else
s=s+item;
i=i+2;
j++;
item=(double)pow(x,i)/fact(i);
}
if(j%2==1)
s=s-item;
else
s=s+item;
return?s;
}
cos()是庫(kù)函數(shù),在頭文件math.h中,原型是double?cos(double?x);,其中x要用弧度表示。如求30°的余弦值可用下列代碼實(shí)現(xiàn):
//#include?"stdafx.h"http://If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
#include?"math.h"
int?main(void){
printf("cos30°=?%.10f\n",cos(30*3.1415926535897932/180));
return?0;
}