C 程式語言的四個基本準則

2021-10-24 13:42:19 字數 3412 閱讀 4297

二、次高準則:高效性

三、第三準則:合乎日常習慣

四、補充準則:相似相同規則

五、結語

對這個準則的理解:程式語言於計算機而言,通俗地說就是指令,若乙個指令出現歧義,計算機則會無法判斷該執行哪一種。倘若執行了其中一種,則可能與本來所需要的結果相悖,不符合實際需求。所以,程式語言的無二義性,可以使得我們的程式語言更規範更安全。程式語言於程式設計師而言,則是「程式設計師間交流的語言」。而程式設計師們,通過拋棄雙方各自的自然語言而使用程式語言,這麼做的目的,正是為了無二義性。

準則的具體體現:

優先順序:當乙個表示式**現了多個運算子時,則按照等級排列的運算順序進行計算。當運算子的優先順序相同時,則看其結合性。

示例:

int x =3+

4*5;

根據運算子的優先順序,先進行4*5的運算,得到20,再進行3+20的運算,得到23,最終賦值給x為23。

結合性:指相同優先順序的運算子在同乙個表示式中,且沒有括號的時候,運算子和運算元的結合方式,通常有從左到右結合和從右到左結合兩種方式。

示例:

#include

using

namespace std;

intmain()

我們發現,這個表示式只有賦值符,這樣優先順序就無法幫助我們決定哪個操作先執行,是先執行b=c呢,還是先執行a=b?如果按前者,a的結果為2,如果按後者,a的結果為1。

所有的賦值符(包括復合賦值)都具有右結合性,就是說在表示式中最右邊的操作最先執行,然後從右到左依次執行。這樣,先將c的值2賦給b,使得b的值為2,然後b再賦值給a,最終a的值是2。類似地,具有左結合性的操作符(如位操作符「&」和「|」)則是從左至右依次執行。所以,遇到乙個表示式時,先根據運算子的優先順序將表示式拆分成幾個子表示式,然後在每個子表示式中根據運算子的結合性來進一步確定執行的順序。

計算機不能像人一樣一眼讀懂乙個單詞,他必須乙個字元乙個字元的去匹配識別。因此每次輸入頭符號時要判斷該符號是數字還是字元,若是數字則可以直接跳到數字處理模組,若是字元則與關鍵字進行匹配,判斷是關鍵字還是識別符號。

示例:

int

2d =12;

double a =

2d;

如果識別符號可以以數字為開頭,那麼 a究竟解釋為12.0,還是應該解釋為2.0?這就產生了二義性,不滿足最高準則。

貪心規則指c++的每個符號應該包含盡可能多的字元,也就是說,我們的編譯器將程式分解成符號的方法是,從左到右乙個乙個字元的讀入,如果該字元可能組成乙個符號,那麼再讀入下乙個字元,然後再判斷已經讀入的兩個字元是否有可能是乙個符號或者乙個符號的組成部分,如果可能則繼續讀入下乙個字元,重複整個過程,直到讀入的字元組成的字串已不再可能組成有意義的符號,但前提是符號的中間不能嵌有空格。

示例:

#include

using

namespace std;

intmain()

若沒有貪心規則的話,c的結果是(a++)+b=5還是a+(++b)=6呢?有了貪心規則後,我們就可以知道答案是前者,即5,而不是6。

else總是與離其最近的if配對、標頭檔案中不能出現全域性變數的定義等。

小結:以上例項就是為了消除程式語言的二義性,使得整個表示式,整個程式在運算時能夠有條不紊地進行,也使得程式設計師們閱讀**時更加方便。

對這個準則的理解:c++語言剛剛出現時,計算機效能普遍偏低,實現一些時間複雜度較高的程式就會耗時很久。受限於這個因素,當時的人們只能通過優化語言的結構來使得程式更順利執行。說到這裡,我想順便提一件有趣的事,有人說學程式設計就應該買個效能一般的電腦,這樣就可以逼著自己不斷優化演算法。不過隨著現在的發展,計算機的效能也越來越好,對於這個次高準則的要求也沒那麼高了,但追求高效總歸是沒錯的,能少操勞點電腦就少操勞點吧。

準則的具體體現:

下標0索引其實本質上是為了提高計算時的效率,程式在取第i個變數的位址時,若下標1索引,則每次運算時都要多減去1。用下標1索引的話,可能更合乎日常習慣,但下標0索引更符合次高準則高效性,故在c++中選擇以下標0索引。另外,若把陣列a[i]中的i理解為與首位址的偏移量,實際上就會發現,下標0索引更適合。若i=0,與首位址偏移量為0,即為首位址本身。

邏輯短路是對於邏輯運算而言,是指僅計算邏輯表示式中的一部分便能確定結果,而不需對整個表示式進行計算的現象,從而使得**更加高效,減少了一些不必要的運算。

對於「&&」運算子,當第乙個運算元為false時,將不會判斷第二個運算元,因為此時無論第二個運算元為何,最後的運算結果一定是false,故直接短路;

對於「||」運算子,當第乙個運算元為true時,將不會判斷第二個運算元,因為此時無論第二個運算元為何,最後的運算結果一定是true,故也直接短路。

示例:

#include

using

namespace std;

void

main()

執行結果為:x=0 y=1

c++利用指標,引用,內聯函式等提高了程式的執行效率。

對這個準則的理解:程式語言本身就是給程式設計師使用,程式設計師之間交流的一種語言,一套不合乎日常習慣的規則,則會給程式設計師帶來極大的不便性。都說養成習慣難,但改掉習慣也很難!合乎日常習慣則可以讓程式設計師們進行交流時更方便,更高效。

準則的具體體現:

程式語言的變數命名,一般講究用最短字元表示最準確的意義,良好的**習慣可以使得程式設計師之間的交流更加方便。

示例:

//以常用整型變數為例

int nid;

//int字首:n

short sid;

//short字首:s

unsigned

int unid     // unsigned int 字首:un

long lid;

//long字首:l

在數學中,「先乘除後加減,有括號先括號」的計算順口溜,在c++中也是如此,符合日常習慣,給編寫帶來了極大方便。

對這個準則的理解:該準則在c++中體現十分明顯,如果有兩個不同的物件a與b,a有行為a,b有行為b,如果a與b兩種行為在邏輯上有相似性,則c++會為物件a額外增加乙個行為b,也會對應物件b額外增加乙個a行為。

準則的具體體現:c++的三類初始化方式

int j=2;

int j=i;

intj(

2);int

j(i)

;

int j;

int j

;int j=

;int j=

;

不同程式語言的準則可能有所不同,但大多相似於c++這四個基本準則。由於時間原因,還有許多示例在文中並未展示,也還有一些是筆者自身也還沒碰到的,但相信在進行整理了這些概念後,下次再碰到示例時,就會有一見如故的感覺。筆者也算是小白,若文章中有什麼問題,還請指正,謝謝!

C 程式語言的四個基本準則

對這個準則的理解 這個準則,不僅是c 的準則,更是所有型別程式語言的最高準則。同一條c 語句不能同時具備兩種或多種含義,每一條c 語句只能通過一種方式執行,得到唯一結果。準則的具體體現 1 運算子的優先順序與結合性。優先順序是為了消除如5 6 7的表示式,是應該被當作 5 6 7還是5 6 7 的二...

C 程式語言的四個基本準則

理解 同一條語句不能具有兩種及以上的含義,否則將導致語句的執行過程發生衝突。體現 1 運算子的優先順序與結合性 運算子優先順序的產生,是為了消除運算過程中可能產生的歧義。例如加法和乘法兩種運算到底誰先進行。int a 1 2 3 乘法優先於加法進行運算,輸出7,而不是9 2 識別符號不能以數字開頭 ...

C 程式語言的四個基本準則

二 次高準則 高效性 三 第三準則 合乎日常習慣 四 相似相同規則 同一條c 語句不能同時具備兩種或多種含義,每一條c 語句只能通過一種方式執行,得到唯一結果。優先順序 當乙個表示式 現了多個不同的運算子時,不同的運算子有按照等級排列的運算順序,即運算子的優先順序。從上表中可得,優先順序從上到下依次...