軟體和程式是相輔相成的。程式可以看做是軟體的子集。換句話說,軟體就是由一個一個程式組成的。程式又是由一條一條的程式碼組成的。
擴充套件:
有一個電腦科學家沃斯提供了一個公式:程式 = 資料結構 + 演算法
計算機語言
一說到計算機語言,首先會想到自然語言。自然語言就是用於人與人之間進行溝通的。計算機語言就是用於人與計算機之間進行溝通。
計算機語言的發展史
計算機語言是從20世紀40年代開始出現,大致可以分為3個階段
第一階段:機器語言
第二階段:組合語言
第三階段:高階語言
機器語言:最早的機器語言最大的特點就是由0和1組成。之所以只有0和1,是因為要使用這兩個數字來類比電子元件的通電和不通電的狀態,從而向計算機傳送命令。
組合語言:組合語言從一定程度來講就是機器語言的一種助記符。使用助記符以後可以一定程度上幫助人類明白程式碼的含義。
高階語言:高階語言更加接近於我們的自然語言。
高階語言又可以分為兩個大類:一個叫做程式導向,另一個叫做物件導向
所謂程式導向,就是在編寫程式碼的時候,需要向機器一樣考慮每一個步驟。程式的設計是自頂向下,一步一步執行。
所謂物件導向,就是更加接近於人類的思考模式。只需要考慮我們做一個事情的時候需要哪些東西,而不需要考慮具體的步驟
高階語言可以以1980年為一個分界點。80年之前,基本上都是程式導向的語言(C語言),80年之後就基本都是物件導向的語言(Java,C#,PHP,Ruby)
翻譯程式
為什麼需要翻譯程式:因為計算只能識別機器語言,但是我們書寫程式的時候,使用的是高階語言。這個時候就需要將高階語言翻譯成機器語言。
翻譯的方式有兩種:一種是編譯,一種是解釋
根據翻譯的方式我們的計算機語言又可以進行分類:靜態語言和動態語言
編譯器:一次性將整個程式轉換為二進位制程式碼,這個有點類似於將外語書翻譯成中文
直譯器:進行逐行的翻譯。這個有點類似於同聲傳譯。
編譯器編譯程式的速度更快。直譯器解釋語言的時候更加靈活。
靜態語言:Java C#
動態語言:JavaScript PHP Ruby
程式設計的步驟
① 分析問題
在進行程式開發之前,首先需要對問題進行分析,其實就是分析使用者的需求
② 確定資料結構和演算法
建立數學模型
③ 開始進行程式的編制
就是敲程式碼來實現功能
④ 軟體的除錯和測試
一步一步解決程式裡面的bug,直到獲取預期的結構。其實我們的程式一定程度來講不是寫出來的,而是調出來
常見的程式相關的錯誤型別
① 語法錯誤:編寫的程式碼不符合語言的語法規則,這樣的程式碼是無法通過編譯的
② 邏輯錯誤:編寫的程式碼符合語法規則,但是邏輯有問題,導致不能得到預期的結果
③ 執行錯誤:這其實就是演算法除了問題。這個時候就應該重新修改自己的演算法。
④ 開發錯誤:整個程式設計的時候偏離了使用者的需求,導致開發方向錯誤
演算法
從廣義上來講,演算法就是解決某一個問題的方法和步驟。
如果要將演算法進行分類,那麼可以分為兩大類:數值型運算演算法 和 非數值型運算演算法
數值型運算演算法:就是指最終會得到一個數字的結果。
非數值型運算演算法:例如搜尋等事務相關的處理
演算法的特徵
- 1.有窮性:就是指一個演算法的步驟應該是有限的
- 2.確定性:演算法裡面的每一個步驟都應該是確定的,並且是有具體含義的,不能模稜兩可
- 3.有零個或者多個輸入:根據演算法的不同,有一些演算法是可以有輸入的
- 4.有一個或者多個輸出:設計演算法就是為了解決問題,因此每一個演算法都應該有一個或者多個輸出
- 5.有效性:演算法中的每一個步驟都應該是能夠有效執行的,並且能夠得到結果
演算法的表示方式
為了讓其他人也可以明白自己的演算法,所以一般我們會把演算法用一些方式表現出來。自然語言表示法,流程圖,虛擬碼,N-S表示法
自然語言表示法:所謂自然語言表示法,就是指使用人類日常生活中所使用的語言將演算法表示出來,例如:漢語,英語
例:交換墨水瓶
第一步:將黑墨水瓶裡面的黑墨水倒入空瓶
第二步:將藍墨水倒入空的黑墨水瓶
第三步:將空瓶裡面的黑墨水倒入空的藍瓶裡面
第四步:完成交換
虛擬碼表示法:這是一種介於自然語言和計算機語言之間的一種方式
例:交換墨水瓶
第一步:A→黑墨水瓶 B→藍色墨水瓶 C→空瓶
第二步:A→C
第三步:B→A
第四步:C→B
第五步:完成交換
虛擬碼練習:1+2+3+4+...+1000
第一步:n = 1
第二步:m = 2
第三步:n = n + m
第四步:m = m + 1
第五步:判斷m是否小於等於1000,如果是,跳回第三步,如果不是,繼續下一步
第六步:輸出結果
- 2. 1 + 3 + 5 + 7 +...+99
第一步:n = 1
第二步:m = 3
第三步:n = n + m
第四步:m = m + 2
第五步:判斷m是否小於等於99,如果是,跳回第三步,如果不是,繼續下一步
第六步:輸出結果
- 3.列印1-1000以內,能夠被5整除,或者能被6整除的數字
第一步:n = 1
第二步:n % 5 == 0 如果能,跳到第六步,如果不能,執行下一步
第三步:n % 6 == 0 如果能,跳到第六步,如果不能,執行下一步
第四步:n = n + 1
第五步:判斷n是否小於等於1000,如果是,跳回第二步,如果不是,跳到第七步
第六步:輸出n
第七步:結束
- 4.安全數的報數遊戲:找出1-60以內能夠被7整除或者尾數為7的數
第一步:n = 1
第二步:n % 7 == 0 如果能,跳到第六步,如果不能,執行下一步
第三步:n % 10 == 7 如果能,跳到第六步,如果不能,執行下一步
第四步:n = n + 1
第五步:判斷n是否小於等於60,如果是,跳回第二步,如果不是,跳到第七步
第六步:輸出n
第七步:結束
流程圖表示法:又被稱之為框圖。使用一系列圖形和流程線以及少量的文字說明來進行演算法的表示。特點:更加形象易懂。
圖形符號 |
符號名稱 |
作用 |
流程線 |
橢圓形 |
起始框 終止框 |
表示程式的開始和結束 |
起始框:只有一個出口,沒有入口 終止框:只有一個入口,沒有出口 |
平行四邊形 |
輸入框 輸出框 |
顧名思義,代表輸入和輸出 |
只有一個入口,一個出口 |
矩形 |
處理框 |
表明程式的處理和操作 |
只有一個入口和一個出口 |
菱形 |
判斷框 |
對判斷結果進行兩種情況的流向 |
一個入口,兩個出口 |
箭頭 |
流程線 |
代表程式的流向,用於將上面的符號把它串起來 |
|