亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C語言循環控制語句

2019-11-17 05:23:06
字體:
來源:轉載
供稿:網友
循環控制結構(又稱重復結構)是程序中的另一個基本結構。在實際問題中,經常需要
進行大量的重復處理,循環結構可以使我們只寫很少的語句,而讓計算機反復執行,從而完成大量類同的計算。
C語言提供了while語句、do...while語句和for語句實現循環結構。
3.4.1while語句
while語句是當型循環控制語句,一般形式為:
while<表達式>語句;
語句部分稱為循環體,當需要執行多條語句時,應使用復合語句。
while語句的流程圖見圖3-8,其特點是先判定,后執行,若條件不成立,有可能一次也不執行。
C語言循環控制語句(圖一)
[例3-11]求n!
分析:n!=n*(n-1)*(n-2)*..2*1,0!=1。即S0=1,Sn=Sn-1*n。可以從S0開始,依次求出S1、S2、...Sn。
統一令S等于階乘值,S的初值為0!=1;變量i為計數器,i從1變到n,每一步令S=S*i,
則最終S中的值就是n!。
流程圖見圖3-9,程序如下:
C語言循環控制語句(圖二)
C語言循環控制語句(圖三)
考察圖3-9中循環部分的流程圖可以看出,在循環前各變量應有合適的值(s=1),另外,控制循環結束的變量(此處為i)必須在循環體中被改變,否則,循環將無限進行下去,成為死循環。
C語言循環控制語句(圖四)
C語言循環控制語句(圖五)
本題中,將多項式的每一項用t表示,s代表符號,在每一次循環中,只要改變s、n的值,就可求出每一項t。
一般情況下,while型循環最適合于這種情況:知道控制循環的條件為某個邏輯表達式的
值,而且該表達式的值會在循環中被改變,如同例3-12的情況一樣。
3.4.2do...while語句
在C語句中,直到型循環的語句是do...while,它的一般形式為:
do語句while<表達式>
其中語句通常為復合語句,稱為循環體。
do...while語句的流程圖見圖3-10,其基本特點是:先執行后判定,因此,循環體至少被執行一次。
但需要注重的是,do...while與標準的直到型循環有一個極為重要的區別,直到型循環是當條件為真時結束循環,而do...while語句恰恰相反,當條件為真時循環,一旦條件為假,立即結束循環,請注重do...while語句的這一特點。
例[3-13]計算sin(x)=x-x3/3!+x5/5!-x7/7!+...
直到最后一項的絕對值小于1e-7時為止。
分析:這道題使用遞推方法來做。
讓多項式的每一項與一個變量n對應,n的值依次為1,3,5,7,...,從多項式的前一項
算后一項,只需將前一項乘一個因子:
(-x2)/((n-1)*n)
用s表示多項式的值,用t表示每一項的值,程序如下:
C語言循環控制語句(圖六)
#include <math.h>
# include <stdio.h>
m a i n ( )
{
double s,t,x ;
int n ;
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);
}
運行結果如下:
RUN¿
pleaseinputx:1.5753¿
sin(1.575300)=0.999990
RUN¿
pleaseinputx:-0.65¿
sin(-0.650000)=-0.605186
3.4.3for語句
for語句是循環控制結構中使用最廣泛的一種循環控制語句,非凡適合已知循環次數的情
況。它的一般形式為:
for(<表達式1>;<表達式2>;<表達式3>)語句
for語句很好地體現了正確表達循環結構應注重的三個問題:
1)控制變量的初始化。
2)循環的條件。
3)循環控制變量的更新。
表達式1:一般為賦值表達式,給控制變量賦初值;
表達式2:關系表達式或邏輯表達式,循環控制條件;
表達式3:一般為賦值表達式,給控制變量增量或減量。
語句:循環體,當有多條語句時,必須使用復合語句。
for循環的流程圖如圖3-11,其執行過程如下:
首先計算表達式1,然后計算表達式2,若表達式2為真,則執行循環體;否則,退出for循環,執行for循環后的語句。假如執行了循環體,則循環體每執行一次,都計算表達式3,然后重新計算表達式2,依此循環,直至表達式2的值為假,退出循環。
[例3-14]計算自然數1到n的平方和。
C語言循環控制語句(圖七)
# include <stdio.h>
# include <math.h>
main ( )
{
int i;
float s;
printf("please input n :");
scanf("%d",&n);
s=0.0;
for(i=1;i<=n;i++)
s=s+(float)(i)*(float)(i);
printf("1*1+2*2+...+%d*%d=%f/,nn",n,s);
}
運行結果如下:
RUN
please input n:5
1*1+2*2+...+5*5=55.000000
for語句的幾種格式
for語句的三個表達式都是可以省略的,但分號“;”絕對不能省略。

