C語言程序設計:第5章循環(huán)結構程序設計_第1頁
C語言程序設計:第5章循環(huán)結構程序設計_第2頁
C語言程序設計:第5章循環(huán)結構程序設計_第3頁
C語言程序設計:第5章循環(huán)結構程序設計_第4頁
C語言程序設計:第5章循環(huán)結構程序設計_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第五章

主要內(nèi)容5.1概述5.2goto語句以及用goto語句構成循環(huán)5.3用while語句實現(xiàn)循環(huán)5.4用do-while語句實現(xiàn)循環(huán)5.5用for語句實現(xiàn)循環(huán)5.6循環(huán)的嵌套5.7break語句continue和語句5.8程序舉例

5.1概述什么是循環(huán)?為什么要使用循環(huán)?問題1:問題2:求學生平均成績

分數(shù)相加后除以課數(shù)在許多問題中需要用到循環(huán)控制。循環(huán)結構是結構化程序設計的基本結構之一,它和順序結構、選擇結構共同作為各種復雜程序的基本構造單元。

5.2goto語句以及用goto語句構成循環(huán)

goto語句——無條件轉向語句

goto

語句標號;

例如:gotolabel_1;合法;例5.1用if語句和goto語句構成循環(huán),求1到100的和

voidmain()

{inti,sum=0;

i=1;

loop:if(i<=100)

{sum=sum+i;

i++;

gotoloop;

}

printf("%d\\n″,sum);

}

5.3用while語句實現(xiàn)循環(huán)while語句用來實現(xiàn)“當型”循環(huán)結構。一般形式:

while(表達式)語句當表達式為非0值時,執(zhí)行while語句中的內(nèi)嵌語句。其特點是:先判斷表達式,后執(zhí)行語句。例5.2求1到100的和

#include<stdio.h>

voidmain()

{inti,sum=0;

i=1;

while(i<=100)

{sum=sum+i;

i++;

}

printf(″%d\\n″,sum);

}說明:(1)循環(huán)體如果包含一個以上的語句,應該用花括弧括起來,以復合語句形式出現(xiàn).(2)在循環(huán)體中應有使循環(huán)趨向于結束的語句。

運行結果:5050

6.3用while語句實現(xiàn)循環(huán)注意:循環(huán)體如果包含一個以上的語句,應該用花括弧括起來,以復合語句形式出現(xiàn)。在循環(huán)體中應有使循環(huán)趨向于結束的語句。如果無此語句,則i的值始終不改變,循環(huán)永不結束。

5.4用do-while語句實現(xiàn)循環(huán)

do-while語句的特點:先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。一般形式:

do

循環(huán)體語句

while(表達式);執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,然后判別表達式,當表達式的值為非零(“真”)時,返回重新執(zhí)行循環(huán)體語句,如此反復,直到表達式的值等于0為止,此時循環(huán)結束。例6.3求1到100的和

#include<stdio.h>

voidmain()

{inti,sum=0;

i=1;

do

{sum=sum+i;

i++;

}

while(i<=100);

printf("%d\\n″,sum);

}運行結果:5050

5.4用do-while語句實現(xiàn)循環(huán)while語句和用do-while語句的比較:在一般情況下,用while語句和用do-while語句處理同一問題時,若二者的循環(huán)體部分是一樣的,它們的結果也一樣。但是如果while后面的表達式一開始就為假(0值)時,兩種循環(huán)的結果是不同的。例6.4while和do-while循環(huán)的比較

(1)#include<stdio.h>(2)#include<stdio.h>

voidmain()voidmain()

{intsum=0,i;{intsum=0,i;

scanf(“%d″,&i);scanf(”%d″,&i);

while(i<=10)do

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

i++;i++;

}while(i<=10);

printf(“sum=%d\\n″

,sum);

}printf(“sum=%d\\n”,sum);

}運行結果:1↙sum=55再運行一次:

11↙sum=0運行結果:1↙sum=55再運行一次:

11↙sum=11說明:(1)當while后面的表達式的第一次的值為“真”時,兩種循環(huán)得到的結果相同。否則,二者結果不相同。

5.5用for語句實現(xiàn)循環(huán)C語言中的for語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結束條件的情況,它完全可以代替while語句。一般形式:

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

5.5用for語句實現(xiàn)循環(huán)for語句的執(zhí)行過程:

(1)先求解表達式1。

(2)求解表達式2,若其值為真(值為非0),則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第(3)步。若為假(值為0),則結束循環(huán),轉到第(5)步。

(3)求解表達式3。

(4)轉回上面第(2)步驟繼續(xù)執(zhí)行。

(5)循環(huán)結束,執(zhí)行for語句下面的一個語句

5.5用for語句實現(xiàn)循環(huán)表達式2?執(zhí)行語句成立不成立執(zhí)行for循環(huán)之后的語句執(zhí)行表達式3執(zhí)行表達式1循環(huán)初始條件循環(huán)控制條件循環(huán)體for語句等價于下列語句:表達式1;while(表達式2){語句;表達式3;}

5.5用for語句實現(xiàn)循環(huán)

for語句最簡單的形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)

