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