零基礎(chǔ)C語言入門必備知識(shí)

  今天跟大家一起從零學(xué)C語言:

  1. C語言簡(jiǎn)介

  1.1 C語言發(fā)展史

  C語言是一種廣泛使用的面向過程的計(jì)算機(jī)程序設(shè)計(jì)語言骑丸,既適合于系統(tǒng)程序設(shè)計(jì)邑遏,又適合于應(yīng)用程序設(shè)計(jì)。C語言的發(fā)展歷程大致如圖1-1所示:

  圖1-1 C語言的發(fā)展歷程

  1.2 C語言的特點(diǎn)

  C語言是一種通用的程序設(shè)計(jì)語言咕痛,語言本身簡(jiǎn)潔麻惶、靈活、表達(dá)能力強(qiáng)宪拥,被廣泛用于系統(tǒng)軟件和應(yīng)用軟件的開發(fā)仿野,并且具有良好的可移植性。

  C語言的特點(diǎn)可概括如下:

  (1)簡(jiǎn)潔她君、緊湊设预、靈活。C語言的核心內(nèi)容很少犁河,只有32個(gè)關(guān)鍵字鳖枕,9種控制語句;程序書寫格式自由,壓縮了一切不必要的成分桨螺。

  (2)表達(dá)方式簡(jiǎn)練宾符、實(shí)用。C語言有一套強(qiáng)有力的運(yùn)算符灭翔,達(dá)44種魏烫,可以構(gòu)造出多種形式的表達(dá)式,用一個(gè)表達(dá)式就可以實(shí)現(xiàn)其他語言可能需要多條語句才能實(shí)現(xiàn)的功能肝箱。

  (3)數(shù)據(jù)類型豐富哄褒。數(shù)據(jù)類型越多,數(shù)據(jù)的表達(dá)能力就越強(qiáng)煌张。C語言具有多種數(shù)據(jù)類型呐赡,如字符型、整型骏融、實(shí)型链嘀、數(shù)組、指針档玻、結(jié)構(gòu)體和共用體等怀泊,可以實(shí)現(xiàn)諸如鏈表、棧误趴、隊(duì)列霹琼、樹等各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。其中的指針類型使得參數(shù)的傳遞簡(jiǎn)單并且迅速,同時(shí)節(jié)省內(nèi)存空間枣申。

  (4)具有低級(jí)語言的特點(diǎn)树灶。C語言具有與匯編語言相近的功能和描述方法,如地址運(yùn)算和二進(jìn)制數(shù)位運(yùn)算等糯而,還可以對(duì)硬件端口等資源進(jìn)行直接操作天通,充分使用計(jì)算機(jī)的資源。C語言既具有高級(jí)語言便于學(xué)習(xí)和掌握的特點(diǎn)熄驼,又具有機(jī)器語言或匯編語言對(duì)硬件的操作能力像寒。因此,C語言既可以作為系統(tǒng)描述語言瓜贾,又可以作為通用的程序設(shè)計(jì)語言诺祸。

  (5)C語言是一種結(jié)構(gòu)化語言,適合于大型程序的模塊化設(shè)計(jì)祭芦。C語言提供了編寫結(jié)構(gòu)化程序的基本控制語句筷笨,如if-else語句、switch語句龟劲、while語句和do-while語句等胃夏。C語言是函數(shù)的集合,函數(shù)是構(gòu)成C語言程序的基本單位昌跌,每個(gè)函數(shù)具有獨(dú)立的功能仰禀,函數(shù)之間通過參數(shù)傳遞數(shù)據(jù)。程序員可以編寫自己的函數(shù)蚕愤。同時(shí)答恶,不同操作系統(tǒng)的編譯器都為程序員提供了大量的標(biāo)準(zhǔn)庫(kù)函數(shù),如輸入/輸出函數(shù)萍诱、數(shù)學(xué)函數(shù)和字符串處理函數(shù)等悬嗓。靈活地使用標(biāo)準(zhǔn)庫(kù)函數(shù)可以簡(jiǎn)化程序設(shè)計(jì),提高編寫程序效率裕坊。

  (6)各種版本的編譯器都提供了預(yù)處理命令和預(yù)處理程序包竹。預(yù)處理擴(kuò)展了C語言的功能,提高了程序的可移植性碍庵,為大型程序的調(diào)試提供了方便映企。

  (7)可移植性好。程序從一個(gè)環(huán)境不經(jīng)改動(dòng)或稍加改動(dòng)就可以移植到另一個(gè)完全不同的環(huán)境中運(yùn)行静浴。這是因?yàn)闃?biāo)準(zhǔn)庫(kù)函數(shù)和預(yù)處理程序?qū)⒖赡艹霈F(xiàn)的與機(jī)器有關(guān)的因素與源程序分割開來,使得針對(duì)不同的計(jì)算機(jī)硬件環(huán)境挤渐,可以重新定義有關(guān)的內(nèi)容苹享。

  (8)生成的目標(biāo)代碼質(zhì)量高。由C源程序編譯和鏈接得到的目標(biāo)代碼的運(yùn)行效率比用匯編語言編寫的也不過只低10%~20%,可充分發(fā)揮機(jī)器的效率得问。

  (9)C語言語法限制不嚴(yán)囤攀,程序設(shè)計(jì)自由度大。C語言程序在運(yùn)行時(shí)不做諸如數(shù)組下標(biāo)越界和變量類型兼容性等檢查宫纬,而是由編程者自己保證程序的正確性焚挠。C語言幾乎允許所有的數(shù)據(jù)類型的轉(zhuǎn)換,字符型和整型可以自由混合使用漓骚,所有類型均可作邏輯型蝌衔,可自己定義新的類型,還可以把某類型強(qiáng)制轉(zhuǎn)換為指定的類型蝌蹂。實(shí)際上噩斟,這使編程者有了更大的自主性,能編寫出靈活孤个、優(yōu)質(zhì)的程序剃允,同時(shí)也給初學(xué)者增加了一定的難度。所以齐鲤,只有在熟練掌握C語言程序設(shè)計(jì)之后斥废,才能體會(huì)到其靈活性。

  C語言也存在以下缺點(diǎn):

  (1)程序的錯(cuò)誤更隱蔽给郊。C語言的靈活性使得用它編寫程序時(shí)更容易出錯(cuò)营袜,而且C的編譯器不檢查這樣的錯(cuò)誤。與匯編語言類似丑罪,需要程序運(yùn)行時(shí)才能發(fā)現(xiàn)這些邏輯錯(cuò)誤荚板。C語言還會(huì)有一些隱患,如將比較的

