反余弦函數(shù)c語言顯示 反余弦函數(shù)運(yùn)算

根據(jù)某角的余弦函數(shù)值查對應(yīng)的角度值,相關(guān)的數(shù)學(xué)方法或者C語言函數(shù)

使用Math.h中提供的反余弦函數(shù)即可得到弧度值,再轉(zhuǎn)換為角度值即可。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、渭濱網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開發(fā)、渭濱網(wǎng)絡(luò)營銷、渭濱企業(yè)策劃、渭濱品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供渭濱建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn

假設(shè)余弦值為c,則反余弦值為acos(c),此為弧度值(假設(shè)為r),對應(yīng)的角度為r * 180 / PI。

C語言程序:

#include?stdio.h

#include?math.h

#define?PI?3.141593

void?main()

{

double?c; /*?余弦函數(shù)值[-1,?1]?*/

double?angle; /*?角度[0,?360]?*/

printf("余弦函數(shù)值:");

scanf("%lf",?c);

angle?=?acos(c)?*?180?/?PI;

printf("余弦值%lf對應(yīng)的角度值是%.2lf度\n",?c,?angle);

}

運(yùn)行測試:

余弦函數(shù)值:0.5

余弦值0.500000對應(yīng)的角度值是60.00度

用C語言實(shí)現(xiàn)三角函數(shù)及反三角函數(shù)怎么實(shí)現(xiàn)

用自帶的函數(shù)庫

#include?stdio.h

#include?math.h

#define?M_PI?3.14159265358979323846

int?main(void)

{

printf("%.4f\n",?sin(M_PI?/?2));

printf("%.4f\n",?cos(M_PI?/?3));

printf("%.4f\n",?asin(1.00));

printf("%.4f\n",?acos(0.50));

printf("%.4f\n",?tan(M_PI?/?4));

printf("%.4f\n",?atan(1.00));

return?0;

}

請問反正切函數(shù)arctanx用c語言怎么表示?

double atan(double x)

x 的反正切函數(shù)值tan-1x,傳回的值在 [-pi/2,pi/2] 之間

double atan2(double y, double x)

y/x 的反正切函數(shù)值tan-1(y/x),傳回的值在 [-pi, pi] 之間

arctanX的導(dǎo)數(shù)是1/(1+X2)這里的X=x/2復(fù)合函數(shù)求導(dǎo),需要先求子函數(shù)的導(dǎo)數(shù),即X'=1/2再乘上arctanX的導(dǎo)數(shù)所以所求導(dǎo)數(shù)是1/[2(1+x2/4)]

C語言中之?dāng)?shù)學(xué)函數(shù)

C語言提供了以下的數(shù)學(xué)函數(shù),要使用這些函數(shù)時(shí),在程序文件頭必須加入:

#include

編譯時(shí),必須加上參數(shù)「-lm」(表示連結(jié)至數(shù)學(xué)函式庫),例如「gcc -lm test.c」。

函數(shù)之自變量與傳回之值型別見自變量或函數(shù)前之型別宣告。

函數(shù)已經(jīng)在「math.h」或其它標(biāo)頭檔宣告過了,因此在使用時(shí)不必再加型別宣告,例如「y=sin(x);」,不用寫成「y=double sin(double x);」。

函數(shù)說明

double sin(double x)

x 的正弦函數(shù)值

double cos(double x)

x 的余弦函數(shù)值

double tan(double x)

x 的正切函數(shù)值

double asin(double x)

x 的反正弦函數(shù)值 sin-1x,x的值在 [-1,1] 之間,傳回的值在 [-p/2,p/2] 之間

double acos(double x)

x 的反余弦函數(shù)值cos-1x,x的值在 [-1,1] 之間,傳回的值在 [-p/2,p/2] 之間

double atan(double x)

x 的反正切函數(shù)值tan-1x,傳回的值在 [-p/2,p/2] 之間

double atan2(double y, double x)

y/x 的反正切函數(shù)值tan-1(y/x),傳回的值在 [-p, p]

C語言經(jīng)典程序

....1.繪制余弦曲線

在屏幕上用“*”顯示0~360度的余弦函數(shù)cos(x)曲線

*問題分析與算法設(shè)計(jì)

如果在程序中使用數(shù)組,這個(gè)問題十分簡單。但若規(guī)定不能使用數(shù)組,問題就變得不容易了。

關(guān)鍵在于余弦曲線在0~360度的區(qū)間內(nèi),一行中要顯示兩個(gè)點(diǎn),而對一般的顯示器來說,只能按行輸出,即:輸出第一行信息后,只能向下一行輸出,不能再返回到上一行。為了獲得本文要求的圖形就必須在一行中一次輸出兩個(gè)“*”。

為了同時(shí)得到余弦函數(shù)cos(x)圖形在一行上的兩個(gè)點(diǎn),考慮利用cos(x)的左右對稱性。將屏幕的行方向定義為x,列方向定義為y,則0~180度的圖形與180~360度的圖形是左右對稱的,若定義圖形的總寬度為62列,計(jì)算出x行0~180度時(shí)y點(diǎn)的坐標(biāo)m,那么在同一行與之對稱的180~360度的y點(diǎn)的坐標(biāo)就

應(yīng)為62-m。程序中利用反余弦函數(shù)acos計(jì)算坐標(biāo)(x,y)的對應(yīng)關(guān)系。

使用這種方法編出的程序短小精煉,體現(xiàn)了一定的技巧。

*程序說明與注釋

#includestdio.h

#includemath.h

int main()

{

double y;

int x,m;

for(y=1;y=-1;y-=0.1) /*y為列方向,值從1到-1,步長為0.1*/

{

m=acos(y)*10; /*計(jì)算出y對應(yīng)的弧度m,乘以10為圖形放大倍數(shù)*/

for(x=1;xm;x++) printf(" ");

printf("*"); /*控制打印左側(cè)的 * 號(hào)*/

for(;x62-m;x++)printf(" ");

printf("*\n"); /*控制打印同一行中對稱的右側(cè)*號(hào)*/

}

return 0;

}

*思考題

如何實(shí)現(xiàn)用“*”顯示0~360度的sin(x)曲線。

在屏幕上顯示0~360度的cos(x)曲線與直線f(x)=45*(y-1)+31的迭加圖形。其中cos(x)圖形用“*”表示,f(x)用“+”表示,在兩個(gè)圖形相交的點(diǎn)上則用f(x)圖形的符號(hào)。

2.繪制余弦曲線和直線

*問題分析與算法設(shè)計(jì)

本題可以在上題的基礎(chǔ)上進(jìn)行修改。圖形迭加的關(guān)鍵是要在分別計(jì)算出同一行中兩個(gè)圖形的列方向點(diǎn)坐標(biāo)后,正確判斷相互的位置關(guān)系。為此,可以先判斷圖形的交點(diǎn),再分別控制打印兩個(gè)不同的圖形。

*程序注釋與說明

#includestdio.h

#includemath.h

int main()

{

double y;

int x,m,n,yy;

for(yy=0;yy=20;yy++) /*對于第一個(gè)y坐標(biāo)進(jìn)行計(jì)算并在一行中打印圖形*/

{

y=0.1*yy; /*y:屏幕行方向坐標(biāo)*/

m=acos(1-y)*10; /*m: cos(x)曲線上y點(diǎn)對應(yīng)的屏幕列坐標(biāo)*/

n=45*(y-1)+31; /*n: 直線上y點(diǎn)對應(yīng)的列坐標(biāo)*/

for(x=0;x=62;x++) /*x: 屏幕列方向坐標(biāo)*/

if(x==mx==n) printf("+"); /*直線與cos(x)相交時(shí)打印“+”*/

else if(x==n) printf("+"); /*打印不相交時(shí)的直線圖形*/

else if(x==m||x==62-m) printf("*"); /*打印不相交時(shí)的cos(x)圖形*/

else printf(" "); /*其它情況打印空格*/

printf("\n");

}

return 0;

}

