找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2912|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

C語(yǔ)言基礎(chǔ)教程(1)-前奏

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:99082 發(fā)表于 2015-12-10 03:27 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
--C語(yǔ)言開(kāi)講啦系列大致介紹


很多同學(xué)到了大學(xué)迷茫、厭學(xué),很大的原因就是不知道學(xué)這些東西有啥用,又這么難又學(xué)不會(huì);蛘哌有很多同學(xué)為了考試成績(jī)而苦讀,失了學(xué)習(xí)基本的興趣,專心服侍考試。下邊是我很喜歡的一句話,每次讀都能讓內(nèi)心一顫。

平時(shí)則放蕩冶游,考試則熟讀講義,不問(wèn)學(xué)問(wèn)之有無(wú),惟爭(zhēng)分?jǐn)?shù)之多寡;試驗(yàn)既終,書(shū)籍束之高閣,毫不過(guò)問(wèn),敷衍三四年,潦草塞責(zé),文憑到手,即可借此活動(dòng)于社會(huì),豈非與求學(xué)初衷大相背馳乎?光陰虛度,學(xué)問(wèn)毫無(wú),是自誤也!---蔡元培《就任北京大學(xué)校長(zhǎng)演示》

1917年蔡元培就說(shuō)出了這樣的話,現(xiàn)在2014年了,每次讀這段話都不得不說(shuō)人家真不愧是大教育家。這話說(shuō)了這么久依舊是一針見(jiàn)血、直抵真相!想想他老人家的話如今竟然成了“普遍現(xiàn)象”,真是讓人倒抽涼氣。

分享給大家,警鐘長(zhǎng)鳴。所以大家要明確目標(biāo)--我們的目標(biāo)是學(xué)以致用!不能不學(xué) 浪費(fèi)光陰,也不能盲目學(xué)習(xí)充當(dāng)被添的鴨子。

接下來(lái)麥粒er準(zhǔn)備開(kāi)始一個(gè)講解C語(yǔ)言基礎(chǔ)的系列文章,畢竟工科的知識(shí)還是有點(diǎn)難懂的,單靠這點(diǎn)篇幅遠(yuǎn)遠(yuǎn)不夠。預(yù)計(jì)連著用六篇小文章來(lái)講C語(yǔ)言入門(mén)基礎(chǔ)知識(shí),大致包括(C介紹、書(shū)籍推薦、關(guān)鍵字、運(yùn)算符、控制語(yǔ)句、函數(shù)、還會(huì)介紹下指針和數(shù)組以便大家接著學(xué)習(xí))拋磚引玉、各灑潘江,哈哈。

學(xué)習(xí)嵌入式需要很多科目(C語(yǔ)言、模電、數(shù)電、自控、信號(hào)等等)的知識(shí)結(jié)合在一起,綜合能力的提升很重要的。要不然難免遇到木桶效應(yīng)的尷尬。學(xué)習(xí)的樂(lè)趣是學(xué)以致用。知識(shí)就是力量嗎?學(xué)會(huì)使用知識(shí)才能創(chuàng)造生產(chǎn)力,那才是力量!理論指導(dǎo)實(shí)踐,實(shí)踐踐行理論,才是學(xué)習(xí)的樂(lè)趣所在。

其實(shí)大部分同學(xué)都應(yīng)該學(xué)過(guò)了C語(yǔ)言基礎(chǔ)了,大一的同學(xué)們正在學(xué),大二大三的估計(jì)都忘光光了吧。其實(shí)正常,學(xué)完了用不到慢慢自然會(huì)忘。還可能當(dāng)時(shí)學(xué)的不好,其實(shí)真心不用自責(zé)真心沒(méi)關(guān)系,誰(shuí)說(shuō)必須要一次就學(xué)懂呢,不懂就不懂,以后碰到需要用的情況就接著學(xué)接著研究,幾次之后總會(huì)懂的。


--說(shuō)說(shuō)C語(yǔ)言吧


上圖中的老爺爺很慈祥吧。Dennis Ritchie 丹尼斯·里奇,C語(yǔ)言之父和UNIX之父。這個(gè)UNIX大家不熟悉,Linux操作系統(tǒng)可能大家都聽(tīng)說(shuō)過(guò),這沒(méi)聽(tīng)過(guò)那Androi安卓大家一定一定聽(tīng)說(shuō)過(guò)吧,安卓就是一種基于Linux的自由及開(kāi)放源代碼的操作系統(tǒng)。

