C語言基礎(chǔ)第二節(jié)

以前我沒得選,現(xiàn)在我可以選擇了周叮,我選擇做個(gè)好人辩撑。——《無間道》

布爾類型

布爾類型本質(zhì)就是表示“是”或“不是”的變量仿耽。需要注意的是合冀,在C語言中,C89版本中沒有布爾值项贺,在C99版本中才出現(xiàn)了表示“是”或“否”的布爾值:bool君躺,也就是俗稱的“小布爾”峭判。在C99中,使用true表示“真”棕叫,使用false表示假林螃,整型數(shù)0表示假,非零表示真俺泣。

在OC中的布爾值是BOOL疗认,也就是俗稱的“大布爾”,使用YES表示真砌滞,使用NO表示假侮邀,用整型數(shù)0表示假,整型數(shù)1表示真贝润。

如何定義一個(gè)布爾變量呢绊茧?和定義一個(gè)正向變量一樣,使用類型修飾符+變量名+賦值就可以定義出一個(gè)布爾變量了

bool a = true;
BOOL b = YES;

如上代碼打掘,我們分別定義出了一個(gè)C中的布爾變量和一個(gè)OC中的布爾變量华畏,如果要打印他們的值可怎么辦?打印布爾變量的值和打印整型變量的值方式一樣尊蚁,使用%d作為占位符亡笑,打印出0就表示“假”,打印出1就表示“真”横朋。

布爾值常常使用在分支語句中仑乌,根據(jù)不同的情況選擇執(zhí)行不同的分支代碼。

關(guān)系運(yùn)算符

負(fù)責(zé)比較兩個(gè)表達(dá)式琴锭、變量晰甚、常量的大小的運(yùn)算符就是關(guān)系運(yùn)算符,常用的有大于(>)决帖、小于(<)厕九、等于(==)、大于等于(>=)地回、小于等于(<=)扁远、不等于(!=)

關(guān)系運(yùn)算符的運(yùn)算結(jié)果是布爾值刻像,需要用布爾類型的變量來保存結(jié)果畅买。如:

BOOL result = 12 > 23;

布爾變量result保存的結(jié)果就是關(guān)系表達(dá)式12 > 13的結(jié)果,很名顯绎速,這個(gè)表達(dá)式的結(jié)果為假皮获,打印result的值為0。

剛剛提到了“關(guān)系表達(dá)式”這個(gè)概念纹冤,什么是關(guān)系表達(dá)式洒宝?由常量购公、變量、關(guān)系運(yùn)算符組合而成的表達(dá)式雁歌,就是關(guān)系表達(dá)式宏浩。在關(guān)系運(yùn)算符的兩邊不僅可以放變量、常量靠瞎,還可以放表達(dá)式比庄,但是在這種情況下,注意運(yùn)算符的優(yōu)先級(jí)乏盐,先算哪個(gè)表達(dá)式佳窑,再算哪個(gè)表達(dá)式一定要搞清楚,否則程序很容易出錯(cuò)父能。

有幾個(gè)注意點(diǎn):

  1. 判斷是否相等的表達(dá)式為==神凑。
    這一點(diǎn)和生活中有所不同,在生活中或數(shù)學(xué)領(lǐng)域何吝,使用“=”表示判斷相等溉委,在程序中使用一個(gè)短等號(hào)表示“賦值”的意思,將賦值號(hào)右邊的內(nèi)容賦給左邊爱榕;使用兩個(gè)短等號(hào)表示判斷是否相等的意思瓣喊,判斷等于表達(dá)式左右兩邊是否相等,相等返回真黔酥,不等返回假藻三。

  2. 在程序中表示x大于a且小于b不能使用“a < x < b”,分開來寫跪者,兩個(gè)關(guān)系表達(dá)式之間使用“&&”連接趴酣。“&&”是個(gè)什么鬼坑夯?后邊的邏輯運(yùn)算符會(huì)講到。

邏輯運(yùn)算符

邏輯運(yùn)算符是用來判斷兩個(gè)表達(dá)式之間的邏輯關(guān)系的抡四,有與(&&)柜蜈、或(||)、非(V秆病)三種淑履。

邏輯表達(dá)式由常量、變量藻雪、邏輯運(yùn)算符組成秘噪。邏輯表達(dá)式的運(yùn)算結(jié)果和關(guān)系表達(dá)式的運(yùn)算結(jié)果一樣,都是只有兩種狀態(tài):真或假勉耀。使用布爾類型的變量保存指煎。