*思考題

如何實(shí)現(xiàn)sin(x)曲線與cos(x)曲線圖形的同時(shí)顯示。

3.繪制圓

在屏幕上用“*”畫一個(gè)空心的圓

*問題分析與算法設(shè)計(jì)

打印圓可利用圖形的左右對稱性。根據(jù)圓的方程:

R*R=X*X+Y*Y

可以算出圓上每一點(diǎn)行和列的對應(yīng)關(guān)系。

*程序說明與注釋

#includestdio.h

#includemath.h

int main()

{

double y;

int x,m;

for(y=10;y=-10;y–)

{

m=2.5*sqrt(100-y*y); /*計(jì)算行y對應(yīng)的列坐標(biāo)m,2.5是屏幕縱橫比調(diào)節(jié)系數(shù)因?yàn)槠聊坏?/p>

行距大于列距,不進(jìn)行調(diào)節(jié)顯示出來的將是橢圓*/

for(x=1;x30-m;x++) printf(" "); /*圖形左側(cè)空白控制*/

printf("*"); /*圓的左側(cè)*/

for(;x30+m;x++) printf(" "); /*圖形的空心部分控制*/

printf("*\n"); /*圓的右側(cè)*/

}

return 0;

}

*思考題

實(shí)現(xiàn)函數(shù)y=x2的圖形與圓的圖形疊加顯示

4.歌星大獎(jiǎng)賽

在歌星大獎(jiǎng)賽中,有10個(gè)評委為參賽的選手打分,分?jǐn)?shù)為1~100分。選手最后得分為:去掉一個(gè)最高分和一個(gè)最低分后其余8個(gè)分?jǐn)?shù)的平均值。請編寫一個(gè)程序?qū)崿F(xiàn)。

*問題分析與算法設(shè)計(jì)

這個(gè)問題的算法十分簡單,但是要注意在程序中判斷最大、最小值的變量是如何賦值的。

*程序說明與注釋

#includestdio.h

int main()

{

int integer,i,max,min,sum;

max=-32768; /*先假設(shè)當(dāng)前的最大值max為C語言整型數(shù)的最小值*/

min=32767; /*先假設(shè)當(dāng)前的最小值min為C語言整型數(shù)的最大值*/

sum=0; /*將求累加和變量的初值置為0*/

for(i=1;i=10;i++)

{

printf("Input number %d=",i);

scanf("%d",integer); /*輸入評委的評分*/

sum+=integer; /*計(jì)算總分*/

if(integermax)max=integer; /*通過比較篩選出其中的最高分*/

if(integermin)min=integer; /*通過比較篩選出其中的最低分*/

}

printf("Canceled max score:%d\nCanceled min score:%d\n",max,min);

printf("Average score:%d\n",(sum-max-min)/8); /*輸出結(jié)果*/

}

*運(yùn)行結(jié)果

Input number1=90

Input number2=91

Input number3=93

Input number4=94

Input number5=90

Input number6=99

Input number7=97

Input number8=92

Input number9=91

Input number10=95

Canceled max score:99

Canceled min score:90

Average score:92

*思考題

題目條件不變,但考慮同時(shí)對評委評分進(jìn)行裁判,即在10個(gè)評委中找出最公平(即評分最接返平均分)和最不公平(即與平均分的差距最大)的評委,程序應(yīng)該怎樣實(shí)現(xiàn)?

5.求最大數(shù)

問555555的約數(shù)中最大的三位數(shù)是多少?

*問題分析與算法設(shè)計(jì)

根據(jù)約數(shù)的定義,對于一個(gè)整數(shù)N,除去1和它自身外,凡能整除N的數(shù)即為N的約數(shù)。因此,最簡單的方法是用2到N-1之間的所有數(shù)去除N,即可求出N的全部約數(shù)。本題只要求取約數(shù)中最大的三位數(shù),則其取值范圍可限制在100到999之間。

