計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)-第十四講編程例題_第1頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)-第十四講編程例題_第2頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)-第十四講編程例題_第3頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)-第十四講編程例題_第4頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)-第十四講編程例題_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

求定積分

1、用梯形公式計(jì)算面積的近似值。

一<b—a

面積、/⑷+"))

這樣計(jì)算面積誤差太大。

b-a

2

2、改進(jìn):將區(qū)間b-a劃分成2n等分。用變步長(zhǎng)的梯形

法,定義Tn為將積分區(qū)間n等分時(shí)求出的近似面積。

n=1時(shí),

b—a

丁—+…))

令"=b-a

二「

____T___72hh

+—2L于"k+—)

2/々=0/

昌H=1日寸

Txh'hx

T;=—+一于(a-------)

2

(i)(2)

3

(1)為按公式算出的面積的二分之一;

(2)為等分中線(xiàn)的函數(shù)值/在7+歷力與〃的乘積,得出

面積的二分之一。

當(dāng)n=2時(shí),

T2

/n

;2

rri2Thh

2,7一十;2”4+7)

2/k=0N

當(dāng)〃二1時(shí)

rri2

h2h23.

T;二q+?。?(。+?。?/("+二獷)]

2

5

(3)代表面積

解釋如下:將好區(qū)間分成兩段

0111

h=-h=-(b—Q)

22

積分面積用矩形acde~\~矩形場(chǎng)b來(lái)近似

h2

ac的長(zhǎng)度取/(a+—)

3

牙的長(zhǎng)度取/(〃+—/)

2

力23

這兩塊的面積之和為=%*"(。+—)+〃。+—〃?)]

再取一半就是

)2"1

一£/(4+(左+0?5)*『)

2k=o

3、用辛普生公式計(jì)算積分的近似值

1

/2n=-。('4K2n-Tn)>

當(dāng)I2n-In<£認(rèn)為達(dá)到了近似要求。

如未達(dá)此精度要求,則讓

n<------2%h<-------h/2

2x2

例:求定積分/=1-——Jdx

Jo1+x3

7

#include<stdio.h>〃預(yù)編譯命令

#include<math.h>〃預(yù)編譯命令,數(shù)學(xué)函數(shù)

doublef(doublex);〃定義被調(diào)用函數(shù)f

voidmain()〃主函數(shù)

〃主程序開(kāi)始

intk,n=l;〃聲明整型變量k,n,并初始化n

doublex,xl=0,x2=2;〃聲明雙精度變量x,和xLx2

doubles,h,tn,t2n,InJ2n;〃聲明計(jì)算中使用的中間變量

constdoubleeps=le-6;〃聲明雙精度變量eps作為閾值

//計(jì)算n=l時(shí)的tn和In,為便于編程

//分別將它們賦給t2n和I2n

h=x2-xl;

t2n=I2n=(h*(f(xl)+f(x2)))/2;

printf("第一次近似計(jì)算梯形面積值為

In=0;8

while(fabs(I2mJn)>=eps)//當(dāng)型循環(huán),精度未達(dá)要求則繼續(xù)

(〃循環(huán)體開(kāi)始,

//將上一次計(jì)算結(jié)果轉(zhuǎn)存入m和In

tn=t2n;

In=I2n;

〃計(jì)算k從0至If(xl+(k+0.5)*h)的和

s=0.0;力求和變量s清零

for(k=0;k<n;k=k+l)//循環(huán)求和

{、〃循環(huán)體開(kāi)始

x=xl+(k+0.5)*h;

s=s+f(x);

)〃循環(huán)體結(jié)束

//計(jì)算t2n和I2n

t2n=(tn+h*s)/2.0;

I2n=(4^t2n-tn)/3.0;9

〃更新n和h,用于下一次計(jì)算

n=2*n;

h=h/2;

}〃循環(huán)體結(jié)束

printf「積分值為%m11八,1211);//輸出結(jié)果

)〃主函數(shù)結(jié)束

doublef(doublex)//被調(diào)用函數(shù)f,用于計(jì)算積分項(xiàng)

{、〃函數(shù)體開(kāi)始▼

〃計(jì)算并返回積分項(xiàng)

return((exp(x)+x*x)/(l+x*x*x));

)〃函數(shù)體結(jié)束

運(yùn)行結(jié)果:第一次近似計(jì)算提醒面積值為2.265451

積分值為3.138948

while(fabs(I2mJn)>=eps)//當(dāng)型循環(huán),精度未達(dá)要求則繼續(xù)

(〃循環(huán)體開(kāi)始,

//將上一次計(jì)算結(jié)果轉(zhuǎn)存入m和In

tn=t2n;

In=I2n;

〃計(jì)算k從0至If(xl+(k+0.5)*h)的和

s=0.0;力求和變量s清零

for(k=0;k<n;k=k+l)//循環(huán)求和

{、〃循環(huán)體開(kāi)始

x=xl+(k+0.5)*h;

s=s+f(x);

)〃循環(huán)體結(jié)束

//計(jì)算t2n和I2n

t2n=(tn+h*s)/2.0;

I2n=(4^t2n-tn)/3.0;11

隨機(jī)數(shù)

說(shuō)明:

1、要產(chǎn)生隨機(jī)數(shù)需要在預(yù)編譯中加入庫(kù)函數(shù)

#include<stdlib.h>

2、rand()是產(chǎn)生隨機(jī)數(shù)的函數(shù),它可生成0至32767的

整數(shù)\

3、最大隨機(jī)數(shù)為RAND_MAX,值為32767

4、產(chǎn)生隨機(jī)數(shù)需要設(shè)置種子

srand((unsigned)time(NULL));

因?yàn)闀r(shí)間每分每秒不同,第一個(gè)隨機(jī)數(shù)就不會(huì)固

定。你可以做試驗(yàn),如去掉這條,產(chǎn)生十個(gè)隨機(jī)數(shù),

每次都會(huì)是一樣的?!?/p>

產(chǎn)生的隨機(jī)數(shù):

41

18467

6334

26500

11478\

29358

26962

24464

加上這條之后,你再觀察,每一次出的十個(gè)數(shù)都不同。

13

下面的程序是產(chǎn)生十個(gè)小數(shù)(隨機(jī)函數(shù)4.c)

#include<stdio.h>〃預(yù)編譯命令

#include<math.h>〃預(yù)編譯命令

#include<stdlib.h>〃預(yù)編譯命令

voidmain(void)〃主函數(shù)

(〃主函數(shù)開(kāi)始

intk;〃定義整型變量k

srand((unsigned)time(NULL));〃設(shè)置

for(k=0;k<10;k=k+l)//循環(huán)

(

〃輸出隨機(jī)小數(shù)

printfC6%^nf\(float)rand()/RANDMAX);

力輸出最大隨機(jī)數(shù)

printf(n最大隨機(jī)數(shù)為%d\iT,RAND_MAX);

)〃主函數(shù)結(jié)束

說(shuō)明

1、用rand()/RAND_MAX來(lái)產(chǎn)生大于0而小于1的

小數(shù)。

2、因?yàn)閞and()是整型數(shù),RAND_MAX是整型常數(shù),

兩者相除,如不作特殊處理得不出小數(shù),只能為0。

因?yàn)楸怀龜?shù)小于除數(shù)。因此需要強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類(lèi)型,

在除式前加(float),即

(float)rand()/RANDMAX

偽隨機(jī)數(shù)的應(yīng)用——蒙特卡羅法求幾何面積

例:求九的近似值。

如右圖,正方形的面積A=l;1/4圓的面積B=TT/4。我們

想象有一個(gè)容器在正方形中夾有一個(gè)極薄的圓弧隔板。

下小雨時(shí)搬至屋外,經(jīng)一定時(shí)間后,稱(chēng)1/4圓的容器內(nèi)的

水重C,與作為一個(gè)整體的正方形中的水重D。C與D之

比應(yīng)該等于B與A之比,、t

4DD16

我們讓計(jì)算機(jī)產(chǎn)生偽隨機(jī)數(shù)X和y,讓x的值的范圍在0?

1之間;讓y的值的范圍也在0?1之間,模擬雨點(diǎn)落在正

方形中,當(dāng)然會(huì)有的雨點(diǎn)落在1/4圓中,數(shù)以百萬(wàn)計(jì)雨點(diǎn)

可以累計(jì)得到C和D,從而上述公式算出江的近似值。這

里關(guān)鍵是落入扇形區(qū)的判據(jù):

