2016來了,2015年底我報了一個編程比賽,2016年3月份開賽。
在切入正題之前,先扯點題外話吧。先自我介紹一下吧,我叫李曉登,外號拉登,愛好比較廣泛,當然其中之一必須是編程了,忘記自己是什么時候出于什么原因喜歡上編程的了,我接觸編程已經有2年了,這兩年來,斷斷續續地學了些Java,也做了些東西,但是都覺得不過癮,可能是由于我不是科班的吧,學習的路上,常常會由于一些事情而被打斷,沒能系統的學習編程方面的知識,所以一直到現在我都覺得比較遺憾,于是,在寒假開始之前,我就暗自下定決心,寒假一定要系統地學習編程,既然要系統學習編程,那就學c吧,我也不知道我是因為什么而做此決定,但其中很現實的一個情況是,我報名了一個編程比賽,而那個比賽只讓用c和c++,個人對c++暫時沒興趣,所以就只能選擇c了。
昨天正式開始學習c了,看的是譚浩強的書,看了他對c語言的概述。在此簡單總結一下。
首先是c語言的背景問題,c語言的老祖宗是ALGOL60語言(1960),ALGOL60語言的兒子是CPL語言(1963),CPL語言的兒子是BCPL語言(1967),BCPL語言的兒子是B語言(1971),B語言的兒子就是C語言(1973)了,C語言一出生,就跟UNIX攪合在一起,經過若干年的發展,C語言就名震天下了,10年后,即1983年,美國國家標準化協會(ANSI)公布了第一個c語言標準草案,即C83,1989年,公布了一個完整的c語言標準,即C89,1990,ISO公布了另一個c語言標準C90,據說跟c89沒什么區別,1999年,ISO公布了C99,但是好像沒有火起來,現在大家用的基本上還是C89。看來,計算機行業也并不是越新的技術越好使,也有類似釀酒行業般——越老越香醇的例子。
然后說說c89的特點吧,大致可概括為6點,一是簡潔、靈活,二是數據類型與運算符豐富,三是模塊化、結構化,四是程序自由度較大,五是可以直接訪問物理內存地址,最后是與匯編比起來,可移植性較好,且運行效率不比匯編遜色很多。顯然這些優點足以讓c語言大紅大紫了。
然后說說具體c程序內容吧,前面我說過c語言是模塊化的,為什么這么說呢,因為c語言的結構是以函數為單位的(函數是什么這里就不介紹了),c語言本身也提供了一個函數庫,可以讓我們輕松地控制計算機,但是函數也是有版權的,所以需要特別注意一下,函數在調用前,一定要在頭文件中聲明,否則就會產生侵權問題,程序無法運行下去了。其中函數中有一個很重要的角色,那就是main函數,它是程序執行的入口,一個項目中只能有一個,也就是說,一個程序只能有一個執行入口,要不然就會亂套了,當然進了這個入口后,可以再開很多門,產生許多分支,但是最外面只有一個可以進去的門,產生分支的問題屬于多線程的范疇了,在此不去深究。那么函數有什么用呢,它就是用來處理數據的,處理完后,一般都會吐出一個東西出來,那就是返回值,當然也有處理完后不吐東西的函數,那就是沒有返回值的函數了,那么函數的組成是什么呢?一個函數由返回值類型、函數名、括號、形式參數、函數體組成,返回值類型就是c語言里的那些數據類型,無返回值的用void表示,函數名由函數的功能決定,括號是用來起標識作用的,括號里面放的是形式參數,用來給函數傳遞數據的,函數體里面就是用來存放我們的命令的,各種控制語句和變量都可以往里面擱,你想要他干什么,你就往里面寫什么,當然你要寫得計算機能夠讀懂,否則就會報一堆錯,談到報錯,就說說調錯吧,一般的編程工具都有報錯功能,告訴你什么地方出了什么錯誤,但是是用英文表達的,所以大家還得學好英語,否則看不懂了,這里需要特別注意的是,大部分編輯器在報告行數的時候,是以分號為準的,就是說如果一條語句寫成了兩行,編輯器就只把它當成一行,所以造成最后編輯器告訴你出錯的那一行并沒有出錯,反而是鄰近的行數出錯了,所以大家一定要注意上下行有沒有出錯,不要局限于報錯的那一行。
最后就是程序調試的問題,我個人遇到一個問題,就是寫了這樣一條語句scanf("%d,%d",&a,&b),然后我在調試的時候給a、b賦值的時候并沒有加上逗號,結果老是運行出亂七八糟的結果,我當時被弄傻了,以為是程序是寫錯了,但是編譯器又沒報任何錯誤和警告,我檢查程序也覺得沒錯,弄了好久,終于在高人的指點下搞懂了,這里也驗證了一個道理,即程序不怕出邏輯錯誤和語法錯誤,就怕出調試錯誤。因為這種錯誤是隱藏的。還有一個問題就是c語言中的for循環中的循環變量最好是在外部聲明(Java常常寫在里面,所以我有點不習慣)因為如果沒有在外部聲明,而for循環又出現在main函數的首部,那編譯器就會報錯,說for循環不能出現在main函數的首部,具體什么原因,我也搞不懂。希望高人指點。
好了,今天到此結束,明天繼續。
|