莫非這點(diǎn)小問(wèn)題就打擊到你了, 你漫漫長(zhǎng)征第一步都還沒(méi)開(kāi)始, 以后的數(shù)據(jù)庫(kù) 數(shù)據(jù)結(jié)構(gòu) 操作系統(tǒng) 計(jì)算機(jī)網(wǎng)絡(luò) 每一門課程都是很難的
創(chuàng)新互聯(lián)是一家專業(yè)提供永勝企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、HTML5、小程序制作等業(yè)務(wù)。10年已為永勝眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
C語(yǔ)言的函數(shù)其實(shí)很簡(jiǎn)單 你就把他當(dāng)成一個(gè)功能模塊就行了, 這個(gè)東西理解清楚了其實(shí)很簡(jiǎn)單的, 比如說(shuō)你想請(qǐng)客吃飯, 這是你的最后功能,中間你可能叫別人通知另外的人, 那么你叫別人通知的這個(gè)過(guò)程就可以當(dāng)成一個(gè)函數(shù)了, 因?yàn)槟憬兴麕湍阕鲆患? 但可能不知道他是怎么做的, 你只關(guān)注入口和出口, 即你叫他通知和他是否通知到.
既然是叫別人幫忙做事的話, 你可能需要傳一些東西給別人這就是參數(shù), 別人做完后, 可能要返回給你一個(gè)東西, 這就是返回值, 但這不是必須的.
C語(yǔ)言程序全都是函數(shù), 他就是一個(gè)函數(shù)的集合, 在main函數(shù)中調(diào)用其他的函數(shù), 所以說(shuō)C語(yǔ)言里全是函數(shù), 鋤此之外再?zèng)]別的東西了
上回說(shuō)的是一些小問(wèn)題,真正編東西,學(xué)東西還有許多要注意的地方。
由于本人也是剛學(xué)不久,水平有限,說(shuō)錯(cuò)的地方望大家原諒。謝謝!
一、多看代碼
在有一定基礎(chǔ)以后一定要多看別人的代碼。注意代碼中的算法和數(shù)據(jù)結(jié)構(gòu)。畢竟學(xué)C之后的關(guān)口就是算法和數(shù)據(jù)結(jié)構(gòu)。提到數(shù)據(jù)結(jié)構(gòu),指針是其中重要的一環(huán),絕大多數(shù)的數(shù)據(jù)結(jié)構(gòu)是建立在指針之上的,如鏈表、隊(duì)列、樹(shù)、圖等等,所以只有學(xué)好指針才能真正學(xué)好C。別的方面也要關(guān)注一下,諸如變量的命名、庫(kù)函數(shù)的用法等等。有些庫(kù)函數(shù)是經(jīng)常用到的。對(duì)于這些函數(shù)的用法就要牢牢記住。
二、要自己動(dòng)手
編程序是個(gè)實(shí)干的活,光說(shuō)不練不行。剛開(kāi)始學(xué)的時(shí)候可以多練習(xí)書(shū)上的習(xí)題。對(duì)于自己不明白的地方,自己編個(gè)小程序?qū)嶒?yàn)一下是最好的方法,能給自己留下深刻的印象。自己動(dòng)手的過(guò)程中要不斷糾正自己不好的編程習(xí)慣和認(rèn)識(shí)錯(cuò)誤。有一定的基礎(chǔ)以后可以嘗試編一點(diǎn)小游戲,文曲星之類的電子詞典上小游戲很多,照著編作為練習(xí)?;A(chǔ)很扎實(shí)的時(shí)候,可以編一些關(guān)于數(shù)據(jù)結(jié)構(gòu)方面的東西,諸如最經(jīng)典的學(xué)生管理系統(tǒng)。之后.....學(xué)匯編、硬件知識(shí)。
三、選擇一個(gè)好的編譯器
本人前段時(shí)間就遭受了一個(gè)編譯器的折磨。這個(gè)編譯器帶了個(gè)自運(yùn)行程序,自動(dòng)修改IE主頁(yè)。叫什么名字就不說(shuō)了。言歸正傳,英文版Turbo C v2.0沒(méi)話說(shuō),最經(jīng)典的C編譯器(下載地址:),其次推薦一個(gè)win-tc 1.91,支持windows下的編譯器。(下載地址:)
四、關(guān)于養(yǎng)成良好的編程習(xí)慣
基本上每本C教材上都要提到。作為新手這條一定要時(shí)時(shí)遵守。記的一位網(wǎng)友發(fā)過(guò)評(píng)論:高手寫(xiě)一堆亂七八糟的代碼就是藝術(shù),新手寫(xiě)一堆亂七八糟的代碼就是垃圾。就象古代賢人寫(xiě)錯(cuò)字叫通假字,小學(xué)生寫(xiě)錯(cuò)字叫錯(cuò)別字,一個(gè)道理。具體方面:
1、在比較復(fù)雜的代碼后面要有注釋。如果光溜溜一堆代碼,別人就不可能看懂你的代碼,而且也不利于查找錯(cuò)誤。除非你一直編東西給自己看。能在代碼里說(shuō)明白的就一定要在代碼里體現(xiàn)。比如變量名、函數(shù)名,在命名的時(shí)候盡量說(shuō)明是干什么用的。
2、注意語(yǔ)句的嵌套不能過(guò)長(zhǎng),一般來(lái)說(shuō),一段代碼里Tab要少于8個(gè)。簡(jiǎn)單說(shuō)就是語(yǔ)句最多8個(gè)嵌套。對(duì)于新手來(lái)說(shuō),這個(gè)標(biāo)準(zhǔn)還要下降。有一個(gè)好習(xí)慣是,把主函數(shù)盡量寫(xiě)簡(jiǎn)短。經(jīng)常看到別人的代碼是主函數(shù)只有幾行,幾個(gè)函數(shù)調(diào)用,而定義全在主函數(shù)外部。這樣一是減少了主函數(shù)內(nèi)部的嵌套,二是比較精簡(jiǎn),容易讀懂。
3、注意語(yǔ)句的選擇。并不是分支語(yǔ)句就用if循環(huán)就用while、for。在適當(dāng)?shù)那闆r下switch和do while語(yǔ)句也是要用的。在某些時(shí)候,switch語(yǔ)句比if語(yǔ)句更加精練明了,而do while比while少一個(gè)循環(huán)。
學(xué)習(xí)任何知識(shí),循序漸進(jìn)總是最好的方式。不幸的是,很多人明知這個(gè)道理,卻總是想走所謂的捷徑。如果你是一個(gè)剛剛開(kāi)始學(xué)習(xí)編程的中學(xué)生,或者你是一個(gè)剛剛進(jìn)入計(jì)算機(jī)學(xué)院的本科生,又或者你是一個(gè)決心在計(jì)算機(jī)領(lǐng)域有所建樹(shù)的初學(xué)者,你一定迫切地想知道,學(xué)習(xí)計(jì)算機(jī)技術(shù),究竟應(yīng)該從哪里下手。
我的建議是:數(shù)學(xué)、英語(yǔ)、C語(yǔ)言。
數(shù)學(xué)和英語(yǔ)的重要性已經(jīng)不需要我來(lái)強(qiáng)調(diào),大家也許從幼兒園就開(kāi)始學(xué)習(xí)它們了,請(qǐng)時(shí)刻把它們放在最重要的位置,無(wú)論你是否學(xué)習(xí)計(jì)算機(jī)。
為什么C語(yǔ)言如此重要?我們從學(xué)習(xí)方法開(kāi)始說(shuō)起。書(shū)本上描述的東西,倘若不經(jīng)過(guò)我們的親自實(shí)踐,是難以被徹底消化吸收的。計(jì)算機(jī)組成原理講解了浮點(diǎn)數(shù)的格式,如果我們能看到并分析內(nèi)存或寄存器中某個(gè)浮點(diǎn)數(shù)的表示,那比單純的紙上談兵要強(qiáng)一千倍;數(shù)據(jù)結(jié)構(gòu)與算法似乎很難,如果你能把書(shū)上的例子實(shí)現(xiàn)出來(lái),然后把習(xí)題做完,只需啃完一本好書(shū),你也可以是算法高手;操作系統(tǒng)原理其實(shí)不僅僅是原理,只有做一些內(nèi)核方面的實(shí)驗(yàn)才能真正有深刻理解;還有許多新潮的技術(shù),比如JavaEE、PHP、Ajax、.NET等等等等,很多高手學(xué)習(xí)這些技術(shù)只需要很短的時(shí)間,不必說(shuō),他們肯定是C語(yǔ)言的高手。C語(yǔ)言幾乎是一切計(jì)算機(jī)技術(shù)的通用工具,包括計(jì)算機(jī)的各種基本理論。沒(méi)有精通C語(yǔ)言的決心,就不要涉足計(jì)算機(jī)領(lǐng)域。
為什么是C語(yǔ)言而不是C++不是Java不是其它?因?yàn)镃語(yǔ)言最簡(jiǎn)單。你需要掌握一個(gè)語(yǔ)言工具,但也許并不需要“面向?qū)ο蟆?、“模板”、“函?shù)重載”等等一大堆概念。C語(yǔ)言足夠低級(jí),非常非常地貼近計(jì)算機(jī)的底層結(jié)構(gòu),不會(huì)讓你迷失在概念的汪洋大海。除了“指針”,C語(yǔ)言沒(méi)有真正意義上的難點(diǎn),而“指針”,恰恰是理解計(jì)算機(jī)底層結(jié)構(gòu)精髓的關(guān)鍵所在。
不必思考應(yīng)該學(xué)什么,等把C語(yǔ)言精通了,你自己便會(huì)知道下一步如何去走。如果你對(duì)操作系統(tǒng)內(nèi)部感興趣,你便可以試著研究一下Unix的內(nèi)核,除了C語(yǔ)言,你還需要一些匯編語(yǔ)言和保護(hù)模式的知識(shí);如果你對(duì)算法感興趣,那么恭喜你,C語(yǔ)言足夠使用了;如果你對(duì)Windows編程感興趣,去看看《Windows程序設(shè)計(jì)》吧,作者清楚的告訴你“只需要C語(yǔ)言的基礎(chǔ)”;如果你對(duì)任何其它語(yǔ)言感興趣,盡管去學(xué)吧,不過(guò)還是建議先學(xué)C++,因?yàn)槟阈枰恍懊嫦驅(qū)ο蟆钡闹R(shí)。
學(xué)習(xí)C語(yǔ)言不是一朝一夕的事情,但也不需要花費(fèi)十年時(shí)間才能精通。如何以最小的代價(jià)學(xué)習(xí)并精通C語(yǔ)言是本文的主題。請(qǐng)注意,即使是“最小的代價(jià)”,也絕不是什么捷徑,而是以最短的時(shí)間取得最多的收獲,同時(shí)也意味著你需要經(jīng)歷艱苦的過(guò)程。
一、要讀就讀好書(shū),否則不如不讀
所有初學(xué)者面臨的第一個(gè)問(wèn)題便是:如何選擇教材。好的開(kāi)始是成功的一半,選擇一本優(yōu)秀的教材是事半功倍的關(guān)鍵因素。不幸的是,學(xué)校通常會(huì)幫你指定一本很差勁的C語(yǔ)言課本;而幸運(yùn)的是,你還可以再次選擇。
大名鼎鼎的譚浩強(qiáng)教授出了一本《C語(yǔ)言程序設(shè)計(jì)》,據(jù)說(shuō)發(fā)行量有超過(guò)400萬(wàn),據(jù)我所知,很多學(xué)校都會(huì)推薦這本書(shū)作為C語(yǔ)言課本。雖然本人的名字(譚浩宇)跟教授僅僅一字之差,但我是無(wú)比堅(jiān)定地黑他這本書(shū)的。這本書(shū)不是寫(xiě)給計(jì)算機(jī)專業(yè)的學(xué)生的,而是給那些需要考計(jì)算機(jī)等級(jí)考試的其它專業(yè)學(xué)生看的。這本書(shū)的主要缺點(diǎn)是:例子程序非常不專業(yè),不能教給你程序設(shè)計(jì)應(yīng)該掌握的思考方式;程序風(fēng)格相當(dāng)?shù)夭缓茫瑫?huì)讓你養(yǎng)成亂寫(xiě)代碼的惡習(xí);錯(cuò)誤太多,曾經(jīng)有人指出過(guò)這本書(shū)的上百個(gè)錯(cuò)誤,其中不乏關(guān)鍵的概念性錯(cuò)誤。好了,這本書(shū)我也不想說(shuō)太多了,有興趣大家可以百度一下:)
Kernighan和Ritchie的《The C Programming Language》(中譯名《C程序設(shè)計(jì)語(yǔ)言》)堪稱經(jīng)典中的經(jīng)典,不過(guò)舊版的很多內(nèi)容都已過(guò)時(shí),和現(xiàn)在的標(biāo)準(zhǔn)C語(yǔ)言相去甚遠(yuǎn),大家一定要看最新的版本,否則不如不看。另外,即使是最經(jīng)典最權(quán)威的書(shū),也沒(méi)有辦法面面俱到,所以手邊常備一本《C語(yǔ)言參考手冊(cè)》是十分必要的?!禖語(yǔ)言參考手冊(cè)》就是《C Reference Manual》,是C語(yǔ)言標(biāo)準(zhǔn)的詳細(xì)描述,包括絕大多數(shù)C標(biāo)準(zhǔn)庫(kù)函數(shù)的細(xì)節(jié),算得上是最好的標(biāo)準(zhǔn)C語(yǔ)言的工具書(shū)。順便提一句,最新的《C程序設(shè)計(jì)語(yǔ)言》是根據(jù)C89標(biāo)準(zhǔn)修訂的,而《C語(yǔ)言參考手冊(cè)》描述的是C99標(biāo)準(zhǔn),二者可能會(huì)有些出入,建議按照C99標(biāo)準(zhǔn)學(xué)習(xí)。還有一本《C和指針》,寫(xiě)得也是相當(dāng)?shù)夭诲e(cuò),英文名是《Pointers on C》,特別地強(qiáng)調(diào)指針的重要性,算是本書(shū)的一個(gè)特點(diǎn)吧。不過(guò)這本書(shū)并不十分適合初學(xué)者,如果你曾經(jīng)學(xué)過(guò)C語(yǔ)言,有那么一些C語(yǔ)言的基礎(chǔ)但又不是很扎實(shí),那么你可以嘗試一下這本書(shū)。我相信,只要你理解了指針,C語(yǔ)言便不再神秘。
如果你已經(jīng)啃完了一本C語(yǔ)言教材,想要更進(jìn)一步,那么有兩本書(shū)你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊(cè)子,內(nèi)容非常非常地有趣。要注意一點(diǎn),這本書(shū)是二十多年前寫(xiě)成的,里面提到的很多C語(yǔ)言的缺陷都已被改進(jìn),不過(guò)能夠了解一些歷史也不是什么壞事。然后你可以挑戰(zhàn)一下《Expert C Programming》(中譯名《C專家編程》),書(shū)如其名,這本書(shū)頗具難度,一旦你仔細(xì)讀完并能透徹理解,你便可以放心大膽地在簡(jiǎn)歷上寫(xiě)“精通C語(yǔ)言”了。
切記一個(gè)原則,不要讀自己目前還看不懂的書(shū),那是浪費(fèi)生命。如果你看不懂,那你一定是缺失了某些必需基礎(chǔ)知識(shí)。此時(shí),你要仔細(xì)分析自己需要補(bǔ)充哪些內(nèi)容,然后再去書(shū)店尋找講述的這些內(nèi)容的書(shū)籍。把基礎(chǔ)知識(shí)補(bǔ)充完畢再回頭來(lái)學(xué)習(xí),才會(huì)真正的事半功倍。
1、學(xué)好c語(yǔ)言,你可以很好地應(yīng)付任何一種編程工具。
2、一定要多上機(jī)練習(xí),通過(guò)程式了解相關(guān)知識(shí)。幾經(jīng)反復(fù)方得正果。
3、不要把學(xué)習(xí)c語(yǔ)言當(dāng)成一種任務(wù),更不要把它看成很難完成的任務(wù)。要充滿自信,只要是一個(gè)智力正常的人都能學(xué)好c語(yǔ)言。始終保持游戲的心態(tài),多發(fā)現(xiàn)其中的樂(lè)趣。當(dāng)感到編程趣味無(wú)窮,那你在電腦方面將前程無(wú)量。
4、如果一個(gè)程式一時(shí)無(wú)法弄清楚最后暫時(shí)放在一邊,過(guò)一段時(shí)間你可能會(huì)從其他的程式中悟出道理。
5、c語(yǔ)言是一個(gè)整體,各個(gè)方面是有機(jī)聯(lián)系的,要從總體上把握它,不要把它割裂成互不關(guān)聯(lián)的部件。
6、不要完全相信教材(包括本講義),所有結(jié)論最好都上機(jī)驗(yàn)證。
怎樣學(xué)好c語(yǔ)言
1.
工欲善其事,必先利其器
準(zhǔn)備工作:一個(gè)開(kāi)發(fā)環(huán)境,如turbo
c
2.0、visual
c++等開(kāi)發(fā)工具;一本好教材,如譚浩強(qiáng)主編的《c語(yǔ)言程序設(shè)計(jì)》(第二版)。我當(dāng)時(shí)看的是他的第一版,就為它的簡(jiǎn)潔、完美所吸引,簡(jiǎn)直愛(ài)不釋手,用了兩個(gè)星期一口氣看完。
2.
秘密武器
初學(xué)者學(xué)習(xí)計(jì)算機(jī)語(yǔ)言要會(huì)“讀程序”,要對(duì)小型的應(yīng)用型、游戲型程序感興趣,并模仿去加深對(duì)c語(yǔ)言程序設(shè)計(jì)的理解和操作,只有不斷地寫(xiě)程序、調(diào)試程序才能得到編寫(xiě)程序的經(jīng)驗(yàn)和加深對(duì)程序的理解,這也是學(xué)習(xí)編寫(xiě)優(yōu)秀高級(jí)程序的秘密武器。
3.
發(fā)揚(yáng)探索精神
學(xué)習(xí)c語(yǔ)言程序設(shè)計(jì)有點(diǎn)像做數(shù)學(xué)難題,只要我們善于思考,善于探索,發(fā)揚(yáng)探索精神去尋找好的設(shè)計(jì)思想和方法,才能把c語(yǔ)言的精髓真正地掌握。
備戰(zhàn)c語(yǔ)言考試要訣
1.
了解大綱,臨陣不亂
各類筆試中,大多數(shù)考題是與大綱要求的基本內(nèi)容一致的,難度不高,但內(nèi)容十分廣泛,應(yīng)牢固掌握c語(yǔ)言考試大綱要求的基礎(chǔ)部分。只有熟悉題型,理解語(yǔ)法、句法,做到心中有數(shù),才能臨陣不亂。
2.
善于歸納,強(qiáng)化記憶
對(duì)于需要記憶的計(jì)算機(jī)基礎(chǔ)知識(shí)和基本概念,如果考試時(shí)因此失分就十分可惜。如:c語(yǔ)言中有幾種不同的數(shù)據(jù)類型?運(yùn)算的優(yōu)先級(jí)別是怎樣的?因此我們需要善于歸納這些計(jì)算機(jī)基礎(chǔ)知識(shí),并在理解的基礎(chǔ)上強(qiáng)化記憶。
3.
重視實(shí)踐,善于調(diào)試
計(jì)算機(jī)科學(xué)是一門理論性、實(shí)踐性都很強(qiáng)的學(xué)科,對(duì)c語(yǔ)言考試的參加者來(lái)說(shuō),基礎(chǔ)理論方面要求不高,而上機(jī)試題往往是很多考生不能通過(guò)考試的重要原因,因此要勤于實(shí)踐。
4.
多做練習(xí),查漏補(bǔ)缺
在認(rèn)真地學(xué)完指定用書(shū)后,最好再找些試題,認(rèn)真地測(cè)試一下,一則可以檢查自己的復(fù)習(xí)情況;二則可以查漏補(bǔ)缺;三則可以調(diào)節(jié)心理狀況,以備正式考試時(shí)沉著冷靜、萬(wàn)無(wú)一失。
多看,多練,多寫(xiě)!善于理解,善用實(shí)戰(zhàn)。先找一些簡(jiǎn)單的與循環(huán)函數(shù)和指針函數(shù)有關(guān)的題目做,學(xué)會(huì)了再去看復(fù)雜的程序,C語(yǔ)言是靠練的,題目做多了自然也就會(huì)了,同時(shí)最好從內(nèi)存的角度理解一下指針、變量之類的。
在初學(xué)C語(yǔ)言時(shí),可能會(huì)遇到有些問(wèn)題理解不透,或者表達(dá)方式與以往數(shù)學(xué)學(xué)習(xí)中不同(如運(yùn)算符等),這就要求不氣餒,不明白的地方多問(wèn)多想,鼓足勇氣進(jìn)行學(xué)習(xí),待學(xué)完后面的章節(jié)知識(shí),前面的問(wèn)題也就迎刃而解了,這一方面我感覺(jué)是我們同學(xué)最欠缺,大多學(xué)不好的就是因?yàn)橐婚_(kāi)始遇到困難就放棄,曾經(jīng)和好多同學(xué)談他的問(wèn)題,回答是聽(tīng)不懂、不想聽(tīng)、放棄這樣三個(gè)過(guò)程,我反問(wèn),這節(jié)課你聽(tīng)過(guò)課嗎?回答又是沒(méi)有,根本就沒(méi)聽(tīng)過(guò)課,怎么說(shuō)自己聽(tīng)不懂呢?相應(yīng)的根本就沒(méi)學(xué)習(xí),又談何學(xué)的好?
學(xué)習(xí)C語(yǔ)言始終要記住“曙光在前頭”和“千金難買回頭看”,“千金難買回頭看”是學(xué)習(xí)知識(shí)的重要方法,就是說(shuō),學(xué)習(xí)后面的知識(shí),不要忘了回頭弄清遺留下的問(wèn)題和加深理解前面的知識(shí),這是我們學(xué)生最不易做到的,然而卻又是最重要的。學(xué)習(xí)C語(yǔ)言就是要經(jīng)過(guò)幾個(gè)反復(fù),才能前后貫穿,積累應(yīng)該掌握的C知識(shí)。
那么,我們?nèi)绾螌W(xué)好《C程序設(shè)計(jì)》呢?
一.學(xué)好C語(yǔ)言的運(yùn)算符和運(yùn)算順序
這是學(xué)好《C程序設(shè)計(jì)》的基礎(chǔ),C語(yǔ)言的運(yùn)算非常靈活,功能十分豐富,運(yùn)算種類遠(yuǎn)多于其它程序設(shè)計(jì)語(yǔ)言。在表達(dá)式方面較其它程序語(yǔ)言更為簡(jiǎn)潔,如自加、自減、逗號(hào)運(yùn)算和三目運(yùn)算使表達(dá)式更為簡(jiǎn)單,但初學(xué)者往往會(huì)覺(jué)的這種表達(dá)式難讀,關(guān)鍵原因就是對(duì)運(yùn)算符和運(yùn)算順序理解不透不全。當(dāng)多種不同運(yùn)算組成一個(gè)運(yùn)算表達(dá)式,即一個(gè)運(yùn)算式中出現(xiàn)多種運(yùn)算符時(shí),運(yùn)算的優(yōu)先順序和結(jié)合規(guī)則顯得十分重要。在學(xué)習(xí)中,只要我們對(duì)此合理進(jìn)行分類,找出它們與我們?cè)跀?shù)學(xué)中所學(xué)到運(yùn)算之間的不同點(diǎn)之后,記住這些運(yùn)算也就不困難了,有些運(yùn)算符在理解后更會(huì)牢記心中,將來(lái)用起來(lái)得心應(yīng)手,而有些可暫時(shí)放棄不記,等用到時(shí)再記不遲。
先要明確運(yùn)算符按優(yōu)先級(jí)不同分類,《C程序設(shè)計(jì)》運(yùn)算符可分為15種優(yōu)先級(jí),從高到低,優(yōu)先級(jí)為1 ~ 15,除第2、3級(jí)和第14級(jí)為從右至左結(jié)合外,其它都是從左至右結(jié)合,它決定同級(jí)運(yùn)算符的運(yùn)算順序.
二.學(xué)好C語(yǔ)言的四種程序結(jié)構(gòu)
(1)順序結(jié)構(gòu)
順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡(jiǎn)單的,只要按照解決問(wèn)題的順序?qū)懗鱿鄳?yīng)的語(yǔ)句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。
例如;a = 3,b = 5,現(xiàn)交換a,b的值,這個(gè)問(wèn)題就好像交換兩個(gè)杯子水,這當(dāng)然要用到第三個(gè)杯子,假如第三個(gè)杯子是c,那么正確的程序?yàn)椋?c = a; a = b; b = c; 執(zhí)行結(jié)果是a = 5,b = c = 3如果改變其順序,寫(xiě)成:a = b; c = a; b = c; 則執(zhí)行結(jié)果就變成a = b = c = 5,不能達(dá)到預(yù)期的目的,初學(xué)者最容易犯這種錯(cuò)誤。 順序結(jié)構(gòu)可以獨(dú)立使用構(gòu)成一個(gè)簡(jiǎn)單的完整程序,常見(jiàn)的輸入、計(jì)算,輸出三步曲的程序就是順序結(jié)構(gòu),例如計(jì)算圓的面積,其程序的語(yǔ)句順序就是輸入圓的半徑r,計(jì)算s = 3.14159*r*r,輸出圓的面積s。不過(guò)大多數(shù)情況下順序結(jié)構(gòu)都是作為程序的一部分,與其它結(jié)構(gòu)一起構(gòu)成一個(gè)復(fù)雜的程序,例如分支結(jié)構(gòu)中的復(fù)合語(yǔ)句、循環(huán)結(jié)構(gòu)中的循環(huán)體等。
(2) 分支結(jié)構(gòu)
順序結(jié)構(gòu)的程序雖然能解決計(jì)算、輸出等問(wèn)題,但不能做判斷再選擇。對(duì)于要先做判斷再選擇的問(wèn)題就要使用分支結(jié)構(gòu)。分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語(yǔ)句出現(xiàn)的物理順序。分支結(jié)構(gòu)的程序設(shè)計(jì)方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)姆种дZ(yǔ)句。分支結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的計(jì)算,設(shè)計(jì)這類程序時(shí)往往都要先繪制其程序流程圖,然后根據(jù)程序流程寫(xiě)出源程序,這樣做把程序設(shè)計(jì)分析與語(yǔ)言分開(kāi),使得問(wèn)題簡(jiǎn)單化,易于理解。程序流程圖是根據(jù)解題分析所繪制的程序執(zhí)行流程圖。
學(xué)習(xí)分支結(jié)構(gòu)不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執(zhí)行的功能,嵌套結(jié)構(gòu)也就不難了。嵌套只不過(guò)是分支中又包括分支語(yǔ)句而已,不是新知識(shí),只要對(duì)雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結(jié)構(gòu)。
①if(條件)
{
分支體
}
這種分支結(jié)構(gòu)中的分支體可以是一條語(yǔ)句,此時(shí)“{ }”可以省略,也可以是多條語(yǔ)句即復(fù)合語(yǔ)句。它有兩條分支路徑可選,一是當(dāng)條件為真,執(zhí)行分支體,否則跳過(guò)分支體,這時(shí)分支體就不會(huì)執(zhí)行。如:要計(jì)算x的絕對(duì)值,根據(jù)絕對(duì)值定義,我們知道,當(dāng)x=0時(shí),其絕對(duì)值不變,而x0時(shí)其絕對(duì)值是為x的反號(hào),因此程序段為:if(x0) x=-x;
②if(條件)
{分支1}
else
{分支2}
這是典型的分支結(jié)構(gòu),如果條件成立,執(zhí)行分支1,否則執(zhí)行分支2,分支1和分支2都可以是1條或若干條語(yǔ)句構(gòu)成。如:求ax^2+bx+c=0的根
分析:因?yàn)楫?dāng)b^2-4ac=0時(shí),方程有兩個(gè)實(shí)根,否則(b^2-4ac0)有兩個(gè)共軛復(fù)根。其程序段如下:
d=b*b-4*a*c;
if(d=0)
{x1=(-b+sqrt(d))/2a; x1=(-b-sqrt(d))/2a; printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2); }
else
{r=-b/(2*a); i =sqrt(-d)/(2*a); printf(“x1=%8.4f+%8.4fi\n”r, i); printf(“x2=%8.4f-%8.4fi\n”r,i) }
③嵌套分支語(yǔ)句:其語(yǔ)句格式為:
if(條件1) {分支1};
else if(條件2) {分支2}
else if(條件3) {分支3}
……
else if(條件n) {分支n}
else {分支n+1}
嵌套分支語(yǔ)句雖可解決多個(gè)入口和出口的問(wèn)題,但超過(guò)3重嵌套后,語(yǔ)句結(jié)構(gòu)變得非常復(fù)雜,對(duì)于程序的閱讀和理解都極為不便,建議嵌套在3重以內(nèi),超過(guò)3重可以用下面的語(yǔ)句。
④switch開(kāi)關(guān)語(yǔ)句:該語(yǔ)句也是多分支選擇語(yǔ)句,到底執(zhí)行哪一塊,取決于開(kāi)關(guān)設(shè)置,也就是表達(dá)式的值與常量表達(dá)式相匹配的那一路,它不同if…else 語(yǔ)句,它的所有分支都是并列的,程序執(zhí)行時(shí),由第一分支開(kāi)始查找,如果相匹配,執(zhí)行其后的塊,接著執(zhí)行第2分支,第3分支……的塊,直到遇到break語(yǔ)句;如果不匹配,查找下一個(gè)分支是否匹配。這個(gè)語(yǔ)句在應(yīng)用時(shí)要特別注意開(kāi)關(guān)條件的合理設(shè)置以及break語(yǔ)句的合理應(yīng)用。
(3)循環(huán)結(jié)構(gòu):
循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書(shū)寫(xiě)的工作量,用來(lái)描述重復(fù)執(zhí)行某段算法的問(wèn)題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長(zhǎng)的程序結(jié)構(gòu),C語(yǔ)言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do –while循環(huán)和for循環(huán)。四種循環(huán)可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),因?yàn)閺?qiáng)制改變程序的順序經(jīng)常會(huì)給程序的運(yùn)行帶來(lái)不可預(yù)料的錯(cuò)誤,在學(xué)習(xí)中我們主要學(xué)習(xí)while、do…while、for三種循環(huán)。常用的三種循環(huán)結(jié)構(gòu)學(xué)習(xí)的重點(diǎn)在于弄清它們相同與不同之處,以便在不同場(chǎng)合下使用,這就要清楚三種循環(huán)的格式和執(zhí)行順序,將每種循環(huán)的流程圖理解透徹后就會(huì)明白如何替換使用,如把while循環(huán)的例題,用for語(yǔ)句重新編寫(xiě)一個(gè)程序,這樣能更好地理解它們的作用。特別要注意在循環(huán)體內(nèi)應(yīng)包含趨于結(jié)束的語(yǔ)句(即循環(huán)變量值的改變),否則就可能成了一個(gè)死循環(huán),這是初學(xué)者的一個(gè)常見(jiàn)錯(cuò)誤。
在學(xué)完這三個(gè)循環(huán)后,應(yīng)明確它們的異同點(diǎn):用while和do…while循環(huán)時(shí),循環(huán)變量的初始化的操作應(yīng)在循環(huán)體之前,而for循環(huán)一般在語(yǔ)句1中進(jìn)行的;while 循環(huán)和for循環(huán)都是先判斷表達(dá)式,后執(zhí)行循環(huán)體,而do…while循環(huán)是先執(zhí)行循環(huán)體后判斷表達(dá)式,也就是說(shuō)do…while的循環(huán)體最少被執(zhí)行一次,而while 循環(huán)和for就可能一次都不執(zhí)行。另外還要注意的是這三種循環(huán)都可以用break語(yǔ)句跳出循環(huán),用continue語(yǔ)句結(jié)束本次循環(huán),而goto語(yǔ)句與if構(gòu)成的循環(huán),是不能用break和 continue語(yǔ)句進(jìn)行控制的。
順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)并不彼此孤立的,在循環(huán)中可以有分支、順序結(jié)構(gòu),分支中也可以有循環(huán)、順序結(jié)構(gòu),其實(shí)不管哪種結(jié)構(gòu),我們均可廣義的把它們看成一個(gè)語(yǔ)句。在實(shí)際編程過(guò)程中常將這三種結(jié)構(gòu)相互結(jié)合以實(shí)現(xiàn)各種算法,設(shè)計(jì)出相應(yīng)程序,但是要編程的問(wèn)題較大,編寫(xiě)出的程序就往往很長(zhǎng)、結(jié)構(gòu)重復(fù)多,造成可讀性差,難以理解,解決這個(gè)問(wèn)題的方法是將C程序設(shè)計(jì)成模塊化結(jié)構(gòu)。
(4)模塊化程序結(jié)構(gòu)
C語(yǔ)言的模塊化程序結(jié)構(gòu)用函數(shù)來(lái)實(shí)現(xiàn),即將復(fù)雜的C程序分為若干模塊,每個(gè)模塊都編寫(xiě)成一個(gè)C函數(shù),然后通過(guò)主函數(shù)調(diào)用函數(shù)及函數(shù)調(diào)用函數(shù)來(lái)實(shí)現(xiàn)一大型問(wèn)題的C程序編寫(xiě),因此常說(shuō):C程序=主函數(shù)+子函數(shù)。 因此,對(duì)函數(shù)的定義、調(diào)用、值的返回等中要尤其注重理解和應(yīng)用,并通過(guò)上機(jī)調(diào)試加以鞏固。
三.掌握一些簡(jiǎn)單的算法
編程其實(shí)一大部分工作就是分析問(wèn)題,找到解決問(wèn)題的方法,再以相應(yīng)的編程語(yǔ)言寫(xiě)出代碼。這就要求掌握算法,根據(jù)我們的《C程序設(shè)計(jì)》教學(xué)大綱中,只要求我們掌握一些簡(jiǎn)單的算法,在掌握這些基本算法后,要完成對(duì)問(wèn)題的分析就容易了。如兩個(gè)數(shù)的交換、三個(gè)數(shù)的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些算法的內(nèi)在含義
結(jié)語(yǔ):當(dāng)我們把握好上述幾方面后,只要同學(xué)們能克服畏難、厭學(xué)、上課能專心聽(tīng)講,做好練習(xí)與上機(jī)調(diào)試,其實(shí)C語(yǔ)言并不難學(xué)