版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第三章C語言的流程控制本章學(xué)習(xí)重點(diǎn):if語句的三種定義格式及使用switch語句的定義格式及使用while、do-while和for循環(huán)語句的結(jié)構(gòu)及應(yīng)用循環(huán)語句嵌套結(jié)構(gòu)及流程控制語句的使用break語句和continue語句及goto語句的使用本章目錄第五講
選擇結(jié)構(gòu)第六講
循環(huán)結(jié)構(gòu)第七講
循環(huán)語句的嵌套和流程轉(zhuǎn)向語句本章小結(jié)結(jié)束第五講選擇結(jié)構(gòu)一、基本if語句二、標(biāo)準(zhǔn)if語句三、復(fù)合if語句四、if語句的嵌套五、switch語句返回到本章目錄思考題3-1:從鍵盤上輸入一個(gè)整數(shù),如果大于等于零輸出“PositiveNumber”(正數(shù)),小于零輸出“NegativeNumber”(負(fù)數(shù))(要求用基本的if語句實(shí)現(xiàn))。(一)程序分析(1)從鍵盤輸入一個(gè)整數(shù);(2)判斷該數(shù)是大于等于零或者小于零;(3)輸出對應(yīng)結(jié)果。一、基本if語句返回到本章目錄(二)編寫程序代碼main(){intx;/*定義整型變量x*/printf("inputx:");/*提示從鍵盤輸入一個(gè)數(shù)*/scanf("%d",&x);/*接受輸入的數(shù)賦值給x*/if(x>=0)/*判斷x是否大于0*/printf("%disPositiveNumber!\n",x);/*如果大于0,輸出結(jié)果為正數(shù)*/if(x<0)/*判斷x是否小于0*/printf("%disNegativeNumber!\n",x);/*如果小于0,輸出結(jié)果為負(fù)數(shù)*/}返回到本章目錄(三)調(diào)試運(yùn)行結(jié)果輸入x的值為5,輸出“5isPositiveNumber!”;再次運(yùn)行程序,輸入一個(gè)x的值為-3,輸出“-3isNegativeNumber!”。程序運(yùn)行結(jié)果如下:返回到本章目錄1)基本if語句定義格式為if(表達(dá)式)語句;例如:
if(a<b){t=a;a=b;b=t;}
其中,if是C語言的關(guān)鍵字,表達(dá)式兩側(cè)的圓括號不可少,一條“語句”稱為if子句。如果在if子句中需要多條語句,則應(yīng)該使用花括號把一組語句括起來組成復(fù)合語句,這樣在語法上仍滿足“一條語句”的要求。1.if語句基本形式if(表達(dá)式)
語句;返回到本章目錄2)if語句的執(zhí)行過程首先計(jì)算緊跟在if后面一對圓括號中表達(dá)式的值,如果表達(dá)式的值為非零(“真”),則執(zhí)行其后的if子句,然后去執(zhí)行if語句后的下一個(gè)語句。如果表達(dá)式的值為零(“假”),則跳過if子句,直接執(zhí)行if語句后的下一個(gè)語句。返回到本章目錄3)基本if語句的流程示意圖流程圖如圖3-2所示。表達(dá)式假(=0),真(≠0)語句圖3-2基本if語句的流程示意圖表達(dá)式假(=0)真(≠0)語句返回到本章目錄4)說明①if語句自動結(jié)合一個(gè)語句,當(dāng)滿足條件需要執(zhí)行多個(gè)語句時(shí),應(yīng)用一對大括號{}將需要執(zhí)行的多個(gè)語句括起,形成一個(gè)復(fù)合語句。②if語句中表達(dá)式形式很靈活,可以是常量、變量、任何類型表達(dá)式、函數(shù)、指針等。只要表達(dá)式的值為非零值,條件就為真,反之條件為假。返回到本章目錄二、標(biāo)準(zhǔn)if語句思考題3-2:從鍵盤上輸入一個(gè)數(shù),如果大于等于零輸出“PositiveNumber”(正數(shù)),否則輸出“NegativeNumber”(負(fù)數(shù))(要求用標(biāo)準(zhǔn)if語句實(shí)現(xiàn))。(一)程序分析(1)從鍵盤輸入一個(gè)數(shù);(2)判斷該數(shù)是否大于等于零;(3)輸出結(jié)果。返回到本章目錄(二)編寫程序代碼main(){intx;printf("inputx:");scanf("%d",&x);if(x>=0)/*判斷x是否大于0*/printf("%disPositiveNumber!\n",x);/*如果x大于0成立,輸出結(jié)果為正數(shù)*/else/*如果x大于0的條件不成立*/printf("%disNegativeNumber!\n",x);/*輸出x小于0的結(jié)果為負(fù)數(shù)*/}返回到本章目錄(三)調(diào)試運(yùn)行結(jié)果輸入x的值為5,輸出“5isPositiveNumber!”;再次運(yùn)行程序,輸入一個(gè)x的值為-3,輸出“-3isNegativeNumber!”。程序運(yùn)行結(jié)果如下:返回到本章目錄1)標(biāo)準(zhǔn)if語句定義格式例如:
if(a!=0)printf("a!=0\n");elseprintf("a==0\n");
2.if語句標(biāo)準(zhǔn)形式if(表達(dá)式)
語句1;else
語句2;返回到本章目錄
在這里,“語句1”稱為if子句,“語句2”稱為else子句,這些子句只允許是一條語句,若需要多條語句時(shí),則應(yīng)該使用花括號把這些語句括起來組成復(fù)合語句。注意,else不是一條獨(dú)立的語句,它只是if語句的一部分,不允許有這樣的語句:
elseprintf("***");
在程序中else必須與if配對,共同組成一條if-else語句。返回到本章目錄2)if-else語句的執(zhí)行過程首先計(jì)算緊跟在if后面一對圓括號內(nèi)表達(dá)式的值。如果表達(dá)式的值為非零,執(zhí)行if子句,然后跳過else子句,去執(zhí)行if語句后的下一條語句;如果表達(dá)式的值為零,跳過if子句,去執(zhí)行else子句,接著去執(zhí)行if語句后的下一條語句。3)說明①if后面圓括號中的表達(dá)式,可以是任意合法的C語言表達(dá)式(如:邏輯表達(dá)式、關(guān)系表達(dá)式、算術(shù)表達(dá)式、賦值表達(dá)式等),也可以是任意類型的數(shù)據(jù)(如:整型、實(shí)型、字符型等)。返回到本章目錄②無論是否有else子句,if子句中如果只有一條語句,則此語句后的分號不能省略。例如:if(x!=0)printf("%f",xelseprintf("%f",y);返回到本章目錄4)基本if語句的流程示意圖語句2語句1表達(dá)式假(=0)真(≠0)返回到本章目錄三、復(fù)合if語句思考題3-3:從鍵盤上輸入一個(gè)整數(shù),如果大于零輸出“PositiveNumber”(正數(shù)),如果小于零輸出“NegativeNumber”(負(fù)數(shù)),否則輸出“Zero”(零)。(一)程序分析(1)從鍵盤輸入一個(gè)整數(shù);(2)判斷該數(shù)是大于零、小于零還是等于零;(3)輸出結(jié)果。返回到本章目錄流程圖返回到本章目錄(二)編寫程序代碼main(){intx;printf("inputx:");scanf("%d",&x);if(x>0)/*判斷x是否大于0*/printf("%disPositiveNumber!\n",x);/*如果x大于0成立,輸出結(jié)果為正數(shù)*/elseif(x<0)/*否則繼續(xù)判斷x是否小于0*/printf("%disNegativeNumber!\n",x);/*如果x小于0成立,輸出結(jié)果為負(fù)數(shù)*/elseprintf("\n%disZero!\n",x);/*否則輸出結(jié)果為零*/}返回到本章目錄(三)調(diào)試運(yùn)行結(jié)果
輸入x的值為5,輸出“5isPositiveNumber!”;再次運(yùn)行程序,輸入一個(gè)x的值為-3,輸出“-3isNegativeNumber!”;第三次運(yùn)行程序,輸入x的值為0,輸出“0isZero!”。
程序運(yùn)行結(jié)果如下:返回到本章目錄1)復(fù)合if語句定義格式3.if語句復(fù)合形式if(表達(dá)式1)
語句1;elseif(表達(dá)式2)
語句2;……elseif(表達(dá)式n)語句n;else
語句n+1;返回到本章目錄2)復(fù)合if語句執(zhí)行過程首先計(jì)算表達(dá)式1的值,若表達(dá)式的值為“真”(表達(dá)式具有非0值),則執(zhí)行語句1;否則繼續(xù)判斷表達(dá)式2,若表達(dá)式的值為“真”,則執(zhí)行語句2;否則繼續(xù)判斷下一個(gè)條件,……直到最后前面n個(gè)條件都不成立時(shí),執(zhí)行else后面的語句n+1。返回到本章目錄3)復(fù)合if語句的流程圖返回到本章目錄四、if語句的嵌套4.if語句的嵌套1)復(fù)合if語句定義格式在if語句中,語句1和語句2本身也可以是if語句,此時(shí)稱為if語句的嵌套。2)嵌套的格式if語句可以內(nèi)嵌在if子句中,又可以內(nèi)嵌在else子句中。返回到本章目錄例如:if()if()
語句1;else內(nèi)嵌if
語句2;elseif()
語句3;else內(nèi)嵌if
語句4;返回到本章目錄3)嵌套的說明
以上形式的嵌套if語句執(zhí)行過程可以這樣理解:從上向下逐行對if后的表達(dá)式進(jìn)行檢測。當(dāng)某一個(gè)表達(dá)式的值為非零時(shí),就執(zhí)行與此有關(guān)子句中的語句,階梯形中的其余部分被越過去。如果所有表達(dá)式的值都為零,則執(zhí)行最后的else子句;此時(shí),如果程序中最內(nèi)層的if語句沒有else子句,即沒有最后的那個(gè)else子句,那么將不進(jìn)行任何操作。注意:C語言的語法規(guī)定,else子句總是與前面最近的未曾配對(不帶else)的if組成一對。返回到本章目錄五、switch語句思考題3-4:設(shè)計(jì)一個(gè)程序,用switch語句實(shí)現(xiàn)由鍵盤輸入一個(gè)成績,輸出該成績的等級。其中A代表90分以上,B代表80~89,C代表70~79,D代表60~69,E代表60分以下。如果成績不在0-100之間則輸出錯(cuò)誤信息。(一)程序分析(1)定義score變量,存放由鍵盤輸入的學(xué)生成績;(2)輸入學(xué)生成績給變量score;(3)根據(jù)學(xué)生score整除10得到其十位上的數(shù)字,確定該成績范圍,并輸出其等級。返回到本章目錄(二)編寫程序代碼main(){floatscore;printf("\nPleaseinputascore:");scanf("%f",&score);if(score>=0&&score<=100){switch((int)score/10){case10:case9:printf("\n%.2fclassisA!",score);break;case8:printf("\n%.2fclassisB!",score);break;case7:printf("\n%.2fclassisC!",score);break;case6:printf("\n%.2fclassisD!",score);break;default:printf("\n%.2fclassisE!",score);}}elseprintf("\nThescoreiswrong!");}返回到本章目錄(三)調(diào)試運(yùn)行結(jié)果
程序運(yùn)行結(jié)果分析:運(yùn)行6次程序,每次輸入一個(gè)區(qū)間的成績(其中最后一次輸入一個(gè)錯(cuò)誤成績,不在0-100之間)。程序運(yùn)行結(jié)果如下:返回到本章目錄5.switch語句(多分支選擇語句)1)switch語句定義格式switch(表達(dá)式){case常量表達(dá)式1:語句組1;break;case常量表達(dá)式2:語句組2;break;…………case常量表達(dá)式n:語句組n;break;default:語句組n+1;break;}返回到本章目錄2)說明
switch語句又稱為開關(guān)語句,語句的執(zhí)行過程如下:程序執(zhí)行至switch語句首先對括號內(nèi)的表達(dá)式進(jìn)行計(jì)算,然后按順序找出與常量表達(dá)式值相匹配的case,以此作為入口,執(zhí)行case語句后面的各個(gè)語句組,直到遇到break或switch語句的右花括號終止語句。如果沒有任何一個(gè)case能與表達(dá)式值相匹配,則執(zhí)行default語句后的語句組,若default及其后語句組省略,則不執(zhí)行switch中任何語句組,而繼續(xù)執(zhí)行下面的程序。返回到本章目錄3)使用switch語句注意的問題(1)default語句及后面語句組可以省略。(2)switch后圓括號內(nèi)表達(dá)式可以是整數(shù)表達(dá)式、字符表達(dá)式或枚舉表達(dá)式。case后面是整數(shù)或字符,也可以是不含變量和函數(shù)的常量表達(dá)式。同一個(gè)switch語句中的case后的值不能相同。(3)case及后語句和default及后語句出現(xiàn)次序可以任意。(4)case與其后的常量表達(dá)式之間要有空格,否則系統(tǒng)會識別不出該常量表達(dá)式。(5)執(zhí)行完一個(gè)case語句后,程序自動轉(zhuǎn)到后面的語句執(zhí)行,直到遇到break或switch語句的右花括號終止語句。返回到本章目錄【練習(xí)3-1】從鍵盤上輸入一個(gè)成績(0~100之間),輸出這個(gè)分?jǐn)?shù)對應(yīng)的等級。其中A代表90分以上,B代表80~89,C代表70~79,D代表60~69,E代表60分以下,如果成績不在0~100之間則輸出錯(cuò)誤信息。要求用復(fù)合if語句來實(shí)現(xiàn)。解:源程序如下:main(){floatscore;printf("\nPleaseinputascore:");scanf("%f",&score);if(score>=0&&score<=100)練一練返回到本章目錄{if(score>=90)printf("\n%.2fclassisA!",score);elseif(score>=80)printf("\n%.2fclassisB!",score);elseif(score>=70)printf("\n%.2fclassisC!",score);elseif(score>=60)printf("\n%.2fclassisD!",score);elseprintf("\n%.2fclassisE!",score);}elseprintf("\nThescoreiswrong!");}返回到本章目錄
程序運(yùn)行結(jié)果分析:運(yùn)行6次程序,每次輸入一個(gè)區(qū)間的成績(其中最后一次輸入一個(gè)錯(cuò)誤成績,不在0~100之間)。程序運(yùn)行結(jié)果如下:返回到本章目錄【練習(xí)3-2】從鍵盤上輸入一個(gè)數(shù)學(xué)四則運(yùn)算表達(dá)式(a+b、a-b、a*b或a/b),要求計(jì)算出該表達(dá)式的值。解:分析題意,應(yīng)該設(shè)兩個(gè)整型變量a和b,再設(shè)一個(gè)存放運(yùn)算符的字符型變量ch,然后根據(jù)ch的值來進(jìn)行相應(yīng)的運(yùn)算,將結(jié)果輸出即可。程序如下:main(){inta,b;charch;printf("\nPleaseinputaformula(a+b,a-b,a*b,a/b):");scanf("%d%c%d",&a,&ch,&b);返回到本章目錄switch(ch){case'+':printf("%d+%d=%d",a,b,a+b);break;case'-':printf("%d-%d=%d",a,b,a-b);break;case'*':printf("%d*%d=%d",a,b,a*b);break;case'/':printf("%d/%d=%.2f",a,b,(float)a/b);break;/*因?yàn)榻Y(jié)果為小數(shù),所以要將a強(qiáng)制轉(zhuǎn)換成小數(shù)形式,結(jié)果才正確*/default:printf("theformulaiswrong!");}}返回到本章目錄
程序運(yùn)行5次,分別輸入4個(gè)表達(dá)式:4+5、4-5、4*5、4/5和4&5(錯(cuò)誤的表達(dá)式),程序運(yùn)行結(jié)果如下:返回到本章目錄【練習(xí)3-3】編寫一程序,從鍵盤上輸入一個(gè)年份year(4位十進(jìn)制數(shù)),判斷其是否為閏年。閏年的條件是:能被4整除、但不能被100整除,或者能被400整除。解:閏年是年份能被4整除但不能被100整除的數(shù),或是能被400整除的數(shù)。我們設(shè)年份為year,這樣就構(gòu)成了一個(gè)判斷閏年的條件表達(dá)式如下:(year%4==0&&year%100!=0)||(year%400==0)返回到本章目錄源程序如下:main(){intyear;printf("Pleaseinputtheyear:");scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))/*判斷年份是否是閏年*/printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);}返回到本章目錄
第一次輸入年份“1998”,輸出結(jié)果“1998isnotaleapyear.”,第二次輸入年份“2000”,輸出結(jié)果“2000isaleapyear.”。程序運(yùn)行結(jié)果如下:返回到本章目錄本講小結(jié)C語言提供了可以進(jìn)行邏輯判斷的選擇語句,由選擇語句構(gòu)成的選擇結(jié)構(gòu)將根據(jù)邏輯判斷的結(jié)果決定程序的不同流程。選擇結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)之一。通過本節(jié)學(xué)習(xí),掌握if語句的三種格式,理解if語句的嵌套,掌握switch語句基本格式及解決問題的方法。返回到本章目錄第六講 循環(huán)結(jié)構(gòu)一、while語句二、do-while語句三、for循環(huán)語句返回到本章目錄一、while語句思考題3-5:設(shè)計(jì)一個(gè)程序,用while循環(huán)語句實(shí)現(xiàn)1~100自然數(shù)的和。(一)程序分析這是一個(gè)求100個(gè)數(shù)的累加和問題。加數(shù)從1變化到100,可以看到加數(shù)是有規(guī)律變化的,后一個(gè)加數(shù)比前一個(gè)加數(shù)增1,因此可以在循環(huán)體中使用一個(gè)整型變量i,每循環(huán)一次使i增1,一直循環(huán)到i的值超過100,用這個(gè)辦法就解決了所需的加數(shù)問題。但是要特別注意的是變量i需要有一個(gè)正確的初值,這里初值應(yīng)當(dāng)設(shè)為1。返回到本章目錄設(shè)用一個(gè)變量sum存放這100個(gè)數(shù)的和值,sum的初值為0,可以先求0加1(i的初值為1)的和并將其放在sum中,然后把sum中的數(shù)加上2再存放在sum中,依次類推,sum累加的過程要放在循環(huán)中,由計(jì)算機(jī)判斷所加的數(shù)是否已經(jīng)超過100,加數(shù)則放在變量i中,并在循環(huán)過程中每一次增1。返回到本章目錄(二)編寫程序代碼main(){intsum=0,i=1;/*sum的初值為0*/while(i<=100) /*當(dāng)i小于或等于100時(shí)執(zhí)行循環(huán)體*/{sum+=i;i++;}/*在循環(huán)體中累加一次,并將i值自增1*/printf("1+2+…+100=%d\n",sum);}(三)調(diào)試運(yùn)行結(jié)果返回到本章目錄1.while循環(huán)語句1)while語句基本形式如下:while(表達(dá)式)循環(huán)體while是C語言的關(guān)鍵字。while后圓括號中的表達(dá)式,可以是C語言中任意合法的表達(dá)式,由它來控制循環(huán)體是否執(zhí)行。在語法上,要求循環(huán)體可以是一條簡單的可執(zhí)行語句;若循環(huán)體內(nèi)需要多個(gè)語句,應(yīng)該用大括號括起來,組成復(fù)合語句。返回到本章目錄2)while語句的執(zhí)行過程計(jì)算while后圓括號中表達(dá)式的值。當(dāng)值為非零時(shí),執(zhí)行循環(huán)體語句。執(zhí)行完后再次判斷表達(dá)式的值,當(dāng)表達(dá)式的值為非零時(shí),繼續(xù)執(zhí)行循環(huán)體;當(dāng)值為零時(shí),退出循環(huán)。3)使用while語句注意的問題(1)循環(huán)體如果包含一個(gè)以上的語句,應(yīng)該用花括號括起來,以復(fù)合語句的形式出現(xiàn)。如果不用花括號,則while語句的范圍只到while后面第一個(gè)分號處。(2)在循環(huán)體中應(yīng)該有使循環(huán)趨向于結(jié)束的語句。如無此語句,循環(huán)將永不結(jié)束。返回到本章目錄二、do-while語句思考題3-6:設(shè)計(jì)一個(gè)程序,用do-while循環(huán)語句實(shí)現(xiàn)1~100自然數(shù)的和。(一)程序分析(1)定義變量sum和i,分別存放累計(jì)和及循環(huán)次數(shù);(2)累計(jì)和變量sum賦初值0,循環(huán)次數(shù)i賦初值1;(3)do-while循環(huán)求和;(4)輸出累計(jì)和結(jié)果sum。返回到本章目錄(二)編寫程序代碼main(){intsum=0,i=1;do{sum+=i;i++;}while(i<=100);printf("1+2+…+100=%d\n",sum);}(三)調(diào)試運(yùn)行結(jié)果返回到本章目錄2.do-while循環(huán)語句1)do-while語句基本形式do{循環(huán)體
}while(表達(dá)式);2)do-while語句執(zhí)行過程(1)執(zhí)行do后面循環(huán)體中的語句。(2)計(jì)算while后圓括號中表達(dá)式的值。當(dāng)值為非零時(shí),轉(zhuǎn)去執(zhí)行步驟①;當(dāng)值為零時(shí),結(jié)束do-while循環(huán)。返回到本章目錄由do-while構(gòu)成的循環(huán)與while循環(huán)十分相似,它們之間的重要區(qū)別是:while循環(huán)控制出現(xiàn)在循環(huán)體之前,只有當(dāng)while后面表達(dá)式的值為非零時(shí),才可能執(zhí)行循環(huán)體;在do-while構(gòu)成的循環(huán)中,總是先執(zhí)行一次循環(huán)體,然后再求表達(dá)式的值,因此,無論表達(dá)式的值是零還是非零,循環(huán)體至少執(zhí)行一次。和while循環(huán)一樣,在do-while循環(huán)體中,一定要有能使while后表達(dá)式的值變?yōu)?的操作,否則,循環(huán)將會無限制地進(jìn)行下去,進(jìn)入死循環(huán)。返回到本章目錄3)do-while語句的使用說明:(1)do是C語言的關(guān)鍵字,必須和while聯(lián)合使用。(2)do-while循環(huán)由do開始,至while結(jié)束。
while(表達(dá)式)后的“;”不可丟,它表示do-while語句的結(jié)束。do-while語句的程序流程圖返回到本章目錄(3)while后圓括號中的表達(dá)式可以是C語言中任意合法的表達(dá)式,由它控制循環(huán)是否執(zhí)行。(4)按語法,在do和while之間的循環(huán)體只能是一條可執(zhí)行語句;若循環(huán)體內(nèi)需要多個(gè)語句,應(yīng)該用大括號括起來,組成復(fù)合語句。返回到本章目錄三、for循環(huán)語句思考題3-7:設(shè)計(jì)一個(gè)程序,用for循環(huán)語句實(shí)現(xiàn)1~100自然數(shù)的和。(一)程序分析(1)定義變量sum和i,分別存放累計(jì)和及循環(huán)次數(shù);(2)累計(jì)和變量sum賦初值0;(3)for循環(huán)求和;(4)輸出累計(jì)和結(jié)果sum。返回到本章目錄(二)編寫程序代碼main(){intsum,i;for(i=1,sum=0;i<=100;i++)sum=sum+i;printf("1+2+3+…+100=%d\n",sum);}(三)調(diào)試運(yùn)行結(jié)果返回到本章目錄3.for循環(huán)語句1)for語句基本形式例如:for(k=0;k<10;k++)printf("*");以上for循環(huán)在一行上輸出10個(gè)“*”號。for(賦初值語句;條件表達(dá)式;自增(減)語句)循環(huán)體返回到本章目錄for是C語言的關(guān)鍵字,其后的圓括號中通常含有三個(gè)表達(dá)式,各表達(dá)式之間用“;”隔開。這三個(gè)表達(dá)式可以是任意形式的表達(dá)式,通常主要用于for循環(huán)的控制。緊跟在for之后的循環(huán)體,在語法上要求是一條語句;若在循環(huán)體內(nèi)需要多條語句,應(yīng)該用大括號括起來組成復(fù)合語句。返回到本章目錄2)for語句執(zhí)行過程(1)執(zhí)行“賦初值語句”為循環(huán)體變量賦初值(注意,該語句在整個(gè)循環(huán)中只在開始時(shí)執(zhí)行一次)。(2)判斷“條件”是否成立:若其值為非零,轉(zhuǎn)步驟③;若其值為零,轉(zhuǎn)步驟⑤。(3)執(zhí)行一次for循環(huán)體。(4)執(zhí)行“自增(減)語句”;轉(zhuǎn)向步驟②。(5)結(jié)束循環(huán),執(zhí)行for循環(huán)之后的語句。返回到本章目錄3)for語句的使用說明(1)for語句中的表達(dá)式可以部分或全部省略,但兩個(gè)“;”不可省略。例如:for(;;)printf("*");三個(gè)表達(dá)式均省略,但因缺少條件判斷,循環(huán)將會無限制地執(zhí)行,而形成無限循環(huán)(通常稱為死循環(huán))。(2)for后括號中的表達(dá)式可以是任意有效的C語言表達(dá)式。返回到本章目錄例如:for(sum=0,i=1;i<=100;sum=sum+i,i++){…}其中表達(dá)式1和表達(dá)式3都是一個(gè)逗號表達(dá)式。注意:C語言中的for語句書寫靈活,功能較強(qiáng)。在for后的圓括號中,允許出現(xiàn)各種形式的與循環(huán)控制無關(guān)的表達(dá)式,雖然這在語法上是合法的,但這樣會降低程序的可讀性。建議初學(xué)者在編寫程序時(shí),在for后面的圓括號內(nèi)僅含有能對循環(huán)進(jìn)行控制的表達(dá)式,其他操作盡量放在循環(huán)體內(nèi)完成。返回到本章目錄【練習(xí)3-4】分別用while和do-while兩種循環(huán)語句編程實(shí)現(xiàn)s=1*2*…*10的積的程序解:設(shè)一個(gè)循環(huán)體變量i和存放乘積的變量sum,初始設(shè)i等于1,sum等于1。使用循環(huán)語句,將每次的i值乘到sum上,然后將i值自加1,直到i大于10時(shí)循環(huán)結(jié)束(注意乘積sum的數(shù)值如果大于int型數(shù)據(jù)的取值范圍時(shí),應(yīng)將其類型設(shè)為長整型long)。(1)使用while循環(huán)解題程序如下:練一練返回到本章目錄main(){inti=1;longsum=1;while(i<=10){sum*=i;i++;}printf("1*2*…*10=%ld\n",sum);}程序運(yùn)行結(jié)果如下:返回到本章目錄(2)使用do-while循環(huán)解題程序如下:main(){inti=1;longsum=1;do{sum*=i;i++;}while(i<=10);printf("1*2*…*10=%ld\n",sum);}程序運(yùn)行結(jié)果同使用while語句的程序運(yùn)行結(jié)果。返回到本章目錄注意:如果將sum定義為int型變量時(shí),會出現(xiàn)溢出現(xiàn)象,結(jié)果錯(cuò)誤。還要注意長整型變量sum在輸出時(shí)格式控制符要寫成“%ld”才能正確輸出結(jié)果。返回到本章目錄【練習(xí)3-5】編程實(shí)現(xiàn)從鍵盤輸入任意數(shù)給變量x,求從1到x的和。解:設(shè)一個(gè)用于存放輸入值的變量x,再設(shè)一個(gè)循環(huán)體變量i和存放和的變量sum。先從鍵盤中輸入x的值,然后設(shè)i初始值等于1,sum等于0。再使用循環(huán)語句,將每次的i值加到sum上,然后將i值自加1,直到i大于x時(shí)循環(huán)結(jié)束。解題程序如下:main(){inti=1,x,sum=0;
返回到本章目錄printf("\ninputapositiveintegernumber:");scanf("%d",&x);while(i<=x){sum=sum+i;i++;}printf("1+2+…+%d=%d\n",x,sum);}輸入j值為5,程序運(yùn)行結(jié)果如下:返回到本章目錄本講小結(jié)
本講介紹了用while、do-while、for循環(huán)語句設(shè)計(jì)程序,注意while語句是先判斷后執(zhí)行循環(huán),而do-while是執(zhí)行一次循環(huán)后再判斷條件,for語句是循環(huán)結(jié)構(gòu)中功能最強(qiáng)、最靈活、使用最多的語句。注意三種循環(huán)語句的書寫格式及在什么情況下使用哪種語句。返回到本章目錄一、循環(huán)語句嵌套二、流程轉(zhuǎn)向語句goto語句三、break語句四、continue語句第七講 循環(huán)語句的嵌套和
流程轉(zhuǎn)向語句返回到本章目錄思考題3-8:打印楊輝三角形。(一)程序分析
楊輝三角形中,每個(gè)數(shù)值可以由組合來計(jì)算。一、循環(huán)語句的嵌套返回到本章目錄已知:假定第一行中的數(shù)字距離左邊首列為40個(gè)空格符,每一行的第一個(gè)值應(yīng)向左移2個(gè)空格符,每個(gè)數(shù)字之間留4個(gè)空格符。【思考題3-8】的程序流程圖返回到本章目錄(二)編寫程序代碼main(){intc,m,n,i;for(m=0;m<=10;m++) /*輸出楊輝三角形*/{c=1; /*每行的第一個(gè)數(shù)字賦值為1*/for(i=0;i<40-2*m;i++)printf(""); /*輸出該行左邊的空格*/printf("%d",c); /*輸出該行的第一個(gè)數(shù)字1*/for(n=1;n<=m;n++) /*輸出該行的其余數(shù)字*/{c=c*(m-n+1)/n;printf("%4d",c);}printf("\n"); /*每行結(jié)束輸出換行符*/}}返回到本章目錄(三)調(diào)試運(yùn)行結(jié)果程序運(yùn)行結(jié)果如下:返回到本章目錄1.循環(huán)語句的嵌套
一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。三種循環(huán)(while循環(huán)、do-while循環(huán)和for循環(huán))可以互相嵌套。例如,以下幾種都是合法的形式:返回到本章目錄返回到本章目錄二、流程轉(zhuǎn)向語句goto語句思考題3-9:設(shè)計(jì)一個(gè)程序,用goto語句實(shí)現(xiàn)1~100自然數(shù)的和。(一)程序分析(1)定義變量sum和i,分別存放累計(jì)和及循環(huán)次數(shù);(2)累計(jì)和變量sum賦初值0,循環(huán)次數(shù)i賦初值1;(3)使用if語句和goto語句構(gòu)成循環(huán)求和;(4)輸出累計(jì)和結(jié)果sum。解決該程序的方法利用了流程轉(zhuǎn)向語句goto語句,在“小講堂”中將對goto語句做詳細(xì)說明。返回到本章目錄(二)編寫程序代碼main(){intsum=0,i=1;a1:sum=sum+i;i++;if(i<=100)gotoa1; /*流程轉(zhuǎn)向語句,一般與if語句一起構(gòu)成循環(huán)*/printf("1+2+…+100=%d\n",sum);}返回到本章目錄(三)調(diào)試運(yùn)行結(jié)果程序運(yùn)行結(jié)果如下:返回到本章目錄2.goto語句1)goto語句形式例如:gotolable;…lable:…“語句標(biāo)號”用標(biāo)識符表示,它的定名規(guī)則與變量名相同。例如,在【思考題3-9】中,a1就是標(biāo)號。一般來說,如果要使用goto語句構(gòu)成循環(huán),一般是用if語句和goto語句配合使用的。當(dāng)if語句條件為真時(shí)無條件轉(zhuǎn)到標(biāo)號所在程序行進(jìn)行執(zhí)行。goto語句標(biāo)號;返回到本章目錄2)語句執(zhí)行流程在程序執(zhí)行過程中,如果遇到goto語句,則程序執(zhí)行流程無條件地轉(zhuǎn)向語句標(biāo)號后的語句繼續(xù)執(zhí)行。3)說明(1)語句標(biāo)號僅僅對goto語句有效,對其他語句不影響。(2)同一個(gè)程序中,不允許有同名標(biāo)號。(3)goto語句通常與條件語句配合使用,可用來實(shí)現(xiàn)條件轉(zhuǎn)移、構(gòu)成循環(huán)、跳出循環(huán)體等功能。返回到本章目錄三、break語句思考題3-10:設(shè)計(jì)一個(gè)程序,判斷一個(gè)整數(shù)是否為素?cái)?shù)。(一)程序分析
素?cái)?shù)就是除了1和它本身,不能被任何數(shù)整除的數(shù)。因此,如果一個(gè)數(shù)x是素?cái)?shù),就不能被2~x-1之間的任何一個(gè)數(shù)整除。進(jìn)一步思考,如果x在2~之間有一個(gè)數(shù)a可以被其整除,則在
~x-1之間也會有一個(gè)數(shù)b存在,滿足x=a×b成立。。返回到本章目錄所以在查找時(shí),只要x在2~之間沒有任意一個(gè)數(shù)能被整除,則x在~x-1區(qū)間內(nèi)也不會有任意一個(gè)數(shù)能被整除(即循環(huán)終值為而不是x-1)。所以程序中使用x%i的余數(shù)是否為0來判斷x是否能被i整除。退出循環(huán)后,如果i>,表示x不能被2~中任何一個(gè)數(shù)整除,則x是素?cái)?shù),否則x不是素?cái)?shù)。返回到本章目錄【思考題3-10】的程序流程圖返回到本章目錄#include"math.h"main(){inti,x;printf("\nPleaseinputaintegernumber(>1):");scanf("%d",&x);for(i=2;i<=sqrt(x);i++)if(x%i==0)break;if(i>sqrt(x))printf("\n%disaprimenumber!",x);elseprintf("\n%disnotaprimenumber!",x);}(三)調(diào)試運(yùn)行結(jié)果(二)編寫程序代碼返回到本章目錄3.break語句1)break語句基本形式
break;2)break語句的使用說明(1)只能在循環(huán)體內(nèi)和switch語句體使用break語句。(2)當(dāng)break出現(xiàn)在循環(huán)體中的switch語句體內(nèi)時(shí),其作用只是跳出該switch語句。當(dāng)break出現(xiàn)在循環(huán)體中,但并不在switch語句內(nèi)時(shí),則在執(zhí)行break后,跳出本層循環(huán)體。返回到本章目錄3)使用break語句注意的問題(1)循環(huán)體中break語句只能退出所在循環(huán),不能退出整個(gè)程序。(2)break語句只能用于switch和循環(huán)語句,不能用于其他。返回到本章目錄四、continue語句思考題3-11:設(shè)計(jì)一個(gè)程序,求1~100中所有奇數(shù)和。(一)程序分析(1)定義存放結(jié)果變量sum和循環(huán)次數(shù)變量i。(2)給sum賦初值0。(3)循環(huán)中使用if判斷是否為奇數(shù),若為奇數(shù)則參與求和運(yùn)算。(4)輸出sum的值?!舅伎碱}3-11】的程序流程圖返回到本章目錄main(){intsum,i;sum=0;for(i=1;i<=100;i++){if(i%2==0)continue;sum+=i;}printf("\n1+3+5+…+99=%d\n",sum);}(三)調(diào)試運(yùn)行結(jié)果(二)編寫程序代碼返回到本章目錄4.continue循環(huán)語句1)continue基本形式
continue;2)continue語句的使用說明其作用是結(jié)束本次循環(huán),即跳過本次循環(huán)體中余下尚未執(zhí)行的語句,接著再一次進(jìn)行循環(huán)的條件判定。注意:執(zhí)行continue語句并沒有使整個(gè)循環(huán)終止,而是結(jié)束本次循環(huán),繼續(xù)判斷循環(huán)條件。返回到本章目錄【練習(xí)3-6】輸出100~200之間的全部素?cái)?shù)。所謂素?cái)?shù)m是指,除1和m之外,不能被2~m-1之間的任何整數(shù)整除(前面講過查找區(qū)間可以縮小為2~)。解:顯然,只要設(shè)計(jì)出判斷某數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工現(xiàn)場施工防生物安全事故制度
- 小學(xué)生心理健康教育的校本課程設(shè)計(jì)研究
- DB4404T 72-2024電梯維修保養(yǎng)服務(wù)安全規(guī)范
- 不服合作合同爭議仲裁起訴狀范本
- 個(gè)人股權(quán)轉(zhuǎn)讓合作合同模板
- 兩人合伙創(chuàng)業(yè)合同范本
- 個(gè)人股權(quán)轉(zhuǎn)讓合同簡單范文
- 二手房買賣合同簡易版
- 個(gè)人公寓租賃合同范本
- 產(chǎn)學(xué)研一體化碩士專班合作協(xié)議合同
- 銷售人員課件教學(xué)課件
- 三級綜合醫(yī)院評審標(biāo)準(zhǔn)(2024年版)
- Lesson 6 What colour is it(教學(xué)設(shè)計(jì))-2023-2024學(xué)年接力版英語三年級下冊
- GB/T 4706.10-2024家用和類似用途電器的安全第10部分:按摩器具的特殊要求
- NB/T 11446-2023煤礦連采連充技術(shù)要求
- 2024年江蘇省蘇州市中考英語試題卷(含標(biāo)準(zhǔn)答案及解析)
- 第五單元任務(wù)二《準(zhǔn)備與排練》教學(xué)設(shè)計(jì) 統(tǒng)編版語文九年級下冊
- 全科醫(yī)學(xué)的基本原則和人文精神(人衛(wèi)第五版全科醫(yī)學(xué)概論)
- 船員健康知識課件
- 《揚(yáng)州東關(guān)街掠影》課件
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》健康領(lǐng)域內(nèi)容目標(biāo)與指導(dǎo)
評論
0/150
提交評論