例如:for(i=1;i<=100;i++)sum=sum+i;相當于:

i=1;while(i<=100){sum=sum+i;i++;}

用for語句簡單、方便。

5.5用for語句實現(xiàn)循環(huán)說明:(1)for語句的一般形式中的“表達式1”可以省略,此時應在for語句之前給循環(huán)變量賦初值。注意省略表達式1時,其后的分號不能省略。如

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

執(zhí)行時,跳過“求解表達式1”這一步,其他不變。

5.5用for語句實現(xiàn)循環(huán)說明:(2)如果表達式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進行下去。也就是認為表達式2始終為真。例如:for(i=1;;i++)sum=sum+i;

表達式1是一個賦值表達式,表達式2空缺。它相當于:

i=1;while(1){sum=sum+1;i++;}

5.5用for語句實現(xiàn)循環(huán)說明:(3)表達式3也可以省略,但此時程序設計者應另外設法保證循環(huán)能正常結束。如:

for(i=1;i<=100;){sum=sum+i;i++;}

在上面的for語句中只有表達式1和表達式2,而沒有表達式3。i++的操作不放在for語句的表達式3的位置處,而作為循環(huán)體的一部分,效果是一樣的,都能使循環(huán)正常結束。

5.5用for語句實現(xiàn)循環(huán)說明:表達式1和表達式3可以是一個簡單的表達式,也可以是逗號表達式,即包含一個以上的簡單表達式,中間用逗號間隔。如:

for(sum=0,i=1;i<=100;i++)sum=sum+i;或

for(i=0,j=100;i<=j;i++,j--)k=i+j;

表達式1和表達式3都是逗號表達式,各包含兩個賦值表達式,即同時設兩個初值,使兩個變量增值.

5.5用for語句實現(xiàn)循環(huán)說明:①for(i=0;(c=getchar())!=′\n′;i+=c);

在表達式2中先從終端接收一個字符賦給c,然后判斷此賦值表達式的值是否不等于′\n′(換行符),如果不等于′\n′,就執(zhí)行循環(huán)體。注意:此for語句的循環(huán)體為空語句,把本來要在循環(huán)體內(nèi)處理的內(nèi)容放在表達式3中,作用是一樣的??梢奻or語句功能強,可以在表達式中完成本來應在循環(huán)體內(nèi)完成的操作。

6.5用for語句實現(xiàn)循環(huán)說明:②for(;(c=getchar())!=′\n′;)

printf(″%c″,c);for語句中只有表達式2,而無表達式1和表達式3。其作用是每讀入一個字符后立即輸出該字符,直到輸入一個“換行”為止。請注意,從終端鍵盤向計算機輸入時,是在按Enter鍵以后才將一批數(shù)據(jù)一起送到內(nèi)存緩沖區(qū)中去的。運行情況:Computer↙(輸入)Computer(輸出)而不是Ccoommppuutteerr

