C語言的基本語法詳解
1、標(biāo)識(shí)符與關(guān)鍵字
給變量所取的名字叫變量名,定義變量的名字需要遵循標(biāo)識(shí)符的命名規(guī)則。
標(biāo)識(shí)符是用來標(biāo)識(shí)變量、符號(hào)常量、數(shù)組、函數(shù)、文件等名字的有效字符序列。
標(biāo)識(shí)符的命名規(guī)則:
1.只能由字母、數(shù)字和下劃線組成(例如:Score1,Stu_name)
2.第一個(gè)字符必須為字母或下劃線
3.區(qū)分大小寫字母
4.C語言內(nèi)部規(guī)定的標(biāo)識(shí)符(即關(guān)鍵字)不能作為用戶標(biāo)識(shí)
C語言的關(guān)鍵字:
C語言的關(guān)鍵字,是保留的一些特殊作用的詞語,一共32個(gè)關(guān)鍵字
| 關(guān)鍵字 | 說明 |
|---|---|
| auto | 聲明自動(dòng)變量 |
| break | 跳出當(dāng)前循環(huán) |
| case | 開關(guān)語句分支 |
| char | 聲明字符型變量或函數(shù)返回值類型 |
| const | 定義常量,如果一個(gè)變量被 const 修飾,那么它的值就不能再被改變 |
| continue | 結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán) |
| default | 開關(guān)語句中的"其它"分支 |
| do | 循環(huán)語句的循環(huán)體 |
| double | 聲明雙精度浮點(diǎn)型變量或函數(shù)返回值類型 |
| enum | 聲明枚舉類型 |
| extern | 聲明變量或函數(shù)是在其它文件或本文件的其他位置定義 |
| float | 聲明浮點(diǎn)型變量或函數(shù)返回值類型 |
| for | 一種循環(huán)語句 |
| goto | 無條件跳轉(zhuǎn)語句 |
| if | 條件語句 |
| int | 聲明整型變量或函數(shù) |
| long | 聲明長整型變量或函數(shù)返回值類型 |
| register | 聲明寄存器變量 |
| return | 子程序返回語句(可以帶參數(shù),也可不帶參數(shù)) |
| unsigned | 聲明無符號(hào)類型變量或函數(shù) |
| union | 聲明共用體類型 |
| void | 聲明函數(shù)無返回值或無參數(shù),聲明無類型指針 |
| volatile | 說明變量在程序執(zhí)行中可被隱含地改變 |
| while | 循環(huán)語句的循環(huán)條件 |
C99新建關(guān)鍵字:
_Bool 、_Complex 、_Imaginary 、inline 、restrict
C11新建關(guān)鍵字:
_Alignas 、_Alignof 、_Atomic 、_Generic 、_Noreturn、_Static_assert 、_Thread_local
2、常量和符號(hào)常量
常量:在程序運(yùn)行過程中,其值不會(huì)發(fā)送變化的量。
變量:在程序運(yùn)行過程中,其值可以發(fā)送變化的量
(1)常量和常量符號(hào)
C語言提供的常量類型有整型常量、實(shí)型常量、字符常量、字符串常量和符號(hào)常量。
用一個(gè)標(biāo)識(shí)符來代表一個(gè)常量,該標(biāo)識(shí)符叫做符號(hào)常量,其一般形式為:
#define 標(biāo)識(shí)符 常量
例如:
#define PI 3.1415926
關(guān)于typede和defin的用法與區(qū)別:
1.#defien是預(yù)處理指令,在編譯預(yù)處理時(shí)進(jìn)行簡單替換,不作正確性檢查,不管含義是否正確照樣帶入,只要在編譯器已被展開的源程序時(shí)才會(huì)發(fā)現(xiàn)可能的錯(cuò)誤并報(bào)錯(cuò)。
例如:#define PI 3.1415926
程序:area = PIrr替換3.1415926r
2.rtypedef是在編譯時(shí)處理的,通常是用于對(duì)已有數(shù)據(jù)類型取別名,而#define只是簡單地替換。
例如:typedef unsigned int uint;
這樣就為unsigned int型引入新助記符uint,以后使用uint直接代表unsigned int型。
例如:typedef PI 3.1515926;
編譯器會(huì)直接報(bào)錯(cuò),原因PI并非已存在類型,其次“3.1515926”不符合命名規(guī)則。
(2)變量
1.變量在內(nèi)存中占用一定的儲(chǔ)存單元,在該儲(chǔ)存單元中存放變量值。
2.程序中用到的所有變量都必須有一個(gè)變量名
3.變量名和變量值是兩個(gè)不同的概念

