天天看點

c語言 桌面程式_入門c語言必備的零入門知識

 今天跟大家一起從零學C語言:

  1. C語言簡介

  1.1 C語言發展史

  C語言是一種廣泛使用的面向過程的計算機程式設計語言,既适合于系統程式設計,又适合于應用程式設計。C語言的發展曆程大緻如圖1-1所示:

  圖1-1 C語言的發展曆程

  1.2 C語言的特點

  C語言是一種通用的程式設計語言,語言本身簡潔、靈活、表達能力強,被廣泛用于系統軟體和應用軟體的開發,并且具有良好的可移植性。

  C語言的特點可概括如下:

  (1)簡潔、緊湊、靈活。C語言的核心内容很少,隻有32個關鍵字,9種控制語句;程式書寫格式自由,壓縮了一切不必要的成分。

  (2)表達方式簡練、實用。C語言有一套強有力的運算符,達44種,可以構造出多種形式的表達式,用一個表達式就可以實作其他語言可能需要多條語句才能實作的功能。

  (3)資料類型豐富。資料類型越多,資料的表達能力就越強。C語言具有多種資料類型,如字元型、整型、實型、數組、指針、結構體和共用體等,可以實作諸如連結清單、棧、隊列、樹等各種複雜的資料結構。其中的指針類型使得參數的傳遞簡單并且迅速,同時節省記憶體空間。

  (4)具有低級語言的特點。C語言具有與彙編語言相近的功能和描述方法,如位址運算和二進制數位運算等,還可以對硬體端口等資源進行直接操作,充分使用計算機的資源。C語言既具有進階語言便于學習和掌握的特點,又具有機器語言或彙編語言對硬體的操作能力。是以,C語言既可以作為系統描述語言,又可以作為通用的程式設計語言。

  (5)C語言是一種結構化語言,适合于大型程式的子產品化設計。C語言提供了編寫結構化程式的基本控制語句,如if-else語句、switch語句、while語句和do-while語句等。C語言是函數的集合,函數是構成C語言程式的基本機關,每個函數具有獨立的功能,函數之間通過參數傳遞資料。程式員可以編寫自己的函數。同時,不同作業系統的編譯器都為程式員提供了大量的标準庫函數,如輸入/輸出函數、數學函數和字元串處理函數等。靈活地使用标準庫函數可以簡化程式設計,提高編寫程式效率。

  (6)各種版本的編譯器都提供了預處理指令和預處理程式。預處理擴充了C語言的功能,提高了程式的可移植性,為大型程式的調試提供了友善。

  (7)可移植性好。程式從一個環境不經改動或稍加改動就可以移植到另一個完全不同的環境中運作。這是因為标準庫函數和預處理程式将可能出現的與機器有關的因素與源程式分割開來,使得針對不同的計算機硬體環境,可以重新定義有關的内容。

  (8)生成的目标代碼品質高。由C源程式編譯和連結得到的目标代碼的運作效率比用彙編語言編寫的也不過隻低10%~20%,可充分發揮機器的效率。

  (9)C語言文法限制不嚴,程式設計自由度大。C語言程式在運作時不做諸如數組下标越界和變量類型相容性等檢查,而是由程式設計者自己保證程式的正确性。C語言幾乎允許所有的資料類型的轉換,字元型和整型可以自由混合使用,所有類型均可作邏輯型,可自己定義新的類型,還可以把某類型強制轉換為指定的類型。實際上,這使程式設計者有了更大的自主性,能編寫出靈活、優質的程式,同時也給初學者增加了一定的難度。是以,隻有在熟練掌握C語言程式設計之後,才能體會到其靈活性。

  C語言也存在以下缺點:

  (1)程式的錯誤更隐蔽。C語言的靈活性使得用它編寫程式時更容易出錯,而且C的編譯器不檢查這樣的錯誤。與彙編語言類似,需要程式運作時才能發現這些邏輯錯誤。C語言還會有一些隐患,如将比較的

“==” 寫成指派 “=” ,雖然文法上沒錯,但這樣的邏輯錯誤往往不易發現,想要找出錯誤往往十分費時。

  (2)C語言程式有時會難以了解。C語言文法成分相對簡單,是一種小型語言。但是,其資料類型多,運算符豐富且結合性多樣,使得對其了解有一定的難度。

  (3)C語言程式有時會難以修改。考慮到程式規模的大型化或者巨型化,現在程式設計語言通常會提供 “類” 和 “包”

之類的語言特性,這樣的特性可以将程式分解成更加易于管理的子產品。然而C語言缺少這樣的特性,維護大型程式顯得比較困難。

  算法及其表示

  C語言解題時,在程式中有兩方面的描述,即資料描述和處理步驟(算法)描述,後者處理前者的資料。

  算法具有以下特性:

  有窮性:算法在執行了有限步驟後結束,并且每一步都可以在有窮的時間内完成。

  确定性:算法中每種操作必須有确切的含義,即無二義性。同時,無論如何算法隻有唯一的一條執行路徑,即相同的輸入隻能得出相同的輸出。

  可行性:算法中描述的操作都可以通過已經實作的基本操作執行有限次數來實作。

  輸入:有零個或多個輸入,即算法需要的必要資訊。

  輸出:有一個或多個輸出,輸出的是與輸入有某些特定關系的資訊。沒有輸出的算法是無意義的。

  算法的表示:

  自然語言描述;

  傳統流程圖;

  N-S流程圖;

  僞代碼。

  【例如】求兩個正整數m和n的最大公約數(即同時能夠整除m和n的最大正整數)。

  1. 自然語言描述

歐幾裡得闡述了求兩個數的最大公約數的過程——歐幾裡得算法

第一步:以n除m,并令r為所得餘數(顯然n>r

0)。

第二步:若r=0,算法結束,n即為m和n的最大公約數。

第三步:置m

n,n

r,傳回第一步。

  2. 傳統流程圖

  圖1-2 求最大公約數的傳統流程圖

  3. N-S流程圖

  圖1-3 求最大公約數的N-S流程圖

  4. 僞代碼

  算法開始輸入m,n;do{ r←以n除m的餘數; m←n; n←r;}while(r≠0);輸出m;算法結束

  常用算法介紹

  1.枚舉法

  枚舉法又稱為窮舉法。該方法通過逐一考察問題的所有可能解,找出問題真正的解。枚舉法要求問題的可能解必須是有限的,而且這些可能解是已知的。

  【例】給定一個正整數,确定它的整數立方根是否存在,若存在則找出這個立方根。

  算法開始輸入一個正整數給n;x←0;while(x≤n 且 x*x*x≠n){ x←x+1;}if(x≤n) 找到n的整數立方根,輸出x的值;else

輸出n的整數立方根不存在資訊;算法結束

  2.遞推法

  遞推法是從已知的初始條件出發,逐次推出中間結果。在理想狀态下,每遞推一次,結果逐漸接近問題的最後解。遞推法在數值算法中又稱為疊代法。疊代法常用于求近似解的問題,根據對前一步結果的誤差的不同處理方法,疊代法又有逼近疊代和試探疊代等不同方法。數值計算要注意解的穩定性問題,即在疊代中每一步的解越來越接近真正的解,否則疊代不會成功。

  【例】計算一個正整數n的階乘。

  算法開始輸入一個正整數給n;t←1;i←1;while(i≤n){ t←t*i; i←i+1;}輸出結果t算法結束

  3.遞歸法

  一個直接或間接調用過程(或函數)自身的算法稱為遞歸算法,一個函數如果調用自身進行計算則稱該函數為遞歸函數。一些問題的算法描述中,遞歸法往往比非遞歸法更加簡潔易懂。

  【例】計算一個正整數N的階乘。

  階乘函數f的遞歸定義為:f(1)=1 (1!=1,N=1 時)f(N)=N*f(N-1) (N!=N*(N-1)!,如果N>1)

  除了上面介紹的枚舉法、遞推法和遞歸法外,還有回溯法、貪婪法、分治法、動态規劃法等,大家可以先自行了解,後續會繼續補充。

C語言零基礎更多更有用的資料可以看看下邊的資料,可以進我這個小群一塊聊聊【310226693】

C語言程式設計基礎

提升C程式設計能力

夯實C語言,從小白到大牛的進階之路!

指針

指針換裝你還認識嗎

繼續閱讀