本題中,將多項式的每一項用t表示,s代表符號,在每一次循環(huán)中,只要改變s、n的值,就可求出每一項t。
一般情況下,while型循環(huán)最適合于這種情況:知道控制循環(huán)的條件為某個邏輯表達式的值,而且該表達式的值會在循環(huán)中被改變,如同例3-12的情況一樣。
3.4.2do...while語句
在C語句中,直到型循環(huán)的語句是do...while,它的一般形式為:
do語句while<表達式>
其中語句通常為復(fù)合語句,稱為循環(huán)體。
do...while語句的流程圖見圖3-10,其基本特點是:先執(zhí)行后判斷,因此,循環(huán)體至少被執(zhí)行一次。
但需要注意的是,do...while與標(biāo)準(zhǔn)的直到型循環(huán)有一個極為重要的區(qū)別,直到型循環(huán)是當(dāng)條件為真時結(jié)束循環(huán),而do...while語句恰恰相反,當(dāng)條件為真時循環(huán),一旦條件為假,立即結(jié)束循環(huán),請注意do...while語句的這一特點。
例[3-13]計算sin(x)=x-x3/3!+x5/5!-x7/7!+...
直到最后一項的絕對值小于1e-7時為止。
分析:這道題使用遞推方法來做。
讓多項式的每一項與一個變量n對應(yīng),n的值依次為1,3,5,7,...,從多項式的前一項算后一項,只需將前一項乘一個因子:
(-x2)/((n-1)*n)
用s表示多項式的值,用t表示每一項的值,程序如下:
#include <math.h>
# include <stdio.h>
m a i n ( )
{
double s,t,x ;
int n ;
printf("please input x :");
scanf("%lf",&x);
t=x;
n=1;
s=x;
do
{
n=n+2;
t=t*(-x*x)/((float)(n)-1)/(float)(n);
s=s+t;
}while(fabs(t)>=1e-7);
printf("sin(%f)=%lf,"x,s);
}
運行結(jié)果如下:
RUN¿
pleaseinputx:1.5753¿
sin(1.575300)=0.999990
RUN¿
pleaseinputx:-0.65¿
sin(-0.650000)=-0.605186
3.4.3for語句
for語句是循環(huán)控制結(jié)構(gòu)中使用最廣泛的一種循環(huán)控制語句,特別適合已知循環(huán)次數(shù)的情況。它的一般形式為:
for(<表達式1>;<表達式2>;<表達式3>)語句
for語句很好地體現(xiàn)了正確表達循環(huán)結(jié)構(gòu)應(yīng)注意的三個問題:
1)控制變量的初始化。
2)循環(huán)的條件。
3)循環(huán)控制變量的更新。
表達式1:一般為賦值表達式,給控制變量賦初值;
表達式2:關(guān)系表達式或邏輯表達式,循環(huán)控制條件;
表達式3:一般為賦值表達式,給控制變量增量或減量。
語句:循環(huán)體,當(dāng)有多條語句時,必須使用復(fù)合語句。
for循環(huán)的流程圖如圖3-11,其執(zhí)行過程如下:
首先計算表達式1,然后計算表達式2,若表達式2為真,則執(zhí)行循環(huán)體;否則,退出for循環(huán),執(zhí)行for循環(huán)后的語句。如果執(zhí)行了循環(huán)體,則循環(huán)體每執(zhí)行一次,都計算表達式3,然后重新計算表達式2,依此循環(huán),直至表達式2的值為假,退出循環(huán)。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |