計算機課件第6章循環(huán)_第1頁
計算機課件第6章循環(huán)_第2頁
計算機課件第6章循環(huán)_第3頁
計算機課件第6章循環(huán)_第4頁
計算機課件第6章循環(huán)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

本章主要內(nèi)容

?用got。語句實現(xiàn)循環(huán)控制

?while循環(huán)控制

?do-while循環(huán)控制

?for循環(huán)控制

?循環(huán)結構中的跳轉語句

?循環(huán)的嵌套

?循環(huán)結構程序設計舉例

c

CC

2011-7-7

6.1goto語句及用goto構成循3

goto語句一般格式:

goto語句標號;

?????????

標號:語句;

。功能:無條件轉移語句

?:?說明:

不能用整數(shù)作標號

只能加在可執(zhí)行語句前面

可與if一起構成循環(huán)

限制使用goto語句

例如:4

【例6」】編寫程序,求100個自然數(shù)的和

即:s=1+2+3+...+100

思路:尋找加數(shù)與求和的規(guī)律

加數(shù)i——從1變到100,每循環(huán)一次,使i增1,

直到i的值超過100。i的初值設為1。

求和---設變量sum存放和,循環(huán)求

sum=sum+i,直至i超過100。

/一

I

CC

2011-7-7

用if和goto語句構成循

2011-7-7

?灌意:

goto語句怩實現(xiàn)程序無條件挎移,,編程

梃供了便利。便是無限制地使用,會破壞

程序的修構化程度。因此或限制使用。

CC

2011-7-7

6.2while循環(huán)控制7

?語句'一'般格式

while(表達式)循環(huán)體語句

?一般為關系表達式?稱為內(nèi)嵌語句,

或邏輯表達式,也可以是基本語句、

可以是C語言其他控制語句,也可

類型的合法表達式以是復合語句

?用來控制循環(huán)體是?是循環(huán)重復執(zhí)行

否執(zhí)行的部分

2011-7-7

功能:8

?計算表達式的值,為非0(邏輯真)時,重復執(zhí)

行內(nèi)嵌語句,每執(zhí)行一1次,就判斷一1次表達式

的值,直到表達式的值為0時結束循環(huán),轉去執(zhí)

行while后面的語句。

循環(huán)控制條件

N-S結構圖

當表達式為真

|語句]

T~「

循和體

2011-7-7

9

。特點:先判斷表達式,后執(zhí)行循環(huán)體

?:?說明:

循環(huán)體有可能一次也不執(zhí)行

循環(huán)體可為任意類型語句

下列情況,退出while循環(huán)

?條件表達式不成立(為零)

?循環(huán)體內(nèi)遇break,return,goto

?無限循環(huán):while(l)

循環(huán)體;

/一

I

CC

2011-7-7

例如:10

【例6.2】用while編寫程序,求100個自然數(shù)的和

2011-7-7

注意:11

?如果while的(表達式)值為0,則循環(huán)體一

次也不執(zhí)行(例如當i的初值=101)o

?在循環(huán)體中必須有使循環(huán)趨向結束的操作,

否則循環(huán)將無限進行(死循環(huán))。

?在循環(huán)體中,語句的先后位置必須符合邏

輯,否則會影響運算結果。

思考程序段的輸出?

while(i<=100)運行后,輸出:

{i++;sum=5150

sum=sum+i;}原因是什么?

2011-7-7

12

【例6.3]顯示1?10的平方

/*ch5_21.c*/運行結果:

#include<stdio.h>1*1=1

2*2=4

main()

3*3=9

{inti=1;4*4=16

while(i<=10)5*5=25

{printf("%d*%d=%d\n",i,i,i*i);6*6=36

i++;7*7=49

8*8=64

)

9*9=81

10*10=100

2011-7-7

6.3do?while語句13

?語句'一般格式

do

{循環(huán)體語句}

while(表達式);

?功能:

-先執(zhí)行內(nèi)嵌語句(循環(huán)體),之后計算

表達式的值,不為0(邏輯真)時,再

執(zhí)行循環(huán)體并判斷條件,直到表達式的

值為0結束彳后訴,轉去執(zhí)行w屈下面

的語句。八'—「

CcC

2011-7-7

dowhile循環(huán)的算法14

流程圖N-S結構圖

{sum=sum+i;

用dowhile語句i++;

求100個自然數(shù)的和}while(i<=100);

printf("%d\r汽s/n);

2011-7-7

說明:15

?while和do?while都能實現(xiàn)循環(huán)控制,while

結構程序通常都可以轉換成dowhile結構

?區(qū)別:

-do-while語句先執(zhí)行循環(huán)體再判斷條

件,循環(huán)體至少執(zhí)行一次;

-while語句先判斷條件再執(zhí)行循環(huán)體,

循環(huán)體有可能一次也不執(zhí)行

?do—while和while循環(huán)體中一定要有能使表二

達式值趨于0的操作(如i++),否則會出現(xiàn)死

循環(huán)。Z「「

C

2011-7-7

16

例while和do?while比較

#include<stdio.h>#include<stdio.h>

main()mainQ

{inti,sum=0;{inti,sum=0;

nnnn

scanf(%d9&i);scanf(%d9&i);

dowhile(i<=10)

{sum+=i;{sum+=i;

i++;i++;

}while(i<=10);

nnn

printf(%d9sum);printf(%d"9sum);

當輸入的i值小于或等于10時,二者得到結果才謝'\咋當4>10

時,結果就不同了,此時對while循環(huán),一次也不莪存循耳體「

對do-while循環(huán)來說則要執(zhí)行一次循環(huán)體。。c

2011-7-7

do?while語句的簡單應用17

例6.4】用輾轉相除法求m和n的最大公約數(shù)

「C

2011-7-7

算法和程序:

main()

{intm,n,r;

scanf(M%d,%d,,,&m,&n);

if(m<n)

{r=m;m=n;n=r;}

do

{r=m%n;程序運行情況如下:

m=n;24,60/

n=r;

}while(r!=0);12

printf("%d\rT,m)

}

Cc

2011-7-7

6.4for語句19

?功能:

-計算表達式1的值,再判斷表達式2,如果其

值為非0(邏輯真),則執(zhí)行內(nèi)嵌語句(循環(huán)

體),并計算表達式3;之后再去判斷表年式2,

一直到其值為0時結束循環(huán),執(zhí)行后續(xù)語句入「

2011-7-7

for語句的算法20

流程圖N?S結構圖

計算表達式1for(表達式1;表達式2;表達式3)

語句

例如:可部分或全部省略,

main()但不可省略

語句{inti,sum;

sum=0;

計算表達式3for(i=1;i<=100;i++)/

sum=sum+i;

printf("sum=%d\n^surrQ;

2011-7-7

21

⑴表達式1、2、3全省略,即:

for(;;)

就等同于:while(1),會無限循環(huán)(死循環(huán))

⑵省略表達式1和表達式3,即:

for(;表達式2;)

就等同于:while(表達式2)

(3)省略表達式2,即:

for(表達式1;;表達式3)

就等同于:表達式1;whilefl){…表達式3;廠\

注意:在省略某個表達式時,應在適當位置進行循、

環(huán)控制的必要操作,以保證循環(huán)的正確執(zhí)行

2011-7-7

22

(1)i=1;

for(;i<=100;i+?sum+=i;

⑵for(i=1;;i++)

{...if(i>100)...

-}

(3)for(i=1;i<=100;)

{…i++;…}

(4)i=1;

for(;;)

{...if(i>100)...

i++;...}cc

2011-7-7

說明:23

?所有用while語句實現(xiàn)的循環(huán)都可以用

for語句實現(xiàn)。

for(表達式1;表達式2;表達式3)

語句;

等價于:

表達式1;

while(表達式2)

{語句;

表達式3;

}C

2011-7-7

2011-7-7

25

main()

102.c

{intijk;

for(i=05j=100;i<=j;i++J-)

{k=i+j;

printf(n%d+%d=%d\nf\ij,k);

If

#include<stdio.h>Ch5104.c

main()#include<stdio.h>

{charc;main()

for(;(c=getchar())!=t\n!{inti,c;

printf(,T%c!\c);for(i=0;(c=getchar())!='\n';i+=3

)printf(n%c!\i+c);

)

n2011-7-7

Ch5103.c

for語句的簡單應用26

【例6.5】求n!,即計算p=1X2X3X…Xn

的值。

思路:求階乘與求累加的運算處理過程類似,只要

將變?yōu)椤?/p>

設置:

?乘數(shù)i,初值為L終值為n(n是循環(huán)控制終

值,需要從鍵盤輸入)

?累乘器p,每次循環(huán)令p=p*i/

CC

2011-7-7

程序:27

main()

{inti,n;longp;

P=1;

printfC'Entern:M);

scanf("%d\&n);

for(i=1;i<=n;i++)

p=p*i;

printfC'p=%ld\nM,p);

}思考:

?如何輸出1!,2!,…,n!?

?如何求s=1!+2!+.??+n!?c

2011-7-7

28

?while(!x)x++;

當x=0時,執(zhí)行循環(huán)體x++;

?while((c=getchar())!=’\rT)n=n+1;

n稱為計數(shù)器,作用是統(tǒng)計輸入字符的個數(shù)

?while(num++<=2);printf("%d\rT,num);

循環(huán)體是空語句,退出循環(huán)后輸出num的值

?dox*=-3;while(x>5);

先執(zhí)行循環(huán)體x*=?3,再判斷條件(x>5)

?for(n=0;n<26;n++)printf(li%c",n+W);

作用是輸出26個大寫字母「

?for(sum=0,i<=100;sum=sum講1產(chǎn)2);

作用是計算100以內(nèi)的奇數(shù)和。

2011-7-7

七種循環(huán)語句的比較29

?while和do-while語句的表達式只有一個,for語

句有三個。

?while和for先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-

while語句先執(zhí)行循環(huán)體后判斷循環(huán)條件。

while語句多用于循環(huán)次數(shù)不定的情況

dowhile語句多用于至少要運行一次的情況

for語句多用于要賦初值或循環(huán)次數(shù)固定的情況

c

c

C

2011-7-7

30

求00中能被3整除的數(shù)。

#include<stdio.h>

main()

(

inti,n=0;

i=1;

while(i<=100)

(

if(i%3==0)

{n++;

printf("%d

i++;

)

printf(i,\n%d,i,n);

)2011-7-7

6.5循環(huán)的嵌套31

?如果循環(huán)語句的循環(huán)體內(nèi)又包含了另'一'條

循環(huán)語句,則稱為循環(huán)的嵌套

?例如:

#include<stdio.h>,運行jc5_a

main()

{intij;外循環(huán)語句

for(i=1;i<10;i++)

內(nèi)循環(huán)語句

for(j=1;j<=i;j++)二

printf(0==i)?|,%4d\n,,:,,%4d,,,i*j);二

c

2011-7-7

32

★循環(huán)的嵌套

?野三種循環(huán)可直柑展罷數(shù)不限

。外層循環(huán)可包含兩個以上內(nèi)循環(huán),但不能相互交叉

?:?嵌套循環(huán)的執(zhí)行流程

。嵌套循環(huán)的跳轉

禁止:

從外層跳入內(nèi)層

跳入同層的另一循環(huán)

向上跳轉

(1)while()(2)do(3)while()

whileCdo

}while(}while(

}while();

-7

33

例循環(huán)嵌套,輸出九九表

#include<stdio.h>

mainQ

l{intij;

for(i=l;i<10;i++)

printf("%4d”,i);

printf(n\n---------------------------------------\nn);

for(i=l;i<10;i++)

for(j=l;j<10;j++)

printf((j==9)?"%4d'n":"%4d",i*j);

c

CC

2011-7-7

for(i=l;i<10;i++)34

for(j=l;j<10;j++)

printf((j==9)?''%4d\n'':''%4d'',i

■2011-7-7

6.6循環(huán)結構中的跳轉語句35

?有如下三種語句實現(xiàn)跳轉:

-continue語句

-break語句

_goto語句

?在循環(huán)語句的循環(huán)體中使用,可以進行

循環(huán)的流程控制

2011-7-7

6.6.1循環(huán)中break的應用36

?功能:

-利用break語句能夠強迫終止本層循環(huán),

轉到后續(xù)語句執(zhí)行。

例如:37

例break舉例:輸出圓面積,面積大于100時停止

#definePI3.14159

main()

{,

intr;

思考題:計算當floatarea;

1+2+3+…=666fdr(r=1;r<=10;r++)

{area=PI*r*r;

時,被加數(shù)是多少?

if(area>100)

break;

nn

printf(r=%d9area=%.2f\n9r9area);

38

例break舉例:小寫字母轉換成大寫字母,直至輸入非小寫字母字符

#include<stdio.h>

main()

Ch5_100.c

intij;

charc;

while(1)

{c=getchar();

i*c>='a'&&c〈='z')

putchar(c-'a'+'A');

else

break;

}

Cc

2011-7-7

6.6.2continue語句及應用39

?功能:

-中斷循環(huán)體的本次執(zhí)行(即跳過循環(huán)體中尚

未執(zhí)行的語句),開始進行下一次是否執(zhí)行

循環(huán)體的判斷。

應用舉例40

【例6.6】把100?200之間能被7整除的數(shù),

以十個數(shù)為一行的形式輸出,最

后輸出一共有多少個這樣的數(shù)。

2011-7-7

系法和程序

main()

{intn,j=O;

for(n=100;n<=200;n++)

{if(n%7!=0)

continue;

printf(''%6cT,n);

j++;

if(j%10==0)

printf(''\rT);

}

printf(M\nj=%d\n,,J);

}

42

例求輸入的十個整數(shù)中正數(shù)的個數(shù)及其平均值

#include<stdio.h>

main()

{inti,num=O,a;

floatsum=0;

for(i=0;i<10;i++)

{scanf(n%d!\&a);

if(a<=0)continue;

num++;

sum+=a;

printf(!l%dplusinteger'ssum:%6.0f\n!\num,sum);

printf(nMeanvalue:%6.2^n!\sum/num);

)

2011-7-7

6.7循環(huán)結構程序設計43

【例67]按每行輸出4個數(shù)的形式輸出

Fibonacci數(shù)歹U的前40項。

思路:Fibonacci數(shù)列的前幾項是:1、1、2、3、5、

8、13、21、34、…。此數(shù)列的變化規(guī)律是:

1(n=l)

?這是一種遞推算法

1(n=2)

?應采用循環(huán)實現(xiàn)

fn-l+fn-2(心=3

?設變量f1、f2,并為f1和f2賦初值1,令fkf1+f2

得到第3項,令f2=f2+f1得到第4項;1

?依此類推求第5項、第6項…尸_

C

2011-7-7

44

fl=l,f2=l1123

581321

fori=lto20345589144

輸出口,此233377610987

1597258441816765

fl=fl+f210946177112865746368

f2=f2+fl75025121393196418317811

51422983204013462692178309

35245785702887922746514930E、

241578173908816963245?晚102334155

循環(huán)體中的f2=f2+f1是否可以省略?

2011-7-7

程序45

main()

{longinti,f1,f2;

intI;

f1=f2=1;

for(i=1;i<=20;i++)

printf(”\n%121d%12ld,,,f1J2);

if(i%2==0)printfC'ln11);

f1=f1+f2;

f2=f2+f1;

)

)ClC

I

2011-7-7

舉例246

【例6.8】判斷輸入的某個數(shù)m是否為素數(shù)。

若是素數(shù),輸出“YES”,若不是,

輸出“NO”。

思路:素數(shù)是指只能被1和它本身整除的數(shù),如

5、7、11、17、…等。

?分別用2、3、…,嘗試能否整除整數(shù)m。

如果m能被某個數(shù)整除,則m就不是素數(shù)。

?這是一種窮舉算法

?設除數(shù)為j,從2循環(huán)到m1實匚

際到m的平方根就可以了'「「

C

2011-7-7

算法和程序:

溫馨提示

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

最新文檔

評論

0/150

提交評論