




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1第3章 程序控制結構2第3章 程序控制結構3.1 語句3.2 輸入與輸出3.3 程序順序結構3.4 程序選擇結構3.5 程序循環結構33.1 語句語句(statement)是C程序的最小單位程序由一條一條語句組成語句執行的次序則稱為流程C語言語句分為簡單語句、復合語句和控制語句43.1.1 簡單語句1表達式語句x=a+b; /賦值語句賦值語句t=a,a=b,b=t; /a和和b交換交換a+b+c; /運算但無實際意義運算但無實際意義表達式表達式; /用分號結束用分號結束53.1.1 簡單語句2函數調用語句printf(a+b=%d,a+b); /輸出函數調用語句輸出函數調用語句函數調用函數調
2、用(實參實參); /用分號結束用分號結束63.1.1 簡單語句3空語句4聲明部分printf(“a+b=%d”,a+b); ; /第第2個即為空語句個即為空語句; /單個分號單個分號聲明部分聲明部分.;執行語句執行語句.;73.1.2 復合語句復合語句(compound statement),又稱語句塊,簡稱塊(block) 局部聲明部分局部聲明部分.;語句序列語句序列.;83.1.2 復合語句復合語句內的每條語句必須以分號(;)結尾,但復合語句右大括號()已表示結尾,因此其后不需要分號。如果在后面添加分號,意思變為一個復合語句與一個空語句。 /復合語句復合語句 double s, a=5,
3、b=10, h=8; /局部聲明局部聲明 s=(a+b)*h/2.0; printf(area=%lfn, s); /復合語句不需要分號結尾復合語句不需要分號結尾93.1.2 復合語句復合語句內部可以進行變量定義或類型聲明,這些定義或聲明僅在復合語句內部可以使用,稱為塊的局部作用域 。 int t,a=10,b=7; /定義局部變量定義局部變量t、a、b t=a,a=b,b=t; /僅在這個復合語句里使用僅在這個復合語句里使用103.1.2 復合語句復合語句允許嵌套,即在復合語句里還可以包含復合語句。 /復合語句復合語句 double v1,r=5; /局部聲明局部聲明 v1=4*3.1415
4、926*r*r*r/3; /嵌套的復合語句嵌套的復合語句 double v2,h=12; /嵌套的局部聲明嵌套的局部聲明 v2=3.1415926*r*r*h; printf(%lf,%lfn,v1,v2); /嵌套的復合語句結尾嵌套的復合語句結尾 /復合語句結尾復合語句結尾113.1.3 注釋可以在程序中編寫注釋(comments),有兩種形式:/*.*/塊注釋語法形式: /*.注釋內容注釋內容*/123.1.3 注釋/行注釋語法形式: 說明:(1)注釋僅是對源程序的說明文字,它不是程序代碼,對程序運行沒有任何影響。實際上,在編譯程序時所有注釋內容將被忽略。 /.注釋內容注釋內容 133.1
5、.3 注釋(2)/*.*/塊注釋允許多行注釋,以(/*)開頭,以(*/)結尾,這中間的任何內容均是注釋內容。注釋可以是任何來自于字符集的字符組合,包括換行符,也允許中文等非ASCII字符。/*.*/不允許嵌套143.1.3 注釋(3)/行注釋表示從(/)開始直到本行末尾的所有字符均是注釋內容。/注釋只能注釋一行,如果要注釋多行就要寫多次。一般/注釋適用于短小精簡的注釋,/*.*/注釋適用于大段注釋。(4)編譯器將整個注釋理解為一個空白字符,相當于一個空格的作用。 153.1.4 語句的寫法(1)多數情況下,在一個程序行里只寫一個語句,這樣的程序寫法清晰,便于閱讀、理解和調試。 (2)注意使用空
6、格或TAB來作合理的間隔、縮進、對齊,使程序形成邏輯相關的塊狀結構,養成優美的程序編寫風格。 (3)C語言允許在一行里寫多個語句 。(4)C語言允許將一個語句拆成多行來寫 。163.2 輸入與輸出所謂輸入是指從外部輸入設備(如鍵盤、鼠標等)向計算機輸入數據,輸出是指從計算機向外部輸出設備(如顯示器、打印機等)輸出數據。 173.2 輸入與輸出C語言輸入輸出操作是通過函數實現的。不同的函數能夠處理形式多樣的輸入輸出操作,支持不同的輸入輸出設備。若在程序中調用標準輸入輸出函數,應該用文件包含命令將頭文件stdio.h包含到程序中,命令形式為: #include 183.2.1 字符輸入與輸出1字符
7、輸出putchar函數putchar函數的作用是向顯示終端輸出一個字符,一般形式為:putchar(c);193.2.1 字符輸入與輸出例3.1 1 #include 2 int main() 3 4 char a=C, b=6; 5 putchar(a); /字符型變量,輸出字符型變量,輸出 C 6 putchar(b+0); /整型表達式,輸出整型表達式,輸出 6 7 putchar(110);/轉義字符轉義字符(八進制八進制)輸出輸出 H 8 putchar(n);/轉義字符轉義字符(換行換行),輸出,輸出 換行換行 9 return 0; 10 203.2.1 字符輸入與輸出例3.1
8、1 #include 2 int main() 3 4 char a=C, b=6; 5 putchar(a); /字符型變量,輸出字符型變量,輸出 C 6 putchar(b+0); /整型表達式,輸出整型表達式,輸出 6 7 putchar(110);/轉義字符轉義字符(八進制八進制)輸出輸出 H 8 putchar(n);/轉義字符轉義字符(換行換行),輸出,輸出 換行換行 9 return 0; 10 C6H程序運行屏幕213.2.1 字符輸入與輸出2字符輸入getchar函數getchar函數的作用是從鍵盤終端輸入一個字符,一般形式為:getchar()223.2.1 字符輸入與輸出
9、例3.2 1 #include 2 int main() 3 4 char c1, c2, c3; 5 c1=getchar(); c2=getchar(); c3=getchar(); 6 putchar(c1);putchar(c2);putchar(c3); 7 return 0; 8 233.2.1 字符輸入與輸出例3.2 1 #include 2 int main() 3 4 char c1, c2, c3; 5 c1=getchar(); c2=getchar(); c3=getchar(); 6 putchar(c1);putchar(c2);putchar(c3); 7 ret
10、urn 0; 8 abc程序運行屏幕abc243.2.1 字符輸入與輸出例3.2 1 #include 2 int main() 3 4 char c1, c2, c3; 5 c1=getchar(); c2=getchar(); c3=getchar(); 6 putchar(c1);putchar(c2);putchar(c3); 7 return 0; 8 ab程序運行屏幕abc253.2.2 格式化輸出1printf函數printf函數的作用是向標準輸出設備(顯示終端)輸出格式化的數據,一般形式為:(1)格式控制格式控制為字符串形式,稱為格式控制串printf(格式控制格式控制,輸出項
11、列表輸出項列表.);26它主要有兩種內容:格式說明。格式說明總是以百分號(%)字符開始,后跟格式控制字符,例如%d、%f等。它的作用是將輸出項轉換為指定格式輸出。一般字符。除格式說明之外的其他字符,包含轉義字符。一般字符根據從左向右的出現順序直接輸出到顯示終端上,ASCII控制字符的輸出有特殊的含義。 3.2.2 格式化輸出% flags width .prec h | l | L | F | N type273.2.2 格式化輸出表3-1 printf格式說明域含義域域域選域選描述描述含義含義type必需必需類型類型字符字符決定輸出項轉換為字符、字符串還是數值決定輸出項轉換為字符、字符串還是
12、數值flags可選可選標志標志字符字符控制輸出的對齊、符號、空格及八進制和控制輸出的對齊、符號、空格及八進制和十六進制前綴。可以出現多個標志十六進制前綴。可以出現多個標志width可選可選寬度寬度說明說明指定輸出項的最小顯示寬度指定輸出項的最小顯示寬度.prec可選可選精度精度說明說明指定輸出項的最大輸出字符數或浮點數小指定輸出項的最大輸出字符數或浮點數小數精度數精度h/l/L/F/N可選可選大小大小修飾修飾指明輸出項類型大小或指針的遠近指明輸出項類型大小或指針的遠近283.2.2 格式化輸出表3-2 printf類型字符含義字符字符類型類型輸出格式輸出格式dint帶符號的十進制整數帶符號的十
13、進制整數uint無符號十進制整數無符號十進制整數oint無符號八進制整數無符號八進制整數x或或Xint無符號十六進制整數(若輸出為字母,無符號十六進制整數(若輸出為字母,x用用abcdef,X用用ABCDEF)293.2.2 格式化輸出表3-2 printf類型字符含義字符字符類型類型輸出格式輸出格式fdouble具有具有dddd.dddd格式的帶符號數值,格式的帶符號數值,dddd為一位或多位十進制數字。小數點前數字個數為一位或多位十進制數字。小數點前數字個數取決于數的量級;小數點后面數字個數取決于取決于數的量級;小數點后面數字個數取決于所要求的精度所要求的精度e或或Edouble具有具有d
14、.dddde/ddd格式的帶符號數值,格式的帶符號數值,其中其中d為單個十進制數字,為單個十進制數字,dddd為一位或多位為一位或多位十進制數字,十進制數字,ddd為三位十進制數。用為三位十進制數。用e或或E表表示指數示指數g或或double以以f或或e格式輸出的帶符號數值,對給出的值及格式輸出的帶符號數值,對給出的值及其精度,其精度,f和和e哪個簡潔就用哪個。只有當值的哪個簡潔就用哪個。只有當值的指數小于或大于、等于精度說明時才使用指數小于或大于、等于精度說明時才使用e格式。尾部的被截斷,只有小數點后跟位格式。尾部的被截斷,只有小數點后跟位或多位數字時才出現小數點。用或多位數字時才出現小數點
15、。用e或或E表示指數表示指數303.2.2 格式化輸出表3-2 printf類型字符含義字符字符類型類型輸出格式輸出格式cchar單個字符單個字符s字符串字符串指針指針直到第一個非空字符(直到第一個非空字符(0)或滿足精度的字符)或滿足精度的字符串串%輸出百分號輸出百分號%313.2.2 格式化輸出表3-3 printf標志字符含義標志標志意義意義默認默認在給定域寬內左對齊輸出在給定域寬內左對齊輸出結果(右邊用空格填充)結果(右邊用空格填充)右對齊(左邊用空格右對齊(左邊用空格或填充)或填充)如果輸出值是有符號數,如果輸出值是有符號數,則總是加上符號(或)則總是加上符號(或)只在負數前加()只
16、在負數前加()空格空格如果輸出值是有符號數或如果輸出值是有符號數或為正數,則以空格作為前為正數,則以空格作為前綴加到輸出值前;如果空綴加到輸出值前;如果空格和標志同時出現,則格和標志同時出現,則忽略空格忽略空格無無323.2.2 格式化輸出表3-3 printf標志字符含義標志標志意義意義默認默認#指明使用如下的指明使用如下的“轉換樣轉換樣式式”轉換輸出參數轉換輸出參數若類型若類型字符為字符為對輸出參數的影響對輸出參數的影響x或或X在任何非在任何非0輸出值前加上輸出值前加上0 x或或0Xe,E,f強制在所有情況下輸出值強制在所有情況下輸出值總是包含小數點總是包含小數點 只有小數點后面有數只有小
17、數點后面有數字時才顯示它字時才顯示它g,G同同e和和E,強制在所有情況,強制在所有情況下輸出值中總是包含小數下輸出值中總是包含小數點并阻止截斷尾部的點并阻止截斷尾部的0只有小數點后面有數只有小數點后面有數字時才顯示它,截斷字時才顯示它,截斷尾部的尾部的0333.2.2 格式化輸出表3-4 printf寬度說明寬度寬度說明說明對輸出域寬度的影響對輸出域寬度的影響n至少有至少有n個字符寬度輸出,如果輸出值中的寬度小于個字符寬度輸出,如果輸出值中的寬度小于n個,個,則輸出用空格填充直到最小寬度規定(如果則輸出用空格填充直到最小寬度規定(如果flags 為,為,則填充在輸出值的右邊,否則在左邊)則填充
18、在輸出值的右邊,否則在左邊)0n至少有至少有n個字符寬度輸出,如果輸出值中的字符寬度小于個字符寬度輸出,如果輸出值中的字符寬度小于n個,則輸出用個,則輸出用0填充在輸出值的左邊(對于左對齊無效)填充在輸出值的左邊(對于左對齊無效)*間接設置寬度,此時由輸出項列表提供寬度值,且它必間接設置寬度,此時由輸出項列表提供寬度值,且它必須在輸出項的前面須在輸出項的前面343.2.2 格式化輸出表3-5 printf精度說明精度精度說明說明精度影響精度影響.n類型類型含義含義e,E,f精度值指定小數點后數字的個數。四舍五入精度值指定小數點后數字的個數。四舍五入g,G精度值指定可輸出的有效數字的最大數目精度
19、值指定可輸出的有效數字的最大數目s精度值指定可輸出字符的最大數目,超出精精度值指定可輸出字符的最大數目,超出精度值范圍的字符不予輸出度值范圍的字符不予輸出353.2.2 格式化輸出表3-5 printf精度說明精度精度說明說明精度影響精度影響(無)(無)精度按默認精度按默認值:值:類型類型默認值默認值e,E,f6g,G打印打印6個有效數字,尾部的個有效數字,尾部的0串被截斷串被截斷s輸出直到空字符(輸出直到空字符(0)為止)為止.0或或僅有僅有.類型類型含義含義363.2.2 格式化輸出續表3-5 printf精度說明精度精度說明說明精度影響精度影響e,E,f,g,G輸出不打印小數點(及其后的
20、小數)輸出不打印小數點(及其后的小數)s無任何字符輸出無任何字符輸出*間接設置精度,此時由輸出項列表提供精度間接設置精度,此時由輸出項列表提供精度值,且它必須在輸出項的前面。如果寬度說值,且它必須在輸出項的前面。如果寬度說明和精度說明同時使用明和精度說明同時使用*,則先出現寬度值,則先出現寬度值,接著是精度值,然后才是輸出項。接著是精度值,然后才是輸出項。373.2.2 格式化輸出表3-6 printf類型大小修飾含義大小修飾大小修飾 type類型字符類型字符輸出參數被解釋為輸出參數被解釋為hd,o,x,X短整型(短整型(short)u無符號短整型(無符號短整型(unsigned short)
21、ld,o,x,X長整型(長整型(long)u無符號長整型(無符號長整型(unsigned long)e,E,f,g,G雙精度浮點型(雙精度浮點型(double)Le,E,f,g,G長雙精度浮點型(長雙精度浮點型(long double)383.2.2 格式化輸出int a=123,b=-1,c=12345;long h=-1; short i=-1,j=32767;char c1=97;double x=12.3456,y=12,z=12.123456789123;/輸出整型數據輸出整型數據printf(%d,%u,%x,%X,%on,a,a,a,a,a);/十進制、無符號、十六進制和八進制十
22、進制、無符號、十六進制和八進制/輸出結果:輸出結果:123,123,7b,7B,173printf(%d,%u,%x,%X,%on,b,b,b,b,b);/十進制、無符號、十六進制和八進制,負數為補碼十進制、無符號、十六進制和八進制,負數為補碼/-1,4294967295,ffffffff,FFFFFFFF,37777777777393.2.2 格式化輸出printf(%ld,%lu,%lx,%lon,h,h,h,h,h);/長整型,負數為補碼長整型,負數為補碼/輸出結果:輸出結果:-1,4294967295,ffffffff,37777777777printf(%hd,%hu,%hx,%ho
23、n,i,i,i,i,i);/短整型,負數為補碼短整型,負數為補碼/輸出結果:輸出結果:-1,65535,ffff,177777printf(%hd,%hdn,j,j+1); /短整型,數據溢出短整型,數據溢出/輸出結果:輸出結果:32767,-32768/輸出帶格式的整型數據輸出帶格式的整型數據p r i n t f ( % d , % 4 d , % - 4 d , % 4 d , % -4dn,a,a,a,c,c);/寬度、右對齊、左對齊、實際寬度寬度、右對齊、左對齊、實際寬度/輸出結果:輸出結果:123, 123,123 ,12345,12345403.2.2 格式化輸出printf(%
24、+d,%+d,% d,% dn,a,-a,a,-a); /填充正填充正負符號、填充空格負符號、填充空格/輸出結果:輸出結果:+123,-123, 123,-123printf(%04d,%04d,%04d,%-04dn,a,b,c,a); /左邊填充左邊填充0、右邊不影響、右邊不影響/輸出結果:輸出結果:0123,-001,12345,123 printf(%#d,%#x,%#X,%#on,a,a,a,a);/填充十六進制、八進制前綴填充十六進制、八進制前綴/輸出結果:輸出結果:123,0 x7b,0X7B,0173printf(%*dn,5,a); /由輸出項指定寬度由輸出項指定寬度/輸出結
25、果:輸出結果: 123413.2.2 格式化輸出printf(%8.2d,%-8.2dn,a,a);/精度對整型無作用精度對整型無作用/輸出結果:輸出結果: 123,123 /輸出字符型數據輸出字符型數據printf(%d,%cn,c1,c1); /字符型數值、字符型數值、ASCII碼碼/輸出結果:輸出結果:97,a/輸出帶格式的字符型數據輸出帶格式的字符型數據printf(%12c,%012c,%-012cn,c1,c1,c1); /寬度、寬度、右對齊、左對齊右對齊、左對齊/ a,00000000000a,a 423.2.2 格式化輸出/輸出浮點型數據輸出浮點型數據printf(%lf,%e
26、,%gn,x,x,x);/小數格式、指數格式、最簡格式小數格式、指數格式、最簡格式/輸出結果:輸出結果:12.345600,1.234560e+001,12.3456printf(%lf,%e,%gn,y,y,y);/小數格式、指數格式、最簡格式小數格式、指數格式、最簡格式/輸出結果:輸出結果:12.000000,1.200000e+001,12/輸出指定精度的浮點型數據輸出指定精度的浮點型數據printf(%lf,%10lf,%10.2lf,%.2lfn,x,x,x,x);/默認默認精度、寬度、精度精度、寬度、精度/12.345600, 12.345600, 12.35,12.35433.2
27、.2 格式化輸出/輸出帶格式的浮點型數據輸出帶格式的浮點型數據printf(%+lf,%+lf,% lf,% lfn,y,-y,y,-y);/填充正負符號、填充空格填充正負符號、填充空格/+12.000000,-12.000000, 12.000000,-12.000000printf(%06.1lf,%-06.1lfn,y,y);/左邊填充左邊填充0、右邊不影響、右邊不影響/輸出結果:輸出結果:0012.0,12.0 printf(%.*f,%*.*fn,6,x,12,3,x);/由輸出項指定寬度、寬度與精度由輸出項指定寬度、寬度與精度/輸出結果:輸出結果:12.345600, 12.346
28、443.2.2 格式化輸出/輸出字符串輸出字符串printf(%s,%6s,%-6sn,Java,Java,Java);/寬度對字符串的影響寬度對字符串的影響/輸出結果:輸出結果:Java, Java,Java printf(%s,%.3s,%6.3sn,Basic,Basic,Basic);/精度對字符串的影響精度對字符串的影響/輸出結果:輸出結果:Basic,Bas, Bas453.2.2 格式化輸出/特殊輸出特殊輸出printf(%n,c1);/兩個兩個%表示輸出一個表示輸出一個%,輸出項,輸出項/輸出結果:輸出結果:%printf(%d,%dn,a,b,c);/格式數目小于輸出項數,忽
29、略多余輸出項格式數目小于輸出項數,忽略多余輸出項/輸出結果:輸出結果:123,-1printf(%d,%d,%dn,a,b);/格式數目大于輸出項數,輸出結果不確定格式數目大于輸出項數,輸出結果不確定/輸出結果:輸出結果:123,-1,2367460printf(%d,%lfn,x,a);/類型不對應,輸出結果不確定類型不對應,輸出結果不確定/輸出結果:輸出結果:2075328197,0.000000463.2.3 格式化輸入scanf(格式控制格式控制,輸入項列表輸入項列表.);1scanf函數scanf函數的作用是從標準輸入設備(鍵盤終端)讀取格式化的數據,一般形式為:% * width
30、h | l | L | F | N type473.2.3 格式化輸入表3-7 scanf類型字符含義類型字類型字符符期望讀入(應輸入)的類型期望讀入(應輸入)的類型d十進制整數十進制整數o八進制整數八進制整數x或或X十六進制整數十六進制整數u無符號十進制整數無符號十進制整數483.2.3 格式化輸入表3-7 scanf類型字符含義類型字類型字符符期望讀入(應輸入)的類型期望讀入(應輸入)的類型e,E,f,g,G由下列成分組成的浮點數:可選的符號或,包括由下列成分組成的浮點數:可選的符號或,包括小數點在內的一個或多個十進制數字序列,可選的指小數點在內的一個或多個十進制數字序列,可選的指數符(數
31、符(e或或E)其后的帶符號整數。)其后的帶符號整數。+/- ddddddddd . dddd E | e +/- dddc字符。指定字符。指定c后,通常被跳過的空白符將被讀入,如果后,通常被跳過的空白符將被讀入,如果要讀下一個非空白符,要使用要讀下一個非空白符,要使用%1ss字符串。默認情況下,輸入字符串以空白符作為結束。字符串。默認情況下,輸入字符串以空白符作為結束。493.2.3 格式化輸入(3)*禁止字符*禁止字符的含義是從輸入數據中讀取類型相當的數據,但跳過這個數據,即不將它保存到輸入項中。(4)寬度說明寬度控制從輸入數據中讀出的最大字符數。轉換并存放到相應輸入項中。如果讀width個
32、字符前遇到空白符或不能根據指定格式進行轉換的字符,則讀入的字符個數將少于width個。503.2.3 格式化輸入(5)大小修飾大小修飾指明輸入的類型大小,與printf的大小修飾含義相同。 513.2.3 格式化輸入int a,b,c; long h; short i;char k,m; double x,y;scanf(%d%ld%hd%lf%le,&a,&h,&i,&x,&y);/輸入整型、長整型、短整型、浮點型輸入整型、長整型、短整型、浮點型/輸入:輸入:1 2 3 1.23 3.25 結果結果a=1,h=2,i=3,x=1.23,y=3.25/輸入:輸入:1 -1 32768 12.3
33、 12e5 結果結果a=1,h=-1,i=-32768,x=12.3,y=1.2e6523.2.3 格式化輸入scanf(%d%d%d,&a,&b,&c);/連續輸入用空格、連續輸入用空格、TAB、回車間隔、回車間隔/輸入:輸入:1 2 3 結果結果a=1,b=2,c=3/輸入:輸入:1,2,3 結果結果a=1,b,c不確定(輸入逗號不匹配空白不確定(輸入逗號不匹配空白符,符,scanf終止)終止)scanf(%d,%d,%d,&a,&b,&c);/輸入必須匹配一般字符輸入必須匹配一般字符/輸入:輸入:1,2,3 結果結果a=1,b=2,c=3/輸入:輸入:1 2 3 結果結果a=1,b,c不
34、確定(輸入空格不匹配逗號,不確定(輸入空格不匹配逗號,scanf終止)終止)533.2.3 格式化輸入scanf(a=%db=%dc=%d,&a,&b,&c);/輸入必須匹配一般字符輸入必須匹配一般字符/輸入:輸入:a=1b=2c=3 結果結果a=1,b=2,c=3/輸入:輸入:1 2 3 結果結果a,b,c不確定(輸入不匹配不確定(輸入不匹配a=,scanf終終止)止)scanf(%4d%4d,&a,&b); /指定寬度指定寬度/輸入:輸入:12 12345 結果結果a=12,b=1234/輸入:輸入:123456789 結果結果a=1234,b=5678scanf(%1d%*2d%3d,&
35、a,&b); /禁止字符禁止字符/輸入:輸入:123456789 結果結果a=1,b=456,23讀取但不保讀取但不保存存543.2.3 格式化輸入scanf(%d%c%d%c,&a,&k,&b,&m);/輸入字符型輸入字符型/輸入:輸入:12c34a 結果結果a=12,k=c,b=34,m=a/輸入:輸入:12 c 34 a 結果結果a=12,k=空格空格,b,m不確定(輸入不確定(輸入c不匹配不匹配%d,scanf終止)終止)scanf(%d%d,&a,&b,&c);/格式數目小于輸出項數,多余輸入項未被輸入格式數目小于輸出項數,多余輸入項未被輸入scanf(%d%d%d,&a,&b);/
36、格式數目大于輸出項數,崩潰性錯誤格式數目大于輸出項數,崩潰性錯誤scanf(%d%lf,&x,&a);/類型不對應,嚴重錯誤類型不對應,嚴重錯誤553.3 程序順序結構通常情況下,語句以其出現的順序執行一個語句執行完會自動轉到下一個語句開始執行,這樣的執行稱為順序執行。順序執行反映了程序“按部就班”的執行規律,多數情況下,程序的執行就是這樣的。 563.3.1 順序執行圖3.1 求圓面積的執行次序順序執行的次序是佷重要的 573.3.2 跳轉執行從問題求解的一般過程來看,還需要跳轉執行。 選擇語句:if語句、switch語句;循環語句:while語句、do語句、for語句;跳轉語句:goto語
37、句、break語句、continue語句、return語句。 583.3.2 跳轉執行goto語句的作用是使程序無條件跳轉到別的位置,語法形式為:這里的標號是一個自定義的標識符,標號語句形式為:標號標號: 語句序列語句序列.goto 標號標號;593.3.2 跳轉執行 1 goto L1; /語句序列語句序列 10 L1: x=a+b; /語句序列語句序列執行第1行時,程序跳轉到L1標號語句所在的第10行繼續運行:603.4 程序選擇結構1. if語句2. switch語句613.4.1 if語句if語句的作用是計算給定的表達式,根據結果選擇執行相應的語句,語句形式有兩種:if形式:if-el
38、se形式:if (表達式表達式) 語句語句1; else 語句語句2;if (表達式表達式) 語句語句1;623.4.1 if語句圖3.2 兩種形式的if語句執行流程PT F內嵌 語句633.4.1 if語句圖3.2 兩種形式的if語句執行流程643.4.1 if語句當ab時,執行t=a,a=b,b=t運算,即a和b相互交換,若a小于等于b則什么也不做;總而言之,無論a和b之前是什么數,執行這段程序后,a肯定小于等于b。 if ( ab ) t=a, a=b, b=t;653.4.1 if語句(1)if語句中的子語句既可以是簡單語句,又可以是復合語句或控制語句,但必須是“一個語句”的語法形式
39、1 if (ab) 2 x=a+b; y=a-b; 3 else 4 x=a-b; y=a+b;663.4.1 if語句(2)子語句往往會有多條語句,甚至更復雜的情形,這時可以使用復合語句 1 if (ab) 2 x=a+b; y=a-b; 3 4 else 5 x=a-b; y=a+b; 6 673.4.1 if語句總是交換的代碼(不好的code風格): 1 if ( ab ) 2 3 t=a; 4 a=b; 5 b=t; 6 ; 1 if ( ab ) 2 t=a; 3 a=b; 4 b=t; 5 ;683.4.1 if語句一般地,if語句的表達式為關系、邏輯運算表達式也可以為其他表達式,
40、但按邏輯值來理解:a=5,b=2;if ( a ) x=a*10;693.4.1 if語句表3-8 數值按邏輯值處理的結果數值數值邏輯值邏輯值aaa!=0!aa=00假假假假真真真真非非0真真真真假假假假7070例:將所給數學條件寫成C的邏輯表達式1)1a 8 并且 1 b 102)a和b都是正的或都是負的(a、b符號相同)3)a和b之一為0,但不能都為04) a能被5或7整除Leap year condition: (yearnum%4=0)&(yearnum%100!=0)| (yearnum%400=0)&(yearnum%100=0)(a=1&a=1&b0&b0)|(a0&b0(a*b
41、=0)&(a+b!=0)(a%5=0)|(a%7=0)71用形式邏輯變量表示潤年條件:int LeapisTrue;LeapisTrue=(yearnum%4=0)&(yearnum%100!=0)|(yearnum%400=0)&(yearnum%100=0);71723.4.1 if語句例3.3 1 #include 2 #include 3 int main() 4 5 double a,b,c; 6 printf(input a,b,c:); 7 scanf(%lf%lf%lf,&a,&b,&c); 8 /判斷三邊長是否構成三角形判斷三邊長是否構成三角形 9 if (a+bc & a+
42、cb & b+ca) 10 double s,t; 11 t=(a+b+c)/2.0; 12 s=sqrt(t*(t-a)*(t-b)*(t-c); 13 printf(area=%lfn,s); 14 733.4.1 if語句例3.3 15 else printf(errorn); 16 return 0; 17 743.4.1 if語句例3.3 15 else printf(errorn); 16 return 0; 17 area=6.000000程序運行屏幕input a,b,c:3 4 5753.4.2 switch語句switch語句switch語句的作用是計算給定的表達式,根據結
43、果選擇從多個分支入口執行,語句形式為:switch ( 表達式表達式 ) case 常量表達式常量表達式1 : 語句序列語句序列1 case 常量表達式常量表達式2 : 語句序列語句序列2 case 常量表達式常量表達式n : 語句序列語句序列n default : 默認語句序列默認語句序列763.4.2 switch語句圖3.3 switch語句執行流程773.4.2 switch語句(1)switch語句中case分支的語句序列可以是一個語句,也可以是任意多的語句序列,也可以沒有語句;既可以是簡單語句,又可以是復合語句和控制語句。如果沒有語句,則一旦執行到這個case分支,什么也不做,繼續
44、往下執行。 783.4.2 switch語句 1 switch (n) 2 case 7 : printf(step5n); 3 case 6 : 4 case 5 : printf(step4n); 5 case 4 : 6 7 printf(step3n);printf(step2n); 8 9 case 2 : printf(step1n); 10 default: printf(step0n); 11 793.4.2 switch語句(3)switch語法中default分支是可選的,若沒有default分支且沒有任何case標號的值相等時,switch語句將什么也不做,直接執行后續語
45、句。(4)switch語句分支選擇可以是C語言的任意表達式,但其值必須是整數(含字符類型)、枚舉類型,或者包含能轉換成這兩種類型的類型。 803.4.2 switch語句(5)switch語法中的case分支必須是常量表達式且互不相同,即為整型、字符型、枚舉類型的常量值,但不能包含變量。例如若c是變量,則“case c=a & c=z:”的寫法是錯的。case分支后面的冒號是必須的,即使沒有后面的語句序列。 813.4.2 switch語句在switch語句中任意位置上,只要執行到break語句,就結束switch語句的執行,轉到switch結構后續語句。break;823.4.2 switc
46、h語句更常見的switch結構應該如下,它提供了程序多分支選擇執行流程。switch ( 表達式表達式 ) case 常量表達式常量表達式1:語句序列語句序列1;break; case 常量表達式常量表達式2:語句序列語句序列2;break; case 常量表達式常量表達式n:語句序列語句序列n;break; default :默認語句序列默認語句序列833.4.2 switch語句圖3.4 結構化的switch流程843.4.3 選擇結構的嵌套1if語句的嵌套(1)第一種形式,在else分支上嵌套if語句,語法形式為:if ( 表達式表達式1 ) 語句語句1else if ( 表達式表達式2
47、 ) 語句語句2else if ( 表達式表達式3 ) 語句語句3.else if ( 表達式表達式n ) 語句語句nelse 語句語句m853.4.3 選擇結構的嵌套圖3.5 嵌套if語句第一種形式的執行流程863.4.3 選擇結構的嵌套例3.4 1 #include 2 int main() 3 4 int score; 5 scanf(%d,&score); 6 if (score = 90 ) printf(An); 7 else if (score = 80 ) printf(Bn); 8 else if (score = 70 ) printf(Cn); 9 else if (sc
48、ore = 60 ) printf(Dn); 10 else printf(En); 11 return 0; 12 873.4.3 選擇結構的嵌套1if語句的嵌套(2)第二種形式,在if和else分支上嵌套if語句,語法形式為: if ( 表達式表達式1 ) if ( 表達式表達式2 ) 語句語句1 else 語句語句2else if ( 表達式表達式3 ) 語句語句3 else 語句語句4883.4.3 選擇結構的嵌套圖3.6 嵌套if語句第二種形式的執行流程893.4.3 選擇結構的嵌套例3.5 1 #include 2 int main() 3 4 int a,b,c,d,t; 5 s
49、canf(%d%d%d%d,&a,&b,&c,&d); 6 if(ab) t=a,a=b,b=t; / 結果結果ac) t=a,a=c,c=t; / 結果結果ad) t=a,a=d,d=t; / 結果結果a=d 9 / 結果結果 a c) t=b,b=c,c=t; / 結果結果bd) t=b,b=d,d=t; / 結果結果b=d 12 / 結果結果 a b d) t=c,c=d,d=t; / 結果結果c=d 14 / 結果結果 a b c d 903.4.3 選擇結構的嵌套例3.5 15 printf(%d,%d,%d,%dn,a,b,c,d); 16 return 0; 17 9191例:根
50、據 x求y值。 3x - 11 (0 x 10) y= 2x + 5 (10 x 20) x (20 x 30)輸入 x x10 T F 輸出X無效3x-11yT輸入xx0&x30 x10 x202x+5yxy輸出yFFFTT x0&x30T F x20 T F y=x y=3x-11 y=2x+5 輸出x無效 輸出 y T x=0&x30) if (x10) y=3*x-11; else if (x20) y=2*x+5; else y=x; printf(”x=%7.2f,y=%7.2fn”, x,y); else printf(”%7.2f is invalid.n”, x); retu
51、rn 0; 54933.4.3 選擇結構的嵌套2switch語句的嵌套switch語句是可以嵌套的: 1 int a=15, b=21, m=0; 2 switch(a%3) 3 case 0: m+; 4 switch(b%2) 5 default: m+; 6 case 0 : m+; break; 7 8 case 1: m+; 9 943.4.4 選擇結構程序舉例例3.6 1 #include 2 int main() 3 4 int y,m,d,Days; 5 printf(input y,m,d:); 6 scanf(%d%d%d,&y,&m,&d); /輸入日期輸入日期 7 sw
52、itch(m) /計算每月的天數計算每月的天數 8 case 2 : 9 Days=28; 10 if(y%4=0&y%100!=0)| (y%400=0) Days+; 11 break; 12 case 4 : case 6 : 13 case 9 : case 11 : Days=30;break; 953.4.4 選擇結構程序舉例例3.6 14 default: Days=31; /其余月份為其余月份為31天天 15 16 d+; 17 if (dDays) d=1,m+; /判斷月末判斷月末 18 if (m12) m=1,y+; /判斷年末判斷年末 19 printf(%d-%d-
53、%dn,y,m,d); 20 return 0; 21 963.4.4 選擇結構程序舉例例3.7 1 #include 2 int main() 3 4 int m,d,t; 5 printf(input m,d:); 6 scanf(%d%d,&m,&d); /輸入月份和日期輸入月份和日期 7 t = m=t) m+;/在一個月的在一個月的t號之后月份加一號之后月份加一 9 switch(m) 10 case 2 : printf(寶瓶寶瓶n);break; 11 case 3 : printf(雙魚雙魚n);break; 12 case 4 : printf(白羊白羊n);break; 1
54、3 case 5 : printf(金牛金牛n);break; 14 case 6 : printf(雙子雙子n);break; 973.4.4 選擇結構程序舉例例3.7 15 case 7 : printf(巨蟹巨蟹n);break; 16 case 8 : printf(獅子獅子n);break; 17 case 9 : printf(室女室女n);break; 18 case 10 : printf(天秤天秤n);break; 19 case 11 : printf(天蝎天蝎n);break; 20 case 12 : printf(射手射手n);break; 21 default :
55、printf(摩羯摩羯n); 22 23 return 0; 24 983.4.4 選擇結構程序舉例圖3.7 星座與日期規律9999例:設計一個簡單的菜單選擇程序,根據選擇可實現a與b的四則運算。#include “stdio.h”int main( ) int a, b; char c1; printf(”1. Addn”); printf(”2. Subtractn”); printf(”3. Multiplyn”); printf(”4. Dividen”); printf(”Enter your choice:”); c1=getchar( );55100100 c1=getchar(
56、 ); if (c1=1 & c1=4 ) printf(”Enter a,b:”); scanf(“%d,%d”, &a,&b); switch(c1) case 1 : printf(“%dn”,a+b); break; case 2 : printf(“%dn”,a-b); break; case 3 : printf(“%dn”,a*b); break; case 4 : printf(“%fn”,(float)a/b); else printf(“Invalid selection.”);return 0;1013.5 程序循環結構1. while語句2. do語句3. for語句1
57、02C語言實驗安排:周語言實驗安排:周2晚晚19:00-21:4502011201、2、3、4曹光前曹光前 4-16周周 教室:3層北1033.5.1 while語句while語句while語句的作用是計算給定的表達式,根據結果判定循環執行語句,語句形式為:其中的語句稱為子語句,又稱循環體,圓括號內的表達式稱為循環條件。 while ( 表達式表達式 ) 語句語句;1043.5.1 while語句while語句的執行過程是:計算表達式,無論表達式為何種類型均將這個值按邏輯值處理;如果值為真,則執行子語句,然后重復;如果值為假,則while語句結束,執行后續語句。 1053.5.1 while語
58、句圖3.8 while語句執行流程ExpressionRepetition body1063.5.1 while語句【例3.8】 求即 1001nsn123100s 1073.5.1 while語句圖3.8 while語句執行流程1083.5.1 while語句例3.8 1 #include 2 int main() 3 4 int n=1,sum=0; 5 while (n=100) /循環直到循環直到n大于大于100 6 sum=sum+n; /累加和累加和 7 n=n+1; 8 9 printf(sum=%dn,sum); 10 return 0; 11 1093.5.1 while語句
59、例3.8 4 int n=1,sum=0; 5 while (n=100) /循環直到循環直到n大于大于100 6 sum=sum+n; /累加和累加和 7 n=n+1; 8 第4行先做循環前的初始化,n為1,sum為0。第5行while語句時n=100的結果為真,則執行循環體;循環體是復合語句,先計算sum累加,則sum變為0+1的結果,再讓n累加1。1103.5.1 while語句例3.8 4 int n=1,sum=0; 5 while (n=100) /循環直到循環直到n大于大于100 6 sum=sum+n; /累加和累加和 7 n=n+1; 8 重復第5行的比較和執行過程,則n值越
60、來越趨向100,n=100也越來越趨向假,sum逐漸為累加和的結果;當n為100時,n=100為真,sum為 的結果,n值累加到101,則n=100為假,while語句結束。1113.5.1 while語句例3.8 4 int n=1,sum=0; 5 while (n=100) /循環直到循環直到n大于大于100 6 sum=sum+n; /累加和累加和 7 n=n+1; 8 第4行叫循環初始,即進入循環前的初始計算過程。如果不給n和sum賦初值可不可以? 1123.5.1 while語句例3.8 4 int n=1,sum=0; 5 while (n=100) /循環直到循環直到n大于大于
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學英語Unit 6 What did you do last weekend教案
- 2025至2030年中國交流電源設備數據監測研究報告
- 2025至2030年中國五谷雜糧面數據監測研究報告
- 《憶江南》(教學設計)-2024-2025學年四年級下冊人教版(2012)音樂
- 2025至2030年中國丹科2143玉米種數據監測研究報告
- 小學數學北師大版四年級下冊蠶絲教案設計
- 2025至2030年中國ABS傳感器數據監測研究報告
- 小學英語魯科版 (五四制)五年級下冊Lesson 1 What are you going to do this summer holiday教案設計
- 2025年中國食用豬油市場調查研究報告
- 2025年中國鎳鐵合金尖咀鉗市場調查研究報告
- DB33T 809-2010 農村水電站運行管理技術規程
- 民航貴州監管局制員工招聘筆試真題2023
- 2022版義務教育(歷史)課程標準(附課標解讀)
- 天津市保溫裝飾板外墻外保溫系統技術規程
- 《 大學生軍事理論教程》全套教學課件
- CJT 526-2018 軟土固化劑 標準
- 品質提升計劃改善報告課件
- NB-T10208-2019陸上風電場工程施工安全技術規范
- 《跟上兔子》繪本五年級第1季A-Magic-Card
- 在線網課知慧《形勢與政策(吉林大學)》單元測試考核答案
- 三年級必讀書課外閱讀測試(附答案)
評論
0/150
提交評論