9月計算機二級考試C語言輔導 C 程式設計技巧

2022-03-30 03:05:31 字數 2667 閱讀 1744

一、使用new和delete進行動態記憶體分配和釋放

運算子new和delete是c++新增的運算子,提供了儲存的動態分配和釋放功能。它的作用相當於c語言的函式malloc()和free(),但是效能更為優越。使用new較之使用malloc()有以下的幾個優點:

(1)new自動計算要分配型別的大小,不使用sizeof運算子,比較省事,可以避免錯誤。

(2)自動地返回正確的指標型別,不用進行強制指標型別轉換。

(3)可以用new對分配的物件進行初始化。

使用例子:

(1)int* p;

p=new int[10]; //分配乙個含有10個整數的整形陣列

delete p; //刪除這個陣列

(2)int* p;

p=new int (100);//動態分配乙個整數並初始化

二、使用inline內連函式替代巨集呼叫

對於頻繁使用的函式,c語言建議使用巨集呼叫代替函式呼叫以加快**執行,減少呼叫開銷。但是巨集呼叫有許多的弊端,可能引起不期望的***。例如巨集:#define abs(a) ((a)<0?(-a):(a)), 當使用abs(i++)時,這個巨集就會出錯。

所以在c++中應該使用inline內連函式替代巨集呼叫,這樣既可達到巨集呼叫的目的,又避免了巨集呼叫的弊端。

使用內連函式只須把inline關鍵字放在函式返回型別的前面。例如:

inline int add(int a,int b);//宣告add()為內連函式

這樣編譯器在遇到add()函式時,就不再進行函式呼叫,而是直接嵌入函式**以加快程式的執行。

三、使用函式過載

在c語言中,兩個函式的名稱不能相同,否則會導致編譯錯誤。而在c++中,函式名相同而引數資料型別不同的兩個函式被解釋為過載。例如:

void puthz(char* str);//在當前位置輸出漢字

void puthz(int x,?int y,?char * str);//在x,y處輸入數字

使用函式過載可以幫助程式設計師處理更多的複雜問題,避免了使用諸如intabs()、fabs()、dabs()等繁雜的函式名稱;同時在大型程式中,使函式名易於管理和使用,而不必絞盡腦汁地去處理函式名。同時必須注意,引數資料型別相同,但是函式返回型別不同的兩個函式不能過載。

四、使用引用(reference)代替指標進行引數傳遞

在c語言中,如果乙個函式需要修改用作引數的變數值的時候 ,引數應該宣告為指標型別。例如:

void add(int *a)

*a++;

呼叫時則使用

add(&x); //其中x為int或可以轉化為int的型別,如unsigned int, 但這時候編譯器通過回給出warning

對於複雜的程式,使用指標容易出錯,程式也難以讀懂。在c++中,對於上述情況 可以使用引用來代替指標,使程式更加清晰易懂。引用就是對變數取的乙個別名,對引用進行操作,這就相當於對原有變數進行操作。例如使用引用的函式定義為:

void add(int& a)

a++;//a為乙個整數的引用

呼叫時使用

add(x); //其中x為int

這個函式與使用指標的上乙個函式的功能是一樣的,然而**卻更為簡潔和清晰易懂。

[1] [2] 下一頁

五、使用預設引數

在c++中函式可以使用預設引數,例如:

void puthzxy(char *str,int x=-1, int y=-1)

if(x==-1)

x=wherex();

if(y==-1)

x=wherex();

moveto(x,y);

puthx(str);

可以有三種方式呼叫函式puthzxy(),例如:

puthzxy("c++語言");//使用預設引數?在當前位置輸出

puthzxy("c++語言",10,10);//沒有使用預設引數

puthzxy("c++語言",10);//對y使用預設引數,指定x的位置

通常的情況下,乙個函式應該具有盡可能大的靈活性。使用預設引數為程式設計師處理更大的複雜性和靈活性問題提供了有效的方法,所以在c++的**中都大量地使用了預設引數。

需要說明的是,所有的預設引數必須出現在不預設引數的右邊。亦即,一旦開始定義預設引數,就不可再說明非預設的引數。

例如:void puthzxy(char*str,int x=-1,int y=-1)//正確

void puthzxy(int x=-1,int y=-1,char*str)//錯誤

六、使用stl

stl(standard template library,標準模板庫), stl的**從廣義上講分為三類:algorithm(演算法)、container(容器)和iterator(迭代器),幷包括一些工具類如auto_ptr。幾乎所有的**都採用了模板類和模版函式的方式,這相比於傳統的由函式和類組成的庫來說提供了更好的**重用機會。

#include// 包含相關的標頭檔案/

typedef std::vector intvector;//使用typedef 使**看起來更簡潔

int main()

intvector vi;

for(int i=0;i<10,i++)

vi.push_back(i);//使用push_back新增元素

for(int i=0;i

std::cout<  }

上一頁  [1] [2]

2013計算機二級考試C語言輔導 C語言程式的構成

c語言程式的構成 1 c語言的源程式是由函式構成的,每乙個函式完成相對獨立的功能,其中至少包括乙個主函式 main 函式 2 c程式總是從main 函式開始執行。3 c語言規定每個語句以分號 結束,分號是語句組成不可缺少的部分,它在每條語句的最後出現。4 程式的注釋部分應括在 與 之間,和 之間不能...

2023年9月計算機等級考試二級C模擬試題 10

一 選擇題 1 下列資料結構中,按先進後出原則組織資料的是 a 線性鍊錶 b 棧 c 迴圈鍊錶 d 順序表 正確答案 b 2 具有3個結點的二叉樹有 a 2種形態 b 4種形態 c 7種形態 d 5種形態 正確答案 d 3 設有下列二叉樹 對此二叉樹前序遍歷的結果為 a zbtycpxa b atb...

2013計算機二級考試C語言輔導 陣列

陣列 概念 構造資料型別之一 陣列 有序資料的集合,用陣列名標識元素 屬同一資料型別,用陣列名和下標確定 一維陣列的定義 定義方式 資料型別 陣列名 常量表示式 例 int a 6 一維陣列的初始化 int a 5 說明 陣列不初始化,其元素值為隨機數對static陣列元素不賦初值,系統會自動賦以0...