版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合伙投資競(jìng)業(yè)書合同
- 大班數(shù)學(xué)《坐船去探險(xiǎn)》課件
- 手足口病風(fēng)趣幽默講解
- 2024房屋修繕合同
- 小學(xué)課外活動(dòng)記錄20篇-20211116120635
- 2024新版家政保姆合同樣本
- 2024安置房買賣合同范本(標(biāo)準(zhǔn)版)
- 2024離婚合同協(xié)議書范本范文有子女
- 2024學(xué)校食堂租賃合同
- 2024新版影視劇攝制委托貸款合同
- 醫(yī)療健康管理合作框架協(xié)議
- 教師資格考試《高中心理健康專業(yè)面試》真題卷
- 2024年拖車服務(wù)合同范本
- 培訓(xùn)需求調(diào)研問(wèn)卷
- (管理制度)某酒業(yè)公司經(jīng)銷商管理制度
- 2023-2024年高二年級(jí)上學(xué)期期中試題:文言文閱讀(解析版)
- 江蘇省揚(yáng)州市2022-2023學(xué)年高一上學(xué)期數(shù)學(xué)期中考試試卷(含答案)
- 【六年級(jí)】上冊(cè)道德與法治-(核心素養(yǎng)目標(biāo))9.1 知法守法 依法維權(quán) 第一課時(shí) 教案設(shè)計(jì)
- 學(xué)習(xí)解讀2024年《關(guān)于深化產(chǎn)業(yè)工人隊(duì)伍建設(shè)改革的意見(jiàn)》課件
- 2024年中國(guó)汽車基礎(chǔ)軟件發(fā)展白皮書5.0-AUTOSEMO
- 車站調(diào)度員(高級(jí))技能鑒定理論考試題及答案
評(píng)論
0/150
提交評(píng)論