我的編程之路——從零到面向過程


    今天,我無聊的趟在床上,回憶着過去的點點滴滳。

    17年前,我還非常小,非常笨,連英文字母都數不清楚。那時,我看着學習機書本上寫的代碼,一點一點的按到電腦上,如果有一點按錯了或者看着因為停電而沒有存軟盤的代碼我可以哭上半天,哭的是天昏地暗。那是,媽媽鼓勵我,不要放棄,大不了再重寫一遍。要我堅強,但是,錯過了就不能再錯!那時,我的程序是這樣的:

10 CLS

15 ON ERROR GOTO 100

20 INPUT "PLEASE INPUT "; A$

30 FOR I=0 TO LEN(A$)

40 B$=MID$(A$,I,1)

50 C=ASC(B$)

60 D=C+3

70 PRINT CHR$(D)

80 NEXT

100 PRINT "ERROR"


    這是一個值得我記一輩子的程序,雖然記的已經不真切了,也是我第一個由自己寫的程序,雖然有不少東西都是參考書上的。比如20行的“PLEASE INPUT”當時的我只知道PLEASE是請的意思,因為當時在看MAZI的故事的時候有看過這個詞。至於邏輯完全都是按書上來改的,一台學習機,一本說明手冊,一個軟盤,一台電視。這就是當時的我,對編程初感興趣的我。

    那個時候,我完全不會用GOSUB,完全不知道函數是干嘛的。也沒有WHILE語句,更沒有DO…WHILE結構,條件只有IF – THEN,連ELSE都是浮雲。所有函數都當成關鍵字來使,實際上那時的我根本就無法理解函數。只知道某些字母加一個括號可以輸出我要的東西,並且括號里可以由我自己控制。

    至於變量,F-BASIC是不用定義的,拿來就用,類型也很簡單只有int和string。至於有沒有double我當真不知道,那時我還不知道小數點來着。我只知道變量定義不加$的就是數值型,加了就是字符串型。

    第70句代碼是我對調試的第一次理解,在當時,我知道我可以通過每一步輸出我想要知道的變量的值來確定代碼的每一句是否符合我的理解。

    那時記憶最深刻的,就是寫一個300行的代碼忘了存盤。我哭了整整半天,最后在媽媽的安慰下,我打起精神再一次把代碼重新輸進去。玩上了我自己輸的第一個程序——打飛機。- -#為神馬是這個名,我至今殘念中。這就是我的初學者之旅。

    我曾記得當時媽媽教我學五筆的時候,告訴我不用背字根如何學當時感覺媽媽好強大;曾記得在父親單位的打字室里見到的第一台電腦,裝的是MS-DOS 5.x,看着叔叔阿姨們打着一篇篇文稿。有時也小露兩手打一些簡單的字,因為用的是五筆也不怕有字不認識;曾記得當時小學計算機老師看見我玩得一手DOS命令的時候那驚訝的表情。時光飛逝,很快6年就過去了,時間也到了2001年。那時,我有了我的第一台電腦,可惜第三天就被我在媽媽的指導下給拆了個七零八落。

    2001年,我的電腦上有了一個軟件Visual Basic 6。我第一次知道原來世界還有函數這么美好的東西。於是那個陪了我走過好多年的程序變成了:

Private Sub Submit_Click()

Dim a As String

Dim i As Integer

Dim b As String

Dim c As Int



a=TextBox1.Text

For i=0 To Len(a)

Mid(a,i,1)=Chr(Asc(Mid(a,i,1))+3)

Next i



TextBox1.Text=a