1969年,通用電氣、麻省理工、貝爾實(shí)驗(yàn)室聯(lián)合研制一種叫Multics的操作系統(tǒng),但研制完了發(fā)現(xiàn)系統(tǒng)太大太復(fù)雜,幾乎徹底失敗。

從失敗項(xiàng)目撤出后,貝爾實(shí)驗(yàn)室的工程師們Dennis Ritchie和Ken Thompson設(shè)計(jì)了一個(gè)比Multics更簡(jiǎn)單更輕量級(jí)的操作系統(tǒng)UNIX,1970年將UNIX移植到PDP-11小型機(jī)上,但當(dāng)時(shí)的高級(jí)語(yǔ)言BCPL(Basic Combined Programming Language,由倫敦大學(xué)和劍橋大學(xué)合作研發(fā)的早期高級(jí)語(yǔ)言)簡(jiǎn)稱“B語(yǔ)言”不適合作為UNIX系統(tǒng)的編程語(yǔ)言。所以Dennis Ritchie創(chuàng)立了“New B”語(yǔ)言。很快就被人稱為C語(yǔ)言。

C語(yǔ)言能干啥呢?大部分同學(xué)都能知道--編程唄,那給什么東西編程呢?又有點(diǎn)說(shuō)不清了吧--不太清楚,但我最起碼知道嵌入式系統(tǒng)用,C語(yǔ)言現(xiàn)在在嵌入式軟件開(kāi)發(fā)中的比例仍占60%左右。所以要學(xué)嵌入式,一定要學(xué)好C語(yǔ)言。自然隨著深入還會(huì)學(xué)到更高級(jí)的語(yǔ)言如C++、java,但先學(xué)好C會(huì)給你的編程語(yǔ)言進(jìn)階提供基礎(chǔ)。


--書(shū)籍推薦


大家學(xué)C語(yǔ)言的教程是譚浩強(qiáng)版的吧,很多人說(shuō)那是國(guó)內(nèi)C方面最經(jīng)典之作,教材就不用我推薦了吧。


基礎(chǔ)推薦:C Primer Plus(第五版)中文版

作者[美]Stephen Prata著 出版社:人民郵電出版社

提高推薦:C 和指針 中文版

作者[美] Kenneth A.Reek 出版社:人民郵電出版社

這書(shū)也不是我推薦,大家都說(shuō)好,確實(shí)講的比較仔細(xì),語(yǔ)言也比較通俗好懂。價(jià)格都是40多元,我都買(mǎi)了,因?yàn)槲移綍r(shí)比較有閑著沒(méi)事就買(mǎi)書(shū)的習(xí)慣,大家可以去圖書(shū)館借借,也有同樣習(xí)慣的同學(xué)也可以買(mǎi)。但買(mǎi)書(shū)不代表就看書(shū),買(mǎi)得來(lái)書(shū)買(mǎi)不來(lái)知識(shí),買(mǎi)書(shū)如山倒,讀書(shū)如抽絲!

還有更高級(jí)的,我也沒(méi)過(guò),網(wǎng)上大家評(píng)價(jià)還不錯(cuò)的有《C陷阱和缺陷》、《C專家編程》等等。


--小試牛刀


給大家看兩段簡(jiǎn)單的小程序,檢驗(yàn)一下自己的C語(yǔ)言水平:


這段程序有問(wèn)題嗎?

char i;

unsigned int a[300];

for(i=0;i<300;i++)

a[300]=i;

有,因?yàn)閏har是無(wú)符號(hào)數(shù)(ARM編輯器的編譯環(huán)境中),它的范圍是0至255。所以i會(huì)永遠(yuǎn)小于300,所以這個(gè)循環(huán)永遠(yuǎn)不會(huì)退出。程序也就卡死在這了。


還有

if(x[i]>MAX);

MAX=x[i];

if(x[i]>MAX)

MAX=x[i];

有什么區(qū)別?[這個(gè)給大家思考思考 周三把答案發(fā)給大家]


給大家看看這兩段小程序就是讓大家回憶回憶C語(yǔ)言的知識(shí)。這周的小文章就這樣吧,下周就要介紹關(guān)鍵字、運(yùn)算符這樣的真材實(shí)料的知識(shí)啦。

