第一章 C語言概述
1、C語言的歷史(1.1)
起源:貝爾實驗室開發的UNIX作業系統的副產品,標準化:C89和C99,基于C的語言:C++,Java,C#,Perl,
2、C語言的優缺點(1.2)
優點:高效、可移植、功能強大、靈活、標準庫、與UNIX和Linux集成;缺點:C程式更容易隱藏錯誤、C程式可能難以理解、C程式可能會難以修改,
高效使用C的方法
1.學習如何規避C語言的缺陷(C陷阱與缺陷);2.使用軟體工具使程式更加可靠(lint工具和除錯工具);
3.利用現有的代碼庫;4.采用一套切合實際的編碼規范;5.避免“投機取巧”和極度復雜的代碼;6.緊貼標準(C89和C99)
第二章 C語言基本概念
1、撰寫一個簡單的C程式(2.1):編譯和連接
預處理:執行以#開頭的命令,類似于編輯器,可以給程式添加內容,也可以對程式進行修改;
編譯:編譯器將程式翻譯成機器語言(即目標代碼);
鏈接:連接器把由編譯器產生的目標代碼和所需的其他附加代碼整合在一起,附加代碼包括庫函式,
2、簡單程式的一般形式(2.2):C程式由指令、函式和陳述句組成,
指令:一般是前處理器執行的命令,類似于#define,#include <stdio.h>;函式:程式員撰寫的函式和庫函式;陳述句:程式運行時執行的命令,每條陳述句由分號結束,
main函式最后的return 0;陳述句,作用:一是使main函式終止,二是指出main函式回傳值是0.
3、注釋(2.3):每個程式都應該包含識別資訊,即程式名,撰寫日期,作者,程式的用途及其他相關資訊,/* */和//
4、變數和賦值(2.4)
每個變數必須有一個型別,使用變數之前必須對其進行宣告,
float型變數運算比int型變數慢,float型變數所存盤的數值只是實際值的一個近似值,
書寫格式方面,建議在宣告和陳述句之間留出一個空行,
給float型變數賦值時,最后在后面加一個f,例如float profit = 21.34f;
占位符%d用來指明在顯示程序中變數的值的顯示位置,
沒有默認值且尚未在程式中被賦值的變數是未被初始化的,
C語言通用原則:在任何需要數值的地方,都可以使用具有相同型別的運算式,printf("Volume (cubic inches): %d\n", height * lenght * width);
5、讀入輸入(2.5)
printf中的字母f和scanf中的字母f含義相同,都是表示“格式化”的意思,
scanf函式需要知道將獲得的輸入資料的格式,而printf函式需要知道輸出資料的顯示格式,
6、定義常量的名字(2.6)
C程式規范:#define宏定義的名字都使用大寫字母表示,
#define SCALE_FACTOR (5.0f / 9.0f) 添加上f
7、識別符號(2.7)
傳統C中命名中間插入下劃線,例如symbol_table,current_page
目前流行的java(C#及C++)用單詞首字母大寫,例如symbolTable,currentPage
8、C程式書寫規范(2.8)
陳述句可以分開放在任意多行內;記號間的加空格可以更容易區分記號;每個逗號后邊也放一個空格;縮進幫助識別程式;空行可以把程式劃分成邏輯單元;
第三章 格式化輸入/輸入
1、printf函式(3.1)
printf函式用來顯示格式串的內容,并且在該串中的指定位置插入可能的值,格式串包括普通字符和轉換說明,
轉換說明:%m.pX格式或者-m.pX格式來表示,m(最小欄位寬度):指定要顯示的最小字符數量;p(精度),+和-表示右對齊和左對齊,
轉義序列:使字串包含一些特殊字符而不會使編譯器引發問題,警報(響鈴)符:\a;換行符:\n;水平制表符:\t,
2、scanf函式(3.2)
檢查轉換說明數量是否與輸入變數數量相匹配;檢查每個轉換是否適合相對應的變數;scanf每個呼叫變數前需要有&,
許多專業程式員避免使用scanf函式,而是采用字符格式讀取所有資料,然后再把他們轉換成數值形式,
scanf函式本質上使一種“模式匹配”,試圖吧輸入的字符組與轉換說明相匹配,
用戶從鍵盤輸入時,程式并沒有讀取輸入,而是把用戶的輸入放在一個隱藏的緩沖區中,由scanf函式來讀取,
第四章 運算式
1、算術運算子(4.1)
一元運算子什么都不做,在經典C中不存在這種運算子,
把int型運算元和float型運算元混合在一起時,運算結果時float型的,
運算子%要求運算元十整數,當運算子/和運算子%用于負運算元時,其結果難以確定,
通用規則,C語言允許在所有運算式中用圓括號進行分組,
運算子的左結合和右結合,
2、賦值運算子(4.2)
運算式v=e,如果v和e的型別不同,那么賦值運算發生時會把e的值轉化為v的型別,
在C語言中,賦值就像+那樣是運算子,即賦值操作產生結果,賦值運算式v=e的值就是賦值運算后v的值,
第五章 選擇陳述句
1、邏輯運算式(5.1)
關系運算子可以用于比較整數和浮點數,也允許比較混合型別的運算元,因此1<2.5的值為1,
關系運算子的優先級低于算術運算子,運算式i + j < k - 1的意思是(i + j)<(k - 1),判等運算子的優先級低于關系運算子,
邏輯運算子所產生的結果時0或1,
2、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.
第六章 回圈
1、常見回圈型別
while陳述句;do陳述句;for陳述句
2、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++)
{}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/56859.html
標籤:C
上一篇:《CSAPP》實驗一:位操作
下一篇:自定義輸入函式 - C語言編程