如果滿(mǎn)足了上述條件,則讓C=C+L

參考程序見(jiàn)“隨機(jī)函數(shù)Lc”

17

#include<stdio.h>〃預(yù)編譯命令

#include<math.h>〃預(yù)編譯命令

#include<stdlib.h>〃預(yù)編譯命令

voidmain(void)〃主函數(shù)

〃主函數(shù)開(kāi)始

longk,c=0,d=0;〃定義長(zhǎng)整型變量

floatpai,x,y;〃定義浮點(diǎn)類(lèi)型變量

srand((unsigned)time(NULL));//設(shè)置

for(k=l;k<=100000000;k=k+l)//循環(huán)

//循環(huán)體開(kāi)始

d=d+l;//累加正方形中落入的一個(gè)雨點(diǎn)

x=(float)rand()/32767;〃雨點(diǎn)在x方向的位置

y=(float)rand()/32767;〃雨點(diǎn)在y方向的位置

if(sqrt(x*x+y*y)v=l)

c=c+l;//累加扇形中落入的一個(gè)雨

點(diǎn)

pai=4.0^(float)c/d;//計(jì)算pai的值

printf(npai=%f\nf\pai);//輸出pai的值18

???,,―/―L

下面可演化為計(jì)算圖形的面積。如圖所示計(jì)算有陰影

線(xiàn)的圖形的面積,乍看似乎有些難,但仔細(xì)分析即可

在上面程序的基礎(chǔ)上來(lái)做了。

從思路上考+y2

慮落在陰影這塊面

積上的雨點(diǎn)數(shù)g與+y2=i

落在正方形整體上

的雨點(diǎn)數(shù)d的比就

是這塊面積s的近

似值。

1

19

此題的關(guān)鍵是如何判斷雨點(diǎn)是落在陰影線(xiàn)的區(qū)域內(nèi)。這

就要用到解析幾何的知識(shí):對(duì)于以原點(diǎn)x=0,y=0為圓心,

半徑為1的圓弧,陰影線(xiàn)中的每個(gè)點(diǎn)應(yīng)滿(mǎn)足

I2+/>1〈公式1〉

對(duì)于以x=Ly=0為圓心的圓弧,陰影線(xiàn)中的每個(gè)點(diǎn)應(yīng)滿(mǎn)

