C語言一經出現就以其功能豐富、表達能力強、靈活方便、應用面廣等特點迅速在全世界普及和推廣。C語言不但執行效率高而且可移植性好,可以用來開發應用軟件、驅動、操作系統等。C語言也是其它眾多高級語言的鼻祖語言,所以說學習C語言是進入編程世界的必修課!今天編程學習網為大家講解c語言基礎知識入門,有需要的小伙伴可以參考一下:
二、C語言的具體結構
簡單來說,一個C程序就是由若干頭文件和函數組成。
-
#include <stdio.h>就是一條預處理命令, 它的作用是通知C語言編譯系統在對C程序進行正式編譯之前需做一些預處理工作。
-
函數就是實現代碼邏輯的一個小的單元。
三、主函數
一個C程序有且只有一個主函數,即main函數。
- C程序就是執行主函數里的代碼,也可以說這個主函數就是C語言中的唯一入口。
- 而main前面的int就是主函數的類型.
- printf()是格式輸出函數,這里就記住它的功能就是在屏幕上輸出指定的信息
- return是函數的返回值,根據函數類型的不同,返回的值也是不同的。
- \n是轉義字符中的換行符。(注意:C程序一定是從主函數開始執行的)
四、規范
- 一個說明或一個語句占一行,例如:包含頭文件、一個可執行語句結束都需要換行。
- 函數體內的語句要有明顯縮進,通常以按一下Tab鍵為一個縮進。
- 括號要成對寫,如果需要刪除的話也要成對刪除。
- 當一句可執行語句結束的時候末尾需要有分號。
- 代碼中所有符號均為英文半角符號。
五、程序解釋——注釋
注釋是寫給程序員看的,不是寫給電腦看的。
C語言注釋方法有兩種:
多行注釋: /* 注釋內容 */
單行注釋: //注釋一行
六、C的標識符
C語言規定,標識符可以是字母(A~Z,a~z)、數字(0~9)、下劃線_組成的字符串,并且第一個字符必須是字母或下劃線。在使用標識符時還有注意以下幾點:
- 標識符的長度最好不要超過8位,因為在某些版本的C中規定標識符前8位有效,當兩個標識符前8位相同時,則被認為是同一個標識符。
- 標識符是嚴格區分大小寫的。例如Imooc和imooc 是兩個不同的標識符。
- 標識符最好選擇有意義的英文單詞組成做到"見名知意",不要使用中文。
-
標識符不能是C語言的關鍵字。想了解更多C語言關鍵字的知識。
七、變量及賦值
變量就是可以變化的量,而每個變量都會有一個名字(標識符)。變量占據內存中一定的存儲單元。使用變量之前必須先定義變量,要區分變量名和變量值是兩個不同的概念。
變量定義的一般形式為:數據類型 變量名;
多個類型相同的變量:數據類型 變量名, 變量名, 變量名…;
注意:在定義中不允許連續賦值,如int a=b=c=5;是不合法的。
變量的賦值分為兩種方式:
- 先聲明再賦值
- 聲明的同時賦值
八、基本數據類型
C語言中,數據類型可分為:
- 基本數據類型
- 構造數據類型
- 指針類型
- 空類型四大類
最常用的整型, 實型與字符型(char,int,float,double):
整型數據是指不帶小數的數字(int,short int,long int, unsigned int, unsigned short int,unsigned long int):
注:
- int short int long int是根據編譯環境的不同,所取范圍不同。
- 而其中short int和long int至少是表中所寫范圍, 但是int在表中是以16位編譯環境寫的取值范圍。
- 另外 c語言int的取值范圍在于他占用的字節數 ,不同的編譯器,規定是不一樣。
- ANSI標準定義int是占2個字節,TC是按ANSI標準的,它的int是占2個字節的。但是在VC里,一個int是占4個字節的。
浮點數據是指帶小數的數字。
生活中有很多信息適合使用浮點型數據來表示,比如:人的體重(單位:公斤)、商品價格、圓周率等等。
因為精度的不同又分為3種(float,double,long double):
九、格式化輸出語句
格式化輸出語句,也可以說是占位輸出,是將各種類型的數據按照格式化后的類型及指定的位置從計算機上顯示。
其格式為:printf("輸出格式符",輸出項);
當輸出語句中包含普通字符時,可以采用以下格式:
printf("普通字符輸出格式符", 輸出項);
注意:格式符的個數要與變量、常量或者表達式的個數一一對應
十、常量
在程序執行過程中,值不發生改變的量稱為常量。
mtianyan: C語言的常量可以分為直接常量和符號常量。
直接常量也稱為字面量,是可以直接拿來使用,無需說明的量,比如:
- 整型常量:13、0、-13;
- 實型常量:13.33、-24.4;
- 字符常量:‘a’、‘M’
- 字符串常量:”I love imooc!”
在C語言中,可以用一個標識符來表示一個常量,稱之為符號常量。符號常量在使用之前必須先定義,其一般形式為
#define 標識符 常量值
#include <stdio.h>
#define POCKETMONEY 10 //定義常量及常量值
int main()
{
// POCKETMONEY = 12; //小明私自增加零花錢對嗎?
printf("小明今天又得到%d元零花錢\n", POCKETMONEY);
return 0;
}
符號常量不可以被改變。
十一、自動類型轉換
數據類型存在自動轉換的情況.
自動轉換發生在不同數據類型運算時,在編譯的時候自動完成。
char類型數據轉換為int類型數據遵循ASCII碼中的對應值.
注:
字節小的可以向字節大的自動轉換,但字節大的不能向字節小的自動轉換
char可以轉換為int,int可以轉換為double,char可以轉換為double。但是不可以反向。
十二、強制類型轉換
強制類型轉換是通過定義類型轉換運算來實現的。其一般形式為:
(數據類型) (表達式)
其作用是把表達式的運算結果強制轉換成類型說明符所表示的類型
在使用強制轉換時應注意以下問題:
- 數據類型和表達式都必須加括號, 如把(int)(x/2+y)寫成(int)x/2+y則成了把x轉換成int型之后再除2再與y相加了。
- 轉換后不會改變原數據的類型及變量值,只在本次運算中臨時性轉換。
- 強制轉換后的運算結果不遵循四舍五入原則。
十三、運算符號
C語言中運算符:
1.算術運算符
c語言基本運算符:
2.自增與自減運算符
- 自增運算符為++,其功能是使變量的值自增1
- 自減運算符為--,其功能是使變量值自減1。
它們經常使用在循環中。自增自減運算符有以下幾種形式:
3.賦值運算符
C語言中賦值運算符分為簡單賦值運算符和復合賦值運算符
簡單賦值運算符=號了,下面講一下復合賦值運算符:
復合賦值運算符就是在簡單賦值符=之前加上其它運算符構成.
注意:復合運算符中運算符和等號之間是不存在空格的。
4.關系運算符
C語言中的關系運算符:
關系表達式的值是真和假,在C程序用整數1和0表示。
注意:>=, <=, ==, !=這種符號之間不能存在空格。
5.邏輯運算符
C語言中的邏輯運算符:
6.三目運算符
C語言中的三目運算符:?:,其格式為:
表達式1 ? 表達式2 : 表達式3;
執行過程是:
先判斷表達式1的值是否為真,如果是真的話執行表達式2;如果是假的話執行表達式3。
7.運算符大比拼之優先級比較
各種運算符號的順序:
優先級別為1的優先級最高,優先級別為10的優先級別最低。
十四、分支結構
1.簡單if語句
C語言中的分支結構語句中的if條件語句。
簡單if語句的基本結構如下:
if(表達式)
{
執行代碼塊;
}
其語義是:如果表達式的值為真,則執行其后的語句,否則不執行該語句。
注意:if()后面沒有分號,直接寫{}
2.if-else語句
簡單的if-else語句的基本結構:
語義是: 如果表達式的值為真,則執行代碼塊1,否則執行代碼塊2。
3.多重if-else語句
C語言中多重if-else語句,其結構如下:
語義是:依次判斷表達式的值,當出現某個值為真時,則執行對應代碼塊,否則執行代碼塊n。
注意:當某一條件為真的時候,則不會向下執行該分支結構的其他語句。
4.嵌套if-else語句
C語言中嵌套if-else語句。嵌套if-else語句的意思,就是在if-else語句中,再寫if-else語句。其一般形式為:
十五、循環結構
1.while循環
反復不停的執行某個動作就是江湖人稱的循環 。
C語言中有三種循環結構,先看一下C語言while循環的結構
其中表達式表示循環條件,執行代碼塊為循環體。
while語句的語義是:計算表達式的值,當值為真(非0)時, 執行循環體代碼塊。
- while語句中的表達式一般是關系表達或邏輯表達式,當表達式的值為假時不執行循環體,反之則循環體一直執行。
- 一定要記著在循環體中改變循環變量的值,否則會出現死循環(無休止的執行)。
- 循環體如果包括有一個以上的語句,則必須用{}括起來,組成復合語句。
2.do-while循環
C語言中的do-while循環,一般形式如下:
do-while循環語句的語義是:
它先執行循環中的執行代碼塊,然后再判斷while中表達式是否為真,如果為真則繼續循環;如果為假,則終止循環。因此,do-while循環至少要執行一次循環語句。
注意:mtianyan: 使用do-while結構語句時,while括號后必須有分號。
3.for循環
c語言中for循環一般形式:
它的執行過程如下:
- 執行表達式1,對循環變量做初始化;
- 判斷表達式2,若其值為真(非0),則執行for循環體中執行代碼塊,然后向下執行;若其值為假(0),則結束循環;
- 執行表達式3,(i++)等對于循環變量進行操作的語句;
- 執行for循環中執行代碼塊后執行第二步;第一步初始化只會執行一次。
- 循環結束,程序繼續向下執行。
注意:for循環中的兩個分號一定要寫
在for循環中:
- 表達式1是一個或多個賦值語句,它用來控制變量的初始值;
- 表達式2是一個關系表達式,它決定什么時候退出循環;
- 表達式3是循環變量的步進值,定義控制循環變量每循環一次后按什么方式變化。
- 這三部分之間用分號 ; 分開。
使用for語句應該注意:
- for循環中的“表達式1、2、3”均可不寫為空,但兩個分號(;;)不能缺省。
- 省略“表達式1(循環變量賦初值)”,表示不對循環變量賦初始值。
- 省略“表達式2(循環條件)”,不做其它處理,循環一直執行(死循環)。
- 省略“表達式3(循環變量增減量)”,不做其他處理,循環一直執行(死循環)。
- 表達式1可以是設置循環變量的初值的賦值表達式,也可以是其他表達式。
- 表達式1和表達式3可以是一個簡單表達式也可以是多個表達式以逗號分割。
- 表達式2一般是關系表達式或邏輯表達式,但也可是數值表達式或字符表達式,只要其值非零,就執行循環體。
- 各表達式中的變量一定要在for循環之前定義。
3.三種循環比較
while, do-while和for三種循環在具體的使用場合上是有區別的,如下:
- 在知道循環次數的情況下更適合使用for循環;
- 在不知道循環次數的情況下適合使用while或者do-while循環:
- 如果有可能一次都不循環應考慮使用while循環
- 如果至少循環一次應考慮使用do-while循環。
- 但是從本質上講,while,do-while和for循環之間是可以相互轉換的。
4.多重循環
多重循環就是在循環結構的循環體中又出現循環結構。
在實際開發中一般最多用到三層重循環。
因為循環層數越多,運行時間越長,程序越復雜,所以一般用2-3層多重循環就可以了。另外不同循環之間也是可以嵌套的。
多重循環在執行的過程中,外層循環為父循環,內層循環為子循環,
**父循環一次,子循環需要全部執行完,直到跳出循環。**父循環再進入下一次,子循環繼續執行…
十六、結束語句
1.break語句
那么循環5次的時候,需要中斷不繼續訓練。在C語言中,可以使用break語句進行該操作.
使用break語句時注意以下幾點:
- 在沒有循環結構的情況下,break不能用在單獨的if-else語句中。
- 在多層循環中,一個break語句只跳出當前循環。
2.continue語句
那么循環5次的時候,需要中斷后繼續訓練。在C語言中,可以使用continue語句進行該操作
continue語句的作用是結束本次循環開始執行下一次循環。
break語句與continue語句的區別是:
break是跳出當前整個循環,continue是結束本次循環開始下一次循環。
十七、局部與全局
C語言中的變量,按作用域范圍可分為兩種,即局部變量和全局變量。局部變量也稱為內部變量。局部變量是在函數內作定義說明的。其作用域僅限于函數內, 離開該函數后再使用這種變量是非法的。在復合語句中也可定義變量,其作用域只在復合語句范圍內。
全局變量也稱為外部變量,它是在函數外部定義的變量。它不屬于哪一個函數,它屬于一個源程序文件。其作用域是整個源程序。
十八、變量存儲類別
mtianyan: C語言根據變量的生存周期來劃分,可以分為靜態存儲方式和動態存儲方式。
靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。靜態存儲區中存放了在整個程序執行過程中都存在的變量,如全局變量。
動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變量是根據程序運行的需要而建立和釋放的,通常包括:函數形式參數;自動變量;函數調用時的現場保護和返回地址等。
C語言中存儲類別又分為四類:
- 自動(auto)、
- 靜態(static)、
- 寄存器的(register)
- 外部的(extern)。
十九、內部函數與外部函數
在C語言中不能被其他源文件調用的函數稱謂內部函數 ,內部函數由static關鍵字來定義,因此又被稱謂靜態函數,形式為:
static [數據類型] 函數名([參數])
這里的static是對函數的作用范圍的一個限定,限定該函數只能在其所處的源文件中使用,因此在不同文件中出現相同的函數名稱的內部函數是沒有問題的。
在C語言中能被其他源文件調用的函數稱謂外部函數 ,外部函數由extern關鍵字來定義,形式為:
extern [數據類型] 函數名([參數])
C語言規定,在沒有指定函數的作用范圍時,系統會默認認為是外部函數,因此當需要定義外部函數時extern也可以省略。
靜態變量只賦值一次
二十、數組初體驗
程序中也需要容器,只不過該容器有點特殊,它在程序中是一塊連續的,大小固定并且里面的數據類型一致的內存空間,它還有個好聽的名字叫數組。可以將數組理解為大小固定,所放物品為同類的一個購物袋,在該購
物袋中的物品是按一定順序放置的。
1.我們來看一下如何聲明一個數組:
數據類型 數組名稱[長度];
數組只聲明也不行啊,看一下數組是如何初始化的。說到初始化,C語言中的數組初始化是有三種形式的,分別是:
- 數據類型 數組名稱[長度n] = {元素1,元素2…元素n};
- 數據類型 數組名稱[] = {元素1,元素2…元素n};
- 數據類型 數組名稱[長度n]; 數組名稱[0] = 元素1; 數組名稱[1] = 元素2; 數組名稱[n-1] = 元素n;
我們將數據放到數組中之后又如何獲取數組中的元素呢?
獲取數組元素時: 數組名稱[元素所對應下標];
如:初始化一個數組 int arr[3] = {1,2,3}; 那么arr[0]就是元素1。
注意:
數組的下標均以0開始;
數組在初始化的時候,數組內元素的個數不能大于聲明的數組長度;
mtianyan: 如果采用第一種初始化方式,元素個數小于數組的長度時,多余的數組元素初始化為0;
在聲明數組后沒有進行初始化的時候,靜態(static)和外部(extern)類型的數組元素初始化元素為0,自動(auto)類型的數組的元素初始化值不確定。
2.數組的遍歷
數組就可以采用循環的方式將每個元素遍歷出來,而不用人為的每次獲取指定某個位置上的元素,例如我們用for循環遍歷一個數組:
注意以下幾點:
- 最好避免出現數組越界訪問,循環變量最好不要超出數組的長度.
- C語言的數組長度一經聲明,長度就是固定,無法改變,并且C語言并不提供計算數組長度的方法。
由于C語言是沒有檢查數組長度改變或者數組越界的這個機制,可能會在編輯器中編譯并通過,但是結果就不能肯定了,因此還是不要越界或者改變數組的長度
3.數組作為函數參數
數組可以由整個數組當作函數的參數,也可以由數組中的某個元素當作函數的參數:
整個數組當作函數參數,即把數組名稱傳入函數中,例如:
數組中的元素當作函數參數,即把數組中的參數傳入函數中,例如:
數組作為函數參數時注意以下事項:
- 數組名作為函數實參傳遞時,函數定義處作為接收參數的數組類型形參既可以指定長度也可以不指定長度。
- 數組元素作為函數實參傳遞時,數組元素類型必須與形參數據類型一致。
4.字符串與數組
C語言中,是沒有辦法直接定義字符串數據類型的,但是我們可以使用數組來定義我們所要的字符串。一般有以下兩種格式:
- char 字符串名稱[長度] = “字符串值”;
- char 字符串名稱[長度] = {‘字符1’,‘字符2’,…,‘字符n’,’\0’};
注意:
- []中的長度是可以省略不寫的;
- 采用第2種方式的時候最后一個元素必須是’\0’,’\0’表示字符串的結束標志;
- 采用第2種方式的時候在數組中不能寫中文。
- 在輸出字符串的時候要使用:printf(“%s”,字符數組名字);或者puts(字符數組名字);。
5.mtianyan:字符串函數
常用的字符串函數如下(strlen,strcmp,strcpy,strcat,atoi):
使用字符串函數注意以下事項:
- strlen()獲取字符串的長度,在字符串長度中是不包括‘\0’而且漢字和字母的長度是不一樣的
- strcmp()在比較的時候會把字符串先轉換成ASCII碼再進行比較,返回的結果為0表示s1和s2的ASCII碼相等,返回結果為1表示s1比s2的ASCII碼大,返回結果為-1表示s1比s2的ASCII碼小
- strcpy()拷貝之后會覆蓋原來字符串且不能對字符串常量進行拷貝
- strcat在使用時s1與s2指的內存空間不能重疊,且s1要有足夠的空間來容納要復制的字符串
6.多維數組
多維數組的定義格式是:
數據類型 數組名稱[常量表達式1][常量表達式2]…[常量表達式n];
定義了一個名稱為num,數據類型為int的二維數組。其中第一個[3]表示第一維下標的長度,就像購物時分類存放的購物;第二個[3]表示第二維下標的長度,就像每個購物袋中的元素。
多維數組的初始化與一維數組的初始化類似也是分兩種:
- 數據類型 數組名稱[常量表達式1][常量表達式2]…[常量表達式n] = {{值1,…,值n},{值1,…,值n},…,{值1,…,值n}};
- 數據類型 數組名稱[常量表達式1][常量表達式2]…[常量表達式n]; 數組名稱[下標1][下標2]…[下標n] = 值;
多維數組初始化要注意以下事項:
- 采用第一種始化時數組聲明必須指定列的維數。mtianyan: 因為系統會根據數組中元素的總個數來分配空間,當知道元素總個數以及列的維數后,會直接計算出行的維數;
- 采用第二種初始化時數組聲明必須同時指定行和列的維數。
二維數組定義的時候,可以不指定行的數量,但是必須指定列的數量
以上就是“c語言基礎知識入門”的詳細內容,想要了解更多C語言教程歡迎持續關注編程學習網
掃碼二維碼 獲取免費視頻學習資料
- 本文固定鏈接: http://www.wangchenghua.com/post/10461/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料