大一正在學(xué)C的孩子們,拿出書(shū)來(lái)翻翻查查,大二大三C結(jié)課了的孩子們,快去把收起來(lái)的C語(yǔ)言書(shū)找出來(lái)吧!


以下是本系列教程文章列表:歡迎大家踴躍討論,有問(wèn)題可在51黑論壇回帖提出.


C語(yǔ)言基礎(chǔ)教程(1):http://www.torrancerestoration.com/bbs/dpj-41177-1.html
C語(yǔ)言教程(2)-關(guān)鍵字 變量:http://www.torrancerestoration.com/bbs/dpj-41178-1.html
C語(yǔ)言教程(3)-控制語(yǔ)句:http://www.torrancerestoration.com/bbs/dpj-41179-1.html
C語(yǔ)言教程(4)-運(yùn)算符:http://www.torrancerestoration.com/bbs/dpj-41180-1.html
C語(yǔ)言教程(5)-函數(shù):http://www.torrancerestoration.com/bbs/dpj-41181-1.html
C語(yǔ)言教程(6)-數(shù)組與函數(shù)指針:http://www.torrancerestoration.com/bbs/dpj-41182-1.html

51單片機(jī)教程:http://www.torrancerestoration.com/bbs/mcu-xuexi-1.html
STM32教程:http://www.torrancerestoration.com/bbs/dpj-41167-1.html
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:99082 發(fā)表于 2015-12-10 03:30 | 只看該作者
周一更新的小文章里留了個(gè)問(wèn)題啊,大家想明白了沒(méi)?


if(x[i]>MAX)

MAX=x[i];

if(x[i]>MAX);

MAX=x[i]

有什么區(qū)別?


答案公布:


其實(shí)大家仔細(xì)看看,會(huì)發(fā)現(xiàn)兩段代碼的區(qū)別在于那個(gè);分號(hào)。對(duì)啊,區(qū)別就是這一個(gè)分號(hào)的。但功能上卻有很大區(qū)別。

先看

if(x[i]>MAX)

MAX=x[i]

這里運(yùn)用了一個(gè)C語(yǔ)言里常用的if判斷語(yǔ)句:這里的if...else...是C語(yǔ)言里的控制語(yǔ)句關(guān)鍵字。

下邊列舉我總能用到的if...else...條件判斷語(yǔ)句的變形形式。

1./*只有if判斷沒(méi)有else的情況*/

if(條件表達(dá)式)

{

執(zhí)行表達(dá)式1;

執(zhí)行表達(dá)式2;

...

}

2./*既有if還有else的情況*/

if(條件表達(dá)式)

{

執(zhí)行表達(dá)式1;

執(zhí)行表達(dá)式2;

...

}else{

執(zhí)行表達(dá)式3;

執(zhí)行表達(dá)式4;

...

}

3./*有多個(gè)if...else...嵌套的情況*/

if(條件表達(dá)式1)

{

執(zhí)行表達(dá)式1;

執(zhí)行表達(dá)式2;

...

}else if(條件表達(dá)式2)

{

執(zhí)行表達(dá)式3;

執(zhí)行表達(dá)式4;

...

}else{

執(zhí)行表達(dá)式5;

執(zhí)行表達(dá)式6;

...

}


顯然上邊的

if(x[i]>MAX)

MAX=x[i];

是第一種情況,只有if判斷沒(méi)有else的情況