*程序說明與注釋

#includestdio.h

int main()

{

long i;

int j;

printf("Please input number:");

scanf("%ld",i);

for(j=999;j=100;j–)

if(i%j==0)

{

printf("The max factor with 3 digits in %ld is:%d,\n",i,j);

break;

}

}

*運(yùn)行結(jié)果

輸入:555555

輸出:The max factor with 3 digits in 555555 is:777

6.高次方數(shù)的尾數(shù)

求13的13次方的最后三位數(shù)

*問題分析與算法設(shè)計(jì)

解本題最直接的方法是:將13累乘13次方截取最后三位即可。

但是由于計(jì)算機(jī)所能表示的整數(shù)范圍有限,用這種“正確”的算法不可能得到正確的結(jié)果。事實(shí)上,題目僅要求最后三位的值,完全沒有必要求13的13次方的完整結(jié)果。

研究乘法的規(guī)律發(fā)現(xiàn):乘積的最后三位的值只與乘數(shù)和被乘數(shù)的后三位有關(guān),與乘數(shù)和被乘數(shù)的高位無關(guān)。利用這一規(guī)律,可以大大簡化程序。

*程序說明與注釋

#includestdio.h

int main()

{

int i,x,y,last=1; /*變量last保存求X的Y次方過程中的部分乘積的后三位*/

printf("Input X and Y(X**Y):");

scanf("%d**%d",x,y);

for(i=1;i=y;i++) /*X自乘Y次*/

last=last*x%1000; /*將last乘X后對1000取模,即求積的后三位*/

printf("The last 3 digits of %d**%d is:%d\n",x,y,last%1000); /*打印結(jié)果*/

}

*運(yùn)行結(jié)果

Input X and Y(X**Y):13**13

The last 3 digits of 13**13 is:253

Input X and Y(X**Y):13**20

The last 3 digits of 13**20 is:801

7.階乘尾數(shù)零的個(gè)數(shù)

100!的尾數(shù)有多少個(gè)零?

*問題分析與算法設(shè)計(jì)

可以設(shè)想:先求出100!的值,然后數(shù)一下末尾有多少個(gè)零。事實(shí)上,與上題一樣,由于計(jì)算機(jī)所能表示的整數(shù)范圍有限,這是不可能的。

為了解決這個(gè)問題,必須首先從數(shù)學(xué)上分析在100!結(jié)果值的末尾產(chǎn)生零的條件。不難看出:一個(gè)整數(shù)若含有一個(gè)因子5,則必然會(huì)在求100!時(shí)產(chǎn)生一個(gè)零。因此問題轉(zhuǎn)化為求1到100這100個(gè)整數(shù)中包含了多少個(gè)因子5。若整數(shù)N能被25整除,則N包含2個(gè)因子5;若整數(shù)N能被5整除,則N包含1個(gè)因子5。

*程序說明與注釋

#includestdio.h

int main()

{

int a,count =0;

for(a=5;a=100;a+=5) //循環(huán)從5開始,以5的倍數(shù)為步長,考察整數(shù)

{

++count; //若為5的倍數(shù),計(jì)數(shù)器加1

if(!(a%25)) ++count; //若為25的倍數(shù),計(jì)數(shù)器再加1

}

printf("The number of 0 in the end of 100! is: %d.\n",count); //打印結(jié)果

return 0;

}

*運(yùn)行結(jié)果

The number of 0 in the end of 100! is: 24.

*問題進(jìn)一步討論

本題的求解程序是正確的,但是存在明顯的缺點(diǎn)。程序中判斷整數(shù)N包含多少個(gè)因子5的方法是與程序中的100有關(guān)的,若題目中的100改為1000,則就要修改程序中求因子5的數(shù)目的算法了。

*思考題

修改程序中求因子5的數(shù)目的算法,使程序可以求出任意N!的末尾有多少個(gè)零。

8.借書方案知多少

小明有五本新書,要借給A,B,C三位小朋友,若每人每次只能借一本,則可以有多少種不同的借法?

*問題分析與算法設(shè)計(jì)

本問題實(shí)際上是一個(gè)排列問題,即求從5個(gè)中取3個(gè)進(jìn)行排列的方法的總數(shù)。首先對五本書從1至5進(jìn)行編號(hào),然后使用窮舉的方法。假設(shè)三個(gè)人分別借這五本書中的一本,當(dāng)三個(gè)人所借的書的編號(hào)都不相同時(shí),就是滿足題意的一種借閱方法。

*程序說明與注釋

int main()

{

int a,b,c,count=0;

printf("There are diffrent methods for XM to distribute books to 3 readers:\n");

for(a=1;a=5;a++) /*窮舉第一個(gè)人借5本書中的1本的全部情況*/

for(b=1;b=5;b++) /*窮舉第二個(gè)人借5本書中的一本的全部情況*/

for(c=1;a!=bc=5;c++) /*當(dāng)前兩個(gè)人借不同的書時(shí),窮舉第三個(gè)人借5本書

中的1本的全部情況*/

if(c!=ac!=b) /*判斷第三人與前兩個(gè)人借的書是否不同*/

printf(count%8?"%2d:%d,%d,%d ":"%2d:%d,%d,%d\n ",++count,a,b,c);

/*打印可能的借閱方法*/

}

*運(yùn)行結(jié)果

There are diffrent methods for XM to distribute books to 3 readers:

1: 1,2,3 2: 1,2,4 3: 1,2,5 4: 1,3,2 5: 1,3,4

6: 1,3,5 7: 1,4,2 8: 1,4,3 9: 1,4,5 10:1,5,2

11:1,5,3 12:1,5,4 13:2,1,3 14:2,1,4 15:2,1,5

16:2,3,1 17:2,3,4 18:2,3,5 19:2,4,1 20:2,4,3

21:2,4,5 22:2,5,1 23:2,5,3 24:2,5,4 25:3,1,2

26:3,1,4 27:3,1,5 28:3,2,1 29:3,2,4 30:3,2,5

31:3,4,1 32:3,4,2 33:3,4,5 34:3,5,1 35:3,5,2

36:3,5,4 37:4,1,2 38:4,1,3 39:4,1,5 40:4,2,1

41:4,2,3 42:4,2,5 43:4,3,1 44:4,3,2 45:4,3,5

46:4,5,1 47:4,5,2 48:4,5,3 49:5,1,2 50:5,1,3

51:5,1,4 52:5,2,1 53:5,2,3 54:5,2,4 55:5,3,1

56:5,3,2 57:5,3,4 58:5,4,1 59:5,4,2 60:5,4,3

9.楊輝三角形

在屏幕上顯示楊輝三角形

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

………………………………..

*問題分析與算法設(shè)計(jì)

楊輝三角形中的數(shù),正是(x+y)的N次方冪展開式各項(xiàng)的系數(shù)。本題作為程序設(shè)計(jì)中具有代表性的題目,求解的方法很多,這里僅給出一種。

從楊輝三角形的特點(diǎn)出發(fā),可以總結(jié)出:

1)第N行有N+1個(gè)值(設(shè)起始行為第0行)

2)對于第N行的第J個(gè)值:(N=2)

當(dāng)J=1或J=N+1時(shí):其值為1

J!=1且J!=N+1時(shí):其值為第N-1行的第J-1個(gè)值與第N-1行第J個(gè)值

之和

將這些特點(diǎn)提煉成數(shù)學(xué)公式可表示為:

1 x=1或x=N+1

c(x,y)=

c(x-1,y-1)+c(x-1,y) 其它

本程序應(yīng)是根據(jù)以上遞歸的數(shù)學(xué)表達(dá)式編制的。

