C語言程式設計注意點3

2021-09-30 00:17:22 字數 4654 閱讀 1080

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位機器的記...