x[i]>MAX是條件表達(dá)式,MAX=x[i]是執(zhí)行表達(dá)式,語(yǔ)句進(jìn)行判斷如果符合x[i]>MAX條件表達(dá)式的條件,執(zhí)行MAX=x[i]執(zhí)行表達(dá)式,然后;分號(hào)表示語(yǔ)句結(jié)束。如果不符合x[i]>MAX條件表達(dá)式的條件,就會(huì)跳出判斷語(yǔ)句,語(yǔ)句結(jié)束。(補(bǔ)充說(shuō)明一下,當(dāng)if語(yǔ)句只有一條執(zhí)行表達(dá)式時(shí),{}可以省略。自然如果把上句寫(xiě)成:

if(x[i]>MAX)

{

MAX=x[i];

}

會(huì)更標(biāo)準(zhǔn)。


再來(lái)看看下邊的

if(x[i]>MAX);

MAX=x[i]

;c語(yǔ)言中,分號(hào)結(jié)尾代表語(yǔ)句結(jié)束,所以這段的代碼是兩個(gè)語(yǔ)句而不是一個(gè)。

第一個(gè)語(yǔ)句是if(x[i]>MAX);,也是第一種情況,只有if判斷沒(méi)有else的情況。x[i]>MAX是條件表達(dá)式,那執(zhí)行表達(dá)式是什么呢?此句的執(zhí)行表達(dá)式位置沒(méi)有寫(xiě)東西,即為空白,也就是什么都不執(zhí)行。

x[i]>MAX是條件表達(dá)式,空白是執(zhí)行表達(dá)式,也就是什么都不執(zhí)行。語(yǔ)句進(jìn)行判斷如果符合x[i]>MAX條件表達(dá)式的條件,什么都不執(zhí)行,然后;分號(hào)表示語(yǔ)句結(jié)束。如果不符合x[i]>MAX條件語(yǔ)句的表達(dá)式,當(dāng)然什么也都不會(huì)執(zhí)行,就跳出判斷語(yǔ)句,語(yǔ)句結(jié)束。

代碼從上到下執(zhí)行,自然接著向下執(zhí)行了。第二個(gè)語(yǔ)句是MAX=x[i];就是把x[i]數(shù)組里第i個(gè)元素賦值給MAX。

從語(yǔ)法書(shū)寫(xiě)上來(lái)說(shuō)這段代碼是沒(méi)有問(wèn)題的,但在執(zhí)行結(jié)果上卻存在問(wèn)題。就是無(wú)論是否符合x[i]>MAX是條件表達(dá)式,都會(huì)得到MAX=x[i]的結(jié)果,那判斷就跟沒(méi)判斷一樣,這當(dāng)然不是語(yǔ)句的本意。

舉個(gè)例子:比如寫(xiě)完這篇小文章,我當(dāng)然要保存了,我點(diǎn)擊了“保存按鈕”,判段“電腦提示保存成功”還是“電腦提示保存失敗”和我接下來(lái)執(zhí)行的動(dòng)作“關(guān)閉編輯頁(yè)面”

if(電腦提示保存成功)

關(guān)閉編輯頁(yè)面;

那就是我只有當(dāng)“電腦提示保存成功”時(shí)才會(huì)關(guān)閉編輯頁(yè)面

if(電腦提示保存成功);

關(guān)閉編輯頁(yè)面;

如果我這么執(zhí)行,那當(dāng)“電腦提示保存成功”或“電腦提示保存失敗”時(shí),我都會(huì)接著把編輯頁(yè)面關(guān)掉,那我不是白打字這么半天,這顯然不是我想要的。

大家編程時(shí),語(yǔ)法的錯(cuò)誤(比如關(guān)鍵字寫(xiě)錯(cuò),有些變量沒(méi)有定義)編譯軟件會(huì)報(bào)錯(cuò),還會(huì)提醒大家錯(cuò)誤代碼的位置,這還算比較好的情況。如果一段代碼沒(méi)有報(bào)錯(cuò),但是燒寫(xiě)到單片機(jī)里執(zhí)行的結(jié)果卻不對(duì),這就很讓人頭疼了!因?yàn)檫@是語(yǔ)意錯(cuò)誤,就得自己一點(diǎn)點(diǎn)在大段的代碼中排除,可能就是因?yàn)橐粋(gè)分號(hào)啊。

舉個(gè)例子:比如你想跟一個(gè)姑娘表達(dá):“你比我見(jiàn)過(guò)的所有女生都優(yōu)秀!”

但是說(shuō)錯(cuò)了,說(shuō)成“你比我女生見(jiàn)過(guò)都優(yōu)所有的!”女生就會(huì)提示你“說(shuō)人話好嗎?同學(xué)!”,這還算比較好的情況。(語(yǔ)法錯(cuò)誤,編譯軟件會(huì)提示錯(cuò)誤,且錯(cuò)誤代碼不執(zhí)行)

如果說(shuō)錯(cuò)了,說(shuō)成“我見(jiàn)過(guò)的所有女生都優(yōu)秀!”,親,恭喜你沒(méi)有語(yǔ)法錯(cuò)誤了。這時(shí)估計(jì)那姑娘也不會(huì)說(shuō)什么,只是默默的走開(kāi)了,大錯(cuò)也就鑄成了。(語(yǔ)意錯(cuò)誤,編譯軟件不會(huì)提示錯(cuò)誤,且代碼正常執(zhí)行---因?yàn)榫幾g軟件也不知道你本來(lái)想表達(dá)的意思)

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表