a.for(;;)語句;
這是一個死循環,一般用條件表達式加break語句在循環體內適當位置,一旦條件滿足時,
用break語句跳出for循環。
例如,在編制菜單控制程序時,可以如下:
for(;;)
{
printf("please input choice(Q=Exit):");顯/*示菜單語句塊:*/
scanf("%c",&ch);
if(ch=='Q')or(ch=='q')break;語/*句段*/
}
b.for(;表達式2;表達式3)
使用條件是:循環控制變量的初值不是已知常量,而是在前面通過計算得到,例如:
i=m-n;
⋯⋯
for(;i<k;i++)語句;
c.for(表達式1;表達式2;)語句
一般當循環控制變量非規則變化,而且循環體中有更新控制變量的語句時使用。
例如:
for(i=1;i<=100;)
{
⋯⋯
i=i*2+1;
⋯⋯
}
d.for(i=1,j=n;i<j;i++,j--)語句;
在for語句中,表達式1、表達式3都可以有一項或多項,如本例中,表達式1同時為i和j賦
初值,表達式3同時改變i和j的值。當有不止一項時,各項之間用逗號“,”分隔。
另外,C語言還答應在循環體內改變循環變量的值,這在某些程序的設計中是很有用的。
到此,我們已經學習了C語言中三種循環控制語句while、do...while和for語句,下面再討論兩個問題:
三種語句的選用
同一個問題,往往既可以用while語句解決,也可以用do...while或者for語句來解決,但在
實際應用中,應根據具體情況來選用不同的循環語句,選用的一般原則是:
1)假如循環次數在執行循環體之前就已確定,一般用for語句;假如循環次數是由循環體
的執行情況確定的,一般用while語句或者do...while語句。
2)當循環體至少執行一次時,用do...while語句,反之,假如循環體可能一次也不執行,
選用while語句。
循環的嵌套
一個循環的循環體中有另一個循環叫循環嵌套。這種嵌套過程可以有很多重。一個循環
外面僅包圍一層循環叫二重循環;一個循環外面包圍兩層循環叫三重循環;一個循環外面包
圍多層循環叫多重循環。
三種循環語句for、while、do...while可以互相嵌套自由組合。但要注重的是,各循環必須
完整,相互之間絕不答應交叉。如下面這種形式是不答應的:
do
{
for(;;)
{
......
}while();
}
[例3-15]打印8行7列的星形矩陣。
流程圖見圖3-12,程序如下:
C語言循環控制語句(圖八)
#include<stdio.h>
main()
{
inti,j;
for(i=0;i<8,i++)/*控制行*/
{
for(j=0;j<7>;j++)/*控制列*/
printf("*");
printf("/n");/*換行*/
}
}
打印結果如下:
RUN
*******
*******
*******
*******
*******
*******
*******
*******
將程序中for(j=0;j<7;j++)改為for(j=0;j<i;j++),用行數來控制每行星號的多少,就可以
打印三角形。
3.4.4break與continue語句
有時,我們需要在循環體中提前跳出循環,或者在滿足某種條件下,不執行循環中剩下
的語句而立即從頭開始新的一輪循環,這時就要用到break和continue語句。
1.break語句
在前面學習switch語句時,我們已經接觸到break語句,在case子句執行完后,通過break
語句使控制立即跳出switch結構。在循環語句中,break語句的作用是在循環體中測試到應立
即結束循環時,使控制立即跳出循環結構,轉而執行循環語句后的語句。
[例3-16]打印半徑為1到10的圓的面積,若面積超過100,則不予打印。
#include<stdio.h>
main()
{
intr;
float area;
for(r=1;r<=10;r++)
{
area=3.141593*r*r;
if(area>100.0)
break;
printf("square=%f/n",area);
}
printf("nowr=%d/n",r);
}運行程序:
RUN
square=3.141593
square=12.566373
square=28.274338
square=50.265488
square=78.539825
nowr=6
當break處于嵌套結構中時,它將只跳出最內層結構,而對外層結構無影響。
2.continue語句
continue語句只能用于循環結構中,一旦執行了continue語句,程序就跳過循環體中位于
該語句后的所有語句,提前結束本次循環周期并開始新一輪循環。
[例3-17]計算半徑為1到15的圓的面積,僅打印出超過50的圓面積。
#include<stdio.h>
main()
{
int r;
float area;
for(r=1;r<=5;r++)
{
area=3.141593*r*r;
if(area<50.0)
continue;
printf("square=%f",area);
}
}
結果為:
RUN
square=50.265488
square=78.539825
同break一樣,continue語句也僅僅影響該語句本身所處的循環層,而對外層循環沒有影
響。
3.4.5程序應用舉例
[例3-18]驗證哥德巴赫猜想:任一充分大的偶數,可以用兩個素數之和表示,例如:
4=2+2
6=3+3
......
98=19+79
哥德巴赫猜想是世界聞名的數學難題,至今未能在理論上得到證實,自從計算機出現后,人們就開始用計算機去嘗試解各種各樣的數學難題,包括費馬大定理、四色問題、哥德巴赫猜想等,雖然計算機無法從理論上嚴密地證實它們,而只能在很有限的范圍內對其進行檢驗,但也不失其意義。費馬大定理已于1994年得到證實,而哥德巴赫猜想這枚數學王冠上的寶石,至今無人能及。
分析:我們先不考慮怎樣判定一個數是否為素數,而從整體上對這個問題進行考慮,可
以這樣做:讀入一個偶數n,將它分成p和q,使n=p+q。怎樣分呢?可以令p從2開始,每次加1,而令q=n-p,假如p、q均為素數,則正為所求,否則令p=p+q再試。
其基本算法如下:
1)讀入大于3的偶數n。
2)P=1
3)do{
4)p=p+1;q=n-p;
5)p是素數嗎?
6)q是素數嗎?
7)}whilep、q有一個不是素數。
8)輸出n=p+q。
為了判明p、q是否是素數,我們設置兩個標志量flag p和flag q,初始值為0,若p是素數,
令flag p=1,若q是素數,令flag q=1,于是第7步變成:
7)}while(flag p*flag q==0);
再來分析第5、第6步,怎樣判定一個數是不是素數呢?
素數就是除了1和它自身外,不能被任何數整除的整數,由定義可知:
2、3、5、7、11、13、17、19等是素數;
1、4、6、8、9、10、12、14等不是素數;
要判定i是否是素數,最簡單的辦法是用2、3、4、⋯⋯i-1這些數依次去除i,看能否除盡,
若被其中之一除盡,則i不是素數,反之,i是素數。
但其實,沒必要用那么多的數去除,實際上,用反證法很輕易證實,假如小于等于i的平
方根的數都除不盡,則i必是素數。于是,上述算法中的第5步、第6步可以細化為:
第5)步p是素數嗎?
flag p=1;
for(j=2;j<=[sqrt(p)];j++)
ifp除以j的余數=0
{flag p=0;
break;}
第6)步q是素數嗎?
flag q=1;
for(j=2;j<=[sqrt(q)];j++)
ifq除以j的余數=0
{flag q=0;
break;}
程序如下:
#include<math.h>
#include<stdio.h>
main()
{
intj,n,p,q,flag p,flag q;
printf("please input n:");
scanf("%d",&n);
if(((n%2)!=0)(n<=4))
printf("inputdataerror!/n");
else
{
p=1;
do{
p=p+1;
q=n-p;
flag p=1;
for(j=2;j<=(int)(floor(sqrt((double)(p))));j++)
{
if((p%j)==0)
{
flag p=0;
break;
}
}
flag q=1;
for(j=2;j<=(int)(floor(sqrt((double)(q))));j++)
{
if((q%j)==0)
{
flag q=0;
break;
}
}
}while(flag p*flag q==0);
printf("%d=%d+%d/n,"n,p,q);
}
}
程序運行結果如下:
RUN¿
please input n:8
8=3+5
RUN
please input n:98
98=19+79
RUN
please input n:9
input data error!



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线观看国产欧美| 国产有码在线一区二区视频| www.亚洲男人天堂| 国产精品久久久久久久app| 欧美三级免费观看| 日本午夜人人精品| 亚洲第一网中文字幕| 久久久在线免费观看| 69av在线视频| 日韩中文字幕在线播放| 狠狠躁夜夜躁人人爽天天天天97| 久久夜色精品亚洲噜噜国产mv| 欧美中文字幕在线播放| 91社区国产高清| 欧美激情在线狂野欧美精品| 欧美日韩国产精品一区| 亚洲直播在线一区| 成人中文字幕+乱码+中文字幕| 欧美日韩一区二区在线| 精品久久久国产精品999| 亚洲男人7777| 欧美理论片在线观看| 国模精品视频一区二区三区| 91精品啪aⅴ在线观看国产| 欧美成人精品xxx| 97视频在线观看免费| 欧美性理论片在线观看片免费| 国产精品精品久久久久久| 91tv亚洲精品香蕉国产一区7ujn| 亚洲高清一二三区| 欧美激情亚洲视频| 国产性猛交xxxx免费看久久| 国产91在线高潮白浆在线观看| 91视频国产一区| 久久久久久久久久久久久久久久久久av| 亚洲va久久久噜噜噜久久天堂| 国产精品福利片| 热久久免费视频精品| 国产成人精品a视频一区www| 亚洲人成网站999久久久综合| 亚洲精品美女在线观看播放| 国产精品视频专区| 国产精品观看在线亚洲人成网| 亚洲xxxx视频| 精品成人在线视频| 欧美成年人在线观看| 91在线视频九色| 中文字幕日韩精品在线| 91精品国产91久久久久久| 亚洲а∨天堂久久精品9966| 国产精品444| 亚洲第一国产精品| 中文国产成人精品| 国产日韩欧美成人| 在线观看日韩www视频免费| 超在线视频97| 日韩在线激情视频| 亚洲成人精品在线| 国产精品久久久久久久天堂| 久久精品国产欧美激情| 国产亚洲精品久久久久久| 青青草成人在线| 一本色道久久88精品综合| 操日韩av在线电影| 欧美精品成人91久久久久久久| 国产精品最新在线观看| 中文国产成人精品久久一| 亚洲天堂av在线免费观看| 亚洲人成绝费网站色www| 亚洲欧美日韩中文在线| 欧洲日本亚洲国产区| 欧美黑人xxx| 国产亚洲人成a一在线v站| 91精品国产91| 亚洲综合色av| 人妖精品videosex性欧美| 国产欧美在线观看| 日韩国产精品视频| 国产欧美精品在线| 国产精品白嫩初高中害羞小美女| 亚洲激情免费观看| 欧美视频在线免费看| 日韩视频在线免费观看| 在线观看久久av| 中文字幕av一区二区| 91精品久久久久久久久中文字幕| 一区二区三区无码高清视频| 国产精品美乳在线观看| 欧美激情免费看| 久久久久久免费精品| 欧美激情国产精品| 福利视频第一区| 国产精品天天狠天天看| 欧美成人精品影院| 日韩大片免费观看视频播放| 日本精品一区二区三区在线| 国产精品久久97| 日韩成人在线电影网| 亚洲热线99精品视频| 亚洲国产精彩中文乱码av在线播放| 欧美日韩国产页| 亚洲性av网站| 亚洲最新中文字幕| 久久精品视频导航| 国产日产欧美a一级在线| 国产欧美日韩精品在线观看| 97在线免费观看| 久久国内精品一国内精品| 伊人久久久久久久久久| 精品国产乱码久久久久久婷婷| 91在线视频免费| 国产精品久久一区| 亚洲最大的免费| 国产一区二区精品丝袜| 日韩电影中文字幕av| 亚洲免费精彩视频| 久久精品国产免费观看| 91在线视频九色| 欧美日韩一区免费| 一区二区三区亚洲| 欧美日本中文字幕| www.国产一区| 国产成人精品免高潮费视频| 日韩av手机在线观看| 中文字幕在线观看日韩| 欧美激情一区二区三区高清视频| 欧美大片免费观看| 日本欧美国产在线| 亚洲成人网在线| 久久久91精品国产一区不卡| 精品在线观看国产| 在线亚洲男人天堂| 欧美成人剧情片在线观看| 亚洲欧美日韩久久久久久| 亚洲福利在线播放| 亚洲第一区在线| 4438全国成人免费| 亚洲aⅴ男人的天堂在线观看| 国产精品www色诱视频| 亚洲日韩第一页| 中文字幕一区二区三区电影| 91啪国产在线| 精品久久久久久中文字幕大豆网| 日韩电影视频免费| zzjj国产精品一区二区| 久久伊人色综合| 91久久久久久久久久久| 精品国产乱码久久久久久虫虫漫画| 精品夜色国产国偷在线| 欧美日韩中文字幕综合视频| 国产欧美一区二区三区久久| 国产成人综合久久| 欧美日韩亚洲91| 欧美国产第一页| 久久精品99久久久香蕉| 欧美做爰性生交视频| 欧美国产高跟鞋裸体秀xxxhd| 91亚洲国产成人精品性色| 欧美日韩性生活视频| 国产成人jvid在线播放| 亚洲天堂成人在线视频| 久久久精品国产亚洲| 亚洲色图国产精品| 欧美国产日韩二区|