版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三章C語言的流程控制本章學習重點:if語句的三種定義格式及使用switch語句的定義格式及使用while、do-while和for循環(huán)語句的結構及應用循環(huán)語句嵌套結構及流程控制語句的使用break語句和continue語句及goto語句的使用本章目錄第五講
選擇結構第六講
循環(huán)結構第七講
循環(huán)語句的嵌套和流程轉向語句本章小結結束第五講選擇結構一、基本if語句二、標準if語句三、復合if語句四、if語句的嵌套五、switch語句返回到本章目錄思考題3-1:從鍵盤上輸入一個整數,如果大于等于零輸出“PositiveNumber”(正數),小于零輸出“NegativeNumber”(負數)(要求用基本的if語句實現)。(一)程序分析(1)從鍵盤輸入一個整數;(2)判斷該數是大于等于零或者小于零;(3)輸出對應結果。一、基本if語句返回到本章目錄(二)編寫程序代碼main(){intx;/*定義整型變量x*/printf("inputx:");/*提示從鍵盤輸入一個數*/scanf("%d",&x);/*接受輸入的數賦值給x*/if(x>=0)/*判斷x是否大于0*/printf("%disPositiveNumber!\n",x);/*如果大于0,輸出結果為正數*/if(x<0)/*判斷x是否小于0*/printf("%disNegativeNumber!\n",x);/*如果小于0,輸出結果為負數*/}返回到本章目錄(三)調試運行結果輸入x的值為5,輸出“5isPositiveNumber!”;再次運行程序,輸入一個x的值為-3,輸出“-3isNegativeNumber!”。程序運行結果如下:返回到本章目錄1)基本if語句定義格式為if(表達式)語句;例如:
if(a<b){t=a;a=b;b=t;}
其中,if是C語言的關鍵字,表達式兩側的圓括號不可少,一條“語句”稱為if子句。如果在if子句中需要多條語句,則應該使用花括號把一組語句括起來組成復合語句,這樣在語法上仍滿足“一條語句”的要求。1.if語句基本形式if(表達式)
語句;返回到本章目錄2)if語句的執(zhí)行過程首先計算緊跟在if后面一對圓括號中表達式的值,如果表達式的值為非零(“真”),則執(zhí)行其后的if子句,然后去執(zhí)行if語句后的下一個語句。如果表達式的值為零(“假”),則跳過if子句,直接執(zhí)行if語句后的下一個語句。返回到本章目錄3)基本if語句的流程示意圖流程圖如圖3-2所示。表達式假(=0),真(≠0)語句圖3-2基本if語句的流程示意圖表達式假(=0)真(≠0)語句返回到本章目錄4)說明①if語句自動結合一個語句,當滿足條件需要執(zhí)行多個語句時,應用一對大括號{}將需要執(zhí)行的多個語句括起,形成一個復合語句。②if語句中表達式形式很靈活,可以是常量、變量、任何類型表達式、函數、指針等。只要表達式的值為非零值,條件就為真,反之條件為假。返回到本章目錄二、標準if語句思考題3-2:從鍵盤上輸入一個數,如果大于等于零輸出“PositiveNumber”(正數),否則輸出“NegativeNumber”(負數)(要求用標準if語句實現)。(一)程序分析(1)從鍵盤輸入一個數;(2)判斷該數是否大于等于零;(3)輸出結果。返回到本章目錄(二)編寫程序代碼main(){intx;printf("inputx:");scanf("%d",&x);if(x>=0)/*判斷x是否大于0*/printf("%disPositiveNumber!\n",x);/*如果x大于0成立,輸出結果為正數*/else/*如果x大于0的條件不成立*/printf("%disNegativeNumber!\n",x);/*輸出x小于0的結果為負數*/}返回到本章目錄(三)調試運行結果輸入x的值為5,輸出“5isPositiveNumber!”;再次運行程序,輸入一個x的值為-3,輸出“-3isNegativeNumber!”。程序運行結果如下:返回到本章目錄1)標準if語句定義格式例如:
if(a!=0)printf("a!=0\n");elseprintf("a==0\n");
2.if語句標準形式if(表達式)
語句1;else
語句2;返回到本章目錄
在這里,“語句1”稱為if子句,“語句2”稱為else子句,這些子句只允許是一條語句,若需要多條語句時,則應該使用花括號把這些語句括起來組成復合語句。注意,else不是一條獨立的語句,它只是if語句的一部分,不允許有這樣的語句:
elseprintf("***");
在程序中else必須與if配對,共同組成一條if-else語句。返回到本章目錄2)if-else語句的執(zhí)行過程首先計算緊跟在if后面一對圓括號內表達式的值。如果表達式的值為非零,執(zhí)行if子句,然后跳過else子句,去執(zhí)行if語句后的下一條語句;如果表達式的值為零,跳過if子句,去執(zhí)行else子句,接著去執(zhí)行if語句后的下一條語句。3)說明①if后面圓括號中的表達式,可以是任意合法的C語言表達式(如:邏輯表達式、關系表達式、算術表達式、賦值表達式等),也可以是任意類型的數據(如:整型、實型、字符型等)。返回到本章目錄②無論是否有else子句,if子句中如果只有一條語句,則此語句后的分號不能省略。例如:if(x!=0)printf("%f",xelseprintf("%f",y);返回到本章目錄4)基本if語句的流程示意圖語句2語句1表達式假(=0)真(≠0)返回到本章目錄三、復合if語句思考題3-3:從鍵盤上輸入一個整數,如果大于零輸出“PositiveNumber”(正數),如果小于零輸出“NegativeNumber”(負數),否則輸出“Zero”(零)。(一)程序分析(1)從鍵盤輸入一個整數;(2)判斷該數是大于零、小于零還是等于零;(3)輸出結果。返回到本章目錄流程圖返回到本章目錄(二)編寫程序代碼main(){intx;printf("inputx:");scanf("%d",&x);if(x>0)/*判斷x是否大于0*/printf("%disPositiveNumber!\n",x);/*如果x大于0成立,輸出結果為正數*/elseif(x<0)/*否則繼續(xù)判斷x是否小于0*/printf("%disNegativeNumber!\n",x);/*如果x小于0成立,輸出結果為負數*/elseprintf("\n%disZero!\n",x);/*否則輸出結果為零*/}返回到本章目錄(三)調試運行結果
輸入x的值為5,輸出“5isPositiveNumber!”;再次運行程序,輸入一個x的值為-3,輸出“-3isNegativeNumber!”;第三次運行程序,輸入x的值為0,輸出“0isZero!”。
程序運行結果如下:返回到本章目錄1)復合if語句定義格式3.if語句復合形式if(表達式1)
語句1;elseif(表達式2)
語句2;……elseif(表達式n)語句n;else
語句n+1;返回到本章目錄2)復合if語句執(zhí)行過程首先計算表達式1的值,若表達式的值為“真”(表達式具有非0值),則執(zhí)行語句1;否則繼續(xù)判斷表達式2,若表達式的值為“真”,則執(zhí)行語句2;否則繼續(xù)判斷下一個條件,……直到最后前面n個條件都不成立時,執(zhí)行else后面的語句n+1。返回到本章目錄3)復合if語句的流程圖返回到本章目錄四、if語句的嵌套4.if語句的嵌套1)復合if語句定義格式在if語句中,語句1和語句2本身也可以是if語句,此時稱為if語句的嵌套。2)嵌套的格式if語句可以內嵌在if子句中,又可以內嵌在else子句中。返回到本章目錄例如:if()if()
語句1;else內嵌if
語句2;elseif()
語句3;else內嵌if
語句4;返回到本章目錄3)嵌套的說明
以上形式的嵌套if語句執(zhí)行過程可以這樣理解:從上向下逐行對if后的表達式進行檢測。當某一個表達式的值為非零時,就執(zhí)行與此有關子句中的語句,階梯形中的其余部分被越過去。如果所有表達式的值都為零,則執(zhí)行最后的else子句;此時,如果程序中最內層的if語句沒有else子句,即沒有最后的那個else子句,那么將不進行任何操作。注意:C語言的語法規(guī)定,else子句總是與前面最近的未曾配對(不帶else)的if組成一對。返回到本章目錄五、switch語句思考題3-4:設計一個程序,用switch語句實現由鍵盤輸入一個成績,輸出該成績的等級。其中A代表90分以上,B代表80~89,C代表70~79,D代表60~69,E代表60分以下。如果成績不在0-100之間則輸出錯誤信息。(一)程序分析(1)定義score變量,存放由鍵盤輸入的學生成績;(2)輸入學生成績給變量score;(3)根據學生score整除10得到其十位上的數字,確定該成績范圍,并輸出其等級。返回到本章目錄(二)編寫程序代碼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!");}返回到本章目錄(三)調試運行結果
程序運行結果分析:運行6次程序,每次輸入一個區(qū)間的成績(其中最后一次輸入一個錯誤成績,不在0-100之間)。程序運行結果如下:返回到本章目錄5.switch語句(多分支選擇語句)1)switch語句定義格式switch(表達式){case常量表達式1:語句組1;break;case常量表達式2:語句組2;break;…………case常量表達式n:語句組n;break;default:語句組n+1;break;}返回到本章目錄2)說明
switch語句又稱為開關語句,語句的執(zhí)行過程如下:程序執(zhí)行至switch語句首先對括號內的表達式進行計算,然后按順序找出與常量表達式值相匹配的case,以此作為入口,執(zhí)行case語句后面的各個語句組,直到遇到break或switch語句的右花括號終止語句。如果沒有任何一個case能與表達式值相匹配,則執(zhí)行default語句后的語句組,若default及其后語句組省略,則不執(zhí)行switch中任何語句組,而繼續(xù)執(zhí)行下面的程序。返回到本章目錄3)使用switch語句注意的問題(1)default語句及后面語句組可以省略。(2)switch后圓括號內表達式可以是整數表達式、字符表達式或枚舉表達式。case后面是整數或字符,也可以是不含變量和函數的常量表達式。同一個switch語句中的case后的值不能相同。(3)case及后語句和default及后語句出現次序可以任意。(4)case與其后的常量表達式之間要有空格,否則系統(tǒng)會識別不出該常量表達式。(5)執(zhí)行完一個case語句后,程序自動轉到后面的語句執(zhí)行,直到遇到break或switch語句的右花括號終止語句。返回到本章目錄【練習3-1】從鍵盤上輸入一個成績(0~100之間),輸出這個分數對應的等級。其中A代表90分以上,B代表80~89,C代表70~79,D代表60~69,E代表60分以下,如果成績不在0~100之間則輸出錯誤信息。要求用復合if語句來實現。解:源程序如下: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!");}返回到本章目錄
程序運行結果分析:運行6次程序,每次輸入一個區(qū)間的成績(其中最后一次輸入一個錯誤成績,不在0~100之間)。程序運行結果如下:返回到本章目錄【練習3-2】從鍵盤上輸入一個數學四則運算表達式(a+b、a-b、a*b或a/b),要求計算出該表達式的值。解:分析題意,應該設兩個整型變量a和b,再設一個存放運算符的字符型變量ch,然后根據ch的值來進行相應的運算,將結果輸出即可。程序如下: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;/*因為結果為小數,所以要將a強制轉換成小數形式,結果才正確*/default:printf("theformulaiswrong!");}}返回到本章目錄
程序運行5次,分別輸入4個表達式:4+5、4-5、4*5、4/5和4&5(錯誤的表達式),程序運行結果如下:返回到本章目錄【練習3-3】編寫一程序,從鍵盤上輸入一個年份year(4位十進制數),判斷其是否為閏年。閏年的條件是:能被4整除、但不能被100整除,或者能被400整除。解:閏年是年份能被4整除但不能被100整除的數,或是能被400整除的數。我們設年份為year,這樣就構成了一個判斷閏年的條件表達式如下:(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”,輸出結果“1998isnotaleapyear.”,第二次輸入年份“2000”,輸出結果“2000isaleapyear.”。程序運行結果如下:返回到本章目錄本講小結C語言提供了可以進行邏輯判斷的選擇語句,由選擇語句構成的選擇結構將根據邏輯判斷的結果決定程序的不同流程。選擇結構是結構化程序設計的三種基本結構之一。通過本節(jié)學習,掌握if語句的三種格式,理解if語句的嵌套,掌握switch語句基本格式及解決問題的方法。返回到本章目錄第六講 循環(huán)結構一、while語句二、do-while語句三、for循環(huán)語句返回到本章目錄一、while語句思考題3-5:設計一個程序,用while循環(huán)語句實現1~100自然數的和。(一)程序分析這是一個求100個數的累加和問題。加數從1變化到100,可以看到加數是有規(guī)律變化的,后一個加數比前一個加數增1,因此可以在循環(huán)體中使用一個整型變量i,每循環(huán)一次使i增1,一直循環(huán)到i的值超過100,用這個辦法就解決了所需的加數問題。但是要特別注意的是變量i需要有一個正確的初值,這里初值應當設為1。返回到本章目錄設用一個變量sum存放這100個數的和值,sum的初值為0,可以先求0加1(i的初值為1)的和并將其放在sum中,然后把sum中的數加上2再存放在sum中,依次類推,sum累加的過程要放在循環(huán)中,由計算機判斷所加的數是否已經超過100,加數則放在變量i中,并在循環(huán)過程中每一次增1。返回到本章目錄(二)編寫程序代碼main(){intsum=0,i=1;/*sum的初值為0*/while(i<=100) /*當i小于或等于100時執(zhí)行循環(huán)體*/{sum+=i;i++;}/*在循環(huán)體中累加一次,并將i值自增1*/printf("1+2+…+100=%d\n",sum);}(三)調試運行結果返回到本章目錄1.while循環(huán)語句1)while語句基本形式如下:while(表達式)循環(huán)體while是C語言的關鍵字。while后圓括號中的表達式,可以是C語言中任意合法的表達式,由它來控制循環(huán)體是否執(zhí)行。在語法上,要求循環(huán)體可以是一條簡單的可執(zhí)行語句;若循環(huán)體內需要多個語句,應該用大括號括起來,組成復合語句。返回到本章目錄2)while語句的執(zhí)行過程計算while后圓括號中表達式的值。當值為非零時,執(zhí)行循環(huán)體語句。執(zhí)行完后再次判斷表達式的值,當表達式的值為非零時,繼續(xù)執(zhí)行循環(huán)體;當值為零時,退出循環(huán)。3)使用while語句注意的問題(1)循環(huán)體如果包含一個以上的語句,應該用花括號括起來,以復合語句的形式出現。如果不用花括號,則while語句的范圍只到while后面第一個分號處。(2)在循環(huán)體中應該有使循環(huán)趨向于結束的語句。如無此語句,循環(huán)將永不結束。返回到本章目錄二、do-while語句思考題3-6:設計一個程序,用do-while循環(huán)語句實現1~100自然數的和。(一)程序分析(1)定義變量sum和i,分別存放累計和及循環(huán)次數;(2)累計和變量sum賦初值0,循環(huán)次數i賦初值1;(3)do-while循環(huán)求和;(4)輸出累計和結果sum。返回到本章目錄(二)編寫程序代碼main(){intsum=0,i=1;do{sum+=i;i++;}while(i<=100);printf("1+2+…+100=%d\n",sum);}(三)調試運行結果返回到本章目錄2.do-while循環(huán)語句1)do-while語句基本形式do{循環(huán)體
}while(表達式);2)do-while語句執(zhí)行過程(1)執(zhí)行do后面循環(huán)體中的語句。(2)計算while后圓括號中表達式的值。當值為非零時,轉去執(zhí)行步驟①;當值為零時,結束do-while循環(huán)。返回到本章目錄由do-while構成的循環(huán)與while循環(huán)十分相似,它們之間的重要區(qū)別是:while循環(huán)控制出現在循環(huán)體之前,只有當while后面表達式的值為非零時,才可能執(zhí)行循環(huán)體;在do-while構成的循環(huán)中,總是先執(zhí)行一次循環(huán)體,然后再求表達式的值,因此,無論表達式的值是零還是非零,循環(huán)體至少執(zhí)行一次。和while循環(huán)一樣,在do-while循環(huán)體中,一定要有能使while后表達式的值變?yōu)?的操作,否則,循環(huán)將會無限制地進行下去,進入死循環(huán)。返回到本章目錄3)do-while語句的使用說明:(1)do是C語言的關鍵字,必須和while聯合使用。(2)do-while循環(huán)由do開始,至while結束。
while(表達式)后的“;”不可丟,它表示do-while語句的結束。do-while語句的程序流程圖返回到本章目錄(3)while后圓括號中的表達式可以是C語言中任意合法的表達式,由它控制循環(huán)是否執(zhí)行。(4)按語法,在do和while之間的循環(huán)體只能是一條可執(zhí)行語句;若循環(huán)體內需要多個語句,應該用大括號括起來,組成復合語句。返回到本章目錄三、for循環(huán)語句思考題3-7:設計一個程序,用for循環(huán)語句實現1~100自然數的和。(一)程序分析(1)定義變量sum和i,分別存放累計和及循環(huán)次數;(2)累計和變量sum賦初值0;(3)for循環(huán)求和;(4)輸出累計和結果sum。返回到本章目錄(二)編寫程序代碼main(){intsum,i;for(i=1,sum=0;i<=100;i++)sum=sum+i;printf("1+2+3+…+100=%d\n",sum);}(三)調試運行結果返回到本章目錄3.for循環(huán)語句1)for語句基本形式例如:for(k=0;k<10;k++)printf("*");以上for循環(huán)在一行上輸出10個“*”號。for(賦初值語句;條件表達式;自增(減)語句)循環(huán)體返回到本章目錄for是C語言的關鍵字,其后的圓括號中通常含有三個表達式,各表達式之間用“;”隔開。這三個表達式可以是任意形式的表達式,通常主要用于for循環(huán)的控制。緊跟在for之后的循環(huán)體,在語法上要求是一條語句;若在循環(huán)體內需要多條語句,應該用大括號括起來組成復合語句。返回到本章目錄2)for語句執(zhí)行過程(1)執(zhí)行“賦初值語句”為循環(huán)體變量賦初值(注意,該語句在整個循環(huán)中只在開始時執(zhí)行一次)。(2)判斷“條件”是否成立:若其值為非零,轉步驟③;若其值為零,轉步驟⑤。(3)執(zhí)行一次for循環(huán)體。(4)執(zhí)行“自增(減)語句”;轉向步驟②。(5)結束循環(huán),執(zhí)行for循環(huán)之后的語句。返回到本章目錄3)for語句的使用說明(1)for語句中的表達式可以部分或全部省略,但兩個“;”不可省略。例如:for(;;)printf("*");三個表達式均省略,但因缺少條件判斷,循環(huán)將會無限制地執(zhí)行,而形成無限循環(huán)(通常稱為死循環(huán))。(2)for后括號中的表達式可以是任意有效的C語言表達式。返回到本章目錄例如:for(sum=0,i=1;i<=100;sum=sum+i,i++){…}其中表達式1和表達式3都是一個逗號表達式。注意:C語言中的for語句書寫靈活,功能較強。在for后的圓括號中,允許出現各種形式的與循環(huán)控制無關的表達式,雖然這在語法上是合法的,但這樣會降低程序的可讀性。建議初學者在編寫程序時,在for后面的圓括號內僅含有能對循環(huán)進行控制的表達式,其他操作盡量放在循環(huán)體內完成。返回到本章目錄【練習3-4】分別用while和do-while兩種循環(huán)語句編程實現s=1*2*…*10的積的程序解:設一個循環(huán)體變量i和存放乘積的變量sum,初始設i等于1,sum等于1。使用循環(huán)語句,將每次的i值乘到sum上,然后將i值自加1,直到i大于10時循環(huán)結束(注意乘積sum的數值如果大于int型數據的取值范圍時,應將其類型設為長整型long)。(1)使用while循環(huán)解題程序如下:練一練返回到本章目錄main(){inti=1;longsum=1;while(i<=10){sum*=i;i++;}printf("1*2*…*10=%ld\n",sum);}程序運行結果如下:返回到本章目錄(2)使用do-while循環(huán)解題程序如下:main(){inti=1;longsum=1;do{sum*=i;i++;}while(i<=10);printf("1*2*…*10=%ld\n",sum);}程序運行結果同使用while語句的程序運行結果。返回到本章目錄注意:如果將sum定義為int型變量時,會出現溢出現象,結果錯誤。還要注意長整型變量sum在輸出時格式控制符要寫成“%ld”才能正確輸出結果。返回到本章目錄【練習3-5】編程實現從鍵盤輸入任意數給變量x,求從1到x的和。解:設一個用于存放輸入值的變量x,再設一個循環(huán)體變量i和存放和的變量sum。先從鍵盤中輸入x的值,然后設i初始值等于1,sum等于0。再使用循環(huán)語句,將每次的i值加到sum上,然后將i值自加1,直到i大于x時循環(huán)結束。解題程序如下: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,程序運行結果如下:返回到本章目錄本講小結
本講介紹了用while、do-while、for循環(huán)語句設計程序,注意while語句是先判斷后執(zhí)行循環(huán),而do-while是執(zhí)行一次循環(huán)后再判斷條件,for語句是循環(huán)結構中功能最強、最靈活、使用最多的語句。注意三種循環(huán)語句的書寫格式及在什么情況下使用哪種語句。返回到本章目錄一、循環(huán)語句嵌套二、流程轉向語句goto語句三、break語句四、continue語句第七講 循環(huán)語句的嵌套和
流程轉向語句返回到本章目錄思考題3-8:打印楊輝三角形。(一)程序分析
楊輝三角形中,每個數值可以由組合來計算。一、循環(huán)語句的嵌套返回到本章目錄已知:假定第一行中的數字距離左邊首列為40個空格符,每一行的第一個值應向左移2個空格符,每個數字之間留4個空格符?!舅伎碱}3-8】的程序流程圖返回到本章目錄(二)編寫程序代碼main(){intc,m,n,i;for(m=0;m<=10;m++) /*輸出楊輝三角形*/{c=1; /*每行的第一個數字賦值為1*/for(i=0;i<40-2*m;i++)printf(""); /*輸出該行左邊的空格*/printf("%d",c); /*輸出該行的第一個數字1*/for(n=1;n<=m;n++) /*輸出該行的其余數字*/{c=c*(m-n+1)/n;printf("%4d",c);}printf("\n"); /*每行結束輸出換行符*/}}返回到本章目錄(三)調試運行結果程序運行結果如下:返回到本章目錄1.循環(huán)語句的嵌套
一個循環(huán)體內又包含另一個完整的循環(huán)結構,稱為循環(huán)的嵌套。內嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。三種循環(huán)(while循環(huán)、do-while循環(huán)和for循環(huán))可以互相嵌套。例如,以下幾種都是合法的形式:返回到本章目錄返回到本章目錄二、流程轉向語句goto語句思考題3-9:設計一個程序,用goto語句實現1~100自然數的和。(一)程序分析(1)定義變量sum和i,分別存放累計和及循環(huán)次數;(2)累計和變量sum賦初值0,循環(huán)次數i賦初值1;(3)使用if語句和goto語句構成循環(huán)求和;(4)輸出累計和結果sum。解決該程序的方法利用了流程轉向語句goto語句,在“小講堂”中將對goto語句做詳細說明。返回到本章目錄(二)編寫程序代碼main(){intsum=0,i=1;a1:sum=sum+i;i++;if(i<=100)gotoa1; /*流程轉向語句,一般與if語句一起構成循環(huán)*/printf("1+2+…+100=%d\n",sum);}返回到本章目錄(三)調試運行結果程序運行結果如下:返回到本章目錄2.goto語句1)goto語句形式例如:gotolable;…lable:…“語句標號”用標識符表示,它的定名規(guī)則與變量名相同。例如,在【思考題3-9】中,a1就是標號。一般來說,如果要使用goto語句構成循環(huán),一般是用if語句和goto語句配合使用的。當if語句條件為真時無條件轉到標號所在程序行進行執(zhí)行。goto語句標號;返回到本章目錄2)語句執(zhí)行流程在程序執(zhí)行過程中,如果遇到goto語句,則程序執(zhí)行流程無條件地轉向語句標號后的語句繼續(xù)執(zhí)行。3)說明(1)語句標號僅僅對goto語句有效,對其他語句不影響。(2)同一個程序中,不允許有同名標號。(3)goto語句通常與條件語句配合使用,可用來實現條件轉移、構成循環(huán)、跳出循環(huán)體等功能。返回到本章目錄三、break語句思考題3-10:設計一個程序,判斷一個整數是否為素數。(一)程序分析
素數就是除了1和它本身,不能被任何數整除的數。因此,如果一個數x是素數,就不能被2~x-1之間的任何一個數整除。進一步思考,如果x在2~之間有一個數a可以被其整除,則在
~x-1之間也會有一個數b存在,滿足x=a×b成立。。返回到本章目錄所以在查找時,只要x在2~之間沒有任意一個數能被整除,則x在~x-1區(qū)間內也不會有任意一個數能被整除(即循環(huán)終值為而不是x-1)。所以程序中使用x%i的余數是否為0來判斷x是否能被i整除。退出循環(huán)后,如果i>,表示x不能被2~中任何一個數整除,則x是素數,否則x不是素數。返回到本章目錄【思考題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);}(三)調試運行結果(二)編寫程序代碼返回到本章目錄3.break語句1)break語句基本形式
break;2)break語句的使用說明(1)只能在循環(huán)體內和switch語句體使用break語句。(2)當break出現在循環(huán)體中的switch語句體內時,其作用只是跳出該switch語句。當break出現在循環(huán)體中,但并不在switch語句內時,則在執(zhí)行break后,跳出本層循環(huán)體。返回到本章目錄3)使用break語句注意的問題(1)循環(huán)體中break語句只能退出所在循環(huán),不能退出整個程序。(2)break語句只能用于switch和循環(huán)語句,不能用于其他。返回到本章目錄四、continue語句思考題3-11:設計一個程序,求1~100中所有奇數和。(一)程序分析(1)定義存放結果變量sum和循環(huán)次數變量i。(2)給sum賦初值0。(3)循環(huán)中使用if判斷是否為奇數,若為奇數則參與求和運算。(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);}(三)調試運行結果(二)編寫程序代碼返回到本章目錄4.continue循環(huán)語句1)continue基本形式
continue;2)continue語句的使用說明其作用是結束本次循環(huán),即跳過本次循環(huán)體中余下尚未執(zhí)行的語句,接著再一次進行循環(huán)的條件判定。注意:執(zhí)行continue語句并沒有使整個循環(huán)終止,而是結束本次循環(huán),繼續(xù)判斷循環(huán)條件。返回到本章目錄【練習3-6】輸出100~200之間的全部素數。所謂素數m是指,除1和m之外,不能被2~m-1之間的任何整數整除(前面講過查找區(qū)間可以縮小為2~)。解:顯然,只要設計出判斷某數
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 路燈改造加盟合同范例
- 山東省epc合同范例
- 地下食品加工設施鑿井協議3篇
- 地球物理實習生勞動合同3篇
- 外出旅游租車合同范例
- 寫裝修合同范例
- 武漢軟件工程職業(yè)學院《西餐烹飪工藝進階課程》2023-2024學年第一學期期末試卷
- 定額建筑合同范例
- 返聘合同范例-技術總結
- 武漢民政職業(yè)學院《采礦概論》2023-2024學年第一學期期末試卷
- 外墻真石漆施工方案
- 計劃崗位培訓課件
- 中藥涂擦治療
- 2024年廣西普法云平臺考試答案
- 2023-2024學年廣東省深圳市福田區(qū)八年級(上)期末英語試卷
- IATF16949體系推行計劃(任務清晰版)
- 2021年高考數學試卷(上海)(春考)(解析卷)
- 石橫鎮(zhèn)衛(wèi)生院康復科建設方案
- DB11T 1553-2018 居住建筑室內裝配式裝修工程技術規(guī)程
- 非新生兒破傷風診療
- 建筑施工企業(yè)八大員繼續(xù)教育模擬考試題庫500題(含標準答案)
評論
0/150
提交評論