d(X-if+J>](公式2>

當(dāng)然這個(gè)條件在產(chǎn)生隨機(jī)數(shù)時(shí)就已經(jīng)保證了,

故可以不再考慮了。

因此,要同時(shí)滿(mǎn)足公式1和公式2,雨點(diǎn)才能落入陰影線(xiàn)

區(qū)域,語(yǔ)句2。

if((sqrt(x^x+y^y)>l)&&(sqrt((x-l)^(x-l)+y^y)>l))

g=g+l;

就是依據(jù)上述的思路。

為了比較所得結(jié)果是否有效,程序中給出了s的精確值,

這個(gè)值是用幾何的解法計(jì)算出的,見(jiàn)圖

兀73兀

A+B+A=——+^―+——

12412

s=1-(A+B+A)30°

21

參考程序如下(隨機(jī)函數(shù)6.c)

#include<stdio.h>〃預(yù)編譯命令

#include<math.h>//預(yù)編譯命令

#include<stdlib.h>〃預(yù)編譯命令

voidmain(void)〃主函數(shù)

(〃主函數(shù)開(kāi)始

longk,d=0,g=0;〃定義長(zhǎng)整型變量

floats漢y;〃定義浮點(diǎn)類(lèi)型變量

srand((unsigned)time(NULL));〃設(shè)置

22

for(k=l;k<=10000000;k=k+l)//循環(huán)

{〃循環(huán)體開(kāi)始

d=d+l;//累加正方形中落入的一個(gè)雨點(diǎn)

x=(float)rand()/32767;//雨點(diǎn)在x方向的位置

y=(float)rand()/32767;//雨點(diǎn)在y方向的位置

if((sqrt(x*x+y*y)>l)&&(sqrt((x-l)*(x-l)+ywy)>l))

g=g+l;//累加陰影畝積中落入%勺一個(gè)布點(diǎn)

}、//循環(huán)體結(jié)束

s=(float)g/d;//計(jì)算s的值

printf(ns=%Rn",s);//輸出s的值

〃輸出s的精確值

printfjs的精確值為%f\nf\1.0-(3.14159/6.0+1.73205/4.0));

整數(shù)分拆

題目:有一個(gè)整數(shù)n,將n分解成若干個(gè)整數(shù)之和,問(wèn)如

何分解能使這些數(shù)的乘積最大,輸出這個(gè)乘積m。

分析:分解出的數(shù)既不是越多越好,也不是越大越好。

例n=12

(1)分解為1+1+1+…+1,12個(gè)

m=1*1*1???

(2)分角星為2+2+.??+2,6個(gè)2

m=26=64

24

(3)分解為3+3+3+3,4個(gè)3

m=34=81

(4)分解為4+4+4,3個(gè)4

m=43=64

(5)分解為6+6,2個(gè)6

m=62=36

(6)分角星為5+7

m=5*7=35

(7)分角翠為4+8

=4*8=3225

顯然,3最好。

算法:見(jiàn)與或結(jié)點(diǎn)圖。

26

圖的說(shuō)明:

1.當(dāng)n可以被3整除時(shí),就讓n分解成k個(gè)3,k=n13。

之后,調(diào)用一個(gè)算3的k次方的函數(shù)p(k),輸出p(k)。

2.當(dāng)n除3余1時(shí),可分解為1,3,3,…,3。從使乘積最大

的角度出發(fā),我們不希望分解出1來(lái),這時(shí),寧可讓1

與其中的一個(gè)3合并,為4。讓左=(〃—4)/3,接著

調(diào)用p(k),但輸出時(shí)再將原來(lái)減去的4當(dāng)作一個(gè)乘數(shù)

乘進(jìn)來(lái),即輸出4*p(k)。▼

3.當(dāng)n除3余2時(shí),可分解為2,3,3,…,3??梢匝赜蒙显V

思路讓左=(〃-2)/3,求p(k)。最后輸出時(shí)將2乘

入,即輸出2*p(k)。

4.這個(gè)程序我們采用多分支選擇語(yǔ)句,格式為“

switch(表達(dá)式)

case常量表達(dá)式1:{語(yǔ)句塊1;}

case常量表達(dá)式2:{語(yǔ)句塊2;}

case常量表達(dá)式n:{語(yǔ)句塊n;}

}

switch后面括弧中的表達(dá)式的值與case后面的常量

表達(dá)式的值相等時(shí),就執(zhí)行其后的語(yǔ)句。比如

28

switch(a)

case0{b=1;break;}

case1{b=10;break;}

case2{b=100;break;}

case3{b=1000;break;}

case4{b=10000;}

實(shí)踐上完成的任務(wù)是

29

1a=0

10—■1

b=\10Qa=2

1000a=3

10000,q=4

注音-

不可以沒(méi)有break。如果沒(méi)有的話(huà),不管a為0,還

是為1,為2或?yàn)?,b的值均為10000。

30

參考程序如下(n的分解.c)

#include<stdio.h>〃預(yù)編譯命令

longp(int);〃聲明函數(shù)p為長(zhǎng)整型,

//形參為整型

voidmain()//主函數(shù)

(//主程序開(kāi)始

intn,k;〃整型變量

longm;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論