新手人工智能(neng)c語言(yan)基礎入(ru)門要(yao)點
時間:2018-03-22 來源:c語(yu)言基礎
新(xin)手人(ren)工智(zhi)能c語言(yan)基礎(chu)入門(men)要點
C語(yu)言(yan)(yan)是一種古老而又(you)經久不衰、號稱貴族編程語(yu)言(yan)(yan),誕生(sheng)于上個世紀(ji)60年代。由(you)于它(ta)在工作設計中有很多(duo)優點,深受編程人員的(de)喜愛,并且逐漸淘汰了很多(duo)其它(ta)的(de)語(yu)言(yan)(yan)。平時我們使用的(de)大多(duo)數軟件都是基(ji)于使用C語(yu)言(yan)(yan)開發的(de)。

C語(yu)言(yan)程(cheng)序(xu)設計(ji)是(shi)我們的(de)(de)專業基礎課,但是(shi)C語(yu)言(yan)本身(shen)卻是(shi)一(yi)(yi)個非常強大的(de)(de)工具(ju)(ju),它是(shi)到目(mu)前為(wei)止最為(wei)廣泛使用(yong)的(de)(de)工具(ju)(ju),并且在可以(yi)預見的(de)(de)將來,它仍然是(shi)皈(gui)依為(wei)程(cheng)序(xu)員的(de)(de)人(ren)們心(xin)中的(de)(de)神(shen)器(qi)。這個工具(ju)(ju)作什么的(de)(de)呢?它在人(ren)和機器(qi)之(zhi)間(jian)建立了一(yi)(yi)個交(jiao)流的(de)(de)平臺(tai)。
某天,你(ni)(ni)需(xu)(xu)要完成(cheng)(cheng)一個求100的(de)(de)(de)階乘(cheng)的(de)(de)(de)作業,于是你(ni)(ni)搬(ban)來(lai)一個最新(xin)的(de)(de)(de)電腦(nao),為(wei)它安(an)裝了(le)最新(xin)的(de)(de)(de)windows vista操作系統,然后坐在它的(de)(de)(de)身前,喊“喂電腦(nao),給我計算100的(de)(de)(de)階乘(cheng)”,電腦(nao)說“ok, wait a moment”; 過了(le)一會,一盤香(xiang)菇(gu)小白菜(cai)端(duan)了(le)上(shang)來(lai)!呵呵,電腦(nao)不(bu)(bu)是waiter, 你(ni)(ni)喂它它是不(bu)(bu)會有反(fan)應的(de)(de)(de),如(ru)果你(ni)(ni)真(zhen)的(de)(de)(de)wait a moment, 恐怕(pa)你(ni)(ni)就(jiu)需(xu)(xu)要wait one more moment了(le)!一萬(wan)年后,人(ren)們就(jiu)把你(ni)(ni)命名成(cheng)(cheng)“望夫崖”。

