版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章循環(huán)控制
用于解決語(yǔ)句的重復(fù)執(zhí)行,以克服一
條語(yǔ)句只能執(zhí)行一次的限制。
■幾種簡(jiǎn)要的循環(huán)結(jié)構(gòu)
■break和continue語(yǔ)句
■for語(yǔ)句的變化形式
■循環(huán)嵌套
第六章循環(huán)控制
■問(wèn)題:
、10
求sum=2i
i=l
intsum;
sum=1+2+3+4+5+6+7+8+9+10;
、100
求sum=2i?
i=l
求sum=2i?(n由鍵盤輸入)
i=l
第六章循環(huán)控制
■問(wèn)題:
、10
求sum=2i
i=l
i=1;sum=O;
sum=部分累加和+i(i=l??10)
sum=sum+i;i++;\
......,十行
sum=sum+i;i++;/
goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán)
一般形式:goto語(yǔ)句標(biāo)號(hào);
其中標(biāo)號(hào)是一個(gè)有效的標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符加上
一個(gè)“:”一起出現(xiàn)在函數(shù)內(nèi)某處,執(zhí)行g(shù)oto語(yǔ)
句后,程序?qū)⑻D(zhuǎn)到該標(biāo)號(hào)處并執(zhí)行其后的語(yǔ)句。
另外標(biāo)號(hào)必須與goto語(yǔ)句同處于一個(gè)函數(shù)中,但
可以不在一個(gè)循環(huán)層中。通常goto語(yǔ)句與if條
件語(yǔ)句連用,當(dāng)滿足某一條件時(shí),程序跳到標(biāo)
號(hào)處運(yùn)行。
例6.1使用goto語(yǔ)句實(shí)現(xiàn)求解1?100累計(jì)和
main()“l(fā)oop:"為語(yǔ)句標(biāo)號(hào)
{intn=l,sum=0;其命名遵循標(biāo)識(shí)符
命名規(guī)則。
loop:sum+=n;n++;
goto語(yǔ)句格式:goto
if(n<=100)gotoloop;標(biāo)號(hào),功能為:使
printf("sum=%d\n'',系統(tǒng)轉(zhuǎn)向標(biāo)號(hào)所在
sum);的語(yǔ)句行執(zhí)行。
■結(jié)構(gòu)化程序設(shè)計(jì)方法,主張限制使用
goto語(yǔ)句。因?yàn)闉E用goto語(yǔ)句,將會(huì)導(dǎo)
致程序結(jié)構(gòu)無(wú)規(guī)律、可讀性差。
另外,從功能上說(shuō),for語(yǔ)句可完全代
替當(dāng)型循環(huán)語(yǔ)句while,所以該語(yǔ)句也不
是必需的。
for語(yǔ)句
■1.用for語(yǔ)句實(shí)現(xiàn)
ftinclude<stdio.h>
main()
inti,sum=0;_^定重旻次裝
for(i=1;iv=100;i++)
sum=sum+i;-
printf(”%cT,siim);重復(fù)執(zhí)行的語(yǔ)句
for語(yǔ)句
■for語(yǔ)句格式:
for(初值飛達(dá)式;循環(huán)繼續(xù)表達(dá)式;循環(huán)變化表達(dá)式)
一條節(jié)反復(fù)執(zhí)行的白句;/
三個(gè)獨(dú)立的表達(dá)式
fbr(i=l;i<=10;i++)
sum=sum+i;
for語(yǔ)句
■for語(yǔ)句格式:
for(初值表達(dá)式;循環(huán)繼續(xù)表達(dá)式;循環(huán)變化表達(dá)式)
一條要反復(fù)執(zhí)行的語(yǔ)句;
執(zhí)行流程:
for語(yǔ)句
IJ
Ifbr(i=Li<=10E++)
■sum=sum+i^->
for語(yǔ)句
■從鍵盤輸入100個(gè)整數(shù),求其中正數(shù)之和。
include<stdio.h>
?重復(fù)步驟:
main()
(1輸入一個(gè)數(shù)
inti,sum=0,x;2對(duì)正數(shù)求和
for(i=0;i<100;i++){
scanf("%cT,&x);?共重復(fù)100次
if(x>0)sum=sum+x;
)
printf(”%d”,sum);
for語(yǔ)句
■從鍵盤輸入100個(gè)整數(shù),求其中正數(shù)的平均數(shù)。
ftinclude<stdio.h>
main(){
inti,count=0,x;
floatsum=0;
for(i=0;i<100;i++)
{scanf("%d”,&x);
if(x>0){sum=sum+x;count++;}
)
sum/=count;
printf("%fH,sum);
)
for語(yǔ)句
■用for語(yǔ)句實(shí)現(xiàn)10+9+8+7+6+5+4+3+2+1
ttinclude<stdio.h>
main()
(
inti,sum=0;
for(i=10;i>0;i--)
sum=sum+i;
printf(H%dH,sum);
while語(yǔ)句
■while(條件)
重復(fù)執(zhí)行的一條語(yǔ)句復(fù)合語(yǔ)句
不滿足
后一語(yǔ)句;
二while語(yǔ)句
[■while實(shí)現(xiàn)要點(diǎn)
整個(gè)循環(huán)由i控制,i稱循環(huán)變量
1i=1;循環(huán)變量必須有初值
.while(i<=10)繼續(xù)循環(huán)的條件
.{sum=sum+i;
.循環(huán)體j++;循環(huán)變量的改變
■
例6.2用while語(yǔ)句求1?100的累計(jì)和
main()
{inti=l,sum=0;/*初始化循環(huán)控制變量i和累計(jì)器
sum*/
while(i<=100)
{sum+=i;/*實(shí)現(xiàn)累加*/
i++;/*循環(huán)控制變量i增1*/
printf("sum=%d\n”,sum);
程序運(yùn)行情況如下:
sum=5050
,循環(huán)體如果包括一個(gè)以上語(yǔ)句,應(yīng)該用花括號(hào)括起來(lái),
■形成復(fù)合語(yǔ)句
while語(yǔ)句
■for語(yǔ)句與while語(yǔ)句比較
main()
{inti,sum=0;
for(i=1;i<=10;i++)while(i<=10)
sum=sum+i;{sum=sum+i;
printf("%d\sum);、i++;)
do-while語(yǔ)句
■用do-while語(yǔ)句實(shí)現(xiàn)
do-while語(yǔ)句格式:
do一條要反復(fù)執(zhí)行的語(yǔ)句;
while(條件表達(dá)式)
「while是先判別條件,再?zèng)Q定是否循環(huán);
do-while是先至少循環(huán)一次,然后再根
據(jù)循環(huán)的結(jié)果決定是否繼續(xù)循環(huán)。
do-while語(yǔ)句
■do-while語(yǔ)句實(shí)現(xiàn)流程
do-while語(yǔ)句
■do....while與while的用法有所不同
例:輸入一串正數(shù)求和,例:輸入一串正數(shù)求和,
直到數(shù)據(jù)學(xué)好?直到數(shù)據(jù)為非正數(shù)結(jié)束。
main()
main()
{intx,sum=0;
{intx,sum=0;scanf(66%d5\&x);
do{while(x>0){
scanf("%d”,&x);sum+=x;
sum+=x;scanf("%d”,&x);
}while(x>0))
printfV'sum=%d'',sum-x);printf(66sum=%d5\sum);
■編寫數(shù)列求和程序:
1+l/2+1/3+1/4+....+l/n
l/l+l/2+1/3+1/4+....+l/n
main()
{inti,n;floaty=0;
scanf("%d\&n);
for(i=1;i<=n;i++)
y+=1.0/i;
printf(Hn=%dy=%f\nH,n,y);
循環(huán)結(jié)構(gòu)的實(shí)現(xiàn)
循環(huán)實(shí)現(xiàn)要點(diǎn)「(1)找出什么要反復(fù)執(zhí)行
(2)重復(fù)到何時(shí)結(jié)束
假定輸入x=12345,逆序輸出。從低位開始分割
12345%10=5(1)反復(fù)執(zhí)行x%10
12345/10=1234x=x/10
1234%10=4(2)何時(shí)結(jié)束x==0
1234/10=123scanf(66%d5\&x);
123%10=3
123/10=12while(x>0)
12%10=2{printf(66%d
12/10=1x=x/10;
1%10=1}
1/10—0結(jié)束
循環(huán)結(jié)構(gòu)的實(shí)現(xiàn)
循環(huán)實(shí)現(xiàn)要點(diǎn):(1)找出什么要反復(fù)執(zhí)行
(2)重復(fù)到何時(shí)結(jié)束
假定輸入x=12345順序輸出,從高位開始分割
12345/10000=1開始如何得至
12345%10000=2345(1)Uloooo
2345/1000=2找輸入數(shù)據(jù)的位數(shù)
2345%1000=345d=l;
345/100=3for(i=10;x/i>0;i=i*10)
345%100=45
45/10=4d++;
45%10=5⑵每次循環(huán)縮小10倍
5/1=5⑶縮小到。結(jié)束
5%1=5
§6.2break和continue語(yǔ)句
例:讀入一行字符(不超過(guò)io個(gè)),給予輸出
include〃stdio.h〃有兩個(gè)條件決定循環(huán)的結(jié)束
main()main()
{charc;{charc;
inti=0;inti=0;
for(i=0;i<c=getchar();
{c=getchcfor(i=0;i<10&&c!='\n';i++)
if(c==,{putchar(c);兩個(gè)結(jié)束條件合并
putcharc=getchar();
)
continue流程
程序:
fbr(表1;表2;表3)
(語(yǔ)句1;
if(...)continue;
語(yǔ)句2;
)
for后的下一條語(yǔ)句;
for的下一條語(yǔ)句
continue語(yǔ)句例子
ftinclude〃stdio.h〃輸入:abc/
main()efgh/
{charc;123/
inti;輸出:abcefghl
for(i=0;i<10;i++)/*i>=10是結(jié)束條件*/
{c=getchar();
if(c='\n')continue;
putchar(c);/*c二回車也是結(jié)束條件*/
)
}問(wèn):若把break改成continue,
結(jié)果會(huì)怎樣?
§6.3for語(yǔ)句的變化形式
原形:inti,sum=0;
for(i=l;i<=10;i++)sum=sum+i;
§6.3for語(yǔ)句的變化形式
原形:inti,sum=0;
for(i=1;i<=10;i++)sum=sum+i;
§6.3for語(yǔ)句的變化形式
原形:inti5sum=0;
for(i=1;iv=10;i++)sum=sum+i;
變形1inti=1,sum=0;
for(;i<=10;i++)sum=sum+i;
變形2inti=1,sum=0;
for(;i<=10;){sum=sum+i;i++;}
變形3inti=1,su*=0;
for(;;){if(i>10)break;
無(wú)限宿環(huán)sum=sum+i;i++}
變形4inti,sum;
for(i=1,sum=0;i<=10;sum+=i,i++);
不管那一種變形,循環(huán)變量的初值、判斷和變化
表達(dá)式仍都存在,只是改變了所處的位置。
不管那一種變形,三個(gè)表達(dá)式的功能缺一不
可,且執(zhí)行流程不得改變。
原形:inti,sum=O;
for(i=1;i<=10;i++)sum=sum+i;
§6.4循環(huán)嵌套
一循環(huán)體中又包含了循環(huán)語(yǔ)句稱循環(huán)嵌套。
例:求S=1!+2!+3!+...+n!
分析:首先要循環(huán)n次來(lái)累加i!
for(i=l;i<=n;i++)
s=s+i!;
如果存在求階乘的運(yùn)算!,計(jì)算完成。
for(i=l;i<=n;i++)
(;
t=t*i;
§6.4循環(huán)嵌套
例:已知小雞0.5文錢/只,公雞2文錢/只,
母雞3文錢/只,現(xiàn)要求100文錢正好買100只雞,
請(qǐng)給出所有的組合。
組合問(wèn)題用計(jì)算機(jī)解,通常采取“湊”的辦法
母雞可能的只數(shù):0—100hen
公雞可能的只數(shù):0—100cock
小雞可能的只數(shù):0—100chick
然后對(duì)三種雞所有的組合方式,排除不等于
100元和100只的那些組合。
R§6.4循環(huán)嵌套
main()
■{
■intchick,cock,hen;
for(cock=0;cock<=100;cock++)cock=0->100
for(hen=0;hen<=100;hen++)hen=0^100
for(chick=0;chick<=100;chick++)chick=0
pf(cock+hen+chick==100&&~>100
cock*2+hen*3+chick*0.5==100)
?printf("cock=%dhen=%d
chick=%d\n”,cock,hen,chick);
§6.4循環(huán)嵌套
運(yùn)行結(jié)果:
cock=0hen=20chick=80
cock=5hen=17chick=78
cock=10hen=14chick=76
cock=15hen=11chick=74
cock=20hen=8chick=72
cock=25hen=5chick=70
cock=30hen=2chick=68
§6.4循環(huán)嵌套
運(yùn)行過(guò)程:
cock二°
"ken=Ochicl^p?100共101次〕
hen=lchick/?100共101次:
■hen=100chick=0?100共101次J次
cock=l
-口hen=0chfek=0?1Op10
共101次I101、多
~hen二100——chick-0-100共101次J次廣萬(wàn)
、r
次
cock=100
hen=0chick=0?100共101次1101
hen=100chick=0?100共101次j次J
§6.4循環(huán)嵌套
main()
(
intchick,cock,hen;
for(cock=0;cock<=50;cock++)
for(hen=0;hen<=33;hen++)
{chick=100-cock-hen;
if(cock*2+hen*3+chick*0.5==100)
printf("cock=%dhen=%d
chick=%d\nH,cock,hen,chick);
)
§6.4循環(huán)嵌套
循環(huán)嵌套均是大循環(huán)包小循環(huán)
絕對(duì)不允許循環(huán)體交叉!
for()
for()■
{.....{………
—do{do{-
>3.....}while]...,-
/\}while(….)〉
§6.4循環(huán)嵌套
main()
(
intchick,cock,hen;
for(cock=0;cock<=50;cock++)
{for(hen=0;hen<=33;hen++)
{chick=100-cock-hen;
if(cock*2+hen*3+chick*0.5==100)
)
§6.4循環(huán)嵌套
main()
結(jié)論:break只能終止內(nèi)層循環(huán)
intchick,cock,hen,flag=0;
for(cock=0;cock<=50;cock++)
{for(hen=0;hen<=33;hen++)
{chick=100-cock-hen;
if(cock*2+hen*3+chick*0.5==100)
}{flag=1;br
“接力賽”第一棒
if(flag)break]
)printf(......“接力賽”第二棒
例題
求算式】__L+L_-+
612203042_____-?,“一
置到t第40項(xiàng)的和
main()
{inti,s=l;第i項(xiàng):l/(i*(i+l))
floaty=0;
符號(hào):s=l
for(i=l;i<=40;i++)
{y=y+s/((float)
s=-s;
}
printf("%f”,y);
例題
求算式】__L+L_-+
612203042_____-?,“一
置到t第40項(xiàng)的和
main()
{inti,s=-l;第i項(xiàng):l/(i*(i+l))
floaty=l;
符號(hào):s=l
for(i=2;i<=40;i++)
{y=y+s/((float)
s=-s;
}
printf("%f”,y);
例題
編禾ftinclude<stdio.h>
main()
{inti,j;
printfT〃);第1行先輸出5個(gè)空格
for(i=l;i<10;i++)printf(〃(%d)〃,i);
putchar('\n');
for(i=l;i<10;i++){i代表行
printf(〃(%d)〃,i);
for(j=l;j<10;j++)j代表列
printf(z/%2d〃,i*j);
putchar('\n');
例題
下歹ll程序求Sn=a+aa+aaa+……+aa...aa(n個(gè)己)的值,
sn=2+22+222+2222+22222,其值應(yīng)為24690。
#include<stdio.h>
Imain()
inta,n,count=lrsn=0,tn=0;
scanf(''%d^d”,&a,&n);
for(count=l;count<=n,count++){
tn=tn*10+a;tn=0*10+2=2
sn=sn+tn;tn=2*10+2=22
}tn=22*10+2=222
printf(''th一snis:%d\n”,sn);
)
[程序舉例
■l.輸入一行字符,統(tǒng)計(jì)其中的單詞數(shù),單詞之間用
格分隔開。
如:輸入youareastudent則有4個(gè)單詞。
智^思路:
M)用空格區(qū)分每一個(gè)單詞;
■)遇到空格,則表示前一個(gè)單詞結(jié)束;(word=0)
(3)遇到一個(gè)非空格:若前面一個(gè)字符是空格(即
ord=0),則開始一個(gè)新單詞(word=1,計(jì)數(shù)加1,;
若前面一個(gè)字符是非空格(即word=1),則仍然是同
■^個(gè)單詞。
wHclude<stdio.h>
main()
■charstring[81];
inti,num=O,word=0;
gets(string);
.for(i=0;string[i]!=i\0,;i++)
if(string[i]=='')word=0;
elseif(word==0){
word++;num++;
u,,
printf(Thereare%dwordsintheline.\nJnum);
程序舉例
2.打印以下圖案:
$
$$$
eeeeed
e金金e金e金e金e金e金e
wwDwweCL
I$$$$
分析:分上下兩部分考慮
對(duì)上半部每一行:$數(shù)+空格數(shù)=列數(shù)(n)
行數(shù)$數(shù)空格數(shù)(單邊)
.........$.......:11(n-1)/2
$$$|22*2-1=3(n-3)/2
eeeee32*3-1=5(n-5)/2
金讓讓金金金企
VVVVVVV42*4-1=7(n-7)/2
一般地:2*i-1(n-(2*i-1))/2
分析:
對(duì)下半部每一行:$數(shù)+空格數(shù)=列數(shù)(n)
行數(shù)空格數(shù)(單邊)$數(shù)
$11n-1*2
$$$22n-2*2
eeeee33n-3*2
■■
e金讓e讓e金e金e金e金e11n-i*2
$$$
?……$……
■#include<stdio.h>
■main()
intn_blank,n_dollar,i,j,n,m;
scanf("%d”,&n);
m=(n+1)/2;
for(i=1;i<=m;i++){
n_dollar=2*i-1;
n_blank=(n-n__dollar)/2;
for(j=0;j<n_blank;j++)
putcharC
forG=0;j<n_dollar;j++)
putchar($);
putchar(J\n5);
)
for(i=1;i<m;i++){
n_blank=i;
n_dollar=n-2*n_blank;
for(j=0;j<n_blank;j++)
putchar(fi
for(j=0;j<n_dollar;j++)
putcharC$9);
putchar(i\n,);
)
return0;
)
例6.6用公式求TT直到某一項(xiàng)的絕對(duì)值小于10-6
#include<math.h>
main()
{Fl,pi=0,n=4,s=l
ints;
當(dāng)It|
floatn,t,pi;
t=l,pi=0;n=l.0;s=l;pi=pi+t
while(fabs(t)>le-6)
{pi=pi+t;n=n+2
n=n+2;s=-s
s=-s;
t=s/n;t=s/n
pi=pi*4
pi=pi*4;
printf(〃pi=%10.6f\n〃,pi);
■[例6.7]求Fibonacci數(shù)列的前40個(gè)數(shù)。該數(shù)列的
生成方法為:F.l,F2=l,Fn=Fnl+Fn2
(n>=3),即從第3個(gè)數(shù)開始,每個(gè)數(shù)等于前2
個(gè)數(shù)之和。
fbri=lto20
輸出fl,f2
fl=fl+f2
f2=f2+fl
main()
{longintfl=l,f2=l;/*定義并初始化數(shù)列的頭2個(gè)
數(shù)*/
inti=l;/*定義并初始化循環(huán)控制變量i*/
fbr(i=l;i<=20;i++)/*1組2個(gè),20組40個(gè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西省太原市第二十一中學(xué)2025屆高二生物第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 河南省新鄉(xiāng)市輝縣市第一中學(xué)2025屆生物高一上期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 湖南省新課標(biāo)2025屆數(shù)學(xué)高二上期末考試試題含解析
- 廣東省陽(yáng)山中學(xué)2025屆高二數(shù)學(xué)第一學(xué)期期末質(zhì)量跟蹤監(jiān)視試題含解析
- 河南省新鄉(xiāng)市新鄉(xiāng)市一中2025屆高一數(shù)學(xué)第一學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 云南省昆明市西山區(qū)民中2025屆高二生物第一學(xué)期期末復(fù)習(xí)檢測(cè)試題含解析
- 2025屆湖南省岳陽(yáng)臨湘市生物高一第一學(xué)期期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 福建省三明市清流縣第二中學(xué)2025屆數(shù)學(xué)高一上期末聯(lián)考模擬試題含解析
- 湖南省桃花源一中2025屆生物高一上期末考試模擬試題含解析
- 江蘇省無(wú)錫市江陰市四校2025屆高三英語(yǔ)第一學(xué)期期末聯(lián)考模擬試題含解析
- (高清版)輻射供暖供冷技術(shù)規(guī)程JGJ142-2012
- 漢語(yǔ)拼音字母描紅示范(打印版)
- 新視野大學(xué)英語(yǔ)視聽說(shuō)教程ppt課件
- 攻城掠地?cái)?shù)據(jù)以及sdata文件修改教程
- 醫(yī)療廢物轉(zhuǎn)運(yùn)箱消毒記錄表
- 最新投標(biāo)書密封條
- 看守所崗位職責(zé)
- Sentaurus在ESD防護(hù)器件設(shè)計(jì)中的應(yīng)用PPT課件
- 《拋物線焦點(diǎn)弦的性質(zhì)探究》學(xué)案
- 人教版小學(xué)二年級(jí)數(shù)學(xué)上冊(cè)全冊(cè)教案【表格式】
- 佛山嶺南新天地項(xiàng)目概況.
評(píng)論
0/150
提交評(píng)論