1、將複雜問題分解為簡單問題的程式設計方法稱為結構化程式設計,其特點為自頂向下、逐步細化、模組化;
2、定義常量的方法:#define 和const
#define pi 3.1415926(無分號,無常量型別)
const float pi = 3.14159;
3、函式定義(原型)
在ansi c標準中,所有函式呼叫之前必須要有函式定義或原型說明,函式原型用以說明函式的返回值型別、函式引數型別、個數及次序。函式原型說明有兩種形式:
直接使用函式的頭部(函式頭部後加分號)。
如, double tri_area(double a, double b, double c);
在原型說明中僅給出型別、個數及次序,無形參變數名。
如, double tri_area(double , double , double );
注意:函式原型說明的型別、引數型別、個數及次序必須與函式定義時一致,否則會產生錯誤。
4、傳值呼叫
c函式的引數傳遞全部採用傳值。傳值呼叫實際上重新拷貝了乙個副本給形參;傳值的好處是傳值呼叫不會改變呼叫函式實參變數的內容,因此,可避免不必要的***。
5、區域性變數
區域性變數(local variable),又稱自動變數:在函式(或塊結構)中定義的變數;
使用範圍:只在定義它的函式或塊結構內有效;
定義時可加auto關鍵字,也可省略:
auto int index; 等同於: int index;
編譯程式不對區域性(自動)變數給予隱含的初值,故其初值不確定。因此,每次使用前,必須明確地置初值;
區域性(自動)變數隨函式的呼叫而存在,函式返回後將消失,由一次呼叫到下一次呼叫之間不保持值,每次呼叫函式時都重新初始化;
形參是自動變數,使用範圍僅限於相應函式內;
6、switch語句注意事項
常量表示式必須是整型(if_else if可能根據任意條件來進行多路選擇);
在同乙個switch中不應出現兩個具有同樣的常量;
default語句如果有,只允許出現一次,default可出現在switch中的任何位置,通常放在最後;
case和default本身不改變控制流(這與pascal中的case語句不同),中斷離開switch要用break;
case後的語句可以是單個語句,也可以是復合語句(但不帶開頭和結尾的花括號)
7、陣列相關
陣列是變數的有序集合,陣列的所有成員(陣列元素)都具有相同的資料型別。
陣列定義一般採用如下格式:
型別 陣列名[長度];--長度為常量表示式
c語言不支援動態陣列,即陣列的長度必須在編譯時確定下來,而不是在執行中根據需要臨時決定。但c語言提供了動態分配存貯函式,利用它可實現動態申請空間。
下面是一些陣列初始化例項:
double sales[5]
=;double sales=
;//以實際元素的個數決定陣列的大小
int list[5]
=;//相當於 int list[5] =
//用字串常量初始化乙個字元陣列時,其長度應至少比字元個數多1。
char string[10]
=char string[10]
="hello"
;char string=
"hello"
;
不允許對陣列整體操作,只能單個元素處理;
陣列做函式引數時,陣列長度一般不寫在形參內,因為編譯器不做檢查,應該如下處理:
void
print
(int a,
int length)
陣列作為實參,只寫陣列名,如下:
print
(digit,10)
;
陣列作函式引數是可以將陣列中的值傳遞回來的;(因為陣列名即為陣列的首位址)
8、字元陣列
陣列元素的型別是char。
char mes=
"c language"
;char line[
100]
="programming"
;
字元陣列有如下特點:
陣列元素跟一般變數一樣可賦值、比較、計算等;
陣列下標也是從0 ~ n-1(n為陣列長度);
字元陣列長度可以顯式給出,也可以隱式得到;
由雙引號括起來的的字串常量具有靜態字串陣列型別!!!!!!!
對陣列初始化時,編譯程式以 \0 作為結束符新增到字串最後。因此,陣列長度要比字串長度多1;(所以字元陣列作為函式引數傳遞時,不需要同時傳遞陣列長度。因為字元陣列中字串是以 \0 結束的。)
9、檔案相關
標頭檔案為#include
10、開啟檔案
file * fp;
//檔案指標:與開啟的檔案繫結在一起,以後將使用該指標實現對檔案的所有操作
fp =
fopen
("檔名"
,"檔案使用方式"
);
file 是檔案中定義的結構資料型別,包含檔案有關資訊:讀或寫工作方式;當前讀/寫位置等等。一般使用者不必關心。
若成功開啟指定檔案,則fopen返回指向該檔案的file型別指標;
若開啟檔案失敗,則返回null。
檔名: 字串,可以只寫檔名,也可以包含路徑。(「c:\\temp\\text.txt」)
只寫檔名時,表示檔案在當前目錄下,當前目錄是指:
使用方式也是字串,表示開啟檔案的方式,字元流方式包括:
注意:用「w」或「a」方式呼叫fopen開啟乙個不存在的檔案,系統會首先自動建立該檔案。然後再把它開啟。
用「w」方式打乙個已存在的檔案,則該檔案原有內容全部消失。
用「a」方式開啟乙個已存在的檔案,則原檔案內容保留不變,新新增的內容將加到它的後面去。
用「r」方式開啟乙個已存在的檔案是正常的使用檔案,若用「r」方式而開啟乙個尚未存在的檔案,則會出錯,此時返回null。
「r+」是對乙個已存在的檔案進行讀和寫操作。
「w+」同樣對乙個已存在的檔案開啟時,原資料消失,因此,修改乙個已有檔案的內容時,必須以「r+」方式開啟。
「a+」寫入的資料均在檔案最後,而資料卻可由檔案任何位置上讀取。
因此,乙個好的程式設計風格,應判斷開啟檔案的返回值,並進行處理,如下:
//乙個開啟檔案的典型用法:…if
(( fp =
fopen
(filename, 「r」))==
null
)…
11、讀寫檔案
字元輸入函式:
int fgetc (file * fp );
從fp所指向的檔案中讀取乙個字元並返回。若檔案結束或呼叫失敗,返回eof
字元輸出函式:
int fputc ( int ch, file * fp );
將字元ch寫入fp所指向的檔案。若成功,則返回寫入的字元;若失敗,返回eof
12、關閉檔案
關閉檔案函式:
int fclose (file* fp );
關閉fp檔案指標所指向的檔案,並釋放fp檔案指標。若成功關閉,返回0,否則返回eof
乙個完整的檔案續寫**如下:
#include
//將檔案in.txt拷貝至新檔案out.txt中
intmain()
if((out=
fopen
("out.txt"
,"w"))
==null
)while
((ch =
fgetc
(in))!=
eof)
fputc
(ch,out)
;fclose
(in)
;fclose
(out)
;return0;
}
C語言程式設計注意點
1 scanf d input scanf要用位址符 字串除外 scanf s input 因為字串名字即為字串首位址 scanf s input 遇到空格即結束,gets input 遇到空格不結束,遇到回車結束 scanf s input 如果input是char 一定要先用malloc開闢空間...
C 程式設計注意點
1.strcpy 是碰到 0就會停止拷貝的,最好使用memcpy和strncpy代替。2.memset並不分配記憶體,malloc才分配。3.迴圈裡面要注意出錯的地方sleep 4.匈牙利命名法 5.臨時變數也要有意義 6.控制代碼要注意釋放,特別是在出錯的地方 7.memset不能過於頻繁 8.物...
C語言的注意點
參考 include int main a typedef struct bb printf d d 2f sizeof a sizeof b sizeof a sizeof b 輸出 24 16 0.00 我的電腦是64位 結構體 涉及記憶體對齊以提高記憶體的利用率,位段的使用。因為32位機器的記...