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

以前我沒得選,現(xiàn)在我可以選擇了,我選擇做個(gè)好人?!稛o間道》

布爾類型

布爾類型本質(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)先級,先算哪個(gè)表達(dá)式,再算哪個(gè)表達(dá)式一定要搞清楚,否則程序很容易出錯。

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

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

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

邏輯運(yùn)算符

邏輯運(yùn)算符是用來判斷兩個(gè)表達(dá)式之間的邏輯關(guān)系的,有與(&&)、或(||)、非(?。?/strong>三種。

邏輯表達(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)榧?;原來為假,進(jìn)行邏輯非運(yùn)算后變成真。對真假進(jìn)行取反操作。

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

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

掌握運(yùn)算符的優(yōu)先級可以準(zhǔn)確的寫出自己需要的語句。
運(yùn)算符的優(yōu)先級: ! > 算數(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)的一種變形,可以用來處理一些簡單的分支判斷。語法如下

條件表達(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。這是一種簡略的寫法,在OC中經(jīng)常使用。

switch語句

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

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

多分支語句
作用:提供多個(gè)分支,功能類似if-else級聯(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語句,否則,程序會執(zhí)行后邊的case語句,直到遇到一個(gè)break或者執(zhí)行完整個(gè)case才能跳出switch語句,繼續(xù)向后執(zhí)行。

枚舉

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

  1. 枚舉屬于構(gòu)造類型
  2. 一組 具有名稱的 整型常量。
  3. 目的:提高代碼可讀性。 標(biāo)示符:人類可以識別 數(shù)字:計(jì)算機(jī)可以識別
  4. 語法:
            enum  枚舉變量名 {
     
                標(biāo)識符1, // 默認(rèn)從0開始,也可以自定義。標(biāo)識符對應(yīng)的數(shù)值遞增,增量為1
                標(biāo)識符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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容