5.6循環(huán)的嵌套一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結構稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。三種循環(huán)(while循環(huán)、do-while循環(huán)和for循環(huán))可以互相嵌套。

5.6循環(huán)的嵌套下面幾種都是合法的形式:(1)

while()(2)do(3)for(;;){…{…{while()dofor(;;){…}{…}{…}}while();}}while();

5.6循環(huán)的嵌套(4)

while()(5)for(;;)(6)do{…{…{…do{…}while()for(;;){}while(){}…{…}…}}}while()

5.7break語句和continue語句

例:floatpi=3.14159;for(r=1;r<=10;r++){area=pi*r*r;if(area>100)break;

printf(″r=%f,area=%f\n″,r,area);}

程序的作用是計算r=1到r=10時的圓面積,直到面積area大于100為止。從上面的for循環(huán)可以看到:當area>100時,執(zhí)行break語句,提前結束循環(huán),即不再繼續(xù)執(zhí)行其余的幾次循環(huán)。

5.7break語句和continue語句

5.7continue語句

作用為結束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定.一般形式:

continue;

5.7break語句和continue語句

continue語句和break語句的區(qū)別

continue語句只結束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。

while(表達式1)for

{…

if(表達式2)continue;

…}0

5.7break語句和continue語句

continue和break的區(qū)別

break語句則是結束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。

while(表達式1)for

{…if(表達式2)break;…}例5.5把100~200之間的不能被3整除的數(shù)輸出。

#include<stdio.h>

voidmain()

{intn;

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

{if(n%3==0)

continue;

printf("%d″,n);

}

}說明:當n能被3整除時,執(zhí)行continue語句,結束本次循環(huán)(即跳過printf函數(shù)語句),只有n不能被3整除時才執(zhí)行printf函數(shù)。

5.8程序舉例

例5.6用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到某一項的絕對值小于為止。N-S圖表示算法

例5.6求pi的近似值

#include<stdio.h>

#include<math.h>

voidmain()

{ints=1;

floatn=1.0,t=1,pi=0;

while(fabs(t)>1e-6)

{

pi=pi+t;

n=n+2;

s=-s;

t=s/n;

}

pi=pi*4;

printf(″pi=%10.6f\n″,pi);

}運行結果:

pi=3.141594

5.8程序舉例

例5.7

求Fibonacci數(shù)列前40個數(shù)。這個數(shù)列有如下特點:第1,2兩個數(shù)為1,1。從第3個數(shù)開始,該數(shù)是其前面兩個數(shù)之和。即:F(1)=1(n=1)F(2)=1(n=2)F(n)=F(n-1)+F(n-2)

(n≥3)

算法如圖所示:例5.7求Fibonacci數(shù)列前40個數(shù)。

#include<stdio.h>

voidmain()

{longintf1,f2;

inti;

f1=1;f2=1;

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

{printf(″%12ld%12ld″,f1,f2);

if(i%2==0)printf(″\n″);

f1=f1+f2;

f2=f2+f1;}

}

運行結果:

11235813213455891442333776109871597258441816765109461771128657463687502512139319641831781151422983204013462692178309352457857022887922746514930352241578173908816963245986102334155

5.7程序舉例

例5.8

判斷m是否素數(shù)。算法思想:讓m被2到除,如果m能被2~之中任何一個整數(shù)整除,則提前結束循環(huán),此時i必然小于或等于k(即);如果m不能被2~k(即)之間的任一整數(shù)整除,則在完成最后一次循環(huán)后,i還要加1,因此i=k+1,然后才終止循環(huán)。在循環(huán)之后判別i的值是否大于或等于k+1,若是,則表明不能被2~k之間任一整數(shù)整除過,因此輸出“是素數(shù)”。例5.8判斷m是否素數(shù)。

#include<stdio.h>

#include<math.h>

voidmain()

{

intm,i,k;

scanf(″%d″,&m);

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>k)printf("%disaprimenumber\n″,m);

elseprintf("%disnotaprimenumber\n″,m);

}

運行結果:

17↙17is

溫馨提示

  • 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

提交評論