順序和分支程序結(jié)構(gòu).ppt
《順序和分支程序結(jié)構(gòu).ppt》由會員分享,可在線閱讀,更多相關(guān)《順序和分支程序結(jié)構(gòu).ppt(38頁珍藏版)》請在裝配圖網(wǎng)上搜索。
C語言程序設(shè)計教程,第3章:順序程序結(jié)構(gòu)和分支程序結(jié)構(gòu)(2課時),本章小結(jié),順序程序結(jié)構(gòu)分支程序結(jié)構(gòu),順序結(jié)構(gòu)程序是指在程序的每次執(zhí)行過程中,程序中的各條語句按照在程序中的先后順序依次執(zhí)行。每個順序結(jié)構(gòu)程序中的可執(zhí)行語句在每一次程序執(zhí)行的過程中,執(zhí)行且只執(zhí)行一次。順序程序是最簡單的程序。,設(shè)計一個程序,首先要將問題分析清楚,然后用適當(dāng)?shù)姆椒▽栴}描述出來,再根據(jù)問題的描述編成程序,最后調(diào)試運(yùn)行。,描述問題的方法很多,有各種流程圖,層次圖、偽代碼等,更多的時候是多種手段混合使用。,1順序結(jié)構(gòu)程序,/*exam31.c*//*最簡單的C程序*/#includemain(){printf(“Hello,world!、n”);},例3.1最簡單的C程序,這也是世界上第一個C程序。,頭文件,主函數(shù),例3.2已知圓的半徑為10,求圓的面積和周長,用計算機(jī)求解,程序如下,/*exam32.c*//*計算圓的面積和周長*/#include#definepi3.1415//定義符號常量main(){floatarea,s;area=pi*10.0*10.0;s=2*pi*10.0;printf(“面積=%f,周長=%f\n”,area,s);},數(shù)值常量,例3.3已知圓的半徑為R(R是一個可變的量),求圓的面積和周長,用計算機(jī)求解,完整程序如下,/*exam33.c*//*計算圓的面積和周長*/#includemain(){floatr,area,s;scanf(“%f“,},,1、注釋,2、數(shù)據(jù)說明,3、數(shù)據(jù)輸入,,4、數(shù)據(jù)處理,5、結(jié)果輸出,例3.4從鍵盤輸入兩個數(shù)a、b,求a除b的余數(shù)。即整除后剩下的數(shù)。編寫完整的程序。,源程序代碼如下:,//exam34.c//求兩個數(shù)的余數(shù)#includemain(){inta,b,c;//說明整型變量scanf(“%d,%d”,},整除運(yùn)算符,輸出語句,例3.5以我國1992年工業(yè)產(chǎn)值為100,如果以9%的年增長率增長計算到2000年時的工業(yè)產(chǎn)值。,1算法分析:,對此問題,要找出問題的數(shù)學(xué)模型。設(shè)r為年增長率,n為年數(shù),v為第n年的總產(chǎn)值。則有v=100*(1+r)n,2數(shù)據(jù)結(jié)構(gòu),根據(jù)算法分析,至少要用到這么幾個量,年增長率、年數(shù)、第n年的總產(chǎn)值。而這幾個量中,年增長率肯定是小數(shù)(浮點)型數(shù)據(jù),年數(shù)是整數(shù)(整型),總產(chǎn)值不會是整數(shù),應(yīng)為浮點數(shù)。這些數(shù)據(jù)都要放在相應(yīng)的變量中,并要進(jìn)行相應(yīng)的數(shù)據(jù)說明。,//exam35.c//計算到2000年的工業(yè)產(chǎn)值#include#includemain(){intn;floatrate,value;n=2000-1992;rate=0.09;value=100*pow((float)(1+r),(float)n);printf(“2000年的產(chǎn)值為%f:”,value);},pow為求冪的函數(shù)格式pow(底,指數(shù))底,指數(shù)均為浮點數(shù)。,強(qiáng)制類型轉(zhuǎn)換,3源程序代碼,注意頭文件,此例中,只能算到2000年,且年增長率為9%時的工業(yè)產(chǎn)值。如果將工業(yè)產(chǎn)值改為10%,或者要算到其它年份,必須要修改源程序,使用不便。,方法2:用scanf函數(shù)重新編寫程序,注意開發(fā)環(huán)境的使用。,//exam25a.c//計算到指定年和指定年增長率的工業(yè)產(chǎn)值#include#includemain(){intn,year;//說明整型變量floatvalue,rate;printf(“請輸入年份和年增長率:”);scanf(“%d,%f”,},強(qiáng)制類型轉(zhuǎn)換,改寫后的程序使用更靈活。,例3.6雞兔同籠,已知雞兔總頭數(shù)為H(Heads),總數(shù)為F(Feet),問雞兔各有多少只?,1算法分析:,(1)建立數(shù)學(xué)模型設(shè)雞為x只,兔為y只,由題意有:x+y=h......(1)2*x+4*y=f......(2),(2)求解方程,找出x,y的具體求解公式:,以下用消元法找出方程的解,(2)式-2(1)式,注意:計算機(jī)不會自己建數(shù)學(xué)模型,也不會自己解方程!,,2y=f-2h,y=(f-2h)/2,,4(1)式-(2)式,2X=4H-F,X=(4H-F)/2,,,2數(shù)據(jù)結(jié)構(gòu),程序中要用到不同的數(shù)據(jù),存放頭、腳數(shù)量的變量,存放方程解(雞、兔數(shù)量)的變量,存放方程判別式的變量等。對于頭、腳的數(shù)量,肯定是整型變量,方程的解理論上講是整型,但在求解方程時要進(jìn)行運(yùn)算,為了避免發(fā)生錯誤,最好是用浮點數(shù)據(jù)(實型)。,3偽代碼(由于此問題比較簡單,也可直接編寫程序)。,說明變量x,y,f,h輸入數(shù)據(jù)f,h計算x,y打印結(jié)果,偽代碼是一種程序設(shè)計工具,介于程序語言與自然語言之間,偽代碼不能被計算機(jī)編譯,但它很容易翻譯成高級語言.,//exam36.c#includemain(){floatx,y;intf,h;printf(“InputthenumbersofHeadsandFeet:”);scanf(“%d,%d”,},4源程序代碼,說明輸入數(shù)據(jù)的內(nèi)容,輸出語句,賦值語句,問題:,1、從鍵盤輸入一個數(shù),如果該數(shù)為正,打印,否則不打印;,2、將考試成績不及格的學(xué)生名單打印出來;,3、解一元二次方程,求出相應(yīng)的實根或復(fù)根。,對于上述或類似問題,需要進(jìn)行某種判斷,并根據(jù)不同情況進(jìn)行不同的處理,怎樣進(jìn)行程序設(shè)計?,2分支結(jié)構(gòu)程序設(shè)計,解決辦法:,1、引入新的程序結(jié)構(gòu),分支結(jié)構(gòu),有時也稱判斷結(jié)構(gòu)或選擇結(jié)構(gòu)。,2、為了和分支結(jié)構(gòu)相配合,同時還要引入邏輯表達(dá)式的概念。,3、有三種形式可進(jìn)行分支結(jié)構(gòu)的程序設(shè)計,A、if結(jié)構(gòu)B、多重選擇結(jié)構(gòu)(switch語句)C、無條件轉(zhuǎn)移結(jié)構(gòu)(goto語句),內(nèi)容,if語句,關(guān)系表達(dá)式和邏輯表達(dá)式,if語句的變形及嵌套,多重選擇語句(switch語句),無條件轉(zhuǎn)移語句(goto語句),本章小結(jié),,,,,,,例3.7求一元二次方程,的根,1、算法分析:,,2、數(shù)據(jù)結(jié)構(gòu):由于問題簡單,只需用到一些單精度實數(shù),3、偽代碼,輸入方程系數(shù)a,b,c計算判別式d=b*b-4*a*cif判別式大于等于0then{計算兩個實根定位輸出光標(biāo)打印結(jié)果}else{計算實部計算虛部定位輸出光標(biāo)打印結(jié)果}endprogram,4、源程序清單,//exam37.c#include#includemain(){floata,b,d,c,x1,x2,p,q;printf(“輸入方程系數(shù):”);scanf(“%f,%f,%f”,}},求平方根的函數(shù),關(guān)系運(yùn)算符,例3.8商店售貨,按購買貨物款的多少分別給予不同的優(yōu)惠折扣,編程計算實際應(yīng)付貨款。,購貨不足250元,沒有折扣;購貨250元(含250元,下同),不足500元,減價5%;購貨500元,不足1000元,減價7.5%;購貨1000元,不足2000元,減價10%;購貨2000元及以上,減價15%;,1、算法分析:設(shè)購物款為M,折扣為D,則D可表示為:D=0(M〈250)D=0.05(250≦M<500)D=0.075(500≦M<1000)D=0.1(1000≦M=2000)d=0.15;t=m*(1-d);//計算應(yīng)付款printf(“實際應(yīng)付款:%f”,t);},輸入購物款:249,實際應(yīng)付款:249,輸入購物款:500,實際應(yīng)付款:462.5,例3.9購物折扣程序的另一個寫法,改寫后,程序更清晰,執(zhí)行時間更省。,//exam39.c#includemain(){floatm,d,t;printf(“請輸入購物金額:”);scanf(“%f”,,elsed=0.15;t=m*(1-d);//應(yīng)付款printf(“實際應(yīng)付款:%f\n”,t);},,例3.10從鍵盤輸入一字符,如果為Y,則打印是,為N,打印否,其它字符,打印輸入錯誤。,//exam310.c#includemain(){chara;printf(“輸入一個字符:”);a=getchar();if(a==‘Y’||a==‘N’){if(a==“Y”)printf(“是!\n”);elseprintf(“否!\n”);}elseprintf(“輸入數(shù)據(jù)不合要求!\n”);},#includemain(){intx,y,z;printf(“Iputx,y,z:”);scanf(“%d,%d,%d”,},例3.11,嵌套不能太深,一般以三層為限,嵌套太深,容易出錯。,嵌套演示程序,//exam311a.c#includemain(){intx,y,z;printf(“Iputx,y,x:”);scanf(“%d,%d,%d”,},利用邏輯表達(dá)式將例3.5改寫,改寫后程序的結(jié)構(gòu)要清晰得多。,例3.12將輸入的字母轉(zhuǎn)化為小寫字母。,1算法分析,在計算機(jī)中,處理英文字母,其實是處理它的ASCII碼值。將大寫字母變成小寫字母,就是將大寫字母的ASCII碼值變?yōu)橄鄳?yīng)的小寫字母的ASCII碼值。,大寫字母的ASCII值比小寫字母的ASCII值小32,故將相應(yīng)字母的ASCII值加32就變成了小寫字母。,程序設(shè)計時,要注意如果輸入的不是大寫的字母,則不用轉(zhuǎn)換。,//exam312a.c//將輸入的大寫字母變成小寫#includemain(){charch;printf(“請輸入一個大寫英文字母:”);scanf(“%c”,},2源程序代碼之一,//exam312b.c#includemain(){charch;scanf(“%c”,},注意:1條件運(yùn)算符優(yōu)先于賦值運(yùn)算符,低于關(guān)系運(yùn)算符;2條件運(yùn)算符的結(jié)合方向為“自右至左”a>b?a:c>d?c:da>b?a:(c>d?c:d),,此處使用了條件運(yùn)算符,3源程序代碼之二,,,#includemain(){inti;printf(“輸入數(shù)字1-7:”);scanf(“%d”,},例3.13入星期中的某一天,顯示對應(yīng)的英文,此例似顯復(fù)雜,是否有更好的辦法?,main(){inti;printf(“輸入數(shù)字1-7:”);scanf(“%d”,}},例3.14用switch語句重寫打印星期程序。,main(){intI;printf(“輸入數(shù)字1-7:”);scanf(“%d”,},例3.15用switch語句重寫例3.4的程序,main(){chara;printf(“輸入一個字符:”);a=getchar();if(a==“Y”||a==“N”)if(a==“Y”)printf(“是\n”);elseprintf(“否\n”);elseprintf(“字符不合要求!\n”)},顯然,改寫后的程序更清晰,更簡短。,//exam315.c#includemain(){chara;printf(“輸入字符:”);a=getchar();switch(a){case‘Y’:printf(“是\n”);break;case‘N’:printf(“否\n”);break;default:printf(“字符不合要求!\n”);}},例3.16在屏幕上顯示菜單,分析:程序首先在屏幕上將功能顯示出來,用戶根據(jù)需要選擇相應(yīng)的功能,程序根據(jù)用戶的選擇執(zhí)行相應(yīng)的程序段。,對于這類程序,往往是用戶輸入一個英文字母,然后程序根據(jù)字母來斷別程序該執(zhí)行什么程序段,故一般用switch語句比較方便。,2源程序清單,switch(a){casei:printf(“調(diào)用輸入模塊!\n”);break;caseo:printf(“調(diào)用輸出模塊!\n”);break;casel:printf(“調(diào)用查找模塊!\n”);break;case‘q:printf(“調(diào)用退出模塊!\n”);break;}},,//exam316.c#includemain(){chara;printf(“請選擇:”);printf(“輸入i”);printf(“輸出o”);printf(“找出最長的單詞l”);printf(“退出q”);a=getchar();,執(zhí)行選項時,要調(diào)用相應(yīng)的模塊(程序段)。由于現(xiàn)在還沒有相應(yīng)的程序,暫用一條打印語句代替。,以后會用相應(yīng)程序代替,例3.17統(tǒng)計某班級中計算機(jī)課程中考試成績高于80分的人數(shù)。假設(shè)學(xué)生人數(shù)為10(結(jié)束程序,按Ctrl+Break組合鍵),//exam317.c#includemain(){inti=0,fs,j=0;Loop:scanf(“%d”,},本章小結(jié),1、分支結(jié)構(gòu):改變程序的執(zhí)行流程,或有選擇地執(zhí)行程序;,2、if~else和switch是結(jié)構(gòu)化語句,而goto語句不是;,3、塊if語句可以取代所有的分支結(jié)構(gòu),而多重分支結(jié)構(gòu)不可;,4、塊if語句中的條件可以是復(fù)雜邏輯表達(dá)式,而多重分支中的條件只能是簡單表達(dá)式;,5、塊if與goto語句結(jié)合,可以構(gòu)造任何復(fù)雜的循環(huán),但用專門的循環(huán)語句更方便。,作業(yè),編寫程序,接受用戶輸入的整數(shù),如果是奇數(shù),則乘3加1后輸出結(jié)果,是偶數(shù),則除2后輸出結(jié)果。已知2006年的12月1日是星期五,編寫程序,接受用戶輸入的1-31間的整數(shù),判斷是星期幾,打印出結(jié)果。將上題的結(jié)果按如下格式輸出:,Calendar2006-12-------------------------------------SuMoTuWuThFrSa-------------------------------------31-------------------------------------,作業(yè)(續(xù)),接受用戶輸入的年份和月份,判斷是否是閏年,輸出該月的天數(shù)(用switch語句實現(xiàn))。,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 順序 分支 程序結(jié)構(gòu)
鏈接地址:http://www.820124.com/p-3283858.html