1. C語言概述2. 數據類型、運算符與表達式3. C語言程序結構
4. VC6.0使用練習
知識詳解01:C語言的歷史1. C語言與其它語言比較
匯編語言:
(1).可直接對硬件進行操作,執行效率較高;依賴于計算機硬件,可讀性和可移植性較差。(2).對硬件進行操作,執行效率高,用一串數字代碼表示指令,更接近計算機使用的詳細操作步驟。依賴于計算機硬件(比如寫了一段匯編程序控制51單片機的IO,但是這段程序在AVR上可能起不了啥作用),對于匯編的查看也挺困難
一般高級語言:C++、java、C#等
(1).是在C語言的語法和基本結構上,擴展開發出來的;(2).硬件操作支持性較差;運行效率不高
2. C語言是貝爾實驗室于70年代初發明的.80年代初,美國國家標準化協會(ANSI)制定了ANSI C標準.3. 后來各個領域都有各自的擴展:如windows下的vc,linux下的GNU C等
注意:C語言是基于平臺的,如果只有C語言,那什么也干不了
知識詳解02:C語言的特點1.概括的說,C語言同時具有匯編語言和高級語言的雙重特性;
雙重性是指:效率高,可讀性較好
2. 具體地說,C語言的主要特點如下:
(1).語言簡潔、緊湊,使用方便、靈活,32個關鍵字、9種控制語句(控制程序的流向),程序形式自由(一件事情可以用多種方式來實現(如:循環)).(2).運算符豐富(方便程序的設計),34種運算符.(3).數據類型豐富,數據類型有:整形、實型、字符型、數組、指針、結構體、共用體等.(4).具有結構化的控制語句,如(if..else、while、switch等)是完全模塊化和結構化的語言(5).模塊化:將處理復雜的系統分解成更好理解的可管理的模塊的方式(6).結構化:將一個復雜的求解過程分階進行,使得每一塊更容易理解(7).允許直接訪問物理地址,能進行位(bit)操作,可以直接對硬件操作.(8).生成的目標代碼質量高,執行效率高,只比匯編程序生成的目標代碼效率低10%-20%.(9).可移植性好、基本上不做修改就能用于各種型號的計算機和各種操作系統.知識詳解02:關鍵字(10).與linux的結合性好(Ios, windows, UNIX的核心用C語言實現)Linux、UNIX本身就是用C語言來編寫的.在Linux上用C語言開發的運行效率非常高,尤其在嵌入式領域 C語言更是開發的首選
1. C的關鍵字共有32個
數據類型關鍵字(12個)
char, short, int, long, float, double, unsigned, signed, struct, union, void, enum
unsigned, signed:是修飾符,int a=125;默認是 signed
void:不可用來定義變量,但可以用它來修飾各種變量
控制語句關鍵字(12個)
if,else,for,do,while,break,case,continue,default,goto(盡量別使用),return,switch
存儲類關鍵字(4個)(重點介紹,因為上面的幾個知識點會在后面介紹)
auto, extern, register, staticextern:可以置于變量或者函數前,以表示變量或者函數的定義在別的文件中,可以外部使用register:修飾符暗示編譯程序相應的變量將被頻繁地使用,如果可能的話,應將其保存在CPU的寄存器中,以加快其存儲速度。
register變量必須是能被CPU所接受的類型。這通常意味著register變量必須是一個單個的值,并且長度應該小于或者等于整型的長度。不過,有些機器的寄存器也能存放浮點數。因為register變量可能不存放在內存中,所以不能用“&”來獲取register變量的地址
static:
靜態變量都在全局數據區分配內存靜態全局變量在聲明它的整個文件都是可見的,而在文件之外是不可見的;
其他關鍵字(4個)
const,sizeof,typedef,volatilevolatile:
確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.簡單地說就是防止編譯器對代碼進行優化.比如如下程序:
num=0x55;
num =0x56;
num =0x57;
num =0x58;
對外部硬件而言,上述四條語句分別表示不同的操作,會產生四種不同的動作,但是編譯器就不能像對待純粹的程序那樣對上述四條語句進行優化,只認為 num=0x58(即忽略前三條語句,只產生一條機器代碼)。如果鍵入volatile,則編譯器會逐一的進行編譯并產生相應的機器代碼(四條)
知識詳解03:語句1. C語言利用函數體中的可執行語句,向計算機系統發出操作指令;按照語句功能或構成的不同,可將C語言的語句分為5類:
2. 控制語句(9條,可以細分為三種)
選擇結構控制語句
if()~else~,switch()~
循環結構控制語句
for()~,while()~, do~while(),break, continue
其他控制語句
return, goto
goto
return功能:
終止執行函數,賦值(可選)
將控制權返回給調用函數的下一條語句
那函數的返回值是存在哪兒的?
對于四字節的返回值,一般編譯器把它放入eax寄存器里,而大于4字節的返回值,一般是放在會在棧中返回地址前的位置??梢钥隙ǖ氖?,應該不是在堆里。
例如:
3. 函數調用語句
函數調用語句由一次函數調用加一個分號構成.
例如:
PRintf(“hello world!”);
scanf(“%d”,&i);
4. 表達式語句
表達式語句是由表達式后加一個分號構成,
例如:
“num = 5”是表達式,
“num = 5;”是賦值語;
5. 空語句
空語句由一個分號構成;空語句什么操作也不執行.
6. 復合語句
復合語句由大括號括起來的一組語句構成.
main( )
{
{ } //復合語句,注意大括號后不需要分;
}
復合語句一般與其它語句配合使用:
知識詳解04:總體結構如for( ; ; ) { }
1. 在C語言中,除實現順序、選擇和循環三種基本結構等9條控制語句外,輸入輸出操作都由標準庫函數(不是C語言的組成部分)來實現.2. 一個完整的C語言程序,是由一個、且只能有一個main()函數(又稱主函數)和若干個其他函數結合而成,或僅由一個main()函數構成.3. 所有函數既可以放置在同一個源文件里,也可以放置在不同的源文件里
知識詳解05:C文件結構1. 一個基于C的軟件系統一般由以下文件構成:
知識詳解06:數據類型若干個C文件:每個C文件中包含若干個函數.
若干個頭文件:每個頭文件中包含一些數據結構的定義以及C函數、變量的原型聲明.
若干個庫文件:庫文件是編譯后的二進制文件,一般由若干C文件編譯后組成,其中包含了若干個函數的可執行代碼;這些庫文件中的函數可執行代碼在連接的時候合并到最終的可執行文件中.
若干個make文件:make文件描述了多個文件中的依賴關系以及生成最終可執行文件或庫文件所需要的信息
1. 數據類型
2. 常量與變量
常量:在程序運行過程中,其值不能被改變的量(注意:不能反過來說)
整型 100,125,-100,
實型 3.14 , 0.125,-3.789
字符型 ‘a’,‘b’,‘2’
字符串 “a”,“ab”,“1232”
變量:其值可以改變,變量名只能由字母、數字、下劃線組成,第一個字必須為字母或下劃線;變量在編譯時為其分配相應的內存地址.
變量其實就是用來放置數值等內容的“盒子”
3. 整型數據
整型常量的表示方法:十進制;八進制以數字0開頭,如0123;十六進制以0x開頭,如0x1e
整型變量分為
有/無符號基本整型 (un/signed) int
有/無符號短整型 (un/signed) short(int)
有/無符號長整型 (un/signed) long (int)
c99中的整數常量:在c99中,以LL或ll(兩個字母大小寫要一致)結尾的整數常量是long long int
注意:我們在學校學習的TC環境中,int為兩個字節,因為TC實際上是在PC機上模擬了一個16位的環境,在VC、Linux等32位環境下都是4個字節;可以使用sizeof(類型|變量)運算符求得
4. 實型數據
實型常量
實型也稱為浮點型,實型常量也稱為實數或者浮點數
十進制形式:由數字和小數點組成:0.0、0.12、5.0
指數形式:123e3代表123*10的三次方
實型變量
單精度(float)和雙精度(double)
float型: 占4字節,7位有效數字(十進制)
Double型: 占8字節,15~16位有效數字 (十進制)
包含小數點卻不以f結尾的常量是double
小數點以f結尾
5. 字符數據
字符常量:用單引號括起來,如:‘a’、‘b’等.
轉義字符:以反斜杠“/”開頭,后跟一個或幾個字符、如‘/n’ ‘/t’等,分別代表換行,橫向跳格.
請在字符串字面量中小心使用八進制數和十六進制數的轉義序列。八進制數的轉義序列在3個數字之后結束,或者在第一個非八進制數字符處結束。例如字符串“/1234”包含兩個字符(/123和4),而字符串“/189”包含3個字符(/1、8和9)。而十六進制數的轉義序列則不限制為3個數字,而是直到第一個非十六進制數字符截止。
實例1:
實例2:
實例3:
大多數編譯器會報以上錯誤,因為十六進制數的轉義序列通常范圍限制在/x0~/xff
字符變量:
用char定義的變量只能存放一個字符常量;
每個字符變量被分配一個字節的內存空間;字符值以ASCII碼的形式存放在變量的內存單元中
注意:
a = 'x';
a變量中存放的是字符'x'的ASCII :120
即a=120跟a='x'在本質上是一致的
6. 字符串常量
是由雙引號括起來的字符序列,如“CHINA”、“C program”,“$12.5”等都是合法的字符串常量
7. 字符串常量與字符常量的不同
例子1:
例子2:
上例說明a,b是等價的,誰與誰等價就去看他們內存中的值是否相等。
8. 符號常量
在C語言中,可以用一個標識符來表示一個常量,稱之為符號常量,一般形式為:
#define 標識符 常量
其中#define是一條預處理命令,稱為宏定義命令,其功能是把該標識符定義為其后的常量值.
例:各數據類型的運算:(路徑:/學生版/01_C語言基礎/00_基礎代碼/1_0
9. C99中的布爾型
bool flag;//定義一個bool型變量,需要包含頭文件#include <stdbool.h>
10. 數據有不同的類型,不同類型數據之間進行混合運算時必然涉及到類型的轉換問題.轉換的方法有兩種
自動轉換:
遵循一定的規則,由編譯系統自動完成.
強制類型轉換:
不管那樣轉換,它都會盡量保證數據不被丟失把表達式的運算結果強制轉換成所需的數據類型
11. 自動轉換的原則
轉換方向:
說明
橫向箭頭,表示必須的轉換(有問題);char,short必須轉換成int型
數據類型轉換的規律:占用內存字節數少(值域小)的類型,向占用內存字節數多(值域大)的類型轉換,以保證精度不降低
上題:signed ---> unsigned
12. 強制轉換:通過類型轉換運算來實現
(類型說明符) (表達式)
其功能:把表達式的運算結果強制轉換成類型說明符所表示的類型,例如:
(float)a; // 把a的值轉換為實型
(int)(x+y); // 把x+y的結果值轉換為整型
注意:
知識詳解07:運算符與表達式類型說明符和表達式都必須加括號;
無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變量的數據長度進行的臨時性轉換,而不改變數據定義的類型
例子1-類型不改變:
例子2-數值 不改變 :
1. 數據在運算中使用的運算符包括:
運算符的種類、優先級和結合性
2. 運算符的種類
C語言中運算符和表達式數量之多,在高級語言中是少見的.正是由于豐富的運算符和表達式使C語言功能十分完善
3. C語言常用運算符
算術運算符 (+、-、*、/、%)
關系運算符 (>、<、==、>=、<=、!= )
邏輯運算符 (!、&&、||)
位運算符 (<<、>>、&、|、 ~ 、∧ )
賦值運算符 (=、及其擴展賦值運算符)
條件運算符 (?:)
逗號運算符 (,)
指針運算符 (*和&)
求字節數運算符(sizeof( ))
強制類型轉換運算符((類型))
分量運算符(.->)
下標運算符([])
其他( 如函數調用運算符())
例子:
等號大于逗號 的優先級。
4. 用算術運算符將運算對象(也稱操作數)連接起來的、符合C語法規則的式子,稱為C算術表達式.運算對象包括常量、變量、函數等(函數指的是函數的返回值)
例如: a*b/c-1.5+'a′
5. 復合的賦值運算符
在賦值符“=”之前加上其它二目運算符可構成復合賦值符:+=,-=,*=,%=,<<=,>>=,&=,^=
a += 5 //等價于 a = a+5;
x *= y+7 //等價于x = x*(y+7)
6. 自增、自減運算符
作用是使變量的值增1或減1
++i,--i(先加/減,后使用)
i++,i-- (先使用,后加/減)
例如1
例子2:
例子3:
7. 在判斷同優先級運算符計算順序時,要注意結合性,詳細的優先級及結合性請參考以下表格8. 優先級
知識詳解08:C語言程序結構
1. C語言支持最基本的三種程序運行結構
順序結構、選擇結構、循環結構
2. 順序結構:程序按順序執行,不發生跳轉.3. 選擇結構:依據是否滿足條件,執行相應功能.
if(表達式)語句;
if(表達式)語句1 else 語句2;
if(表達式1)語句1;
else if(表達式2)語句2;
…
else 語句n
注意:if......else if..........else if.....else,這只能響應一個條件
舉例
例子1:判斷一個數能否被2整除。(練習if)
例子2:分別判斷一個數被2取余的余數。(練習if{ }else{ })
例子3: 分別判斷一個數被3取余的余數。(練習if{ }else if{ }else if{ })
4. 條件運算符
(a>b)?a:b;
說明:條件為真,表達式取值a,否則取值b
條件運算符的運算優先級低于關系運算符和算術運算符,但高于賦值符;因max=(a>b)?a:b;可以去掉括號而寫為 max=a>b?a:b;
? 和 :是一對運算符,不能分開單獨使用.
條件運算符的結合方向是自右至左.
簡潔、但容易出錯,一般不推薦使用
表達式不能是浮點數、字符串。
5. 循環結構
goto語句(盡量少使用).
while語句 先判斷表達式后執行.
do-while語句 先執行語句后判斷表達式.
for( ; ; ){ }
C99中的for語句
在for語句的第一個表達式可以用來定義變量,該變量只能在循環體內使用
gcc編譯
解決這個錯誤只需要在編譯的時候加上-std=c99
6. break語句和continue語句的區別
break語句用于跳出本層循環.
continue用于結束本次循環
新聞熱點
疑難解答