*程序說明與注釋

#includestdio.h

int main()

{

int i,j,n=13;

printf("N=");

while(n12)

scanf("%d",n); /*控制輸入正確的值以保證屏幕顯示的圖形正確*/

for(i=0;i=n;i++) /*控制輸出N行*/

{

for(j-0;j24-2*i;j++) printf(" "); /*控制輸出第i行前面的空格*/

for(j=1;ji+2;j++) printf("%4d",c(i,j)); /*輸出第i行的第j個(gè)值*/

printf("\n");

}

}

void int c(int x,int y) /*求楊輝三角形中第x行第y列的值*/

{

int z;

if((y==1)||(y==x+1)) return 1; /*若為x行的第1或第x+1列,則輸出1*/

z=c(x-1,y-1)+c(x-1,y); /*否則,其值為前一行中第y-1列與第y列值之和*/

return z;

}

*思考題

自行設(shè)計(jì)一種實(shí)現(xiàn)楊輝三角形的方法

10.數(shù)制轉(zhuǎn)換

將任一整數(shù)轉(zhuǎn)換為二進(jìn)制形式

*問題分析與算法設(shè)計(jì)

將十進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制的方法很多,這里介紹的實(shí)現(xiàn)方法利用了C語言能夠?qū)ξ贿M(jìn)行操作的特點(diǎn)。對于C語言來說,一個(gè)整數(shù)在計(jì)算機(jī)內(nèi)就是以二進(jìn)制的形式存儲(chǔ)的,所以沒有必要再將一個(gè)整數(shù)經(jīng)過一系列的運(yùn)算轉(zhuǎn)換為二進(jìn)制形式,只要將整數(shù)在內(nèi)存中的二進(jìn)制表示輸出即可。

*程序說明與注釋

#includestdio.h

void printb(int,int);

int main()

{

int x;printf("Input number:");

scanf("%d",x);

printf("number of decimal form:%d\n",x);

printf(" it's binary form:");

printb(x,sizeof(int)*8); /*x:整數(shù) sizeof(int):int型在內(nèi)存中所占的字節(jié)數(shù)

sizeof(int)*8:int型對應(yīng)的位數(shù)*/

putchar('\n');

}

void printb(int x,int n)

{

if(n0)

{

putchar('0'+((unsigned)(x(1(n-1)))(n-1))); /*輸出第n位*/

printb(x,n-1); /*歸調(diào)用,輸出x的后n-1位*/

}

}

*運(yùn)行結(jié)果

輸入:8

輸出:

number of decimal form:8

it's bunary form:0000000000001000

輸入:-8

輸出:number of decimal form:-8

it's binary form:1111111111111000

輸入:32767

輸出:number of decimal form:32767

it's binary form:0111111111111111

輸入:-32768

輸出:number of decimal form:-32768

it's binary form:1000000000000000

輸入:128

輸出:number of decimal form:128

it's binary form:0000000010000000

*問題的進(jìn)一步討論

充分利用C語言可以對位進(jìn)行操作的特點(diǎn),可以編寫許多其它高級(jí)語言不便于編寫甚至根本無法編寫的程序。位操作是C語言的一大特點(diǎn),在深入學(xué)習(xí)C語言的過程中應(yīng)力求很好掌握。

程序中使用的位運(yùn)算方法不是最佳的,也可以不用遞歸操作,大家可以自行對程序進(jìn)行優(yōu)化。

*思考題

將任意正整數(shù)轉(zhuǎn)換為四進(jìn)制或八進(jìn)制數(shù)

網(wǎng)站題目:反余弦函數(shù)c語言顯示 反余弦函數(shù)運(yùn)算
文章轉(zhuǎn)載:http://muchs.cn/article26/doschjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站網(wǎng)站設(shè)計(jì)公司、網(wǎng)頁設(shè)計(jì)公司、虛擬主機(jī)、網(wǎng)站改版、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名