邏輯與:&&

邏輯與運(yùn)算的運(yùn)算規(guī)則:一假即假蹋偏。在邏輯與兩側(cè)的常量、變量至壤、表達(dá)式威始,只要有一個(gè)為假,整個(gè)邏輯表達(dá)式返回值為假像街。只有兩邊均為真黎棠,返回的值才為真。

邏輯與的短路現(xiàn)象:邏輯與運(yùn)算中镰绎,只要找到符合“假”的條件脓斩,馬上返回“假”,不再繼續(xù)向后計(jì)算畴栖。

    int a = 10;
    int b = 20;
    
    BOOL r1 = (a < b) && (b == 3);
    printf("%d\n", r1);
    
    BOOL r2 = (a == 3) && (b > a);
    printf("%d\n", r2);

    BOOL r3 = (a > 3) && (b > a);
    printf("%d\n", r3);

    
    // 短路現(xiàn)象
    
    BOOL r4 = (a > 5) && a++;
    printf("r4 = %d, a = %d\n", r4, a);
    
    // 表達(dá)式1結(jié)果為假随静,整個(gè)邏輯表達(dá)式結(jié)果已經(jīng)為假,表達(dá)式2不在進(jìn)行運(yùn)算
    BOOL r5 = (b < 5) && b++;
    printf("r5 = %d, b = %d\n", r5, b);

邏輯或 ||

邏輯或的運(yùn)算規(guī)則:一真即真驶臊。在邏輯或運(yùn)算符兩側(cè)的常量挪挤、變量、表達(dá)式关翎,只要有一個(gè)為真扛门,則整個(gè)邏輯表達(dá)式為真。

邏輯或的短路現(xiàn)象:邏輯或運(yùn)算中纵寝,只要找到符合“真”的條件论寨,馬上返回“真”,不管后邊是否還有表達(dá)式爽茴,均不再計(jì)算葬凳。

 int a = 10;
    int b = 20;

    BOOL r1 = (a < b) || (b == 3);
    printf("%d\n", r1);
    
    BOOL r2 = (a == 3) || (b > a);
    printf("%d\n", r2);
    
    BOOL r3 = (a > 3) || (b > a);
    printf("%d\n", r3);

    
    
    // 短路現(xiàn)象
    
    BOOL r4 = (a < 5) || a++;
    printf("r4 = %d, a = %d\n", r4, a);
    
    // 表達(dá)式1結(jié)果為真,整個(gè)邏輯表達(dá)式結(jié)果已經(jīng)為真室奏,表達(dá)式2不在進(jìn)行運(yùn)算
    BOOL r5 = (b > 5) || b++;
    printf("r5 = %d, b = %d\n", r5, b);

邏輯非 火焰!

邏輯非,即取反運(yùn)算胧沫。原來為真昌简,進(jìn)行邏輯非運(yùn)算后變?yōu)榧伲辉瓉頌榧偃拊梗M(jìn)行邏輯非運(yùn)算后變成真纯赎。對(duì)真假進(jìn)行取反操作。

    BOOL a = YES;
    BOOL b = !a;
    
    printf("a = %d\n", a);
    printf("b = %d\n", b);

運(yùn)算符的優(yōu)先級(jí)

掌握運(yùn)算符的優(yōu)先級(jí)可以準(zhǔn)確的寫出自己需要的語句南蹂。
運(yùn)算符的優(yōu)先級(jí): ! > 算數(shù)運(yùn)算符 > 關(guān)系運(yùn)算符 > 邏輯運(yùn)算符 > 賦值運(yùn)算符

分支控制語句

設(shè)計(jì)程序的結(jié)構(gòu)有三種形式:順序結(jié)構(gòu)犬金、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)的程序執(zhí)行就是從第一行代碼開始依次向后執(zhí)行到最后一行結(jié)束晚顷。分支結(jié)構(gòu)是判斷不同的情況峰伙,來執(zhí)行不同分支的代碼,也就是我們接下來要學(xué)習(xí)的一種結(jié)構(gòu)音同。循環(huán)結(jié)構(gòu)是在某種特定條件下词爬,重復(fù)的執(zhí)行某段代碼若干次。

if語句

if語句是C語言中提供分支結(jié)構(gòu)的一種語法权均,有三種寫法顿膨。分別可以實(shí)現(xiàn)單個(gè)分支,雙分支叽赊,多分支結(jié)構(gòu)恋沃。

單分支結(jié)構(gòu)

    if (條件表達(dá)式) {
        
        語句
    }

if 如果
條件表達(dá)式:里邊可以寫算術(shù)表達(dá)式、邏輯表達(dá)式...... 表達(dá)式的結(jié)果為真或假必指。 如果條件表達(dá)式為真囊咏,執(zhí)行{}內(nèi)的語句;如果條件表達(dá)式為假塔橡,跳過{}梅割,執(zhí)行下面的語句
編碼規(guī)范 注意空格和換行

示例代碼:

    int a = 4, b = 5;
    
    if (a < b) {
        
        printf("條件表達(dá)式結(jié)果為真\n");
    }
    
    printf("我在if語句下面\n");

雙分支結(jié)構(gòu)

    if ( 條件表達(dá)式 ) {
        
        語句1
        
    } else {
        
        語句2
    }

雙分支結(jié)構(gòu)一般用于“某條件成立則執(zhí)行分之一,否則執(zhí)行分支二”的情況葛家。

多分支結(jié)構(gòu)

    if ( 條件表達(dá)式1 ) {

        語句1

    } else if ( 條件表達(dá)式2 ) {

        語句2
    } else {

        語句3
    }

像這種多分支結(jié)構(gòu)户辞,需要判斷多個(gè)不同的情況來決定執(zhí)行哪一個(gè)分支。

條件運(yùn)算符

條件運(yùn)算符是if語句中雙分支結(jié)構(gòu)的一種變形癞谒,可以用來處理一些簡(jiǎn)單的分支判斷底燎。語法如下

條件表達(dá)式 ? 表達(dá)式1 : 表達(dá)式2

運(yùn)算規(guī)則:如果條件表達(dá)式為真,整個(gè)表達(dá)式的值為表達(dá)式1的值弹砚;如果條件表達(dá)式為假双仍,整個(gè)表達(dá)式的值為表達(dá)式2的值。
示例代碼:

    int a = 3, b = 4;
    int c = a > b ? a : b;

示例中的條件表達(dá)式為假桌吃,所以整個(gè)表達(dá)式返回的值是表達(dá)式二的值朱沃,也就是b的值,打印整形變量c的值茅诱,就是4为流。

拓展:如果表達(dá)式一的位置什么都不寫,如a>b ? : 23让簿,當(dāng)a>b為真,那么整個(gè)表達(dá)式返回的值是'a>b'的值秀睛,如果a>b為假尔当,則整個(gè)表達(dá)式返回的值是表達(dá)式二的值,也就是23。這是一種簡(jiǎn)略的寫法椭迎,在OC中經(jīng)常使用锐帜。

switch語句

在多分支結(jié)構(gòu)中,除了if語句畜号,還有一種更合適的語法:switch語句缴阎。使用switch...case...結(jié)構(gòu)代替if的級(jí)聯(lián)結(jié)構(gòu),大大的提高了代碼的可讀性简软,簡(jiǎn)化了代碼量蛮拔。
switch的語法

switch (整型或字符型表達(dá)式) {
        case 整型或字符型常量:
            語句一;
            break;
        case 整型或字符型常量:
            語句二;
            break;
        
        default:
        默認(rèn)情況下執(zhí)行的語句;
            break;
    }

多分支語句
作用:提供多個(gè)分支,功能類似if-else級(jí)聯(lián)式痹升,代碼可讀性更好
語法:
(1)switch后面是 整型或字符型表達(dá)式
(2)case后面是 整型或字符型常量
(3)case后面需要添加{}
(4)break建炫。case和default默認(rèn)都跟隨一個(gè)break語句,用于結(jié)束某個(gè)case疼蛾,然后結(jié)束switch控制語句肛跌,執(zhí)行switch后面的語句。

    運(yùn)行邏輯:
    (1)如果表達(dá)式和某個(gè)case常量相等察郁,執(zhí)行這個(gè)case后面的語句衍慎。
    (2)如果沒有和表達(dá)式相等的case常量,執(zhí)行default后面的語句皮钠。

坑點(diǎn):在每一個(gè)case分支最后稳捆,需要使用一個(gè)break跳出switch語句,否則鳞芙,程序會(huì)執(zhí)行后邊的case語句眷柔,直到遇到一個(gè)break或者執(zhí)行完整個(gè)case才能跳出switch語句,繼續(xù)向后執(zhí)行原朝。

枚舉

關(guān)于枚舉驯嘱,你需要知道的:

  1. 枚舉屬于構(gòu)造類型
  2. 一組 具有名稱的 整型常量。
  3. 目的:提高代碼可讀性喳坠。 標(biāo)示符:人類可以識(shí)別 數(shù)字:計(jì)算機(jī)可以識(shí)別
  4. 語法:
            enum  枚舉變量名 {
     
                標(biāo)識(shí)符1, // 默認(rèn)從0開始鞠评,也可以自定義。標(biāo)識(shí)符對(duì)應(yīng)的數(shù)值遞增壕鹉,增量為1
                標(biāo)識(shí)符2,
                ...
     
            };
  1. 定義枚舉類型寫在函數(shù)外面
  2. 枚舉類型變量每次只能賦一個(gè)數(shù)值剃幌,但是數(shù)值包含多種

示例代碼
在main函數(shù)外定義一個(gè)枚舉

enum ColorType {
    
    red,
    yellow,
    green = 10,
    blue
    
};

使用定義好的枚舉:

    printf("%d %d %d %d\n", red, yellow, green, blue);
    
    enum ColorType color1 = red;
    enum ColorType color2 = yellow;
    enum ColorType color3 = green;
    enum ColorType color4 = blue;
    
    printf("color1 = %d\n", color1);
    printf("color2 = %d\n", color2);
    printf("color3 = %d\n", color3);
    printf("color4 = %d\n", color4);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市晾浴,隨后出現(xiàn)的幾起案子负乡,更是在濱河造成了極大的恐慌暖途,老刑警劉巖杯缺,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異净捅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)切省,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門最岗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朝捆,你說我怎么就攤上這事般渡。” “怎么了芙盘?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵驯用,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我何陆,道長(zhǎng)晨汹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任贷盲,我火速辦了婚禮淘这,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巩剖。我一直安慰自己铝穷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布佳魔。 她就那樣靜靜地躺著曙聂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鞠鲜。 梳的紋絲不亂的頭發(fā)上宁脊,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音贤姆,去河邊找鬼榆苞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛霞捡,可吹牛的內(nèi)容都是我干的坐漏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼碧信,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼赊琳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起砰碴,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤躏筏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后呈枉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寸士,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡檐什,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弱卡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡住册,死狀恐怖婶博,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荧飞,我是刑警寧澤凡人,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站叹阔,受9級(jí)特大地震影響挠轴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耳幢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一岸晦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧睛藻,春花似錦启上、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至按摘,卻和暖如春包券,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炫贤。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工溅固, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人照激。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓发魄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親俩垃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子励幼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于 Swift 重要這個(gè)文檔所包含的準(zhǔn)備信息, 是關(guān)于開發(fā)的 API 和技術(shù)的。這個(gè)信息可能會(huì)改變, 根據(jù)這個(gè)文...
    無灃閱讀 4,299評(píng)論 1 27
  • ?1 C語言程序的結(jié)構(gòu)認(rèn)識(shí) 用一個(gè)簡(jiǎn)單的c程序例子口柳,介紹c語言的基本構(gòu)成苹粟、格式、以及良好的書寫風(fēng)格跃闹,使讀者對(duì)c語...
    CONLYOUC閱讀 8,704評(píng)論 9 66
  • 這兩天有點(diǎn)空,不太踏實(shí)苛秕,明天要調(diào)整一下
    聶一一閱讀 147評(píng)論 0 0
  • 南極料理人肌访,列入我最喜歡的電影之一。有機(jī)會(huì)可以再看一次艇劫。 理由是吼驶,覺得完美演繹詮釋了一個(gè)留美博士生的生活〉晟罚看完你就...
    ritaxqzhang閱讀 196評(píng)論 0 0
  • 按時(shí)下班總覺得有事情沒做完心慌慌蟹演,只有夜幕下的獨(dú)行才算得上結(jié)束一天,饑腸轆轆顷蟀,內(nèi)心靜定酒请。夜色茫茫才覺察出仲秋意。一...
    夏z遠(yuǎn)閱讀 107評(píng)論 0 0