第一章 C語言概述
一、C語言的歷史(1.1)java
起源:貝爾實驗室開發的UNIX操做系統的副產品。標準化:C89和C99。基於C的語言:C++,Java,C#,Perl。程序員
二、C語言的優缺點(1.2)編程
優勢:高效、可移植、功能強大、靈活、標準庫、與UNIX和Linux集成;缺點:C程序更容易隱藏錯誤、C程序可能難以理解、C程序可能會難以修改。編輯器
高效使用C的方法函數
1.學習如何規避C語言的缺陷(C陷阱與缺陷);2.使用軟件工具使程序更加可靠(lint工具和調試工具);工具
3.利用現有的代碼庫;4.採用一套切合實際的編碼規範;5.避免「投機取巧」和極度複雜的代碼;6.緊貼標準(C89和C99)post
第二章 C語言基本概念
一、編寫一個簡單的C程序(2.1):編譯和鏈接學習
預處理:執行以#開頭的命令,相似於編輯器,能夠給程序添加內容,也能夠對程序進行修改;編碼
編譯:編譯器將程序翻譯成機器語言(即目標代碼);操作系統
連接:鏈接器把由編譯器產生的目標代碼和所需的其餘附加代碼整合在一塊兒,附加代碼包括庫函數。
二、簡單程序的通常形式(2.2):C程序由指令、函數和語句組成。
指令:通常是預處理器執行的命令,相似於#define,#include <stdio.h>;函數:程序員編寫的函數和庫函數;語句:程序運行時執行的命令,每條語句由分號結束。
main函數最後的return 0;語句。做用:一是使main函數終止,二是指出main函數返回值是0.
三、註釋(2.3):每一個程序都應該包含識別信息,即程序名,編寫日期,做者,程序的用途及其餘相關信息。/* */和//
四、變量和賦值(2.4)
每一個變量必須有一個類型。使用變量以前必須對其進行聲明。
float型變量運算比int型變量慢,float型變量所存儲的數值只是實際值的一個近似值。
書寫格式方面,建議在聲明和語句之間留出一個空行。
給float型變量賦值時,最後在後面加一個f,例如float profit = 21.34f;
佔位符%d用來指明在顯示過程當中變量的值的顯示位置。
沒有默認值且還沒有在程序中被賦值的變量是未被初始化的。
C語言通用原則:在任何須要數值的地方,均可以使用具備相同類型的表達式。printf("Volume (cubic inches): %d\n", height * lenght * width);
五、讀入輸入(2.5)
printf中的字母f和scanf中的字母f含義相同,都是表示「格式化」的意思。
scanf函數須要知道將得到的輸入數據的格式,而printf函數須要知道輸出數據的顯示格式。
六、定義常量的名字(2.6)
C程序規範:#define宏定義的名字都使用大寫字母表示。
#define SCALE_FACTOR (5.0f / 9.0f) 添加上f
七、標識符(2.7)
傳統C中命名中間插入下劃線,例如symbol_table,current_page
目前流行的java(C#及C++)用單詞首字母大寫,例如symbolTable,currentPage
八、C程序書寫規範(2.8)
語句能夠分開放在任意多行內;記號間的加空格能夠更容易區分記號;每一個逗號後邊也放一個空格;縮進幫助識別程序;空行能夠把程序劃分紅邏輯單元;
第三章 格式化輸入/輸入
一、printf函數(3.1)
printf函數用來顯示格式串的內容,而且在該串中的指定位置插入可能的值。格式串包括普通字符和轉換說明。
轉換說明:%m.pX格式或者-m.pX格式來表示。m(最小字段寬度):指定要顯示的最小字符數量;p(精度),+和-表示右對齊和左對齊。
轉義序列:使字符串包含一些特殊字符而不會使編譯器引起問題。警報(響鈴)符:\a;換行符:\n;水平製表符:\t。
二、scanf函數(3.2)
檢查轉換說明數量是否與輸入變量數量相匹配;檢查每一個轉換是否適合相對應的變量;scanf每一個調用變量前須要有&。
許多專業程序員避免使用scanf函數,而是採用字符格式讀取全部數據,而後再把他們轉換成數值形式。
scanf函數本質上使一種「模式匹配」,試圖吧輸入的字符組與轉換說明相匹配。
用戶從鍵盤輸入時,程序並無讀取輸入,而是把用戶的輸入放在一個隱藏的緩衝區中,由scanf函數來讀取。
第四章 表達式
一、算術運算符(4.1)
一元運算符什麼都不作,在經典C中不存在這種運算符。
把int型操做數和float型操做數混合在一塊兒時,運算結果時float型的。
運算符%要求操做數十整數。當運算符/和運算符%用於負操做數時,其結果難以肯定。
通用規則,C語言容許在全部表達式中用圓括號進行分組。
運算符的左結合和右結合。
二、賦值運算符(4.2)
表達式v=e,若是v和e的類型不一樣,那麼賦值運算髮生時會把e的值轉化爲v的類型。
在C語言中,賦值就像+那樣是運算符。即賦值操做產生結果。賦值表達式v=e的值就是賦值運算後v的值。
第五章 選擇語句
一、邏輯表達式(5.1)
關係運算符能夠用於比較整數和浮點數,也容許比較混合類型的操做數。所以1<2.5的值爲1。
關係運算符的優先級低於算術運算符。表達式i + j < k - 1的意思是(i + j)<(k - 1)。判等運算符的優先級低於關係運算符。
邏輯運算符所產生的結果時0或1。
二、if語句(5.2)
把==運算符與=運算符相混淆是最多見的C語言編程錯誤。
複合語句,經過在一組語句周圍放置花括號,能夠強制編譯器將其做爲一條語句來處理。
對於if else 語句在沒必要要的狀況下使用花括號有兩個好處。首先,程序很容易修改,而後,能夠避免忘記使用花括號而致使的錯誤。
條件表達式使程序更短小但也更難以閱讀,因此最好避免使用。用於兩種地方:1.return語句;2.某些類型的宏定義中。
if (i > j)
return i;
else
return j
替換爲
return i > j ? i : J;
if (i > j)
printf("%d\n", i);
else
printf("%d\n", j);
替換爲
printf("%d\n", i > j ? i : j);
爲了便於理解,C89的程序員一般使用TRUE和FALSE這樣的名字定義宏:
#define TRUE 1
#define FALSE 0
C99中使用_Bool型,例如:_Bool flag;_Bool只能賦值爲0或1
或者包含<stdbool.h>,能夠寫爲bool flag,<sdbool.h>中提供了ture和false兩個宏,分別表明1和0.
第六章 循環
一、常見循環類型
while語句;do語句;for語句
二、for語句(6.3)
21.for語句的慣用法
從0向上加到n-1:for( i = 0; i < n; i++)
從1向上加到n:for( i = 1; i <= n; i++)
從n-1向下減到0:for(i = n - 1; i >= 0; i--)
從n向下減到1:for( i = n; i > 0; i--)
2.2 C99中的for語句
在C99中,在for語句的第一個表達式中能夠替換爲一個聲明
for(int i = 0; i < n; i++)
2.3退出循環
break語句:跳出循環或者switch語句,可是不能從switch中跳出循環。
continue語句:跳過某次迭代的部份內容,但不會跳出整個循環。
goto語句:讓程從一條語句跳轉到另外一條語句。goto語句必須和goto標識符在同一個函數中。
goto語句的缺點:1.goto語句能夠往前跳也能夠日後跳,使程序難以閱讀;2.goto語句使程序難以修改。
2.4空語句
語句能夠爲空,除了末尾處的分號之外什麼符合也沒有。
空語句有一個好處:編寫循環體的循環。
C程序員習慣性把空語句單獨放置在一行。
for(d = 2; d < n && n & d != 0; d++)
;
其餘使用空語句的地方
for(d = 2; d < n && n & d != 0; d++)
continue;
for(d = 2; d < n && n & d != 0; d++)
{}