




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章C語言流程控制本章重點格式化輸入輸出函數C語言中的順序、分支和循環程序的設計方法3.1格式化輸入輸出函數printf()函數scanf()函數3.11printf()函數 C標準庫函數中提供了一些輸入輸出函數,如前面遇到的printf()函數和scanf()函數,它們非C關鍵詞,而是函數名而已,可以自己編寫輸入輸出函數。printf()函數和scanf()函數在系統文件“stdio.h”中聲明,所以在程序的開始部分要使用編譯預處理命令“#include<stdio.h>”。
在日常生活中,我們要經常將華氏溫度轉換成攝氏溫度,其轉換公式如下:式中:
c表示攝氏溫度,
f表示華氏溫度。運行結果:如: printf()函數的作用就是輸出。
對比:
函數語句:
printf("fahr=%f,celsius=%f\n",fahr,celsius);
輸出結果:
fahr=100.000000,celsius=37.777778
得出:雙引號里,第一個%f換成了fahr的值,第二個%f換成了celsius的值,并且以單精度數據形式顯示。 printf()函數一般的調用格式為:
printf("格式控制字符串",輸出參數1,輸出參數2,…,輸出參數n);
“格式控制字符串”是用雙引號括起來的字符串,也稱作“轉換控制字符串”,包括兩種意思。
普通字符
普通字符即需要原樣輸出字符。如:
printf("fahr=%f,celsius=%f\n",fahr,celsius); fahr=100.000000,celsius=37.777778
雙引號內,兩個%f變化除外,其余均無改變格式說明格式說明由“%”和格式字符組成,如%d、%f等,它的作用是將輸出的數據轉換成指定的格式輸出。格式說明輸出%c%d%e%E%x%u%s%o%G%g%f%%%X一個字符根據數值的不同自動選擇%f或%e。用于指數小于-4或者大于精度根據數值的不同自動選擇%F或%E。用于指數小于-4或者大于精度無符號八進制整數字符串無符號十進制整數使用十六進制數字of的無符號十六進制整數使用十六進制數字oF的無符號十六進制整數輸出一個%有符號十進制整數浮點數、以指數的形式輸出(1.2e+02)浮點數、以指數的形式輸出(1.2E+02)以小數點形式輸出浮點數、十進制記數法字符說明l用于長整型整數,可加在格式符d、o、x、u前面m(正整數)數據最小寬度n(正整數)對于實數,表示輸出n位小數;對于字符串,表示截取的字符個數—輸出的數字或者字符在域內向左靠1.對于%md和%ms,m為指定輸出數據的寬度,如果數據的位數小于m,則左端補空格,若大于m,則按實際位數輸出。例如: printf("%4d,%4d",a,b)
若a=12,b=12345,則輸出結果為:??12,12345注意:2.對于%-ms,如果字符串的長度小于m,則輸出m列,不足的位數在右側補空格。例如: printf(“%-4d,%-4d”,a,b);
若a=12,b=12345;結果為:a=12??,b=12345。3.對于%m.s,輸出占m列,但只是取字符串中左端n個字符,這n個字符輸出在m列的右側,左端補空格。%-m.s則在右側補空格,如果n>m,則m自動取n值,即保證n個字符正常輸出。4.對于%m.nf,指定輸出的數據共占m列,其中n位小數。如果數值長度小于m,則左端補空格。%-m.nf與%m.nf一樣,只是使輸出的數值向左端靠,右端補空格。3.1.2scanf()函數數依舊舊探探討討華華氏氏溫溫度度轉轉換換成成攝攝氏氏溫溫度度,,上上一一節節中中,,華華氏氏溫溫度度為為一一定定值值,,如如果果根根據據用用戶戶來來輸輸入入相相應應的的數數據據,,求求攝攝氏氏溫溫度度,,那那該該如如何何進進行行相相應應的的輸輸入入呢呢??運行結果:Pleaseinputfahr:140fahr=140.000000,celsius=60.000000scanf()函數作用,輸輸入數值例:scanf函數的作用是是輸入數據,,其基本格式式為:scanf("格式控制",地址列表)“格式控制”的含義和printf函數的格式控控制。格式說說明也是以%開始,以一個個格式字符結結束,中間可可以插入一些些普通字符,普通字符同同樣按原樣輸輸出。格式說明符意義%c輸入單個字符%d輸入有符號的十進制整數%f輸入浮點數,可以用小數或者整數形式輸入%o輸入無符號的八進制數%s輸入字符串,將字符串存放到一個字符數組中,輸入時以非空白字符開始,以第一個空白字符結束,字符串以串結束標志'\0'作為其最后一個字符。%u輸入無符號的十進制整數%x,%X輸入無符號的十六進制整數%e,%E,%g,%G與%f的作用相同,e,f,g可以互相替換而且大小寫的作用相同。scanf函數的格式說說明符字符意義l用于輸入長整型數據,可用于%ld、%lo、%lx、%lu以及double型數據%lf或%leh用于輸入短整型數據,可用于%hd、%ho、%hx域寬指定輸入數據所占的列寬,應為一個正整數*表示本輸入項在讀入后不賦給相應的變量如:scanf(”%d”,&i);輸入?1234,結果i的值為1234輸入1234,結果i的值為123輸入1234,結果i的值為1234為了更清楚地地了解scanf()函數的用法,,須知以下幾幾點:如:scanf(”%d,%d”,&a,&b)加上“&”,表示變量量a和b的地址這個,輸入時時,必須加上上逗號,才能能保證正確如:scanf(”%4d”,&i);輸入12345,結果i的值為1234(因為指定域域寬為4)輸入123?45,結果i的值為123(因為遇見空空白字符)scanf格式控制中的的普通字符必必須按原樣輸輸入,地址列列表中必須為為地址,在變變量前加上““取地址運算算符”讀取數據的時時候是以指定定域寬或者第第一個空白字字符處為終止止(最先達到到者)若第一個或前前幾個連續為為空白字符、、制表符和換換行符,都將將跳過這些字字符注意%s格式說明符的的用法要點深度解析析:結合要點1,了解地址的的含義結合要點2、3,分析多數據據輸入情況結合要點4,掌握%s的用法3.2程序流程圖流程圖是用一一些圖框來表表示各種操作作。用流程圖圖來表示算法法,直觀形象象,易于理解解。美國國家家標準化協會會ANSI規定了一些常常用的流程圖圖符號。菱形框,是對一個給給定的條件進進行判斷,根根據給定的條條件是否成立立來決定如何何執行其后的的操作。它有有一個入口,,兩個出口連接點,是用于將畫畫在不同地方方的流程線連連接起來。在在流程圖中,,編號相同的的連接點表示示這些點是互互相連接在一一起的注釋框,不是流程圖圖中的必要部部分,不反應應流程和操作作,只是為了了對流程圖中中某些框的操操作作必要的的補充說明,,以便于人們們更好的理解解流程圖例:求一數值值的絕對值。。數學分析:若若此數值本身身就不小于0,就是其本身身,反之,為為其相反數。。輸出X輸出-xX滿足條件不滿足條件流程圖表示::三種基本結構構:1.順序結構,流流程圖表示如如下:執行完A框指定的操作作后接著執行行B框所指定的操操作。順序結結構是最簡單單的一種基本本結構。2.選擇結構,流流程圖表示如如下:此結構中必須須包含一個判判斷框,根據據給定的條件件p是否成立來選選擇執行A框還是B框中所指定的的操作。無論論p條件是否成立立,只能執行行A框或者B框之一,兩者者不可能同時時執行。A框或者B框有一個可以以是空的,不不執行任何操操作3.循環結構,流流程圖表示如如下:當(while)型循環結構構。其功能是是:當給定的的條件p1成立時,執行行A框操作,執行行完A后,再判斷條條件p1是否成立,如如果仍然成立立,再執行A框,如此反復復執行A框,直到某一一次條件p1不成立為止,,此時不執行行A框,從b點脫離循環結結構直到(until)型循環結構構。其功能是是:先執行A框,然后判斷斷給定的條件件p2是否成立,如如果p2條件不成立,,則再執行A,然后再對p2條件作判斷,,如果p2條件仍然不成成立,又執行行A……如此反復執行行A,直到給定的的條件p2成立為止,此此時不再執行行A,從b點脫離循環結結構3.3順序結構程序序設計算術運算符算術表達式賦值表達式例:求一元二二次方程的兩兩根。運行結果:從主函數入口口開始執行,,定義變量,,輸入數值,,求解方程的的解,這都是是按照代碼的的一步一步往往下實現的。。3.3.1算術運算符5種基本運算符符:1).+(加法或者正直直運算符)2).??(減法或者負值值運算符)3).*(乘法運算符)4)./(除法運算符)5).%(求余運算符)注意:加法和減法運運算符同于數數學上乘法在c語言中用“*”,而不用用“×”除法在c語言中是“/”,而不用““÷”使用“/”時,若除數數和被除數都都為整數,則則商也是整數數,若參與運運算的有負數數,3.3.2算術表達式算術表達式即用算術運算算符和括號將將運算對象連連接起來,符符合C語法規則的式式子算術運算時是是按照優先級級進行的,若若優先級相同同,則按照結結合方向進行行計算,并且且每一個表達達式都會有一一個確定的值值。3.3.3賦值表達式由賦值運算符符將一個變量量和一個表達達式連接起來來的式子稱為為賦值表達式。其一般形式為為:<變量><賦值運算符><表達式>計算過程是::先計算賦值值運算符右側側的“表達式”的值,然后將將這個值賦值值給左邊的變變量。多個賦值表表達式共存則則按結合性““自右而左””進行一步一一步分別賦值值。常用的復合賦值運算符a+=y等價于a=a+yb-=y等價于b=b-yc*=y等價于c=c*yd/=y等價于d=d/ye%=y等價于e=e%yy可以是常量、變量以及復雜的表達式賦值運算符““=”之前加上其其他運算符,,就構成復合合賦值運算符符。編寫程序:從鍵盤上輸入入三角形的三三邊,根據下下面的公式求求出三角形的的面積area。假設輸入a、b和c三邊的邊長長能夠組成成一個三角角形。程序為:3.4選擇結構程程序設計關系運算符符和關系表表達式邏輯運算符符和邏輯表表達式if語句與與switch例:一元二二次方程根根的情況。。運行結果::此程序就體體現了,根根據不同的的情況,有有不同的結結果,就達達到了一種種選擇的目目的。3.4.1關系運算符符和關系表表達式關系運算符運算符含義<小于<=小于和等于>大于>=大于或等于==等于!=不等于算術運算符符>關系運算符符>賦值運算符符算術運算符符:+--*/%關系運算符符:><>=<=賦值運算符符:==!=關系表達式式:用關系運運算符將兩兩數連接起起來,進行行關系運算算。表達式結果果為邏輯值值,即“真真”或“假假”若表達式成成立:值為為“1”表達式不成成立:值為為“0”。例:a=2011,b=2010;a==b;因為a,b值不想等,,所以表達達式值為0。3.4.2邏輯運算符符和邏輯表表達式邏輯運算符運算符舉例運算規則&&(邏輯與)a&&b若a、b同時為真,a&&b為真,除此之外都為假||(邏輯或)a||b若a、b之一為真,則a||b為真!(邏輯非)!a若a為真。則!a為假,反之,若a為假,則!a為真優先級:!>算術運算負負>關系運算符符>邏輯運算符符&&與||為雙目運算算符,需要要兩個運算算量!為單目運運算符,只只需要一個個邏輯表達式式:由邏輯運運算符連接接兩個數,,進行邏輯輯運算的式式子。表達式結果果:“真””“假”邏輯量:參參與邏輯運運算的量邏輯值:邏邏輯量、邏邏輯表達式式的運算結結果任何非“0”的邏輯量量的邏輯值值都為真寫出下面各各邏輯表達達式的值。。設a=3,b=4,c=5;1.a+b>c&&b==c2.a||b+c&&b-c3.!(a>b)&&!c||14.!(x=a)&&(y=b)&&05.!(a+b)+c-1&&b+c/21.02.13.14.05.13.4.3if語句與switch語句if,英語中其其義有“如如果”的意意思。那么就來研研究C語言中的““如果”。。1.if語句格式:if(表達式){語句組;}流程圖:如果表達式式的值為真真,就語句句組中的語語句;如果不為真真,就執行行語句組后后的語句表達式語句組真假2.在if語句中添加加else子句格式:if(表達式){語句組1;}else{語句組2;}如果表達式式的值為真真,就執行行語句組1;如果不為真真,就執行行語句組2。流程圖:表達式語句組1語句組2真假3.多重選擇elseif格式:if(表達式1)語句組1;elseif(表達式2)語句組2;elseif(表達式3)語句組3;···else語句組n;表達式1語句組1真假表達式2表達式3語句組n語句組3語句組2假假真真流程圖:當表達式1為真的時候候則執行語語句組1,否則的話話,將判斷斷表達式2的真假,表表達式2為真,則執執行語句組組2···依次這樣判判斷。4.if語句的嵌套套在if語句的語句句組中又包包含一個或或多個if語句稱為if語句的嵌套套如:if(表達式1){if(表達式2){語句組;;}}if的多重嵌套套時,得注注意if和else的搭配,寫寫法要得當當!if語句實現多多分支時,,需要嵌套套的if語句層數較較多,程序序冗長,可讀性低低。因此可可用switch語句來處理理多分支情情況。switch(表達式){case常量表達式式1:語句組1;case常量表達式式2:語句組2;…case常量表達式式n:語句組n;default:語句組n+1;}switch說明:switch括號內的的表達式式任意,,值和哪哪個case后的常量量表達式式匹配,,就執行行后面的的語句,,沒有匹匹配的,,就執行行default后面的,,default可省略。。每個case后常量表表達式的的值必須須不一樣樣,case和default的順序不不影響結結果。執行完一一個case后,程序序流程轉轉移到下下一個case,直到運運行完全全或遇見見break語句,并并非直接接跳出。。多個case可以共用用一個執執行語句句。例:輸入兩個個實數,,按照代代數值由由小到大大的順序序輸出這這兩個數數。滿足if條件就交換a,b的值例:輸入入三個實實數,編編程找出出其中最最大的一一個并輸輸出探究唯一一的三目目運算符符三目運算算符一般形式式:表達式1?表達式式2:表達式式3其執行順順序為::先求解解表達式式1,若為真真(非0),則求求解表達達式2,并把表表達式2的值作為為整個條條件表達達式的值值。若表表達式1為假(0),則求求解表達達式3,并把表表達式3的值作為為整個條條件表達達式的值值。注意點::條件運算算符的優優先級別別高于賦賦值運算算符,但但是比關關系運算算符和算算術運算算符要低低。條件運算算符的結結合方向向為“自自右向左左”條件表達達式中的的表達式式2和表達式式3可以是任任意的表表達式。。表達式式1與表達式式2和表達式式3的類型也也可以不不同。編寫程序序:編寫一程程序,從從鍵盤上上輸入x的值,根據上上面的函函數,求求出y的值。語句組中中只有一一句,花花括號可可以省略略。3.5循環結構構程序設設計while循環環與自增增自減運運算符do····while語句for語語句逗號運算算符和逗逗號表達達式3.5.1while循環與自自增自減減while語句用來來實現““當型””循環結結構。其一般形形式:while(表達式){語句組;}在語句組組中必須須包含能能改變表表達式的的值來使使表達式式的值最最終變為為假,否否則循環環永遠不不會中止止例:使用用while循環來求求“1+2+3+……+100”的值運行結果果:循環條件件i為循環變變量循環變量量增值循環體i=1i≤100sum+=ii++真假流程圖如如下:循環變量量初始化化i=1判斷表達達式i≤100是否成立立成立就執執行循環環體不成立就就執行循循環體后后面的語語句(循環體未未執行)執行循環環體后,,就再從從第一步步往下進進行判斷斷,直至至為假就就退出循循環循環體i++使i每次增1sum+=i進行累加加自增運算算符“++”,其作作用使變變量的值值增1.與其相對對的還有有自減運運算符““--”,其作作用使變變量的值值減1。自增自減減運算符符為單目目運算符符,所以以僅需1個變量。。注意,,自增自自減只能能用于變變量,不不能用于于常量或或表達式式自增、自自減運算算符的使使用有兩兩種方式式:前綴模式式:++變量,--變量。(在使用用變量之之前,先先使變量量的值加加(減))1)后綴模式式:變量量++,變量--。(在使用用變量之之后,使使變量的的值加((減)1)在用自增增、自減減運算符符時,易易使表達達式產生生不正確確的地方方,盡量量不用3.5.2do····while語句do····while循環先執執行循環環體語句句,然后后再判斷斷while后面的條條件是否否成立。。當表達達式為真真,則返返回重新新執行循循環體語語句,如如此反復復,直到到while后面面的的表表達達式式為為假假才才結結束束循循環環一般般形形式式為為::do{循環環體體語語句句組組;;}while(表達達式式);此處處分分號號一一定定不不能能少少用while和do······while分別別求求1到100的累累加加和和while循環環do······while循環環對比比::while循環環先先判判斷斷條條件件,,成成立立則則執執行行循循環環體體,,不不成成立立執執行行其其后后語語句句;;而而do······while循環環先先執執行行一一次次循循環環體體后后判判斷斷條條件件,,成成立立則則再再執執行行循循環環體體,,不不成成立立,,退退出出循循環環。。所所以以do······while至少少執執行行一一次次循循環環體體3.5.3for語句句C語言言中中的的for語句句是是使使用用最最為為靈靈活活的的語語句句,,其其一一般般形形式式如如下下::for(表達達式式1;表表達達式式2;表表達達式式3){循環環體體語語句句組組;;}當循循環環體體語語句句組組只只有有一一句句時時,,花花括括號號可可以以省省略略。。for循環環的的執執行行過過程程::求解解表表達達式式1;求解解表表達達式式2,如如果果為為真真,,則則執執行行循循環環體體語語句句組組,,執執行行結結束束后后轉轉步步驟驟③③;;如如果果表表達達式式的的結結果果為為假假,,則則結結束束循循環環,,轉轉步步驟驟⑤⑤;;求解解表表達達式式3;轉步步驟驟②②;;循環環結結束束,,執執行行循循環環語語句句之之后后的的其其他他語語句句。。for語句句的的3個表表達達式式均均可可省省略略,,但但是是里里面面的的分分號號““;;””不不能能省省略略。。需需要要注注意意的的是是,,省省略略相相應應的的表表達達式式,,就就需需要要在在其其他他地地方方彌彌補補相相應應表表達達式式的的功功能能,,以以保保證證程程序序的的正正常常運運行行例::用用for循環環求求1到100的累累加加和和。。相比比while和do······while,使使用用for循環環,,很很簡簡潔潔,,前前提提必必須須弄弄懂懂for循環環究究竟竟是是如如何何工工作作的的。。continue和和break都有有表表示示結結束束循循環環的的意意思思,,但但continue是結結束束本本次次循循環環,,break為結結束束整整個個循循環環。。ABA中,,結結果果為為sum=5050
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論