c語言分支語句精_第1頁
c語言分支語句精_第2頁
c語言分支語句精_第3頁
c語言分支語句精_第4頁
c語言分支語句精_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

03:541/39第四章分支語句

§4.1if結構

§4.2Switch語句

§4.3程序范例

03:542/39§4.1if結構

順序結構的程序只能以順序的方式處理數(shù)據(jù),但實際問題要求計算機能夠對問題進行判斷,根據(jù)判斷的結果,選擇不同的處理方式,這就要求程序本身具有判斷和選擇能力,分支結構正是為解決這類問題而設定的。

C語言用于實現(xiàn)分支有if結構和switch結構?!?.1.1if語句if結構是一種常用的分支結構,是最簡單的一種單分支結構

。03:543/39一般形式為:if(<表達式>)

<語句A><表達式>:一般為條件表達式或邏輯表達式。功能:先判斷<表達式>的邏輯值,若該邏輯值為“真”,則執(zhí)行<語句A>,否則,什么也不執(zhí)行。注意:if語句中的<語句A>一般情況下都是以復合語句的形式出現(xiàn),即用一對花括號將語句括起來。if結構的流程圖:03:544/39【例4-1】

從鍵盤任意輸入兩個實數(shù),然后按其代數(shù)值從小到大輸出這兩個數(shù)。先制定算法的流程圖,如圖所示,虛線框為if結構。根據(jù)流程圖可以很方便地寫出解決這個問題的程序03:545/39/*exam4_1.c按升序輸出兩個數(shù)*/#include<stdio.h>main(){ floata,b,t; scanf("%f,%f",&a,&b); if(a>b) { t=a; a=b; b=t; } printf("%5.2f,%5.2f\n",a,b);}03:546/39【例4-2】:從鍵盤輸入一個整數(shù),求該數(shù)的絕對值。

該問題算法的流程圖:03:547/39根據(jù)流程圖寫出的程序如下:/*exam4_2.c求整數(shù)的絕對值*/#include<stdio.h>main(){ intnum; scanf("%d",&num); if(num<0) num=-num; printf("Theabsolutevalueis:%d\n",num);}

03:548/39§4.1.2if_else語句

if_else語句是一種雙分支結構,其一般形式為:if(<表達式>)

<語句A>else<語句B><表達式>:一般為條件表達式或邏輯表達式。功能是:先判斷<表達式>的值,若其值為“真”,則執(zhí)行<語句A>,否則執(zhí)行<語句B>。if_else結構的流程圖:03:549/39【例4-3】設計一個猜數(shù)游戲,由計算機產(chǎn)生一個隨機數(shù)magic,從鍵盤輸入一個數(shù)guess,若輸入的數(shù)guess的大小等于隨機數(shù)magic,則輸出“Youareright!”。否則,輸出“Youarewrong!”。03:5410/39根據(jù)流程圖可寫出程序如下:/*exam4_3.c猜數(shù)游戲的程序*/#include<stdio.h>#include<stdlib.h>main(){intguess,magic;magic=rand();scanf("%d",&guess);if(guess==magic) printf("YouAreRight");else printf("YouAreWrong");}03:5411/39§4.1.3if語句的嵌套

if語句的嵌套:是指在if或else的分支下又可以包含另一個if語句或if_else語句,嵌套的形式有規(guī)則嵌套和任意嵌套兩種。if語句的規(guī)則嵌套形式如下:if(<表達式1>)

<語句1>elseif(<表達式2>)

<語句2>elseif(<表達式3>)

<語句3>…elseif(<表達式n>)<語句n>else<語句n+1>03:5412/39if_else的規(guī)則嵌套流程圖03:5413/39【例4-4】從鍵盤輸入+、-、*、/中的任一個,輸出對應的英文單詞:plus、minus、mutiply、divide,若輸入的不是這四個字符中的任一個,則輸出“error”。算法的流程圖如圖所示,虛線框所示為if_else的規(guī)則嵌套:03:5414/39#include<stdio.h>main(){charch;ch=getchar();if(ch=='+')printf("plus\n");elseif(ch=='-')printf("minus\n");elseif(ch=='*') printf("multiply\n");elseif(ch=='/') printf("divide\n"); else printf("error\n");}

03:5415/39注意:if與else的匹配關系,else總是與離它最近的上一個if配對。將每一對if_else結構采用縮進對齊方式,可以增加程序的可讀性,良好的程序書寫風格有助于對程序的理解?!纠?-5】計算階躍函數(shù)y的值:03:5416/39算法的流程圖如圖,兩個虛線框均為if_else結構。03:5417/39根據(jù)流程圖寫出的程序如下:/*exam4_5.c計算階躍函數(shù)y的值*/#include<stdio.h>main(){ floatx,y; printf("inputx:\n"); scanf("%f",&x); if(x>=0) if(x>0) y=1;

else y=0; else y=-1; printf("y=%-4.0f\n",y);}對多重if,最容易犯的錯誤是if與else配對錯誤,else總是與離它最近的上一個if配對。

03:5418/39§

4.2Switch結構

當嵌套if分支較多時,程序變得復雜冗長,可讀性降低。C語言提供了switch開關語句專門處理多路分支的情形,使程序變得簡潔?!?.2.1switch語句

switch語句的一般形式為:switch(<表達式>){case<常量表達式1>:語句序列1;

case<常量表達式2>:語句序列2;

case<常量表達式n>:語句序列n;

default:語句序列(n+1);}03:5419/39常量表達式:值必須是整型、字符型或者枚舉類型語句序列:允許有多條語句<表達式>:可以為任何表達式功能:

先計算<表達式>的值,再從上到下地判斷與哪一個<常量表達式>的值相等,如果<表達式>的值等于<常量表達式i>的值,則從語句序列i開始執(zhí)行,直到語句序列(n+1)為止;若<表達式>的值不等于任何一個<常量表達式>的值,是執(zhí)行default后面的語句序列(n+1)。03:5420/39switch語句一般形式的流程圖:?03:5421/39【例4-6】根據(jù)下面表所示的天氣情況,決定活動的場所。

分別用整數(shù)0、1、2和3代表下雨、下雪、晴天和有風無雨天氣。采用switch語句的一般形式.03:5422/39例4-6switch語句一般形式的流程圖03:5423/39根據(jù)圖所示的流程圖寫出的程序如下所示:/*exam4_6.c根據(jù)天氣情況決定活動場所*/#include<stdio.h>main(){intweather;scanf("%d",&weather);switch(weather){ case0:printf("rain----atpalaestra\n");case1:printf("snow----atplayground\n");case2:printf("fine----athill\n");case3:printf("wind----tooutskirt\n");default:printf("other----athome\n");}}03:5424/39程序運行結果:輸入:2輸出:fine----athillwind----tooutskirtother----athome

發(fā)現(xiàn),如果輸入的天氣值為0,即天氣情況為下雨,則活動場所為所有地方,顯然這是與題意不相符合的,程序是錯誤的。解決這個問題必須要用到分支語句:break。03:5425/39§4.2.2break語句在switch語句中的作用

如果是一個條件對應著一組獨立的操作,那么在switch語句的一般形式中,每一個<語句序列>完成后都要加上一條分支語句:break;switch條件分支互相獨立的形式:switch(<表達式>){case<常量表達式1>:<語句序列1>;break;case<常量表達式2>:<語句序列2>;

break;case<常量表達式i>:<語句序列i>;

break;……case<常量表達式n>:<語句序列n>;

break;default:<語句序列n+1>;}03:5426/39Switch結構實現(xiàn)了完全地獨立分支,功能:

先計算<表達式>的值,再從上到下地判斷與哪一個<常量表達式>的值相等,如果<表達式>的值等于<常量表達式>i的值,則執(zhí)行<語句序列>i,執(zhí)行完后,跳出switch結構,執(zhí)行switch結構外的下一條語句.03:5427/39【例4-7】將例4-6改寫成具有獨立分支的switch結構。#include<stdio.h>main(){intweather;scanf("%d",&weather);switch(weather) { case0:printf("rain----atpalaestra\n"); break; case1:printf("snow----atplayground\n"); break; case2:printf("fine----athill\n"); break; case3:printf("wind----tooutskirt\n"); break; default:printf("other----athome\n"); }

}

程序運行時,任何一種天氣情況都只會對應出現(xiàn)一種運動場所.03:5428/39【例4-8】從鍵盤輸入一個字符,判斷其是否為a(可代表abort)或r(可代表retry)或f(可代表fail),并輸出相應信息。(輸入時不區(qū)分大小寫)。采用switch結構,其算法流程圖如圖:03:5429/39/*exam4_8.c字符輸入判斷*/#include<stdio.h>main(){charch;printf("Abort,Retry,Fail?\n");ch=getchar();switch(ch){ case'a':

case'A':printf("\nAbort\n"); break; case'r': case'R':printf("\nRetry\n"); break; case'f': case'F':printf("\nFail\n"); break; default:printf("\nerror\n");}}03:5430/39§4.3程序范例

【例4-9】求解任意的一元二次方程ax2+bx+c=0的根,a、b、c的值由鍵盤輸入。分析:對系數(shù)a、b、c考慮以下情形1)a==0:①b<>0,則x=-c/b;②b=0,則:若c=0,則x無定根;若c<>0,則x無解。2)a<>0;①b2-4ac>0,有兩個不等的實根;②b2-4ac=0,有兩個相等的實根;③b2-4ac<0,有兩個共軛復根。采用嵌套的if結構,考慮算法流程圖?03:5431/3903:5432/39/*exam4_9.c求一元二次方程的根*/#include<math.h>#include<stdio.h>main(){floata,b,c,s,x1,x2;doublet;printf("pleaseinputa,b,c:\n");scanf("%f%f%f",&a,&b,&c);if(a==0.0)if(b!=0.0)printf("therootis:%5.2f\n",-c/b);elseif(c==0.0)printf("xisinexactive\n");03:5433/39

elseprintf("noroot!\n");else{s=b*b-4*a*c;if(s>=0.0) if(s>0.0) { t=sqrt(s); x1=-0.5*(b+t)/a; x2=-0.5*(b-t)/a; printf("Therearetwodifferentroots:\n%5.2fand%5.2f\n",x1,x2); }03:5434/39

else printf("Therearetwoequalroots:\n%5.2f\n",-0.5*b/a); else { t=sqrt(-s); x1=-0.5*b/a; x2=abs(0.5*t/a); printf("Therearetwovirtualroots:\n"); printf("%5.2f+%5.2fi\t\t%5.2f-%5.2fi\n",x1,x2,x1,x2); }}}03:5435/39【例4-10】運輸費用的計算問題。距離S越遠,每公里的運費越低。設每公里每噸貨物的基本運費為P,貨物重量為W(噸),距離為S,折扣為d,則總運輸費用f的計算公式為:f=P*W*S*(1-d)。其中折扣數(shù)d與距離有關,具體標準如下:0<S<250km沒有折扣250

S<500折扣2%500

S<1000折扣5%1000

S<20

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論