小豬的C語言快速入門系列(二)

coder-pig發表於2017-10-13

小豬的C語言快速入門系列(二)

標籤: C語言


本節引言

在上一節中,對於C語言有了一個初步的瞭解,學會了如何使用IDE來進行
程式碼編寫,編譯和執行。而這一節,我們會對C語言的基本語法進行學習,
C語言是一門程式語言,可以和英語進行類比,英語句子 = 單詞 + 語法,
同樣C語言的程式碼語句,也有著自己的一套規則。


本節學習路線圖


1.基本字符集


1.1 識別符號

何為識別符號

在C語言中,符號常量,變數,陣列,函式等都需要一定的名稱,我們把這種名稱成為識別符號

識別符號劃分

關鍵字,預定義識別符號和使用者識別符號!

識別符號的命名規則

只能夠由字母數字下劃線,或者美元符號($)組成,且不能以數字開頭;
C語言區分大小寫,通常變數名和函式名都用小寫字母表示;
雖然沒有規定名稱的長度,但還是別寫太長,最好是見名知義,比如int max一看就知道
是用來存放最大值的!還有,不能和下面的32個C語言的關鍵字重名哦!以及C語言
中系統先定義的識別符號,如系統類庫系統常量名系統函式名
如(格式輸出函式:printf());重名!


1.2 關鍵字「保留字」

何為關鍵字

C語言中具有特殊含義的英文單詞,通常用於構成語句,儲存資料,定義資料型別等

C語言裡的32個關鍵字參照圖,不用記,用到的時候再去了解!


1.3 分隔符

空白符:在程式中加入適當的空白縮排程式碼,會使得程式更加清晰易讀。

普通分隔符

  • 分號; 」:語句結尾
  • 大括號{ } 」:函式體,複合語句以及陣列的初始化等;
  • 圓括號() 」:函式定義時用來括住引數,或者用來修改運算順序,
    比如:(a + 1) 2 和 a + (1 2)
  • 方括號[] 」定義陣列型別和應用元素,比如: int a10; b = a3;
  • 點號. 」:結構體仲引用成員
  • 逗號, :引數分隔,比如:int a,b,c;

註釋符: // 單行註釋, /**/多行註釋


2.資料型別


2.1 基本資料型別

注意:這裡沒有給出資料型別的取值範圍與精度域寬等,以為在不同的計算機
字長與系統環境下佔用的記憶體空間是不一樣的,可以通過sizeof獲得對應資料類
型在該系統環境下所佔的位元組,從而算出對應資料型別的取值範圍!

  • 整型:用於準確地表示整數,根據表示範圍的不同分為以下三種:
    短整型(short) < 整型(int) < 長整型(long)

  • 實型(浮點型):用於標識實數(小數)根據範圍和精度不同分為以下兩種:
    單精度浮點數(float) < 雙精度浮點數(double)
    注意:float只能夠保證7位數字是有效的!!!

  • 字元型 : 用來描述單個字元,char
    除了上面三種以外,還可以使用long short signed unsigned 來修飾不同的資料型別:
    (char只能用後面兩個),有符號與無符號的區別是:最高位是否為符號位,
    即最高位是否用於表示數的整負;我們可以新增unsigned來保證此資料為正數,
    同時對應的資料範圍由0到原來的最大值 * 2


2.2 其他資料型別

陣列,指標,結構體,共用體,列舉指標型別,檔案型別,空型別(void),後面會學,這裡不講。


3.常量與變數


3.1 常量

整型常量

除上述三種外,還可以在常量後面新增字尾:L或者U,比如:
108L表示長整型的常量,與108雖然數值相等,但分配的記憶體空間大小是不一樣的;
0xA3U:表示無符號位的十六進位制數0xA3

實型常量

Tips:所謂的規範化的指數形式就是:小數點左邊有一位非零的數字(只有一位)
比如:2.4E3 是對的,而0.1E5 則是錯的。

字元常量

附上C裡的轉義字元:

轉義字元 作用 轉義字元 作用 轉義字元 作用 轉義字元 作用
\n 回車換行 \t 水平製表 \v 垂直製表 \b 退格
\r 回車不換行 \f 走紙換頁 \0 控制符 \\ 右斜線
\' 單引號 \" 雙引號 \a 響鈴

字串常量

  • 用一對雙引號括起來的或者多個字元構成的字串序列,如:
    “”,”apple”,”+-*/@#$%”
  • 系統會在儲存字串的時候自動加上‘\0’,字串結束的標誌
    如:”a”這個字串佔兩個位元組,因為儲存的時候其實是:”a\0”

符號常量

  • 又叫巨集常量,是一個預處理命令:#define 常量名 常量值
  • 定義後,程式所有出現這個標識的地方都可以用這個常量來代替:
    如: #define PI 3.1415926 s = r * r * PI,這裡的PI就是3.1415926