4.不同類型的變量在內(nèi)存中占據(jù)儲(chǔ)存單元的數(shù)量及儲(chǔ)存的格式不相同,例如:char ch = ‘1';int i = 1;

5.變量必須“先定義后使用”,這樣做的目的是:
1、便于編譯程序程序檢測對(duì)該變量的運(yùn)算是否合法。例如:整型變量可以進(jìn)行求模(余數(shù))運(yùn)算,實(shí)型變量不可以進(jìn)行求模運(yùn)算。
2、程序中變量名的正確使用
3、C語言數(shù)據(jù)類型

(1)整型常量
整型常量就是整數(shù),有3種表示形式
1.十進(jìn)制整常數(shù):就是通常整數(shù)的寫法,數(shù)碼取值為0-9。例如:25、-623、0等
2.八進(jìn)制整數(shù):以0為前綴,數(shù)碼取值0-7,
例如:
020(十六進(jìn)制16)
016(十六進(jìn)制14)
0177777(十六進(jìn)制65535)
-010(十進(jìn)制數(shù)-8)
幾種不合法的八進(jìn)制數(shù):
256(無前綴0)
079(包含了非八進(jìn)制數(shù)碼9)
3.十六進(jìn)制整型常數(shù):以數(shù)字和字母0x開頭,即0x作為前綴,數(shù)碼的取值為0-9和A-F(或字母a-f)
幾種合法的十六進(jìn)制數(shù):
0x2A(十進(jìn)制數(shù)42)
0x1AB0(十進(jìn)制數(shù)6832)
幾個(gè)不合法 的十六進(jìn)制數(shù):
5A(無前綴)、0x2H(包含了非十六進(jìn)制數(shù)碼H)
整型變量
整型變量分為:基本整型、長整型、短整型、無符號(hào)型

整型變量的定義及初始化:
定義變量及初始化的一般形式 為:
類型說明符 變量名1 = 值1
例如:
int a,b,c; //定義a,b,c為整型變量 long x = 10; //定義x為長整型變量,并附初值10 unsigned int p=2,q=5,m; //定義p,q,m為無符號(hào)整型變量。p賦初值為2,q賦初值為5
整型變量需要注意:
1、允許在一個(gè)類型說明符后,定義多個(gè)相同類型變量,類型說明符與變量名之間至少用一個(gè)空格間隔,各變量名之間用逗號(hào)間隔
2、最后一個(gè)變量名后面用“;”號(hào)結(jié)尾
3、變量定義必須放在變量使用之前,一般放在函數(shù)體開頭
4、沒有給變量賦初值,并不意味著該變量中沒有數(shù)值,只表面給變量中沒有確定的值,因此直接使用這種變量的話可能產(chǎn)生莫名其妙的結(jié)果,有可能導(dǎo)致運(yùn)算錯(cuò)誤
例程:
#include <stdio.h>
void main(void)
{
int a = 3, b = 5, c, d;
c = a+b;
d = a-b;
printf("a+b=%d,a-b=%d\n",c,d);
}
原碼、反碼和補(bǔ)碼
計(jì)算機(jī)中數(shù)分為有符號(hào)和無符號(hào)。他們是以二進(jìn)制形式表示的,有三種表示方法,即原碼和補(bǔ)碼。
三種表示方式由符號(hào)位和數(shù)值位兩部分構(gòu)成
符號(hào)位在最高位,用0表示“正”,1表示“負(fù)”。
取余位為數(shù)值位


