工學(xué)4-b-循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)課件_第1頁(yè)
工學(xué)4-b-循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)課件_第2頁(yè)
工學(xué)4-b-循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)課件_第3頁(yè)
工學(xué)4-b-循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)課件_第4頁(yè)
工學(xué)4-b-循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩87頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6章——循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)第6章——循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)2內(nèi)存分配指令分配數(shù)據(jù)描述過(guò)程描述順序訪問(wèn)第三章第四、五章

解決的問(wèn)題:當(dāng)過(guò)程中出現(xiàn)選擇結(jié)構(gòu)問(wèn)題時(shí),針對(duì)問(wèn)題的類型,可有三種不同的條件判定方法來(lái)描述過(guò)程。本章新問(wèn)題2內(nèi)存分配指令分配數(shù)據(jù)過(guò)程順序第三章第四、五章解第3

頁(yè)循環(huán)語(yǔ)句的執(zhí)行流程

while語(yǔ)句

for語(yǔ)句

do-while語(yǔ)句掌握簡(jiǎn)單算法設(shè)計(jì)輸出簡(jiǎn)單圖形

窮舉法當(dāng)問(wèn)題中需要多次使用同一過(guò)程時(shí),用循環(huán)的方法來(lái)描述過(guò)程。第3頁(yè)循環(huán)語(yǔ)句的執(zhí)行流程當(dāng)問(wèn)題中需要多次使用同一過(guò)程時(shí)第4

頁(yè)§6.1循環(huán)的概念提出問(wèn)題?提問(wèn):從鍵盤上輸入10個(gè)整數(shù)并求和,怎么編程?回答:在程序中寫10個(gè)scanf語(yǔ)句,還可以寫%d%d...提問(wèn):從鍵盤上輸入500個(gè)整數(shù)并求和,怎么編程?回答:這個(gè),嗯……???不會(huì)讓我寫500個(gè)......換一個(gè)角度來(lái)看待這些問(wèn)題,

→以上問(wèn)題的實(shí)質(zhì)是:將scanf函數(shù)重復(fù)執(zhí)行N遍。

→引出一個(gè)概念“循環(huán)”--反復(fù)地執(zhí)行同一段程序第4頁(yè)§6.1循環(huán)的概念提出問(wèn)題?提問(wèn):從鍵盤上輸入1第5

頁(yè)§6.1循環(huán)概念循環(huán)反復(fù)執(zhí)行同一段程序,直到滿足一定的條件后才停止執(zhí)行該段程序。C語(yǔ)言中控制循環(huán)的語(yǔ)句:

whilefordo-while第5頁(yè)§6.1循環(huán)概念循環(huán)第6

頁(yè)§6.2while語(yǔ)句while語(yǔ)句格式while(表達(dá)式)語(yǔ)句;

說(shuō)明:語(yǔ)句可是簡(jiǎn)單語(yǔ)句,也可是復(fù)合語(yǔ)句。while語(yǔ)句的執(zhí)行流程表達(dá)式?執(zhí)行語(yǔ)句成立不成立執(zhí)行while循環(huán)之后的語(yǔ)句循環(huán)控制條件循環(huán)體第6頁(yè)§6.2while語(yǔ)句while語(yǔ)句格式表達(dá)式?第7

頁(yè)§6.2while語(yǔ)句-實(shí)例(數(shù)字計(jì)算)例C3_5101.C從鍵盤輸入10個(gè)整數(shù),求這10個(gè)整數(shù)之和。count<10?count=count+1成立不成立輸出結(jié)果total計(jì)數(shù)器count=0累加器total=0輸入numtotal+=num開(kāi)始結(jié)束while(count<10){}count++;scanf("%d",&num);total+=num;程序主體第7頁(yè)§6.2while語(yǔ)句-實(shí)例(數(shù)字計(jì)算)例C3_第8

頁(yè)§6.2while語(yǔ)句-實(shí)例 #include<stdio.h>main(){intcount,num,total;

/*count:計(jì)數(shù)器,num:輸入的整數(shù)*/

count=0;total=0;/*total:存放累加和*/例C3_5101

while(count<10)/*循環(huán)控制條件*/{

count++;/*循環(huán)體*/

printf("EntertheNo.%d=",count);scanf("%d",&num);total+=num;/*計(jì)算累加和*/

} printf("Total=%d\n",total);}第8頁(yè)§6.2while語(yǔ)句-實(shí)例 #include第9

頁(yè)§6.2while語(yǔ)句-實(shí)例(字符處理)例C3_5103.C:從鍵盤中讀入一系列字符,直到讀入字母a時(shí)才停止。ch!=’a’?顯示ch成立不成立ch=讀入一個(gè)字符ch=讀入下一個(gè)字符開(kāi)始結(jié)束while(ch!=’a’){}ch=getchar();putchar(ch);ch=getchar();分析:由于不知道要讀入的字符數(shù)量,只知停止條件是讀入字母a,則只能將循環(huán)控制條件設(shè)為ch!='a'。程序主體:第9頁(yè)§6.2while語(yǔ)句-實(shí)例(字符處理)例C3_第10

頁(yè)§6.2while語(yǔ)句-實(shí)例#include<stdio.h>main(){charch;ch=getchar();while(

ch!='a')

{

putchar(ch); ch=getchar();

}}ch!=’a’?顯示ch成立不成立ch=讀入一個(gè)字符ch=讀入下一個(gè)字符開(kāi)始結(jié)束第10頁(yè)§6.2while語(yǔ)句-實(shí)例#include第11

頁(yè)§6.2while語(yǔ)句-注意事項(xiàng)while使用注意1.while(0){....}由于循環(huán)的條件表達(dá)式恒等于0,循環(huán)體永遠(yuǎn)也不會(huì)執(zhí)行,是編程者的錯(cuò)誤。2.while(1){....}由于循環(huán)的條件表達(dá)式恒等于1,所以不可能通過(guò)循環(huán)控制條件來(lái)結(jié)束循環(huán)體的執(zhí)行,稱為“死循環(huán)”。3.為了保證循環(huán)正常運(yùn)行,應(yīng)該特別注意:循環(huán)控制條件控制條件的初始狀態(tài)(初始值)循環(huán)體內(nèi)部對(duì)控制條件的影響第11頁(yè)§6.2while語(yǔ)句-注意事項(xiàng)while使用第12

頁(yè)§6.3for語(yǔ)句for語(yǔ)句格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句;for語(yǔ)句的執(zhí)行流程循環(huán)初始條件循環(huán)控制條件

表達(dá)式2?執(zhí)行語(yǔ)句成立不成立執(zhí)行for循環(huán)之后的語(yǔ)句執(zhí)行表達(dá)式3執(zhí)行表達(dá)式1循環(huán)體for語(yǔ)句等價(jià)于下列語(yǔ)句:表達(dá)式1;while(表達(dá)式2){

語(yǔ)句;

表達(dá)式3;}第12頁(yè)§6.3for語(yǔ)句for語(yǔ)句格式循環(huán)初始條件循第13

頁(yè)§6.3for語(yǔ)句-實(shí)例(數(shù)字計(jì)算)例C3_5203.C:求1到10的階乘。 遞推公式: n!=1 當(dāng)n=1時(shí)

n!=(n-1)!*n 當(dāng)n>1時(shí)#include<stdio.h> main() {longintn=1; inti;

for

(

i=1;i<=10;i++

)

{

n=n*i;/*求N!*/ printf("%2d!=%ld\n",i,n);

}

}例C3_5203for語(yǔ)句最常用的形式for(初值;控制條件;增量)語(yǔ)句;第13頁(yè)§6.3for語(yǔ)句-實(shí)例(數(shù)字計(jì)算)例C3_5第14

頁(yè)§6.3for語(yǔ)句-實(shí)例語(yǔ)句中的逗號(hào)(,)運(yùn)算

逗號(hào)(,)運(yùn)算常見(jiàn)的三種用途是:1.在變量說(shuō)明表中用來(lái)分隔變量,起分隔符的作用。如:inti,

j,k,

m[3],*p;2.在函數(shù)的參數(shù)表中分隔參數(shù)。如:printf("n=%d,x=%d\n",n,x);3.在語(yǔ)句中使用。其形式是:表達(dá)式n1,表達(dá)式n2;用逗號(hào)分隔開(kāi)的表達(dá)式從左到右進(jìn)行計(jì)算,結(jié)果的類型和值是最右邊表達(dá)式的類型和值。第14頁(yè)§6.3for語(yǔ)句-實(shí)例語(yǔ)句中的逗號(hào)(,)運(yùn)算第15

頁(yè)§6.3for語(yǔ)句-實(shí)例(符號(hào)處理)例C3_5205.C:用逗號(hào)運(yùn)算輸出下列字符串。azbycxdwevfugthsirjqkplomn

分析:奇數(shù)位上的字符從'a'開(kāi)始逐次遞增,偶數(shù)位上的字符從'z'開(kāi)始逐次遞減 #include<stdio.h>main(){chari,j; /*i:奇位字符

j:偶位字符

*//*i從’a’開(kāi)始逐次遞增,j從’z’開(kāi)始逐次遞減*/

for(i='a',j='z';i<j;i++,

j--) printf(”%c%c”,i,j);/*輸出兩個(gè)字符*/

printf("\n");}例C3_5205第15頁(yè)§6.3for語(yǔ)句-實(shí)例(符號(hào)處理)例C3_5第16

頁(yè)§6.3for語(yǔ)句–注意事項(xiàng)for語(yǔ)句的變化形式

for語(yǔ)句中的三個(gè)表達(dá)式中的任意一個(gè)都是可以省略的(在語(yǔ)法上被接受),但是邏輯不合理。1.省略表達(dá)式2,則:for(表達(dá)式1;;表達(dá)式3)就形成了一個(gè)死循環(huán)。2.省略表達(dá)式1和表達(dá)式3,則:for(;表達(dá)式2;)等同于:while(表達(dá)式)

據(jù)此結(jié)論:所有用while語(yǔ)句實(shí)現(xiàn)的循環(huán)都可以用for語(yǔ)句實(shí)現(xiàn)。3.表達(dá)式1、2、3全省略,則:for

(;;)等同于:while

(1)第16頁(yè)§6.3for語(yǔ)句–注意事項(xiàng)for語(yǔ)句的變第17

頁(yè)§6.4do-while語(yǔ)句do-while語(yǔ)句格式

do

語(yǔ)句

while(

表達(dá)式);do-while語(yǔ)句的執(zhí)行流程表達(dá)式?執(zhí)行語(yǔ)句成立不成立執(zhí)行while子句之后的語(yǔ)句循環(huán)控制條件循環(huán)體第17頁(yè)§6.4do-while語(yǔ)句do-while語(yǔ)第18

頁(yè)§6.4do-while語(yǔ)句-實(shí)例–數(shù)字計(jì)算例C3_5301.C:輸入一個(gè)>=0

的整數(shù),要求以相反的順序輸出該數(shù)。例如:輸入12345,則輸出為54321。

基本思路:可以從個(gè)位開(kāi)始,按位輸出整數(shù)的每一位

main(){unsignedintnumber;printf("Inputthenumber:");scanf("%d",&number); do{printf("%d",number%10);

number/=10;/*number縮小10倍*/ }while(number!=0);}例C3_5301思考:使用while或for語(yǔ)句,如何實(shí)現(xiàn)?例C3_53011兩個(gè)程序有何區(qū)別?前面的程序可以處理數(shù)字0,后面的程序不能處理第18頁(yè)§6.4do-while語(yǔ)句-實(shí)例–數(shù)字計(jì)第19

頁(yè)§6.4do-while語(yǔ)句-實(shí)例–符號(hào)處理例C3_5302.C從鍵盤輸入任意的字符,按下列規(guī)則進(jìn)行分類計(jì)數(shù)。第一類’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’第二類

’+’,’-’,’*’,’/’,’%’,’=’第三類其它字符當(dāng)輸入字符’\’

時(shí)先計(jì)數(shù)然后停止接收輸入。第19頁(yè)§6.4do-while語(yǔ)句-實(shí)例–符號(hào)處第20

頁(yè)§6.4do-while語(yǔ)句-實(shí)例

main(){intclass1=0,class2=0,class3=0;charch; do{

putchar(ch=getch());/*函數(shù)的嵌套調(diào)用*/

switch

(ch)

{case

’0’:case

’1’:case

’2’:case

’3’:

case

’4’:case’5’:case

’6’:case’7’:

case

’8’:case

’9’:class1++;break;/*對(duì)分類1計(jì)數(shù)*/

case

’+’:case’-’:case

’*’:case

’/’:

case’%’:case

’=’:class2++;break;/*對(duì)分類2計(jì)數(shù)*/

default:class3++;break;/*對(duì)分類3計(jì)數(shù)*/

}}while(ch!=’\\’);

printf("class1=%d,class2=%d,class3=%d\n",class1,class2,class3);}例C3_5302第20頁(yè)§6.4do-while語(yǔ)句-實(shí)例main(第21

頁(yè)§6.4do-while語(yǔ)句–注意事項(xiàng)do-while語(yǔ)句特點(diǎn)

do-while與while和for的最大區(qū)別:

do-while語(yǔ)句先執(zhí)行循環(huán)體然后再判斷循環(huán)控制條件,而while和for卻是先判斷條件之后再執(zhí)行循環(huán)體。 使用do-while構(gòu)成的循環(huán),循環(huán)體部分至少要執(zhí)行一次; 而采用while和for構(gòu)成的循環(huán),循環(huán)體部分有可能一次也不會(huì)執(zhí)行。第21頁(yè)§6.4do-while語(yǔ)句–注意事項(xiàng)do第22

頁(yè)§6.5循環(huán)語(yǔ)句小結(jié)C語(yǔ)言提供三種循環(huán):for、while、do-while:

1、for和while先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-while語(yǔ)句先執(zhí)行循環(huán)體后判斷循環(huán)條件。 2、while和do-while語(yǔ)句的條件表達(dá)式只有1個(gè);for語(yǔ)句有3個(gè)表達(dá)式,表達(dá)式2是條件表達(dá)式。 3、while、do-while、for可以相互替換使用。 4、while語(yǔ)句多用于不需要賦初值的或循環(huán)次數(shù)不定的情況。

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

do-while語(yǔ)句多用于至少要運(yùn)行一次的循環(huán)。 5、循環(huán)語(yǔ)句可以嵌套,可以并列,但不能交叉。第22頁(yè)§6.5循環(huán)語(yǔ)句小結(jié)C語(yǔ)言提供三種循環(huán):for第23

頁(yè)§6.5循環(huán)語(yǔ)句小結(jié)為了保證循環(huán)體正常運(yùn)行,應(yīng)該特別注意:循環(huán)控制條件控制條件的初始狀態(tài)(初始值)循環(huán)體內(nèi)部對(duì)控制條件的影響以上三個(gè)方面相互配合,相互影響,共同完成循環(huán)控制第23頁(yè)§6.5循環(huán)語(yǔ)句小結(jié)為了保證循環(huán)體正常運(yùn)行,應(yīng)第24

頁(yè)循環(huán)中的常見(jiàn)算法問(wèn)題1

-循環(huán)與遞推例C3_5204.C: 草原上有一對(duì)小兔子,它們剛出生后的第1個(gè)月就會(huì)逐步長(zhǎng)大,到了第2個(gè)月末就生出一對(duì)小兔子。第3個(gè)月大兔子會(huì)繼續(xù)生一對(duì)小兔子,而第2個(gè)月出生的小兔子會(huì)逐步長(zhǎng)大。第4個(gè)月時(shí),第1月出生的兔子繼續(xù)生育,第2月出生的小兔子也可以生育一對(duì)小兔子了,第3月出生的小兔子則逐步長(zhǎng)大……

假設(shè)這些草原的兔子非常長(zhǎng)壽,可以認(rèn)為它們不會(huì)死亡。請(qǐng)建立數(shù)學(xué)模型,計(jì)算第N個(gè)月時(shí),草原上將會(huì)有多少對(duì)兔子?第24頁(yè)循環(huán)中的常見(jiàn)算法問(wèn)題1-循環(huán)與遞推例C3_5第25

頁(yè)循環(huán)與遞推例C3_5204.C:數(shù)列1、1、2、3、5、8、13、21、…是著名的菲波那奇數(shù)列,其遞推通項(xiàng)公式為: U1=U2=1 Un=Un-1+Un-2 (n>=3)

為求出第N項(xiàng)的值,請(qǐng)編寫程序。

根據(jù)遞推通項(xiàng)公式,可用遞推法編寫程序,計(jì)算第N項(xiàng)的值。遞推法:由初始的已知條件開(kāi)始,先計(jì)算出第(N-1)步的結(jié)果,再利用前面已知的(N-1)項(xiàng)結(jié)果,按照遞推公式(或遵照遞推規(guī)則),推出第N步結(jié)果。

遞推法是程序設(shè)計(jì)中最常用的方法之一,使用遞推法必須有明確的遞推初始值和遞推規(guī)則(遞推公式)。第25頁(yè)循環(huán)與遞推例C3_5204.C:數(shù)列1、1、2、第26

頁(yè)循環(huán)與遞推例C3_5204.C程序un=un_1=1;for(i=3;i<=n;i++){

un_2=un_1;un_1=un;un=un_2+un_1;}i<=n?向前傳遞前兩項(xiàng)un_2=un_1un_1=un成立不成立初始化:un=un_1=1計(jì)算un=un_2+un_1遞推項(xiàng):i=3i++數(shù)列對(duì)應(yīng)關(guān)系:

un_2,un_1,un遞推計(jì)算第26頁(yè)循環(huán)與遞推例C3_5204.C程序i<=n?第27

頁(yè)循環(huán)與遞推例C3_5204.C程序#include<stdio.h>main(){intn,i,un_2,un_1,un;

for(;;){printf("Inputn=?");scanf("%d",&n);

if(n>=3)

break;/*退出for循環(huán)*/

elseprintf("\nInputniserror!\n");}

/*控制輸入正確的N值*/

un=un_1=1;/*設(shè)置遞推初始值*/

for(i=3;i<=n;i++)/*用遞推法計(jì)算第N項(xiàng)的值*/

{

un_2=un_1;un_1=un;un=un_2+un_1;

}printf("No.%dis%d\n",n,un);}例C3_5204第27頁(yè)循環(huán)與遞推例C3_5204.C程序例C3_520循環(huán)中的常見(jiàn)算法問(wèn)題2

-循環(huán)的嵌套在一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體中又包含了另一個(gè)循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。嵌套形式多種多樣,可嵌套任意的一個(gè)或多個(gè)循環(huán)。例:x=1while(x<=9){for(i=1;i<=9;i++)printf(“%5d”,x*i);

x++;printf(“\n”);}for(i=1;i<=9;i++){

for(j=1;j<=9;j++)printf(“%5d”,i*j);

printf(“\n”);}for(i=1;i<=9;i++){j=1;

do{printf(“%5d”,i*j);j++;}while(j<10);printf(“\n”);}注意大括號(hào){}的使用{}不要可以嗎?循環(huán)中的常見(jiàn)算法問(wèn)題2-循環(huán)的嵌套在一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體中循環(huán)的嵌套-結(jié)構(gòu)規(guī)則

外循環(huán)內(nèi)循環(huán)交叉循環(huán)外循環(huán)入口內(nèi)循環(huán)出口內(nèi)循環(huán)出口外循環(huán)出口如:打印乘法九九表外循環(huán)出口1.在嵌套的循環(huán)中外循環(huán)與內(nèi)循環(huán)變量不可同名。2.外循環(huán)與內(nèi)循環(huán)不可交叉。循環(huán)的嵌套-結(jié)構(gòu)規(guī)則外循環(huán)內(nèi)循環(huán)交叉循環(huán)外循環(huán)內(nèi)循環(huán)第30

頁(yè)循環(huán)的嵌套-實(shí)例循環(huán)嵌套在循環(huán)體中,又包含有循環(huán)語(yǔ)句,構(gòu)成循環(huán)嵌套。

例C3_5107.C:輸出下三角形乘法九九表。123456789---------------------------------------12436948121651015202561218243036714212835424981624324048566491827364554637281假設(shè):行號(hào)為i,列號(hào)為ji=6j=5i*j(1<=i<=9)(1<=j<=i)則:第i

行中一共要輸出i個(gè)乘積第30頁(yè)循環(huán)的嵌套-實(shí)例循環(huán)嵌套i=6(1<=i<=9)第31

頁(yè)循環(huán)的嵌套-實(shí)例 #include<stdio.h>main(){inti=1,j;/*i:行計(jì)數(shù)器j:列計(jì)數(shù)器*/

while(i<=9)/*控制打印表頭*/

printf("%4d",i++);

printf("\n------------------------------------\n");i=1;

while(i<=9){j=1;/*列計(jì)數(shù)器置1*/

while(j<=i)/*嵌套的二重循環(huán)。輸出第i行*/ {printf("%4d",i*j);

j++;/*列計(jì)數(shù)器+1*/}

printf("\n");/*一行輸出結(jié)束后,輸出\n*/i++;/*行計(jì)數(shù)器+1*/}}例C3_5107外層循環(huán)體執(zhí)行1次,內(nèi)層循環(huán)要完整執(zhí)行1次第31頁(yè)循環(huán)的嵌套-實(shí)例 #include<st第32

頁(yè)循環(huán)的嵌套-for語(yǔ)句-實(shí)例例C3_5202.C:用for語(yǔ)句實(shí)現(xiàn)打印乘法九九表。#include<stdio.h>main(){inti,j; for(i=1;i<10;i++) printf("%4d",i);/*打印表頭*/

printf("\n-----------------------------------\n");

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

)/*控制打印表體*/

for(j=1;

j<=i;

j++

)printf((j==i)?

"%4d\n"

:"%4d",i*j);}例C3_5202輸出函數(shù)printf中使用了“?”操作,含義相當(dāng)于:

if(j==i) printf("%4d\n",i*j);

else printf("%4d",i*j);第32頁(yè)循環(huán)的嵌套-for語(yǔ)句-實(shí)例例C3_5202第33

頁(yè)§6.6轉(zhuǎn)移語(yǔ)句轉(zhuǎn)移語(yǔ)句的作用改變程序的運(yùn)行流程。C語(yǔ)言轉(zhuǎn)移語(yǔ)句

breakcontinuegotoreturn第33頁(yè)§6.6轉(zhuǎn)移語(yǔ)句轉(zhuǎn)移語(yǔ)句的作用第34

頁(yè)§6.6.1break語(yǔ)句格式break;break語(yǔ)句的功能1.在switch語(yǔ)句中結(jié)束case子句,使控制轉(zhuǎn)到switch語(yǔ)句之外。2.在循環(huán)語(yǔ)句的循環(huán)體中使用,結(jié)束循環(huán)過(guò)程,使控制轉(zhuǎn)移到整個(gè)循環(huán)語(yǔ)句之外的下一條語(yǔ)句處。第34頁(yè)§6.6.1break語(yǔ)句格式第35

頁(yè)表達(dá)式2?成立不成立執(zhí)行后續(xù)語(yǔ)句執(zhí)行表達(dá)式3執(zhí)行表達(dá)式1§6..1break語(yǔ)句break語(yǔ)句的執(zhí)行流程表達(dá)式?成立不成立執(zhí)行后續(xù)語(yǔ)句breakbreak表達(dá)式?成立不成立執(zhí)行后續(xù)語(yǔ)句breakwhile語(yǔ)句for語(yǔ)句do-while語(yǔ)句第35頁(yè)表達(dá)式2?成立不成立執(zhí)行后續(xù)語(yǔ)句執(zhí)行表達(dá)式3執(zhí)行第36

頁(yè)§6.6.1break語(yǔ)句-實(shí)例例C3_6101.C:求給定整數(shù)的約數(shù)中最大的三位數(shù)?

main(){intj;longn;

printf("Pleaseinputnumber:");scanf("%ld",&n);

/*所求的約數(shù)的可能取值是從999到100,j從大到小*/

for(j=999;j>=100;j--)

if(n%j==0)/*若能夠整除j,則j是約數(shù)*/

{

printf(”3digitsin%ld=%d\n”,n,j);

break;/*控制退出循環(huán)*/

}}例C3_6101第36頁(yè)§6.6.1break語(yǔ)句-實(shí)例例C3_610第37

頁(yè)§6.6.1break語(yǔ)句-實(shí)例break語(yǔ)句使用注意:

1、在嵌套循環(huán)中,break語(yǔ)句僅能退出一層(當(dāng)前層)循環(huán)。 2、若在循環(huán)語(yǔ)句中包含了switch語(yǔ)句,那么switch語(yǔ)句中的break

語(yǔ)句僅能使控制退出switch語(yǔ)句。

3、break

語(yǔ)句并不是程序設(shè)計(jì)中必不可少的語(yǔ)句,可以通過(guò)改變程序的結(jié)構(gòu)去掉。第37頁(yè)§6.6.1break語(yǔ)句-實(shí)例break語(yǔ)句第38

頁(yè)§6.6.2continue語(yǔ)句continue語(yǔ)句格式continue;continue語(yǔ)句的功能

continue語(yǔ)句僅能在循環(huán)語(yǔ)句中使用.它的作用不是結(jié)束循環(huán),而是開(kāi)始一次新的循環(huán)。 對(duì)于for語(yǔ)句,將控制轉(zhuǎn)到執(zhí)行表達(dá)式3和條件測(cè)試部分;對(duì)于while和do-while語(yǔ)句,將控制轉(zhuǎn)到條件測(cè)試部分;

從邏輯上講,改變if語(yǔ)句的條件表達(dá)式所表示的條件,就可以不需要使用continue語(yǔ)句。第38頁(yè)§6.6.2continue語(yǔ)句continu第39

頁(yè)§6.6.2continue語(yǔ)句continue語(yǔ)句的執(zhí)行流程表達(dá)式2?continue成立不成立執(zhí)行后續(xù)語(yǔ)句執(zhí)行表達(dá)式3執(zhí)行表達(dá)式1表達(dá)式?continue成立不成立執(zhí)行后續(xù)語(yǔ)句表達(dá)式?continue成立不成立執(zhí)行后續(xù)語(yǔ)句while語(yǔ)句for語(yǔ)句do-while語(yǔ)句第39頁(yè)§6.6.2continue語(yǔ)句continu第40

頁(yè)§6.6.2continue語(yǔ)句-實(shí)例例C3_6201.C:輸入10個(gè)整數(shù),求其中正數(shù)的個(gè)數(shù)及平均值,精確到小數(shù)點(diǎn)后兩位。

main(){inti,count=0,j,sum=0;for(i=1;i<=10;i++){printf("Inputinteger:");scanf("%d",&j);

if(j<=0)

continue;/*結(jié)束本次循環(huán),不進(jìn)行后續(xù)操作*/

count++;/*計(jì)數(shù)器*/

sum+=j;/*求累加和*/}

if(count>0)printf("Plusnumer:%d,averagevalue:%.2f", count,1.0*sum/count);

elseprintf("Plusnumer:0,averagevalue:0");}例C3_6201改變if語(yǔ)句的條件表達(dá)式,可以不需要使用continue。第40頁(yè)§6.6.2continue語(yǔ)句-實(shí)例例C3_第41

頁(yè)§6.6.3goto語(yǔ)句goto語(yǔ)句格式goto

標(biāo)號(hào);goto語(yǔ)句的功能 1、將控制轉(zhuǎn)移到標(biāo)號(hào)所指定的語(yǔ)句處繼續(xù)執(zhí)行。 2、標(biāo)號(hào)的唯一功能就是作為goto語(yǔ)句的目標(biāo)。標(biāo)號(hào)的作用域是它所在的整個(gè)函數(shù)。goto語(yǔ)句的使用說(shuō)明

在C語(yǔ)言中,goto語(yǔ)句并不是必不可少的,使用

goto語(yǔ)句的地方都可以用C的其它控制流程語(yǔ)句改寫。第41頁(yè)§6.6.3goto語(yǔ)句goto語(yǔ)句格式第42

頁(yè)§6.6.3goto語(yǔ)句-實(shí)例例C3_6301.C:已知一首項(xiàng)大于0的等差數(shù)列的前四項(xiàng)和為26,前四項(xiàng)的積為880,求這數(shù)列。設(shè)數(shù)列的第一項(xiàng)為a(a>0),公差為d(d>0)。則該數(shù)列滿足條件:

a+(a+d)+(a+2*d)+(a+3*d)=4*a+6*d=26a*(a+d)*(a+2*d)*(a+3*d)=880則可以推出,首項(xiàng)a和公差d的取值范圍為:

1<=a<=51<=d<=3可以使用窮舉的方法,在首項(xiàng)a和公差d的取值范圍內(nèi)進(jìn)行判斷。第42頁(yè)§6.6.3goto語(yǔ)句-實(shí)例例C3_6301第43

頁(yè)§6.6.3goto語(yǔ)句-實(shí)例main(){inta,b,c,d,i;

for

(a=1;a<=5;++a)/*在a的范圍內(nèi)窮舉*/

for(d=1;d<=3;++d)/*在d的范圍內(nèi)窮舉*/

{b=a+(a+d)+(a+2*d)+(a+3*d);/*前四項(xiàng)的和*/

c=a*(a+d)*(a+2*d)*(a+3*d);/*前四項(xiàng)的積*/

if(b==26&&c==880)/*若滿足條件*/

goto

out;/*退出二重循環(huán)*/

}

out:for(i=0;i<=20;++i)/*輸出運(yùn)行結(jié)果*/

printf("%d,",a+i*d);}第43頁(yè)§6.6.3goto語(yǔ)句-實(shí)例main()第44

頁(yè)§6.6.3goto語(yǔ)句-實(shí)例main(){inta,b,c,d,i,flag=1;/*flag:標(biāo)志變量*/

for

(a=1;a<=5&&flag;++a)/*flag!=0是進(jìn)行循環(huán)*/

for(d=1;d<=3&&flag;++d)

{b=a+(a+d)+(a+2*d)+(a+3*d);/*前四項(xiàng)的和*/

c=a*(a+d)*(a+2*d)*(a+3*d);/*前四項(xiàng)的積*/

if(b==26&&c==880)/*若滿足條件*/

{for(i=0;i<=20;++i)/*輸出結(jié)果*/

printf("%d,",a0+i*d0);

flag

=0;/*控制退出二重循環(huán)*/}

}}通過(guò)增加標(biāo)志變量可以有效地控制循環(huán)第44頁(yè)§6.6.3goto語(yǔ)句-實(shí)例main()通第45

頁(yè)§6.6.4return語(yǔ)句return語(yǔ)句格式格式一:return;格式二:return(表達(dá)式);return

語(yǔ)句的功能

1.return語(yǔ)句使程序從被調(diào)用函數(shù)中返回到調(diào)用函數(shù)的調(diào)用處繼續(xù)運(yùn)行。2.如果return后跟一表達(dá)式,則該表達(dá)式的值會(huì)從被調(diào)用函數(shù)中帶回到調(diào)用它的函數(shù),稱為返回值。第45頁(yè)§6.6.4return語(yǔ)句return語(yǔ)句循環(huán)程序設(shè)計(jì)循環(huán)程序的實(shí)現(xiàn)要點(diǎn):歸納出哪些操作需要反復(fù)執(zhí)行?

循環(huán)體這些操作在什么情況下重復(fù)執(zhí)行?

循環(huán)條件選用合適的循環(huán)語(yǔ)句forwhiledo-while循環(huán)具體實(shí)現(xiàn)時(shí)考慮(循環(huán)條件):事先給定循環(huán)次數(shù),首選for通過(guò)其他條件控制循環(huán),考慮while或do-while循環(huán)程序設(shè)計(jì)循環(huán)程序的實(shí)現(xiàn)要點(diǎn):#include<stdio.h>intmain(void){inti,mark,max,n;

printf("Entern:");

scanf("%d",&n);printf("Enter%dmarks:",n);scanf("%d",&mark);/*讀入第一個(gè)成績(jī)*/

max=mark;/*假設(shè)第一個(gè)成績(jī)是最高分*/

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

{

scanf("%d",&mark);

if(max<mark)

max=mark;}

printf("Max=%d\n",max);return0;}例4-7輸入一批學(xué)生的成績(jī),求最高分(for)markmaxmaxmarkEntern:5Enter5maks:6788735482Max=88Entern:0#include<stdio.h>例4-7輸入一批學(xué)生的#include<stdio.h>intmain(void){intmark,max;printf(“Entermarks:");scanf("%d",&mark);/*讀入第一個(gè)成績(jī)*/

max=mark;/*假設(shè)第一個(gè)成績(jī)最高分*/

while(mark>=0){if(max<mark)

max=mark;

scanf("%d",&mark);};

printf("Max=%d\n",max);return0;}例4-7輸入一批學(xué)生的成績(jī),求最高分(while)Entermarks:6788735482-1Max=88Entermarks:-1#include<stdio.h>例4-7輸入一批學(xué)生的#include<stdio.h>intmain(void){intmark,max;

max=-1;/*給max賦一個(gè)小初值*/

printf(“Entermarks:");

do{scanf("%d",&mark);

if(max<mark)

max=mark;}while(mark>=0);printf("Max=%d\n",max);}例4-7輸入一批學(xué)生的成績(jī),求最高分(do-while)Entermarks:6788735482-1Max=88Entermarks:-1#include<stdio.h>例4-7輸入一批學(xué)生的第50

頁(yè)§6.2while語(yǔ)句-實(shí)例例1:分析程序的運(yùn)行結(jié)果 #include<stdio.h>main(){ intn=0; while(n<3) printf(”nis%d\n”,n); n++; printf(”That\’sallthisprogramdoes.\n”);}例C3_51011{}結(jié)果:程序?qū)⒉煌5拇蛴 皀is0”,直至終止程序無(wú)法正常終止的程序,稱為“死循環(huán)”。結(jié)論:while語(yǔ)句循環(huán)體中,一定要有能夠?qū)ρh(huán)控制條件產(chǎn)生影響的語(yǔ)句。避免出現(xiàn)“死循環(huán)”現(xiàn)象。第50頁(yè)§6.2while語(yǔ)句-實(shí)例例1:分析程序的運(yùn)第51

頁(yè)§6.2while語(yǔ)句-實(shí)例例2:分析下列程序段

index=1; while(index<5) printf(”Goodmorning!\n”); 分析:

程序段將無(wú)限制打印字符串。 因?yàn)檠h(huán)中沒(méi)有任何語(yǔ)句可以改變循環(huán)控制變量index的初值1。第51頁(yè)§6.2while語(yǔ)句-實(shí)例例2:分析下列程序第52

頁(yè)§6.2while語(yǔ)句-實(shí)例例3:分析下列程序段

index=1; while(--

index<5) printf(”Goodmorning!\n”); 分析:

仍有問(wèn)題,程序改變了index,但方向錯(cuò)了。 在index達(dá)到系統(tǒng)能夠處理的最大負(fù)數(shù)時(shí),將會(huì)產(chǎn)生下溢而終止程序。 結(jié)論: 循環(huán)體中必須有能夠使循環(huán)正常停止的條件。第52頁(yè)§6.2while語(yǔ)句-實(shí)例例3:分析下列程序第53

頁(yè)§6.2while語(yǔ)句-實(shí)例例3:求1到100的之和。

main(){inttotal=0,i=1;

while(i<=100) {

total=total+i;

i++;

}

printf(”Total=%d\n",total);}例C3_51041

變形1:while(i<=100) total+=i++;

==>total+=i;

++i

變形2:inti=0;

while(++i<=100) ==>++i;判斷i<=100 total+=i;

變形3:inti=0;

while(i++<

100) ==>判斷i<100;i++ total+=i;

變形4:inti=0;

while(i

<100) total+=++i;

==>++i;total+=i第53頁(yè)§6.2while語(yǔ)句-實(shí)例例3:求1到100第6章——循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)第6章——循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)55內(nèi)存分配指令分配數(shù)據(jù)描述過(guò)程描述順序訪問(wèn)第三章第四、五章

解決的問(wèn)題:當(dāng)過(guò)程中出現(xiàn)選擇結(jié)構(gòu)問(wèn)題時(shí),針對(duì)問(wèn)題的類型,可有三種不同的條件判定方法來(lái)描述過(guò)程。本章新問(wèn)題2內(nèi)存分配指令分配數(shù)據(jù)過(guò)程順序第三章第四、五章解第56

頁(yè)循環(huán)語(yǔ)句的執(zhí)行流程

while語(yǔ)句

for語(yǔ)句

do-while語(yǔ)句掌握簡(jiǎn)單算法設(shè)計(jì)輸出簡(jiǎn)單圖形

窮舉法當(dāng)問(wèn)題中需要多次使用同一過(guò)程時(shí),用循環(huán)的方法來(lái)描述過(guò)程。第3頁(yè)循環(huán)語(yǔ)句的執(zhí)行流程當(dāng)問(wèn)題中需要多次使用同一過(guò)程時(shí)第57

頁(yè)§6.1循環(huán)的概念提出問(wèn)題?提問(wèn):從鍵盤上輸入10個(gè)整數(shù)并求和,怎么編程?回答:在程序中寫10個(gè)scanf語(yǔ)句,還可以寫%d%d...提問(wèn):從鍵盤上輸入500個(gè)整數(shù)并求和,怎么編程?回答:這個(gè),嗯……???不會(huì)讓我寫500個(gè)......換一個(gè)角度來(lái)看待這些問(wèn)題,

→以上問(wèn)題的實(shí)質(zhì)是:將scanf函數(shù)重復(fù)執(zhí)行N遍。

→引出一個(gè)概念“循環(huán)”--反復(fù)地執(zhí)行同一段程序第4頁(yè)§6.1循環(huán)的概念提出問(wèn)題?提問(wèn):從鍵盤上輸入1第58

頁(yè)§6.1循環(huán)概念循環(huán)反復(fù)執(zhí)行同一段程序,直到滿足一定的條件后才停止執(zhí)行該段程序。C語(yǔ)言中控制循環(huán)的語(yǔ)句:

whilefordo-while第5頁(yè)§6.1循環(huán)概念循環(huán)第59

頁(yè)§6.2while語(yǔ)句while語(yǔ)句格式while(表達(dá)式)語(yǔ)句;

說(shuō)明:語(yǔ)句可是簡(jiǎn)單語(yǔ)句,也可是復(fù)合語(yǔ)句。while語(yǔ)句的執(zhí)行流程表達(dá)式?執(zhí)行語(yǔ)句成立不成立執(zhí)行while循環(huán)之后的語(yǔ)句循環(huán)控制條件循環(huán)體第6頁(yè)§6.2while語(yǔ)句while語(yǔ)句格式表達(dá)式?第60

頁(yè)§6.2while語(yǔ)句-實(shí)例(數(shù)字計(jì)算)例C3_5101.C從鍵盤輸入10個(gè)整數(shù),求這10個(gè)整數(shù)之和。count<10?count=count+1成立不成立輸出結(jié)果total計(jì)數(shù)器count=0累加器total=0輸入numtotal+=num開(kāi)始結(jié)束while(count<10){}count++;scanf("%d",&num);total+=num;程序主體第7頁(yè)§6.2while語(yǔ)句-實(shí)例(數(shù)字計(jì)算)例C3_第61

頁(yè)§6.2while語(yǔ)句-實(shí)例 #include<stdio.h>main(){intcount,num,total;

/*count:計(jì)數(shù)器,num:輸入的整數(shù)*/

count=0;total=0;/*total:存放累加和*/例C3_5101

while(count<10)/*循環(huán)控制條件*/{

count++;/*循環(huán)體*/

printf("EntertheNo.%d=",count);scanf("%d",&num);total+=num;/*計(jì)算累加和*/

} printf("Total=%d\n",total);}第8頁(yè)§6.2while語(yǔ)句-實(shí)例 #include第62

頁(yè)§6.2while語(yǔ)句-實(shí)例(字符處理)例C3_5103.C:從鍵盤中讀入一系列字符,直到讀入字母a時(shí)才停止。ch!=’a’?顯示ch成立不成立ch=讀入一個(gè)字符ch=讀入下一個(gè)字符開(kāi)始結(jié)束while(ch!=’a’){}ch=getchar();putchar(ch);ch=getchar();分析:由于不知道要讀入的字符數(shù)量,只知停止條件是讀入字母a,則只能將循環(huán)控制條件設(shè)為ch!='a'。程序主體:第9頁(yè)§6.2while語(yǔ)句-實(shí)例(字符處理)例C3_第63

頁(yè)§6.2while語(yǔ)句-實(shí)例#include<stdio.h>main(){charch;ch=getchar();while(

ch!='a')

{

putchar(ch); ch=getchar();

}}ch!=’a’?顯示ch成立不成立ch=讀入一個(gè)字符ch=讀入下一個(gè)字符開(kāi)始結(jié)束第10頁(yè)§6.2while語(yǔ)句-實(shí)例#include第64

頁(yè)§6.2while語(yǔ)句-注意事項(xiàng)while使用注意1.while(0){....}由于循環(huán)的條件表達(dá)式恒等于0,循環(huán)體永遠(yuǎn)也不會(huì)執(zhí)行,是編程者的錯(cuò)誤。2.while(1){....}由于循環(huán)的條件表達(dá)式恒等于1,所以不可能通過(guò)循環(huán)控制條件來(lái)結(jié)束循環(huán)體的執(zhí)行,稱為“死循環(huán)”。3.為了保證循環(huán)正常運(yùn)行,應(yīng)該特別注意:循環(huán)控制條件控制條件的初始狀態(tài)(初始值)循環(huán)體內(nèi)部對(duì)控制條件的影響第11頁(yè)§6.2while語(yǔ)句-注意事項(xiàng)while使用第65

頁(yè)§6.3for語(yǔ)句for語(yǔ)句格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句;for語(yǔ)句的執(zhí)行流程循環(huán)初始條件循環(huán)控制條件

表達(dá)式2?執(zhí)行語(yǔ)句成立不成立執(zhí)行for循環(huán)之后的語(yǔ)句執(zhí)行表達(dá)式3執(zhí)行表達(dá)式1循環(huán)體for語(yǔ)句等價(jià)于下列語(yǔ)句:表達(dá)式1;while(表達(dá)式2){

語(yǔ)句;

表達(dá)式3;}第12頁(yè)§6.3for語(yǔ)句for語(yǔ)句格式循環(huán)初始條件循第66

頁(yè)§6.3for語(yǔ)句-實(shí)例(數(shù)字計(jì)算)例C3_5203.C:求1到10的階乘。 遞推公式: n!=1 當(dāng)n=1時(shí)

n!=(n-1)!*n 當(dāng)n>1時(shí)#include<stdio.h> main() {longintn=1; inti;

for

(

i=1;i<=10;i++

)

{

n=n*i;/*求N!*/ printf("%2d!=%ld\n",i,n);

}

}例C3_5203for語(yǔ)句最常用的形式for(初值;控制條件;增量)語(yǔ)句;第13頁(yè)§6.3for語(yǔ)句-實(shí)例(數(shù)字計(jì)算)例C3_5第67

頁(yè)§6.3for語(yǔ)句-實(shí)例語(yǔ)句中的逗號(hào)(,)運(yùn)算

逗號(hào)(,)運(yùn)算常見(jiàn)的三種用途是:1.在變量說(shuō)明表中用來(lái)分隔變量,起分隔符的作用。如:inti,

j,k,

m[3],*p;2.在函數(shù)的參數(shù)表中分隔參數(shù)。如:printf("n=%d,x=%d\n",n,x);3.在語(yǔ)句中使用。其形式是:表達(dá)式n1,表達(dá)式n2;用逗號(hào)分隔開(kāi)的表達(dá)式從左到右進(jìn)行計(jì)算,結(jié)果的類型和值是最右邊表達(dá)式的類型和值。第14頁(yè)§6.3for語(yǔ)句-實(shí)例語(yǔ)句中的逗號(hào)(,)運(yùn)算第68

頁(yè)§6.3for語(yǔ)句-實(shí)例(符號(hào)處理)例C3_5205.C:用逗號(hào)運(yùn)算輸出下列字符串。azbycxdwevfugthsirjqkplomn

分析:奇數(shù)位上的字符從'a'開(kāi)始逐次遞增,偶數(shù)位上的字符從'z'開(kāi)始逐次遞減 #include<stdio.h>main(){chari,j; /*i:奇位字符

j:偶位字符

*//*i從’a’開(kāi)始逐次遞增,j從’z’開(kāi)始逐次遞減*/

for(i='a',j='z';i<j;i++,

j--) printf(”%c%c”,i,j);/*輸出兩個(gè)字符*/

printf("\n");}例C3_5205第15頁(yè)§6.3for語(yǔ)句-實(shí)例(符號(hào)處理)例C3_5第69

頁(yè)§6.3for語(yǔ)句–注意事項(xiàng)for語(yǔ)句的變化形式

for語(yǔ)句中的三個(gè)表達(dá)式中的任意一個(gè)都是可以省略的(在語(yǔ)法上被接受),但是邏輯不合理。1.省略表達(dá)式2,則:for(表達(dá)式1;;表達(dá)式3)就形成了一個(gè)死循環(huán)。2.省略表達(dá)式1和表達(dá)式3,則:for(;表達(dá)式2;)等同于:while(表達(dá)式)

據(jù)此結(jié)論:所有用while語(yǔ)句實(shí)現(xiàn)的循環(huán)都可以用for語(yǔ)句實(shí)現(xiàn)。3.表達(dá)式1、2、3全省略,則:for

(;;)等同于:while

(1)第16頁(yè)§6.3for語(yǔ)句–注意事項(xiàng)for語(yǔ)句的變第70

頁(yè)§6.4do-while語(yǔ)句do-while語(yǔ)句格式

do

語(yǔ)句

while(

表達(dá)式);do-while語(yǔ)句的執(zhí)行流程表達(dá)式?執(zhí)行語(yǔ)句成立不成立執(zhí)行while子句之后的語(yǔ)句循環(huán)控制條件循環(huán)體第17頁(yè)§6.4do-while語(yǔ)句do-while語(yǔ)第71

頁(yè)§6.4do-while語(yǔ)句-實(shí)例–數(shù)字計(jì)算例C3_5301.C:輸入一個(gè)>=0

的整數(shù),要求以相反的順序輸出該數(shù)。例如:輸入12345,則輸出為54321。

基本思路:可以從個(gè)位開(kāi)始,按位輸出整數(shù)的每一位

main(){unsignedintnumber;printf("Inputthenumber:");scanf("%d",&number); do{printf("%d",number%10);

number/=10;/*number縮小10倍*/ }while(number!=0);}例C3_5301思考:使用while或for語(yǔ)句,如何實(shí)現(xiàn)?例C3_53011兩個(gè)程序有何區(qū)別?前面的程序可以處理數(shù)字0,后面的程序不能處理第18頁(yè)§6.4do-while語(yǔ)句-實(shí)例–數(shù)字計(jì)第72

頁(yè)§6.4do-while語(yǔ)句-實(shí)例–符號(hào)處理例C3_5302.C從鍵盤輸入任意的字符,按下列規(guī)則進(jìn)行分類計(jì)數(shù)。第一類’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’第二類

’+’,’-’,’*’,’/’,’%’,’=’第三類其它字符當(dāng)輸入字符’\’

時(shí)先計(jì)數(shù)然后停止接收輸入。第19頁(yè)§6.4do-while語(yǔ)句-實(shí)例–符號(hào)處第73

頁(yè)§6.4do-while語(yǔ)句-實(shí)例

main(){intclass1=0,class2=0,class3=0;charch; do{

putchar(ch=getch());/*函數(shù)的嵌套調(diào)用*/

switch

(ch)

{case

’0’:case

’1’:case

’2’:case

’3’:

case

’4’:case’5’:case

’6’:case’7’:

case

’8’:case

’9’:class1++;break;/*對(duì)分類1計(jì)數(shù)*/

case

’+’:case’-’:case

’*’:case

’/’:

case’%’:case

’=’:class2++;break;/*對(duì)分類2計(jì)數(shù)*/

default:class3++;break;/*對(duì)分類3計(jì)數(shù)*/

}}while(ch!=’\\’);

printf("class1=%d,class2=%d,class3=%d\n",class1,class2,class3);}例C3_5302第20頁(yè)§6.4do-while語(yǔ)句-實(shí)例main(第74

頁(yè)§6.4do-while語(yǔ)句–注意事項(xiàng)do-while語(yǔ)句特點(diǎn)

do-while與while和for的最大區(qū)別:

do-while語(yǔ)句先執(zhí)行循環(huán)體然后再判斷循環(huán)控制條件,而while和for卻是先判斷條件之后再執(zhí)行循環(huán)體。 使用do-while構(gòu)成的循環(huán),循環(huán)體部分至少要執(zhí)行一次; 而采用while和for構(gòu)成的循環(huán),循環(huán)體部分有可能一次也不會(huì)執(zhí)行。第21頁(yè)§6.4do-while語(yǔ)句–注意事項(xiàng)do第75

頁(yè)§6.5循環(huán)語(yǔ)句小結(jié)C語(yǔ)言提供三種循環(huán):for、while、do-while:

1、for和while先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-while語(yǔ)句先執(zhí)行循環(huán)體后判斷循環(huán)條件。 2、while和do-while語(yǔ)句的條件表達(dá)式只有1個(gè);for語(yǔ)句有3個(gè)表達(dá)式,表達(dá)式2是條件表達(dá)式。 3、while、do-while、for可以相互替換使用。 4、while語(yǔ)句多用于不需要賦初值的或循環(huán)次數(shù)不定的情況。

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

do-while語(yǔ)句多用于至少要運(yùn)行一次的循環(huán)。 5、循環(huán)語(yǔ)句可以嵌套,可以并列,但不能交叉。第22頁(yè)§6.5循環(huán)語(yǔ)句小結(jié)C語(yǔ)言提供三種循環(huán):for第76

頁(yè)§6.5循環(huán)語(yǔ)句小結(jié)為了保證循環(huán)體正常運(yùn)行,應(yīng)該特別注意:循環(huán)控制條件控制條件的初始狀態(tài)(初始值)循環(huán)體內(nèi)部對(duì)控制條件的影響以上三個(gè)方面相互配合,相互影響,共同完成循環(huán)控制第23頁(yè)§6.5循環(huán)語(yǔ)句小結(jié)為了保證循環(huán)體正常運(yùn)行,應(yīng)第77

頁(yè)循環(huán)中的常見(jiàn)算法問(wèn)題1

-循環(huán)與遞推例C3_5204.C: 草原上有一對(duì)小兔子,它們剛出生后的第1個(gè)月就會(huì)逐步長(zhǎng)大,到了第2個(gè)月末就生出一對(duì)小兔子。第3個(gè)月大兔子會(huì)繼續(xù)生一對(duì)小兔子,而第2個(gè)月出生的小兔子會(huì)逐步長(zhǎng)大。第4個(gè)月時(shí),第1月出生的兔子繼續(xù)生育,第2月出生的小兔子也可以生育一對(duì)小兔子了,第3月出生的小兔子則逐步長(zhǎng)大……

假設(shè)這些草原的兔子非常長(zhǎng)壽,可以認(rèn)為它們不會(huì)死亡。請(qǐng)建立數(shù)學(xué)模型,計(jì)算第N個(gè)月時(shí),草原上將會(huì)有多少對(duì)兔子?第24頁(yè)循環(huán)中的常見(jiàn)算法問(wèn)題1-循環(huán)與遞推例C3_5第78

頁(yè)循環(huán)與遞推例C3_5204.C:數(shù)列1、1、2、3、5、8、13、21、…是著名的菲波那奇數(shù)列,其遞推通項(xiàng)公式為: U1=U2=1 Un=Un-1+Un-2 (n>=3)

為求出第N項(xiàng)的值,請(qǐng)編寫程序。

根據(jù)遞推通項(xiàng)公式,可用遞推法編寫程序,計(jì)算第N項(xiàng)的值。遞推法:由初始的已知條件開(kāi)始,先計(jì)算出第(N-1)步的結(jié)果,再利用前面已知的(N-1)項(xiàng)結(jié)果,按照遞推公式(或遵照遞推規(guī)則),推出第N步結(jié)果。

遞推法是程序設(shè)計(jì)中最常用的方法之一,使用遞推法必須有明確的遞推初始值和遞推規(guī)則(遞推公式)。第25頁(yè)循環(huán)與遞推例C3_5204.C:數(shù)列1、1、2、第79

頁(yè)循環(huán)與遞推例C3_5204.C程序un=un_1=1;for(i=3;i<=n;i++){

un_2=un_1;un_1=un;un=un_2+un_1;}i<=n?向前傳遞前兩項(xiàng)un_2=un_1un_1=un成立不成立初始化:un=un_1=1計(jì)算un=un_2+un_1遞推項(xiàng):i=3i++數(shù)列對(duì)應(yīng)關(guān)系:

un_2,un_1,un遞推計(jì)算第26頁(yè)循環(huán)與遞推例C3_5204.C程序i<=n?第80

頁(yè)循環(huán)與遞推例C3_5204.C程序#include<stdio.h>main(){intn,i,un_2,un_1,un;

for(;;){printf("Inputn=?");scanf("%d",&n);

if(n>=3)

break;/*退出for循環(huán)*/

elseprintf("\nInputniserror!\n");}

/*控制輸入正確的N值*/

un=un_1=1;/*設(shè)置遞推初始值*/

for(i=3;i<=n;i++)/*用遞推法計(jì)算第N項(xiàng)的值*/

{

un_2=un_1;un_1=un;un=un_2+un_1;

}printf("No.%dis%d\n",n,un);}例C3_5204第27頁(yè)循環(huán)與遞推例C3_5204.C程序例C3_520循環(huán)中的常見(jiàn)算法問(wèn)題2

-循環(huán)的嵌套在一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體中又包含了另一個(gè)循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。嵌套形式多種多樣,可嵌套任意的一個(gè)或多個(gè)循環(huán)。例:x=1while(x<=9){for(i=1;i<=9;i++)printf(“%5d”,x*i);

x++;printf(“\n”);}for(i=1;i<=9;i++){

for(j=1;j<=9;j++)printf(“%5d”,i*j);

printf(“\n”);}for(i=1;i<=9;i++){j=1;

do{printf(“%5d”,i*j);j++;}while(j<10);printf(“\n”);}注意大括號(hào){}的使用{}不要可以嗎?循環(huán)中的常見(jiàn)算法問(wèn)題2-循環(huán)的嵌套在一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體中循環(huán)的嵌套-結(jié)構(gòu)規(guī)則

外循環(huán)內(nèi)循環(huán)交叉循環(huán)外循環(huán)入口內(nèi)循環(huán)出口內(nèi)循環(huán)出口外循環(huán)出口如:打印乘法九九表外循環(huán)出口1.在嵌套的循環(huán)中外循環(huán)與內(nèi)循環(huán)變量不可同名。2.外循環(huán)與內(nèi)循環(huán)不可交叉。循環(huán)的嵌套-結(jié)構(gòu)規(guī)則外循環(huán)內(nèi)循環(huán)交叉循環(huán)外循環(huán)內(nèi)循環(huán)第83

頁(yè)循環(huán)的嵌套-實(shí)例循環(huán)嵌套在循環(huán)體中,又包含有循環(huán)語(yǔ)句,構(gòu)成循環(huán)嵌套。

例C3_5107.C:輸出下三角形乘法九九表。123456789---------------------------------------12436948121651015202561218243036714212835424981624324048566491827364554637281假設(shè):行號(hào)為i,列號(hào)為ji=6j=5i*j(1<=i<=9)(1<=j<=i)則:第i

行中一共要輸出i個(gè)乘積第30頁(yè)循環(huán)的嵌套-實(shí)例循環(huán)嵌套i=6(1<=i<=9)第84

頁(yè)循環(huán)的嵌套-實(shí)例 #include<stdio.h>main(){inti=1,j;/*i:行計(jì)數(shù)器j:列計(jì)數(shù)器*/

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論