3.2 變數

什麼是變數?

答:程式執行過程中,他的值可以改變的資料,代表著一個儲存空間,需要用變數名
來找到這個資料就像:你去超市,放東西到儲物櫃的一格,他會給你一張紙條,你根據
這個紙條才可以拿回自己的東西儲物櫃的一格就是變數的記憶體空間,字條就是變數名,
你拿和放就是修改變數名對應記憶體中的資料。

變數的使用:

一個簡單的 int a = 123;其實暗地裡執行了以下操作

  • int a:在記憶體中開闢了四個位元組的記憶體空間,並且為這個空間起了個名字,叫做a;
  • 後面的=123,這一步完成的是變數的初始化,就是通過a這個變數名,往4個位元組的
    記憶體中放入123這個資料

Tips

  • 一個好的建議是,當我們定義一個變數時,對其進行初始化,可以有效的
    避免空指標問題的出現;
  • 你可以通過&a獲得存放123這個資料的記憶體地址的值!

4.運算子與表示式


4.1 算術運算子

經典例子:倒序輸出五位數

#include <stdio.h>
int main()
{
    int a,i;
    printf("請輸入需要倒序輸出的五位數\n");
    scanf("%d",&a);
    printf("輸出倒序後的五位數:\n");
    for(i = 0;i<5;i++)
    {
        printf("%d",a%10);
        a /= 10;
    }
    printf("\n");
    return 0;
}

4.2 關係運算子

經典例子

#include <stdio.h>
int main()
{
    int a = 1,b = 2,c = 3;
    int x,y;
    x = a + b == c;     //結果為1為真
    y = 11 >b != a;     //11 >b 結果為真,即為1, 1 != 1,假
    printf("x = %d,y = %d\n",x,y);
    return 0;
}

4.3 邏輯運算子

經典例子:判斷某一年是否為閏年

#include <stdio.h>
int main()
{
    int year;
    printf("請輸入需要判斷的年份:\n");
    scanf("%d",&year);
    if(!(year%4)&&year%100 || !(year % 400))
    {printf("%d年是閏年\n",year);}
    else printf("%d年不是閏年!\n,year");
    return 0;
}

4.4 賦值運算子

經典例子:賦值運算子的巢狀,一般題目會問某個變數在某時刻的值

#include <stdio.h>
int main()
{
    int a,b,c;
    //普通賦值:
    a = 2,b= 6,c = 26;
    a *= b = c = 3;     //a = 6,b=3,c=3;
    printf("a = %d,b = %d,c = %d\n",a,b,c);
    a += b +=c;    //a = 12,b=6,c =3
    printf("a = %d,b = %d,c = %d\n",a,b,c);
    a = b == c + 5;  //a = 0,b = 6,c = 3
    printf("a = %d,b = %d,c = %d\n",a,b,c);
    return 0;
}

4.5 條件表示式

經典例子:用條件表示式實現求三個數的最大值

#include <stdio.h>
int main()
{
    int a,b,c;
    int max;
    printf("請輸入三個數:\n");
    scanf("%d%d%d",&a,&b,&c);
    a > b ? (max = a):(max = b);
    max < c? (max = c):max;
    printf("輸出最大值:%d\n",max);
    return 0;
}

4.6 逗號表示式

經典例子:逗號表示式的值

#include <stdio.h>
int main()
{
    //int a = b = c = 5;是不合法的啊!
    int a,b,c;
    a = b = c = 1;
    c = (a = 10,b = 10,2 * a + 5,a + a * b + c);
    //輸出結果:10,10,111;
    printf("a = %d,b = %d,c = %d\n",a,b,c);
    return 0;
}

4.7 長度測試運算子

sizeof:通常用來測試某個資料型別所佔的記憶體空間大小

經典例子:測試的是int,float,char型別在本機所佔的位元組數

#include <stdio.h>    
int main()    
{    
    int a = 1;    
    float b = 1.1;    
    char c = 'c';    
    printf("%d,%d,%d\n",sizeof(a),sizeof(b),sizeof(c));    
    return 0;    
}  

4.8 運算子的優先順序

口訣括號最大 > ! > 算數運算子 > 關係運算子 > 邏輯與或 > ß賦值運算子

附上C語言運算子優先順序表(詳細):
http://blog.csdn.net/coder_pig/article/details/37650817

另外,記得口訣就好,不要去記表,用到的時候再查,查多久熟了。


5.資料型別的轉換


本文連結小豬的C語言快速入門系列(二)
作者:Coder-Pig
出處http://blog.csdn.net/coder_pig
本文基於知識共享署名-相同方式共享 4.0 國際許可協議釋出,歡迎轉載,
演繹或用於商業目的,但是必須保留本文的署名及連結。

相關文章