原碼:按照二進(jìn)制的方法來表示數(shù)的絕對(duì)值,用這個(gè)方法得到的就是數(shù)的原碼。
反碼:正數(shù)的反碼與其原碼相同,負(fù)數(shù)的反碼為其原碼除符號(hào)位以外的各位 按為取反。
補(bǔ)碼:正數(shù)的補(bǔ)碼與其原碼相同,負(fù)數(shù)的補(bǔ)碼是將其原碼除符號(hào)位之外的各位求反之后,在末位再加1
正數(shù)的原碼、反碼。補(bǔ)碼相同;負(fù)數(shù)的原碼、反碼、補(bǔ)碼不同。數(shù)值在計(jì)算機(jī)中以補(bǔ)碼形式存放。
例如:求-127的補(bǔ)碼

(2)實(shí)型數(shù)據(jù)
實(shí)型數(shù)據(jù)又稱為實(shí)數(shù)或浮點(diǎn)數(shù),指是帶有小數(shù)部分的非整數(shù)數(shù)值。
實(shí)型常量
在C語言中,實(shí)數(shù)常量只能用十進(jìn)制數(shù)表示,有兩種表示方法:
1.小數(shù)形式:由數(shù)字0~9和小數(shù)點(diǎn)組成,當(dāng)小數(shù)部分為零時(shí),小數(shù)點(diǎn)不能省略。例如:0.0/24.4、-56.33等均為合法的實(shí)型常量
2.指數(shù)形式:由十進(jìn)制數(shù)、加階碼標(biāo)志小寫字母“e”(或大寫字母“E”)和階碼(必須是整數(shù))組成。
例如:2.3E5(相當(dāng)于2.3 x 10^5)
以下是不合法的實(shí)型常量:
123(無小數(shù)點(diǎn))
E4(階碼“E”之前無數(shù)字)
23.-E3(負(fù)號(hào)的位置不對(duì))
2.7E(無階碼)
實(shí)型變量


實(shí)型變量的定義以及初始化
例如:
float a,b,c; //定義a,b,c為單精度實(shí)型變量 double m=3.5,n=5.6; //定義m,n為雙精度實(shí)型變量,并分別賦值3.5和5.6
(3)字符型數(shù)據(jù)
字符常量是用一對(duì)單引號(hào)括起來的一個(gè)字符
例
如:‘b'、‘z'、‘='、‘?'、‘5'
字符常量特點(diǎn):
1.字符常量只能是單個(gè)字符,不能是多個(gè)字符
2.字符常量是以ASCII碼形式儲(chǔ)存,一個(gè)字符常量占用一個(gè)字節(jié)空間。
ASCII碼
ASCII碼表示American Standrd Code for Information Interchange。ASCII編碼能表示數(shù)據(jù)范圍是00000000~11111111共2^8即256個(gè)數(shù)據(jù)
標(biāo)準(zhǔn)的ASCII碼有128個(gè)字符,其中:
1.0-31為控制字符,例如,回車換行、文件結(jié)束標(biāo)志、字符串結(jié)束標(biāo)志
2.10個(gè)阿拉伯‘0'~‘9'的碼值是連續(xù)的
3.26個(gè)大寫字母‘A'-‘Z'是連續(xù)的,26和大小寫字母‘a(chǎn)'-‘z'是連續(xù)的
4.字符常量也可以參與各種運(yùn)算,如:‘B'-‘A'值為1(字符‘B'的ASCII碼值減去66字符‘A'的ASCII碼值65結(jié)果為1)
字符型變量
1.字符型變量在內(nèi)存中占用1個(gè)字節(jié),只能存放一個(gè)字符,并以該字符的ASCII碼的值的形式存放
2.在C語言中,一個(gè)字符型數(shù)據(jù)可以按照它的ASCII碼進(jìn)行數(shù)據(jù)運(yùn)算
字符型數(shù)據(jù)儲(chǔ)存空間和值范圍
| 類型 | 字節(jié)數(shù) | 取值范圍 |
|---|---|---|
| char | 1 | -128~127 |
| unsigned char | 1 | 0~255 |
例程:給字符變量賦整數(shù)值
#include <stdio.h>
int main()
{
char ch1=65,ch2=66;
printf("%c,%c\n",ch1,ch2);
printf("%d,%d\n",ch1,ch2);
}
轉(zhuǎn)義字符字符
轉(zhuǎn)義字符:是由一個(gè)反斜杠“"后跟規(guī)定,具有特定含義的字符
常用轉(zhuǎn)義字符如下表

