C语言再学习 -- 分支与跳转语句
一、if語句
形式1:
if (邏輯表達式)
執行語句
如果邏輯表達式為真,則執行執行語句
形式2:
if (邏輯表達式)
執行語句1
else
執行語句2
如果邏輯表示是為真則執行執行語句1,否則執行執行語句2
形式3:
if (邏輯表達式1)
執行語句1
else if (邏輯表達式2)
執行語句2
else
執行語句3
如果邏輯表達式1為真,則自行執行語句1,如果邏輯表達式1為假而邏輯表達式2為真,則執行執行語句2,否則,如果兩個表達式都為假,執行執行語句3
關于if語句形式2分析:
規則是如果沒有花括號致命,else與和它最近的一個if相匹配。如果希望在if和else之間有多條語句,必須使用花括號創建一個代碼塊。下面的結構違反了C語法,因為編譯器期望if和else之間只有一條語句。
if (x >0) printf ("x = \n"); x++; else printf ("x <= 0");編譯器會把printf()語句看作if語句的部分,將x++語句看作一條單獨的語句,而不把它作為if語句的一部分。然后會認為else沒有所屬的if,這是個錯誤,應該使用花括號。或者參看do while (0)語句。
if (x >0) { printf ("x = \n"); x++; } else printf ("x <= 0");判斷條件通常是一個關系表達式,也就是用一個關系運算符構成的表達式,例如:< 或者 ==。利用C的邏輯運算符,可以作何多個關系表達式以創建更復雜的判斷。
需要注意的幾點:
1、賦值運算符和邏輯運算符
例如:
if (5 = n) ? ?語法錯誤
if (5 == n) ?檢查n的值是否為5
2、 ?if(n != 0)可用if (n)代替
3、if (n >= 9 && n <= 100) 不要寫成 if (90 <= n <= 100)
問題在于該代碼是語義錯誤,我不是語法錯誤,因為對于<=運算符的求值順序是由左到右的,所以會把該測試表達式解釋為如下形式:
(90 <= n) ?<= 100
子表達式90 <= n的值為1(真)或0(假)。任何一個值都小于100,因此不管n的值是什么,整個表達式總是為真,所以需要使用&&來檢查范圍。
例如: ?if (5 > 2 > 3) 布爾值為0(假).
注意: 零值表示“假”,非零值表示“真”,負數也是非零值。
#include <stdio.h> int main (void) { if (-1){printf ("111111111\n");}printf ("222222222\n");return 0; } 輸出結果: 111111111 222222222
二、循環輔助手段:continue和break
1、continue語句
continue命令可以與三種循環形式中的任何一種一起作用,但是不能喝switch語句一起使用。他導致程序控制跳過循環中的剩余語句。對于while和for循環,開始下一個循環周期。對于do while循環,對退出條件進行判斷,如果必要,開始下一個循環周期。
用處:可以在主語語句中消除一級縮排。當語句很長或者已經有很深的嵌套時,作為占位符,使代碼根據可讀性:
while (getchar () != '\n')
continue;
2、break語句
循環中的break語句導致程序終止包含它的循環,并進行程序的下一階段。break命令可以與三種循環形式中的任何一種以及switch語句一起使用。它導致程序控制跳過包含它的循環或switch語句的剩余部分,繼續執行緊跟在循環或switch后的下一條命令。
break語句實質上是switch語句的附屬物,順便提一下,break語句用于循環和switch中,而continue僅用于循環。
例如:在if語句中使用continue會出現: 錯誤:continue語句出現在循環以外。
三、多重選擇:switch和break
以上面的例子來說明switch語句:
如果i為整形值1或者2,則打印22222。如果它的值為3,則打印33333和44444(因為雜case 3后沒有break語句,所以流程繼續到隨后的語句),如果它的值為4,則打印44444,。對于其他值,僅打印hello world
#include <stdio.h> int main (void) { int i = 0; scanf ("%d", &i); switch (i) { case 1: // printf ("11111\n"); // break; case 2: printf ("22222\n"); break; case 3: printf ("33333\n"); // break; case 4: printf ("44444\n"); break; default: printf ("hello world\n"); break; } return 0; }
//示例 switch (enSize) {case PIC_QCIF:stH264Cbr.u32BitRate = 256; /* average bit rate */break;case PIC_QVGA: /* 320 * 240 */case PIC_CIF: stH264Cbr.u32BitRate = 512;break;case PIC_D1:case PIC_VGA: /* 640 * 480 */stH264Cbr.u32BitRate = 1024*2;break;case PIC_HD720: /* 1280 * 720 */stH264Cbr.u32BitRate = 1024*2;break;case PIC_HD1080: /* 1920 * 1080 */stH264Cbr.u32BitRate = 1024*4;break;case PIC_5M: /* 2592 * 1944 */stH264Cbr.u32BitRate = 1024*8;break; default :stH264Cbr.u32BitRate = 1024*4;break; }
總體注解:
程序控制按照邏輯表達式的值跳轉到相應的case標簽處。然后程序流程繼續通過所有剩余的語句,直達再次由break語句重定向。邏輯表達式和case標簽必須都是整型值(包括類型char),并且標簽必須是常量或者完全有常量組成的表達式。如果沒有表達式值相匹配的case標簽,那么控制定位到標簽為default的語句,如果它存在的話。否則,控制傳遞給緊跟著switch語句的下一條語句。
每個 switch 語句中只能出現一條 default 子句。但是,它可以出現在語句列表的任何位置,而且語句流會像貫穿一個 case 標簽一樣貫穿 default 子句。
四、goto語句
不要輕易使用
可以了解一下:
while(1)、for( ; ; )、goto這三者可作為死循環?
總結
以上是生活随笔為你收集整理的C语言再学习 -- 分支与跳转语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最优化学习笔记(十九)——拟牛顿法(5)
- 下一篇: C语言再学习 -- 输入/输出