在上一節(jié)中,對(duì)于C語(yǔ)言有了一個(gè)初步的了解,學(xué)會(huì)了如何使用IDE來(lái)進(jìn)行
代碼編寫,編譯和運(yùn)行。而這一節(jié),我們會(huì)對(duì)C語(yǔ)言的基本語(yǔ)法進(jìn)行學(xué)習(xí),
C語(yǔ)言是一門編程語(yǔ)言,可以和英語(yǔ)進(jìn)行類比,英語(yǔ)句子 = 單詞 + 語(yǔ)法,
同樣C語(yǔ)言的代碼語(yǔ)句,也有著自己的一套規(guī)則。
本節(jié)學(xué)習(xí)路線圖
1.基本字符集
1.1 標(biāo)識(shí)符
何為標(biāo)識(shí)符?
在C語(yǔ)言中,符號(hào)常量,變量,數(shù)組,函數(shù)等都需要一定的名稱,我們把這種名稱成為標(biāo)識(shí)符
標(biāo)識(shí)符劃分?
關(guān)鍵字,預(yù)定義標(biāo)識(shí)符和用戶標(biāo)識(shí)符!
標(biāo)識(shí)符的命名規(guī)則?
只能夠由字母,數(shù)字,下劃線,或者美元符號(hào)($)組成,且不能以數(shù)字開(kāi)頭;
C語(yǔ)言區(qū)分大小寫,通常變量名和函數(shù)名都用小寫字母表示;
雖然沒(méi)有規(guī)定名稱的長(zhǎng)度,但還是別寫太長(zhǎng),最好是見(jiàn)名知義,比如int max一看就知道
是用來(lái)存放最大值的!還有,不能和下面的32個(gè)C語(yǔ)言的關(guān)鍵字重名哦!以及C語(yǔ)言
中系統(tǒng)先定義的標(biāo)識(shí)符,如系統(tǒng)類庫(kù),系統(tǒng)常量名系統(tǒng)函數(shù)名,
小編推薦一個(gè)學(xué)C/C++的學(xué)習(xí)裙【六二七,零一二,四六四】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有很多干貨和技術(shù)分享
如(格式輸出函數(shù):printf());重名!
1.2 關(guān)鍵字「保留字」
何為關(guān)鍵字?
C語(yǔ)言中具有特殊含義的英文單詞,通常用于構(gòu)成語(yǔ)句,存儲(chǔ)數(shù)據(jù),定義數(shù)據(jù)類型等
C語(yǔ)言里的32個(gè)關(guān)鍵字參照?qǐng)D,不用記,用到的時(shí)候再去了解!
1.3 分隔符
空白符:在程序中加入適當(dāng)?shù)目瞻卓s進(jìn)代碼,會(huì)使得程序更加清晰易讀。
普通分隔符
分號(hào)「;」:語(yǔ)句結(jié)尾
大括號(hào)「{ }」:函數(shù)體,復(fù)合語(yǔ)句以及數(shù)組的初始化等;
圓括號(hào)「()」:函數(shù)定義時(shí)用來(lái)括住參數(shù),或者用來(lái)修改運(yùn)算順序,
比如:(a + 1)2 和 a + (1 2)
方括號(hào)「[]」定義數(shù)組類型和應(yīng)用元素,比如: int a10; b = a3;
點(diǎn)號(hào)「.」:結(jié)構(gòu)體仲引用成員
逗號(hào)「,:參數(shù)分隔,比如:int a,b,c;
注釋符:// 單行注釋, /**/多行注釋
2.數(shù)據(jù)類型
2.1 基本數(shù)據(jù)類型
注意:這里沒(méi)有給出數(shù)據(jù)類型的取值范圍與精度域?qū)挼龋詾樵诓煌挠?jì)算機(jī)
字長(zhǎng)與系統(tǒng)環(huán)境下占用的內(nèi)存空間是不一樣的,可以通過(guò)sizeof獲得對(duì)應(yīng)數(shù)據(jù)類
型在該系統(tǒng)環(huán)境下所占的字節(jié),從而算出對(duì)應(yīng)數(shù)據(jù)類型的取值范圍!
整型:用于準(zhǔn)確地表示整數(shù),根據(jù)表示范圍的不同分為以下三種:
短整型(short)
實(shí)型(浮點(diǎn)型):用于標(biāo)識(shí)實(shí)數(shù)(小數(shù))根據(jù)范圍和精度不同分為以下兩種:
單精度浮點(diǎn)數(shù)(float)
注意:float只能夠保證7位數(shù)字是有效的!!!
字符型: 用來(lái)描述單個(gè)字符,char
除了上面三種以外,還可以使用longshortsignedunsigned來(lái)修飾不同的數(shù)據(jù)類型:
(char只能用后面兩個(gè)),有符號(hào)與無(wú)符號(hào)的區(qū)別是:最高位是否為符號(hào)位,
即最高位是否用于表示數(shù)的整負(fù);我們可以添加unsigned來(lái)保證此數(shù)據(jù)為正數(shù),
同時(shí)對(duì)應(yīng)的數(shù)據(jù)范圍由0到原來(lái)的最大值 * 2
2.2 其他數(shù)據(jù)類型
數(shù)組,指針,結(jié)構(gòu)體,共用體,枚舉,指針類型,文件類型,空類型(void),后面會(huì)學(xué),這里不講。
3.常量與變量
3.1 常量
整型常量
除上述三種外,還可以在常量后面添加后綴:L或者U,比如:
108L表示長(zhǎng)整型的常量,與108雖然數(shù)值相等,但分配的內(nèi)存空間大小是不一樣的;
0xA3U:表示無(wú)符號(hào)位的十六進(jìn)制數(shù)0xA3
實(shí)型常量
Tips:所謂的規(guī)范化的指數(shù)形式就是:小數(shù)點(diǎn)左邊有一位非零的數(shù)字(只有一位)
比如:2.4E3 是對(duì)的,而0.1E5 則是錯(cuò)的。
字符常量
附上C里的轉(zhuǎn)義字符:
轉(zhuǎn)義字符作用轉(zhuǎn)義字符作用轉(zhuǎn)義字符作用轉(zhuǎn)義字符作用
\n回車換行\(zhòng)t水平制表\v垂直制表\b退格
\r回車不換行\(zhòng)f走紙換頁(yè)\0控制符\\右斜線
\'單引號(hào)\"雙引號(hào)\a響鈴
字符串常量
用一對(duì)雙引號(hào)括起來(lái)的或者多個(gè)字符構(gòu)成的字符串序列,如:
“”,”apple”,”+-*/@#$%”
系統(tǒng)會(huì)在存儲(chǔ)字符串的時(shí)候自動(dòng)加上:‘\0’,字符串結(jié)束的標(biāo)志
如:”a”這個(gè)字符串占兩個(gè)字節(jié),因?yàn)榇鎯?chǔ)的時(shí)候其實(shí)是:”a\0”
符號(hào)常量
又叫宏常量,是一個(gè)預(yù)處理命令:#define 常量名 常量值
定義后,程序所有出現(xiàn)這個(gè)標(biāo)識(shí)的地方都可以用這個(gè)常量來(lái)代替:
如: #define PI 3.1415926 s = r * r * PI,這里的PI就是3.1415926
3.2 變量
什么是變量?
答:程序運(yùn)行過(guò)程中,他的值可以改變的數(shù)據(jù),代表著一個(gè)存儲(chǔ)空間,需要用變量名
來(lái)找到這個(gè)數(shù)據(jù)就像:你去超市,放東西到儲(chǔ)物柜的一格,他會(huì)給你一張紙條,你根據(jù)
這個(gè)紙條才可以拿回自己的東西儲(chǔ)物柜的一格就是變量的內(nèi)存空間,字條就是變量名,
你拿和放就是修改變量名對(duì)應(yīng)內(nèi)存中的數(shù)據(jù)。
變量的使用:
一個(gè)簡(jiǎn)單的 int a = 123;其實(shí)暗地里執(zhí)行了以下操作
int a:在內(nèi)存中開(kāi)辟了四個(gè)字節(jié)的內(nèi)存空間,并且為這個(gè)空間起了個(gè)名字,叫做a;
后面的=123,這一步完成的是變量的初始化,就是通過(guò)a這個(gè)變量名,往4個(gè)字節(jié)的
內(nèi)存中放入123這個(gè)數(shù)據(jù)
Tips:
一個(gè)好的建議是,當(dāng)我們定義一個(gè)變量時(shí),對(duì)其進(jìn)行初始化,可以有效的
避免空指針問(wèn)題的出現(xiàn);
你可以通過(guò)&a獲得存放123這個(gè)數(shù)據(jù)的內(nèi)存地址的值!
4.運(yùn)算符與表達(dá)式
4.1 算術(shù)運(yùn)算符
經(jīng)典例子:倒序輸出五位數(shù)
#include
int main() {
int a,i;
printf("請(qǐng)輸入需要倒序輸出的五位數(shù)\n");
scanf("%d",&a);
printf("輸出倒序后的五位數(shù):\n");
for(i = 0;i
{
printf("%d",a%10);
a /= 10;
}
printf("\n");
return 0;
}
4.2 關(guān)系運(yùn)算符
經(jīng)典例子:
#include
int main()
{
int a = 1,b = 2,c = 3;
int x,y;
x = a + b == c; //結(jié)果為1為真
y = 11 >b != a; //11 >b 結(jié)果為真,即為1, 1 != 1,假
printf("x = %d,y = %d\n",x,y);
return 0;
}
4.3 邏輯運(yùn)算符
經(jīng)典例子:判斷某一年是否為閏年
#include
int main()
{
int year;
printf("請(qǐng)輸入需要判斷的年份:\n");
scanf("%d",&year);
if(!(year%4)&&year%100 || !(year % 400))
{
printf("%d年是閏年\n",year);
}
else
printf("%d年不是閏年!\n,year");
return 0;
}
4.4 賦值運(yùn)算符
經(jīng)典例子:賦值運(yùn)算符的嵌套,一般題目會(huì)問(wèn)某個(gè)變量在某時(shí)刻的值
#include
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 條件表達(dá)式
經(jīng)典例子:用條件表達(dá)式實(shí)現(xiàn)求三個(gè)數(shù)的最大值
#include int main()
{
int a,b,c;
int max;
printf("請(qǐng)輸入三個(gè)數(shù):\n");
scanf("%d%d%d",&a,&b,&c);
a > b ? (max = a):(max = b);
max
printf("輸出最大值:%d\n",max);
return 0;
}
4.6 逗號(hào)表達(dá)式
經(jīng)典例子:逗號(hào)表達(dá)式的值
#include
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); //輸出結(jié)果:10,10,111;
printf("a = %d,b = %d,c = %d\n",a,b,c);
return 0;
}
4.7 長(zhǎng)度測(cè)試運(yùn)算符
sizeof:通常用來(lái)測(cè)試某個(gè)數(shù)據(jù)類型所占的內(nèi)存空間大小
經(jīng)典例子:測(cè)試的是int,float,char類型在本機(jī)所占的字節(jié)數(shù)
#include
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 運(yùn)算符的優(yōu)先級(jí)
口訣:括號(hào)最大 > ! > 算數(shù)運(yùn)算符 > 關(guān)系運(yùn)算符 > 邏輯與或 > ?賦值運(yùn)算符
附上C語(yǔ)言運(yùn)算符優(yōu)先級(jí)表(詳細(xì)):
C語(yǔ)言運(yùn)算符的優(yōu)先級(jí)
另外,記得口訣就好,不要去記表,用到的時(shí)候再查,查多久熟了。
5.數(shù)據(jù)類型的轉(zhuǎn)換