“==” 寫成賦值 “=” 吩屹,雖然語法上沒錯(cuò)跪另,但這樣的邏輯錯(cuò)誤往往不易發(fā)現(xiàn),想要找出錯(cuò)誤往往十分費(fèi)時(shí)煤搜。

  (2)C語言程序有時(shí)會(huì)難以理解免绿。C語言語法成分相對(duì)簡(jiǎn)單,是一種小型語言擦盾。但是嘲驾,其數(shù)據(jù)類型多,運(yùn)算符豐富且結(jié)合性多樣迹卢,使得對(duì)其理解有一定的難度辽故。

  (3)C語言程序有時(shí)會(huì)難以修改「睿考慮到程序規(guī)模的大型化或者巨型化誊垢,現(xiàn)在編程語言通常會(huì)提供 “類” 和 “包”

之類的語言特性,這樣的特性可以將程序分解成更加易于管理的模塊。然而C語言缺少這樣的特性喂走,維護(hù)大型程序顯得比較困難殃饿。

  1.3算法及其表示

  C語言解題時(shí),在程序中有兩方面的描述芋肠,即數(shù)據(jù)描述和處理步驟(算法)描述乎芳,后者處理前者的數(shù)據(jù)。

  算法具有以下特性:

  有窮性:算法在執(zhí)行了有限步驟后結(jié)束帖池,并且每一步都可以在有窮的時(shí)間內(nèi)完成奈惑。

  確定性:算法中每種操作必須有確切的含義,即無二義性碘裕。同時(shí)携取,無論如何算法只有唯一的一條執(zhí)行路徑,即相同的輸入只能得出相同的輸出帮孔。

  可行性:算法中描述的操作都可以通過已經(jīng)實(shí)現(xiàn)的基本操作執(zhí)行有限次數(shù)來實(shí)現(xiàn)雷滋。

  輸入:有零個(gè)或多個(gè)輸入,即算法需要的必要信息文兢。

  輸出:有一個(gè)或多個(gè)輸出晤斩,輸出的是與輸入有某些特定關(guān)系的信息。沒有輸出的算法是無意義的姆坚。

  算法的表示:

  自然語言描述;

  傳統(tǒng)流程圖;

  N-S流程圖;

  偽代碼澳泵。

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

  1. 自然語言描述

? ? ? ??歐幾里得闡述了求兩個(gè)數(shù)的最大公約數(shù)的過程——?dú)W幾里得算法

第一步:以n除m兼呵,并令r為所得余數(shù)(顯然n>r

0)兔辅。

第二步:若r=0,算法結(jié)束,n即為m和n的最大公約數(shù)击喂。

第三步:置m

n维苔,n

r,返回第一步懂昂。

  2. 傳統(tǒng)流程圖

  圖1-2 求最大公約數(shù)的傳統(tǒng)流程圖

  3. N-S流程圖

  圖1-3 求最大公約數(shù)的N-S流程圖

  4. 偽代碼

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

  1.4常用算法介紹

  1.枚舉法

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

  【例】給定一個(gè)正整數(shù)铲敛,確定它的整數(shù)立方根是否存在褐澎,若存在則找出這個(gè)立方根。

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

輸出n的整數(shù)立方根不存在信息;算法結(jié)束

  2.遞推法

  遞推法是從已知的初始條件出發(fā)乱凿,逐次推出中間結(jié)果顽素。在理想狀態(tài)下咽弦,每遞推一次徒蟆,結(jié)果逐漸接近問題的最后解。遞推法在數(shù)值算法中又稱為迭代法型型。迭代法常用于求近似解的問題段审,根據(jù)對(duì)前一步結(jié)果的誤差的不同處理方法,迭代法又有逼近迭代和試探迭代等不同方法闹蒜。數(shù)值計(jì)算要注意解的穩(wěn)定性問題寺枉,即在迭代中每一步的解越來越接近真正的解,否則迭代不會(huì)成功绷落。

  【例】計(jì)算一個(gè)正整數(shù)n的階乘姥闪。

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

  3.遞歸法

  一個(gè)直接或間接調(diào)用過程(或函數(shù))自身的算法稱為遞歸算法,一個(gè)函數(shù)如果調(diào)用自身進(jìn)行計(jì)算則稱該函數(shù)為遞歸函數(shù)砌烁。一些問題的算法描述中筐喳,遞歸法往往比非遞歸法更加簡(jiǎn)潔易懂。

  【例】計(jì)算一個(gè)正整數(shù)N的階乘函喉。

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

  除了上面介紹的枚舉法避归、遞推法和遞歸法外,還有回溯法管呵、貪婪法梳毙、分治法、動(dòng)態(tài)規(guī)劃法等捐下,大家可以先自行了解账锹,后續(xù)會(huì)繼續(xù)補(bǔ)充。

C語言零基礎(chǔ)更多更有用的資料可以看看下邊的資料坷襟,可以進(jìn)我這個(gè)小群一塊聊聊【310226693】

C語言編程基礎(chǔ)

http://www.makeru.com.cn/live/1758_311.html?s=45051

提升C編程能力

http://www.makeru.com.cn/live/1392_1166.html?s=45051

夯實(shí)C語言奸柬,從小白到大牛的進(jìn)階之路!

http://www.makeru.com.cn/live/5413_1980.html?s=45051

指針

http://www.makeru.com.cn/live/1392_238.html?s=45051

指針換裝你還認(rèn)識(shí)嗎

http://www.makeru.com.cn/live/5413_2043.html?s=45051

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末啤握,一起剝皮案震驚了整個(gè)濱河市鸟缕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌排抬,老刑警劉巖懂从,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蹲蒲,居然都是意外死亡番甩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門届搁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缘薛,“玉大人窍育,你說我怎么就攤上這事⊙珉剩” “怎么了漱抓?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)恕齐。 經(jīng)常有香客問我乞娄,道長(zhǎng),這世上最難降的妖魔是什么显歧? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任仪或,我火速辦了婚禮,結(jié)果婚禮上士骤,老公的妹妹穿的比我還像新娘范删。我一直安慰自己,他們只是感情好拷肌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布到旦。 她就那樣靜靜地躺著,像睡著了一般廓块。 火紅的嫁衣襯著肌膚如雪厢绝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天带猴,我揣著相機(jī)與錄音昔汉,去河邊找鬼。 笑死拴清,一個(gè)胖子當(dāng)著我的面吹牛靶病,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播口予,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼娄周,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了沪停?” 一聲冷哼從身側(cè)響起煤辨,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎木张,沒想到半個(gè)月后众辨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舷礼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年鹃彻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妻献。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛛株,死狀恐怖团赁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谨履,我是刑警寧澤欢摄,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站屉符,受9級(jí)特大地震影響剧浸,放射性物質(zhì)發(fā)生泄漏锹引。R本人自食惡果不足惜矗钟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫌变。 院中可真熱鬧吨艇,春花似錦、人聲如沸腾啥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倘待。三九已至疮跑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凸舵,已是汗流浹背祖娘。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啊奄,地道東北人渐苏。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像菇夸,于是被迫代替她去往敵國(guó)和親琼富。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容