正文 第18章 循環結構程序設計2(2 / 2)

s+=x;

k+=2;

sign*=-1;

x=sign/(double)(k);/*強製類型轉換,使x得到浮點數值*/

s*=4;/*π值*/

printf("ThePIis:%108f",s);

運行結果為:

ThePIis:314159263

[例69]給定一個整數m,判斷其是否為素數。

分析:m是素數的條件是不能被2,3,…,m-1中的任何一個數整除。根據這一條件,可通過一個循環判斷該數是否為素數。

#include

voidmain()

longm,inti;

printf("Enteranumber:\n");

scanf("%ld",&m);

for(i=2;i=m。也就是說,如果m不是素數,一定能找到一個整數i能整除m,即m%i為0。於是,循環可以在2~m內進行。

改進後的算法可以寫成如下形式:

#include

#include

voidmain()

longm;inti;doublesqrtm;

printf("Enteranumber:\n");

scanf("%ld",&m);

sqrtm=sqrt(m);

for(i=2;i=3)

分析:這個數列如果用最直接的思考方法,最簡單的方式就是要求這個數列的前n項,就定義n個變量(或者是長度為n的數組),每一個變量對應數列中的一個數。但當n的值增大時,定義變量的工作將變得不可行。此時我們需要考慮將算法進行一定程度的優化。對於這個問題,我們可以發現,如果定義兩個變量f1、f2,當使用完它們的值之後,實際上這兩個變量便不再起作用。f3、f4的值便可以存儲在這兩個變量裏,後麵的f5、f6、…、f(n-1)、f(n)的值都能以此循環類推,可以用f1、f2這兩個變量進行存儲。下麵是具體代碼(假設問題為求數列的前20項):

#include

voidmain()

longf1=1,f2=1;/*用long避免數值越界*/

intn;

for(n=1;n