End Sub


    很久不寫VB的代碼了,已經忘了差不多了啊。但是Mid(a,i,1)=Chr(Asc(Mid(a,i,1))+3)這一句代碼確是我在那時對函數這一詞真真切切的理解。也就是在那時,我第一次清楚的知道了y=f(x,a,b,c)的意思。在當時,我認為,函數就是一種縮寫,它代表着一句,或者若干句代碼(從求水仙花數中的x*x*x中領悟,當時不知道POW函數)任何一個使用函數的位置都可以使用它所代表的代碼替換。

    1年后,這段程序還是這段程序,不同的是,我已經在頭上加了 On Error Resume Next 這語句。到了這個時候,我已經領悟了如何用手去執行代碼。每一段代碼可以根據輸入值使用紙筆演算每一步的變量應該有的值。這時,我學會了斷點,也學會了監視。

    在這時,我認為函數就是有一個輸入和一個輸出的算法。它可以通過一定的形式,將變量x轉變為我所想要的變量y。而編程就是通過編寫若干個函數來達到我所想要的目地。就是這一年,正式說明了我已經進入了面向過程編程的門坎。那時,我理解向頂向下,逐步分解簡直就是不費吹灰之力啊。

    時到初三2004年,我可以以自己的意願編寫程序了。雖然一部分算法還需要借助書本,但是我也算是能寫屬於我自己的程序了。那時,我寫了一個計算24點的程序,那時,計算表達式的算法還需要借助書本。但是在編寫完后,這個算法我可以完全理解。在那時,面向對象之魂初步覺醒。那時,面向過程的思路已經非常清晰,我也成功建立了一套屬於我的初步編程理論體系。那時的我總結為:

 

    計算機程序是按照一定的步驟完成特定任務的產物,在編制計算機程序時,可以將重復使用的步驟整理成若干個函數。函數是代碼的集合,它擁有零個或一個輸入,可以有一個或多個輸出,在一個輸出時,使用RETURN語句,如果要返回多個值,則可以使用數組返回或者使用ByRef傳入的參數。

    在編寫完函數之后,要進行調試工作,調試可以通過斷點,輸出每步的值,監視每個參數的改變來進行。調試的最終目地是找到代碼中錯誤的地方並且改正它。

 

    伴着這它們,我進入了高中。三年的高中生活除了忙碌的學習以外,也讓我的計算機水平被老師和同學所認可。再也沒有其它同學說我不務正業了,也不再有老師認為我學這個完全沒有用處。三年的高中生活讓我清楚的知道了C語言好像比VB要好用一些。當然除了那個蛋疼的界面顯示以外。於是,那個陪了我好久的程序變成了:

#include <stdio.h>



void main(int argc, char *argv)

{

char table[26];

char msg[200], encrypt[200];

int i;



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

{

table[i] = 'a' + ((i+3)%26);

printf("%c", table[i]);

}



printf("\nInput message MUST BE LETTER:")

scanf("%s", msg);

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

{

if (msg[i] == '\0')

{

break;

}

encrypt[i] = table[msg[i] - 'a'];

}



printf("\nResult:%s", encrypt);

getch();

}


    還記得當時因為嫌煩,而沒有判斷輸入是否是字符就直接使用數組映射的悲劇,恩上面的代碼也是如此。在這三年里,我好好的學習了C和C++。在當時,我還是認為C++和C沒什么區別。最多就是一個用class關鍵字進一步整理了代碼。那時,我對class的理解就是整理函數的手段。C++最大的好處有兩點,一函數非常清楚,二cin和cout要比printf和scanf好用不少。這三年來,我理解最多的就是輸入和輸出語句。這三年,使用C語言我能夠寫出一個完整的打字程序,也能寫比如超級瑪麗的游戲。更能夠在玩游戲的時候總結游戲里使用的數據結構。我總結:

 

    計算機的輸入和輸出可以到任何一個地方,磁盤,內存,屏幕都可以。所以所有輸入和輸出的函數都帶有一個隱含的參數,也就是輸出的位置。所有的輸入和輸出都是流式的,就像水一樣流到任何一個可以顯示,存儲的位置。

    調試程序時,可以使用Trace法和Debug法。Trace有助於調試Release版的程序,它沒有源代碼,也不可能在運行處執行調試環境,如果不想看匯編那么在程序里加入Trace信息則是再好不過的。

    而計算機程序等於算法加數據結構,每一段程序(函數)都可以按照以下格式定義和書寫:

function type FunctionName(type paramTable, type* paramOutput)
{
//Step1.定義數據結構,以及函數輸出

//Step2. 檢查參數
if (!CheckParam(paramTable))
{
//處理參數錯誤異常
}

//Step3. 收集其它輸入
//TODO: scanf etc.

//Step4. 轉變(也就是函數的具體算法)

//Step5. 輸出檢查(可選)

//Step6. 輸出
*paramOutput = value;
return re;
}

 

    至此,我的面向過程之路就已經全部走完了,我用這種方法建立了我的面向過程編程體系。也通過這個建立起了我以后所有思想的支柱,及我生活的行動理論。不做不知道,回憶一下過去,對我自己也是很有進步的嘛。那親愛的博友們,你們的第一個理論是如何建立的呢?回憶完如此,吃些東西准備健身,面向對象的思路以后再寫吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM