1. 程式人生 > >C語言入門(三)之運算子、sizeof運算子、if表示式

C語言入門(三)之運算子、sizeof運算子、if表示式

型別轉換、型別提升

#include <stdio.h>
void test();
int main(int argc, const char * argv[]) {
    // 1.型別轉換
    /*
    // int 佔用4個位元組 double 佔用8個位元組
    // 只是相同型別的資料才能進行運算, 隱式型別轉換 將小型別轉換為大型別, 然後再進行運算
    // 在賦值的時候系統又給我們進行了一次隱式型別轉換
    // 發現, 如果在隱式型別轉換的時候, 將大型別轉換為小型別會丟失精度
    int result = 10.9;
    printf("result = %d\n", result);
    
    // 強制型別轉換格式: (型別)被強制型別轉換的資料
    int result2 = (int)10.9;
    printf("result2 = %i", result2);
    
    // 自動型別提升
    // 自動型別的提升, 將參與運算的資料都轉換為同一型別後再運算
    // 會自動將小的資料型別提升為大的資料型別
    int result3 = 1 + 9.9; // 1.0 + 9.9 = 10.9
     */
    
    /*
    // 在算術運算中, 參與運算的是什麼型別, 計算出來就是什麼型別
//    double result = 1.0 / 2; // 1.0 / 2.0 --> 0.5
//    double result = (double)1 / 2;// 1.0 / 2.0 --> 0.5
    double result = (double)(1 / 2); // (double)(0) --> 0.0
    printf("result = %lf\n", result);
     */
    
    // 2.算術運算子的結合性, 左結合, 從左至右的計算
    // 3.算術運算子的優先順序 * / % 大於 + -
    // 如果優先順序和結合同時存在, 那麼先優先順序再結核性
//    int result = 3 + 4 * 5 + 6;
//    printf("result = %i\n", result);
    
    //test();
    return 0;
}

void test()
{
    /*
     + 加法
     - 減法
     * 乘法
     / 除法
     % 取模(取餘)
     */
    // 1.定義變數儲存計算結果
    int result;
    // 2.開始計算
    result = 1 + 1;
    result = 1 - 1;
    result = 2 * 2;
    result = 6 / 3;
    // 注意: 取模運算只能用於整數
//    result = 10 % 3;
//    result = 12 % 5;
//    result = 10.0 % 3.0;
    // 取模運算的正負性取決於左邊的運算元, 如果左邊為負數, 那麼結果就是負數
//    result = 10 % -3;
//    result = -10 % -3;
//    result = -10 % 3;
    
    // 如果取模運算的左邊小於右邊, 那麼結果就是左邊
    result = 2 % 9;
    
    // 3.驗證計算結果
    printf("result = %i\n", result);
}

賦值運算子

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    // 1.最簡單的賦值運算子
    // 賦值運算子的結合性: 從右至左
//    int result = 10;
    
    // 2.複合賦值運算子: += -= *= /= %=
    int result = 10;
//    result = result + 5;// result = 10 + 5; result = 15
//    result += 5; // 相當於 result = result + 5;
    result -= 5; // 相當於result = result - 5;
    printf("result = %i\n", result);
    return 0;
}

自增自減

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    // 1.自增自減基本概念
    /*
    int result = 10;
//    result = result + 5;
//    result += 5;
    
//    result = result + 1;
//    result += 1;
    // 自增: 如果想讓某一個數加1可以使用自增
//    result++;
//    result++;
//    result = result - 1;
//    result -= 1;
    // 自減: 如果想讓某一個數減1可以使用自減
//    result--;
     */
    
    // 2.自增的兩種寫法
    /*
//    result++;
//    ++result;
    // 自減的兩種寫法
    result--;
    --result;
     printf("result = %i\n", result);
    */
    
    // 3.自增自減寫在前面和後面的區別
    /*
    // 如果++寫在變數的前面, 那麼會先將變數自增再用自增之後的結果參與運算
    // 如果++寫在變數的後面, 那麼會先將變數的值參與運算再將變數自增
    // 總結一句話: ++在前, 先自增再運算, ++在後, 先運算再自增
    int a = 10;
//    int b = a++;// b = 10, a = 11
//    int b = ++a;// a = 11,  b = 11;
//    int b = a--;// b = 10, a = 9;
    int b = --a; // a = 9, b = 9;
    printf("a = %i , b = %i\n", a, b);
     */
    
    /*
    // 無論++在前還是在後, 最終都會自增一次
    int a = 10;
    //       10   +  12
//    int b = (a++) + (++a);
    // a = 12
    // b = 22
    
    //        10  +   11
//    int b = (a++) + (a++);
    // a = 12
    // b = 21
//           11   +   12
    int b = (++a) + (++a);
    // a = 12
    // b = 23
    printf("a = %i, b = %i\n", a, b);
     */
    
    /*
//    5++;
    double doubleValue = 10.9;
    doubleValue++;
    printf("%f", doubleValue);
     */
    
    int a = 10;
//    int b = a++;
    // b = a; a = a + 1;
    
    int b = ++a;
    // a = a + 1; b = a;
    printf("a = %i, b = %i\n", a, b); // a = 11, b = 11
    
    return 0;
}

sizeof運算子

sizeof不是函式,是運算子,用來計算變數、常量、資料型別所佔的記憶體位元組數。

#include <stdio.h>

int main(int argc, const char * argv[]) {
    // sizeof可以用來計算一個變數或一個常量、一種資料型別所佔的記憶體位元組數
    // 注意: sizeof是一個運算子, 不是一個函式
    // 利用sizeof計算的格式: sizeof(變數/常量/資料型別);
    
    // 1.計算常量佔用的記憶體位元組數
    /*
//    int number = sizeof(10);// 10是一個整型常量, 整型 == int == 4
    // 如果利用sizeof計算常量, 那麼可以省略()
    int number = sizeof 10;
    printf("number = %i\n", number);
     */
    
    // 2.計算變數
    /*
    double doubleValue = 10.9;// doubleValue是實型 , 實型 ==  double == 8
//    int number = sizeof(doubleValue);
     // 如果利用sizeof計算變數, 那麼可以省略()
    int number = sizeof doubleValue;
    printf("number = %i\n", number);
     */
    
    // 3.計算資料型別
    
    int number = sizeof(char);
    // 注意: 如果利用sizeof計算資料型別, ()不能省略
//    int number = sizeof char;
    printf("number = %i\n", number);
    

    return 0;
}

逗號運算子

關係運算符

0代表假,其他都為真

     >
     <
     >=
     <=
     ==
     !=

邏輯運算子

&&(短路與,一假則假,前面的表示式為假,真個表示式為假,不需要計算後面的表示式)

||(短路或,一真則真,前面的表示式為真,後面的表示式不需要計算,整個表示式為真)

三目運算子

if表示式

// C語言中, 任何數值都有真假性, 非0即真
    if (0) {
        printf("來這二\n");
    }else
    {
        printf("不去\n");
    }

上面程式碼始終輸出不去

如果要判斷某一個變數是否等於某一個值, 建議把常量寫前面, 變數寫後面

if (18 = age) {
        printf("開網絡卡\n");
    }

石頭剪刀布

#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char * argv[]) {
    /*
     有兩個角色 : 玩家(我), 電腦
     兩個角色都可以出 0 == 石頭/ 1 == 剪子 / 2 == 布
     由於我們不知道玩家和電腦到底出的什麼拳, 所以我們用0, 1, 2來代替石頭/ 剪子 / 布
     玩家的出拳可以讓使用者自己輸入
     電腦的出拳必須生產一個隨機數, 如何生產隨機數?
     將玩家的出拳和電腦的出拳進行比較, 得到比賽結果
     
     石頭 > 剪刀 / 剪刀 > 布 / 布 > 石頭
     */
    // 1.生產電腦的出拳
    // arc4random_uniform方法會根據傳入的整數生產一個隨機數
    // 生成的值就是 0~(N-1)的值
    int cmp =  arc4random_uniform(3);
//    printf("cmp = %i\n", cmp);
    // 2.接收玩家的出拳
    // 2.1定義變數儲存玩家的出拳
    int player = -1;
    // 2.2利用scanf接收
    printf("請輸入出拳, 0代表石頭, 1代表剪刀, 2代表布\n");
    scanf("%i", &player);
    // 3.比較玩家和電腦的出拳
    if (((0 == player)&&(1 == cmp)) ||
        ((1 == player) && (2 == cmp)) ||
        ((2 == player) && (0 == cmp))) {
            printf("玩家獲勝\n");
    }else if (((0 == cmp)&&(1 == player)) ||
              ((1 == cmp) && (2 == player)) ||
              ((2 == cmp) && (0 == player)))
        {
            printf("電腦獲勝\n");
        }else
        {
            printf("以和為貴\n");
        }
    printf("player = %i, cmp = %i\n", player, cmp);
    return 0;
}