轉(zhuǎn)義字符使用如下:
#include <stdio.h>
int main()
{
printf("\"china\"\n");
printf("My \tCountry.\n");
printf("I am hap\160\x79.\n");
}
字符串常量
字符串常量是簡稱字符串,是用一對(duì)雙撇號(hào)(西方雙引號(hào)英文)括起來的一串字符,包含字符的個(gè)數(shù)和字符長度
例如:“Hello World”。“a”,“C語言”都是字符串常量。
字符串常量和字符常量區(qū)別:
1.字符常量是右邊單引號(hào)括起來的字符,而字符串常量是由雙引號(hào)括起來的字符。盡管‘a(chǎn)'與“a”都包含一個(gè)字符,但在C程序中,它們都具有不同的含義
2.字符常量只能是一個(gè)字符,字符串常量可以是多個(gè)字符
3.可以把一個(gè)字符串常量賦值一個(gè)字符變量,但不能把一個(gè)字符常量賦值一個(gè)字符變量。
字符串變量
在C語言中沒有專門的字符串類型,我們只能使用數(shù)組或者指針來間接地存儲(chǔ)字符串。
char str1[] = "Hello World!" char *str2 = "你好世界!"
str1 和 str2 是字符串的名字,后邊的[]和前邊的*是固定的寫法。初學(xué)者暫時(shí)可以認(rèn)為這兩種存儲(chǔ)方式是等價(jià)的,它們都可以通過專用的 puts 函數(shù)和通用的 printf 函數(shù)輸出。
#include <stdio.h>
int main()
{
char web_url[] = "hHello World!";
char *web_name = "你好世界";
puts(web_url);
puts(web_name);
printf("%s\n%s\n", web_url, web_name);
return 0;
}
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
一起來學(xué)習(xí)C++的函數(shù)指針和函數(shù)對(duì)象
這篇文章主要為大家詳細(xì)介紹了C++函數(shù)指針和函數(shù)對(duì)象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
C語言編程中分配內(nèi)存空間的相關(guān)函數(shù)
這篇文章主要介紹了C語言編程中分配內(nèi)存空間的相關(guān)函數(shù),分別是malloc()函數(shù)和calloc()函數(shù),需要的朋友可以參考下2015-08-08
C語言編程數(shù)據(jù)結(jié)構(gòu)帶頭雙向循環(huán)鏈表全面詳解
這篇文章主要為大家介紹了C語言編程的數(shù)據(jù)結(jié)構(gòu)中帶頭雙向循環(huán)鏈表全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步,早日升職加薪2021-10-10
c++調(diào)用實(shí)現(xiàn)yolov5轉(zhuǎn)onnx介紹
大家好,本篇文章主要講的是c++調(diào)用實(shí)現(xiàn)yolov5轉(zhuǎn)onnx介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
C++解決輸出鏈表中倒數(shù)k個(gè)結(jié)點(diǎn)的問題
這篇文章主要給大家介紹了關(guān)于如何利用C++解決輸出鏈表中倒數(shù)k個(gè)結(jié)點(diǎn)的問題,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-12-12
基于Matlab實(shí)現(xiàn)有雪花飄落的圣誕樹的繪制
圣誕節(jié)快到了(雖然還有十天),一起來用MATLAB畫個(gè)簡單圣誕樹叭~代碼幾乎取消了全部的循環(huán),因此至少需要17b之后的版本,僅存的循環(huán)用來讓樹旋轉(zhuǎn)起來,讓雪花飄落起來,讓樹頂上的星光搖曳起來~感興趣的可以試一試2022-12-12
C++踩坑實(shí)戰(zhàn)之構(gòu)造和析構(gòu)函數(shù)
不論是構(gòu)造函數(shù),還是析構(gòu)函數(shù),都是C++、C#語言相對(duì)于其他語言而言特殊的地方,它是為了方便類中對(duì)象的初始化,這篇文章主要給大家介紹了關(guān)于C++踩坑實(shí)戰(zhàn)之構(gòu)造和析構(gòu)函數(shù)的相關(guān)資料,需要的朋友可以參考下2021-07-07
C語言數(shù)據(jù)結(jié)構(gòu)之堆排序源代碼
這篇文章主要為大家詳細(xì)介紹了C語言數(shù)據(jù)結(jié)構(gòu)之堆排序源代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