既然電(dian)腦不(bu)是伺應生,聽不(bu)懂我(wo)(wo)(wo)們的話,那么我(wo)(wo)(wo)們要(yao)怎(zen)么控制它(ta)呢?如果你(ni)們給我(wo)(wo)(wo)裝聾(long)作(zuo)啞,我(wo)(wo)(wo)會(hui)告(gao)訴你(ni)期末掛了(le)你(ni),哦(e),你(ni)立馬老實了(le)!對于電(dian)腦,我(wo)(wo)(wo)要(yao)怎(zen)么才能使喚它(ta),讓它(ta)為(wei)我(wo)(wo)(wo)工作(zuo)呢?不(bu)錯,我(wo)(wo)(wo)們有個強力工具,C語言(yan)!
至(zhi)今出(chu)現一些(xie)編(bian)程語言(yan)也仍(reng)用了很多(duo)它的技術。C語言(yan)是面向(xiang)過(guo)程的開(kai)發方式,也就是說,在實(shi)際工(gong)作中解決(jue)問(wen)題(ti)的時(shi)候,編(bian)程開(kai)發人員需要思考計(ji)算機應(ying)該如何(he)一步一步完成這(zhe)個問(wen)題(ti),然(ran)后(hou)將相應(ying)過(guo)程轉化為代碼。
說了半(ban)天c語言到底是什么樣的呢,咱們就來簡(jian)單的來了解一下新手人工智(zhi)能c語言基礎入門要點吧(ba)。
1、順序結構
順(shun)序結構的(de)程序設(she)計是最簡單的(de),只(zhi)要(yao)按(an)照解(jie)決問題的(de)順(shun)序寫出相應的(de)語句(ju)就行,它的(de)執行順(shun)序是自上而下,依次(ci)執行。
例如(ru)(ru);a = 3,b = 5,現交換(huan)a,b的(de)值(zhi),這個(ge)(ge)問題就(jiu)好像交換(huan)兩個(ge)(ge)杯(bei)子(zi)水,這當然要用到第三個(ge)(ge)杯(bei)子(zi),假如(ru)(ru)第三個(ge)(ge)杯(bei)子(zi)是c,那么正確的(de)程序為: c = a; a = b; b = c; 執行(xing)結果是a = 5,b = c = 3。
如果改變(bian)其順(shun)序,寫成:a = b; c = a; b = c; 則執行結果就變(bian)成a = b = c = 5,不能達(da)到預(yu)期的(de)目的(de),初學者最容(rong)易犯這種錯(cuo)誤。
順序(xu)結(jie)構(gou)可以獨(du)立使用(yong)構(gou)成一個簡單的(de)完整程(cheng)(cheng)序(xu),常(chang)見的(de)輸(shu)入、計(ji)算,輸(shu)出三步曲的(de)程(cheng)(cheng)序(xu)就是(shi)(shi)順序(xu)結(jie)構(gou),例如計(ji)算圓的(de)面積(ji),其程(cheng)(cheng)序(xu)的(de)語(yu)句順序(xu)就是(shi)(shi)輸(shu)入圓的(de)半徑(jing)r,計(ji)算s = 3.14159*r*r,輸(shu)出圓的(de)面積(ji)s。
不(bu)過大(da)多(duo)數情(qing)況下順序結(jie)構都(dou)是作為(wei)程(cheng)序的一(yi)(yi)部(bu)分,與其它結(jie)構一(yi)(yi)起構成一(yi)(yi)個復(fu)雜的程(cheng)序,例如(ru)分支(zhi)結(jie)構中的復(fu)合語句、循(xun)環結(jie)構中的循(xun)環體等。

2、 分支結構
順序結構(gou)的程序雖然能解決(jue)計(ji)算、輸出等(deng)問(wen)題,但不能做判斷再(zai)選擇(ze)。對(dui)于要先做判斷再(zai)選擇(ze)的問(wen)題就(jiu)要使用分(fen)支(zhi)結構(gou)。
分支(zhi)結構的(de)執(zhi)行是依據一定的(de)條件選擇執(zhi)行路徑,而不是嚴(yan)格按(an)照語句(ju)出現的(de)物理順(shun)序(xu)。分支(zhi)結構的(de)程(cheng)序(xu)設計方法的(de)關鍵在(zai)于構造合適的(de)分支(zhi)條件和(he)分析程(cheng)序(xu)流程(cheng),根據不同的(de)程(cheng)序(xu)流程(cheng)選擇適當(dang)的(de)分支(zhi)語句(ju)。
分支結構適合于帶有(you)邏輯或(huo)關系比較等條件判斷(duan)的(de)計算,設(she)計這類程(cheng)(cheng)序(xu)時往往都要先繪制其程(cheng)(cheng)序(xu)流程(cheng)(cheng)圖,然后根據(ju)程(cheng)(cheng)序(xu)流程(cheng)(cheng)寫出源程(cheng)(cheng)序(xu),這樣做把程(cheng)(cheng)序(xu)設(she)計分析與語言分開,使得問題簡單化,易于理解(jie)。
程(cheng)(cheng)序流程(cheng)(cheng)圖(tu)是根據解題分析(xi)所繪制的程(cheng)(cheng)序執行流程(cheng)(cheng)圖(tu)。
學(xue)習(xi)分(fen)(fen)(fen)支(zhi)(zhi)結構不(bu)要被(bei)分(fen)(fen)(fen)支(zhi)(zhi)嵌套所迷惑,只(zhi)要正(zheng)確繪制出流程(cheng)圖(tu),弄清各分(fen)(fen)(fen)支(zhi)(zhi)所要執行的(de)功能,嵌套結構也就(jiu)不(bu)難了。嵌套只(zhi)不(bu)過是(shi)分(fen)(fen)(fen)支(zhi)(zhi)中又包(bao)括分(fen)(fen)(fen)支(zhi)(zhi)語句而(er)已,不(bu)是(shi)新知識,只(zhi)要對雙(shuang)分(fen)(fen)(fen)支(zhi)(zhi)的(de)理(li)解清楚,分(fen)(fen)(fen)支(zhi)(zhi)嵌套是(shi)不(bu)難的(de)。下面我(wo)介紹幾種基本的(de)分(fen)(fen)(fen)支(zhi)(zhi)結構。
①if(條件) { 分支體 }
這種分支結構中的分支體可(ke)以(yi)(yi)是(shi)一條語(yu)句,此時“{ }”可(ke)以(yi)(yi)省略(lve),也可(ke)以(yi)(yi)是(shi)多條語(yu)句即復(fu)合語(yu)句。
它有兩(liang)條分(fen)支(zhi)路(lu)徑可(ke)選,一是當(dang)條件為(wei)真,執行(xing)分(fen)支(zhi)體,否(fou)則(ze)跳過分(fen)支(zhi)體,這時分(fen)支(zhi)體就不(bu)會執行(xing)。如(ru):要計(ji)算x的絕對(dui)值(zhi),根據絕對(dui)值(zhi)定義,我們知(zhi)道,當(dang)x>=0時,其絕對(dui)值(zhi)不(bu)變,而x<0時其絕對(dui)值(zhi)是為(wei)x的反號,因此程(cheng)序段為(wei):if(x<0) x="-x;
②if(條件(jian)) {分(fen)支1} else {分(fen)支2}
這是典(dian)型的分支(zhi)(zhi)結構,如果條件(jian)成(cheng)(cheng)立,執行分支(zhi)(zhi)1,否則執行分支(zhi)(zhi)2,分支(zhi)(zhi)1和(he)分支(zhi)(zhi)2都可(ke)以是1條或若干條語句構成(cheng)(cheng)。如:求ax^2+bx+c=0的根
分析:因為當b^2-4ac>=0時(shi),方程有兩(liang)個實根(gen),否則(b^2-4ac<0)有兩(liang)個共軛復根(gen)。其程序(xu)段如下: 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) }
③嵌(qian)套分(fen)(fen)支(zhi)語(yu)(yu)句(ju):其語(yu)(yu)句(ju)格式(shi)為: if(條件1) {分(fen)(fen)支(zhi)1}; else if(條件2) {分(fen)(fen)支(zhi)2} else if(條件3) {分(fen)(fen)支(zhi)3} …… else if(條件n) {分(fen)(fen)支(zhi)n} else {分(fen)(fen)支(zhi)n+1}
嵌套(tao)分(fen)支語句雖可解(jie)(jie)決多個(ge)入口(kou)和出口(kou)的(de)問題,但超(chao)過3重嵌套(tao)后,語句結構(gou)變得(de)非常復雜,對(dui)于程序(xu)的(de)閱讀(du)和理解(jie)(jie)都極(ji)為(wei)不便,建議(yi)嵌套(tao)在3重以(yi)內,超(chao)過3重可以(yi)用下面的(de)語句。
④switch開關語句:該語句也(ye)是(shi)多分(fen)支選擇語句,到底執行哪(na)一塊(kuai),取決于開關設置,也(ye)就(jiu)是(shi)表達(da)式(shi)的值(zhi)與常量表達(da)式(shi)相匹(pi)配(pei)的那一路。
它不同if…else 語句,它的(de)所有(you)分(fen)支(zhi)都(dou)是(shi)并列的(de),程序(xu)執(zhi)行(xing)時(shi),由第(di)一分(fen)支(zhi)開(kai)始查找,如(ru)果相匹配,執(zhi)行(xing)其后的(de)塊,接(jie)著執(zhi)行(xing)第(di)2分(fen)支(zhi),第(di)3分(fen)支(zhi)……的(de)塊,直到遇到break語句;如(ru)果不匹配,查找下(xia)一個分(fen)支(zhi)是(shi)否匹配。
這個語句在應(ying)用時要(yao)特別注(zhu)意開關條件的(de)合(he)理設(she)置以(yi)及(ji)break語句的(de)合(he)理應(ying)用。
3、 新(xin)手人工智能(neng)c語言基礎入門要點之循(xun)環結構
循(xun)(xun)(xun)環(huan)結(jie)構可以減少源(yuan)程(cheng)(cheng)序重復書寫(xie)的(de)工作量,用(yong)來(lai)描述重復執行(xing)某(mou)段算法的(de)問題,這是程(cheng)(cheng)序設計中最能發揮(hui)計算機特長的(de)程(cheng)(cheng)序結(jie)構,C語言中提供四(si)種循(xun)(xun)(xun)環(huan),即goto循(xun)(xun)(xun)環(huan)、while循(xun)(xun)(xun)環(huan)、do –while循(xun)(xun)(xun)環(huan)和for循(xun)(xun)(xun)環(huan)。
四種循環(huan)可以(yi)用來(lai)處理同一問(wen)題,一般情況下(xia)它(ta)們(men)可以(yi)互相代替(ti)換(huan),但一般不提倡用goto循環(huan),因為(wei)強制(zhi)改變程(cheng)序的順序經(jing)常會給程(cheng)序的運行帶來(lai)不可預(yu)料的錯誤(wu),在學習中(zhong)我們(men)主要學習while、do…while、for三(san)種循環(huan)。
常(chang)用(yong)的三種(zhong)循環(huan)結構學習的 重點(dian)在于(yu)弄清它們相同與不同之處(chu),以便在不同場(chang)合下使用(yong),這就要清楚三種(zhong)循環(huan)的格式和執(zhi)行順序(xu),將每種(zhong)循環(huan)的流程圖(tu)理(li)解透徹后就會明(ming)白如何替換(huan)使用(yong)。
如把while循(xun)環(huan)的(de)例題,用for語句重新編寫一個(ge)程序,這(zhe)樣能(neng)更好(hao)地理(li)解它們(men)的(de)作(zuo)用。特別要注意在循(xun)環(huan)體(ti)內應包(bao)含趨于結束的(de)語句(即循(xun)環(huan)變量值(zhi)的(de)改變),否(fou)則就可能(neng)成了一個(ge)死循(xun)環(huan),這(zhe)是初學者(zhe)的(de)一個(ge)常見錯誤。
在學完這三個循(xun)環(huan)后,應明(ming)確它們的異同點:用while和(he)do…while循(xun)環(huan)時,循(xun)環(huan)變量的初始化的操(cao)作(zuo)應在循(xun)環(huan)體(ti)之(zhi)前,而for循(xun)環(huan)一(yi)般在語(yu)句1中(zhong)進行的;
while 循(xun)環和for循(xun)環都是(shi)先(xian)判斷(duan)表(biao)達式,后執(zhi)(zhi)(zhi)行(xing)(xing)循(xun)環體,而do…while循(xun)環是(shi)先(xian)執(zhi)(zhi)(zhi)行(xing)(xing)循(xun)環體后判斷(duan)表(biao)達式,也就(jiu)是(shi)說do…while的(de)循(xun)環體最少被(bei)執(zhi)(zhi)(zhi)行(xing)(xing)一次(ci),而while 循(xun)環和for就(jiu)可能一次(ci)都不執(zhi)(zhi)(zhi)行(xing)(xing)。
另外還要注意(yi)的(de)是這三種(zhong)循環(huan)(huan)都可以用(yong)(yong)break語(yu)句跳(tiao)出循環(huan)(huan),用(yong)(yong)continue語(yu)句結(jie)束本次循環(huan)(huan),而(er)goto語(yu)句與if構(gou)成的(de)循環(huan)(huan),是不能(neng)用(yong)(yong)break和 continue語(yu)句進行控制的(de)。
順序結(jie)構、分(fen)(fen)支結(jie)構和循環(huan)結(jie)構并不(bu)彼(bi)此孤立的(de),在循環(huan)中可(ke)以(yi)有(you)分(fen)(fen)支、順序結(jie)構,分(fen)(fen)支中也可(ke)以(yi)有(you)循環(huan)、順序結(jie)構,其實(shi)不(bu)管哪種結(jie)構,我們均可(ke)廣義的(de)把它(ta)們看成一(yi)個語(yu)句。
在實(shi)際(ji)編程(cheng)過程(cheng)中常將這三種結構相互結合以實(shi)現各種算法(fa),設(she)計(ji)(ji)出相應(ying)程(cheng)序,但是(shi)要編程(cheng)的問(wen)題(ti)較(jiao)大,編寫出的程(cheng)序就往往很長、結構重(zhong)復多,造成可讀性差,難以理解,解決這個(ge)問(wen)題(ti)的方法(fa)是(shi)將C程(cheng)序設(she)計(ji)(ji)成模塊化結構。
4、 新手人(ren)工智能c語言基礎入門要點之模塊化程(cheng)序結構(gou)
C語言的(de)模塊化程序結構(gou)用函(han)(han)數(shu)(shu)來實現,即將復雜(za)的(de)C程序分為(wei)若干模塊,每個模塊都編寫成一個C函(han)(han)數(shu)(shu),然后通過(guo)主函(han)(han)數(shu)(shu)調(diao)用函(han)(han)數(shu)(shu)及函(han)(han)數(shu)(shu)調(diao)用函(han)(han)數(shu)(shu)來實現一大型問題的(de)C程序編寫。
因此常說:C程序=主函數+子函數。 因此, 對函數的定義、調(diao)用、值的返回等中要尤其注重理解(jie)和應用,并通過上機調(diao)試加以(yi)鞏(gong)固(gu)。
三 掌(zhang)握一些簡(jian)單(dan)的(de)算法
編程(cheng)其實一大部分工作就(jiu)是分析(xi)問(wen)題,找(zhao)到解決問(wen)題的(de)方法(fa),再以相(xiang)應的(de)編程(cheng)語言(yan)寫出代(dai)碼。這就(jiu)要(yao)求掌握(wo)算法(fa),只(zhi)要(yao)我們掌握(wo)一些(xie)簡單(dan)的(de)算法(fa),在(zai)掌握(wo)這些(xie)基本算法(fa)后(hou),要(yao)完成(cheng)對問(wen)題的(de)分析(xi)就(jiu)容(rong)易(yi)了。
如兩個(ge)數的交換(huan)、三個(ge)數的比(bi)較、選擇法(fa)排序(xu)和(he)冒泡法(fa)排序(xu),這(zhe)就要求我們要清楚(chu)這(zhe)些算法(fa)的內在含(han)義(yi)。
當我們(men)把握好上述(shu)幾方面后,只要小伙(huo)伴們(men)能(neng)克服畏難(nan)、厭(yan)學、專心學習(xi),做好練習(xi)與上機動手(shou)寫代碼,其實C語言并不(bu)難(nan)學。

