官术网_书友最值得收藏!

1.5 編程規范及常見問題

1.5.1 真的需要算法設計階段嗎

編程序前需要先設計算法。但很多初學者覺得編程就是編程,一看到書上的題目就直接把程序寫出來了,似乎沒有算法設計階段。

這是因為學習程序設計時的練習題都很簡單,解決問題的過程都已經深深印在大家的腦子里了,也就是算法已經有了,所以可以直接寫代碼。如果不知道如何解決問題,那么就必須先設計解決問題的方法,即設計算法。

1.5.2 為什么不用自然語言編程

學習程序設計首先需要學習一種程序設計語言。為什么不能用自然語言與計算機交互?如果能用自然語言與計算機交互,程序員就不必學習專門的語言了。

這是因為自然語言較復雜,而計算機本身(機器語言)能做的事又非常簡單,如果要將自然語言作為人機交互的工具,編譯器的設計與實現必將非常復雜。另外,自然語言太靈活,理解自然語言需要一些背景知識,否則會產生二義性,這也給計算機實現帶來了很大的麻煩。

1.5.3 寄存器、主存儲器和外存儲器有什么不同

寄存器、主存儲器和外存儲器都用于存儲信息,但級別不同。

從功能來講,寄存器相當于草稿紙,存儲的是運算器當前正在運算的數據或當前正在執行的那條指令。主存儲器保存的是正在運行的程序代碼和程序中的數據。當程序執行結束時,這些信息就退出了內存。外存儲器保存的是需要長期保存的數據。

從容量角度來看,寄存器容量最小,主存儲器次之,外存儲器最大。從訪問速度來看,寄存器最快,主存儲器次之,外存儲器最慢。

1.5.4 所有的計算機能夠執行的指令都是相同的嗎

計算機能夠執行的指令是直接由硬件完成的,與硬件設計有關。不同的硬件設計產生不同的指令系統,因此不同類型的計算機所能執行的指令是不同的。

1.5.5 為什么需要編譯和鏈接

計算機硬件能“認識”的只有機器指令,它并不認識程序設計語言,如 C 語言。要使計算機能夠執行 C 語言寫的程序,必須把 C 語言的程序翻譯成計算機認識的機器語言,機器語言版的程序稱為目標程序。C 語言程序到目標程序的翻譯稱為編譯,由編譯器完成。在編譯過程中,編譯器會一一找出程序中不符合語言規范的地方,這些被稱為語法錯誤。如果程序沒有語法錯誤,編譯后將會生成目標代碼。

程序員編寫的程序通常會用到其他程序員或 C 語言系統已經編好的一些工具,程序運行時會用到這些工具的代碼,需要將這些工具的目標文件和程序的目標文件放在一起,這個過程稱為鏈接。鏈接器就是完成這個鏈接工作。鏈接以后的代碼稱為一個可執行文件。這是能直接在某臺計算機上運行的程序。

1.5.6 為什么在不同類型的計算機上運行C語言程序需要使用不同的編譯器

因為不同的生產廠商生產的計算機有不同的機器語言,所以需要不同的編譯器將同樣的 C 語言程序翻譯成不同的機器語言。就如同一份中文的文件,給美國人看時需要有人翻譯成英文,給法國人看時需要有人翻譯成法文。

1.5.7 為什么不同類型的計算機不能運行同一個匯編程序

不同類型的計算機能運行同一個 C 語言程序是因為不同類型的計算機上有不同的 C 語言編譯器。每個編譯器可以將同一個 C 語言程序編譯成自己機器上的機器語言表示的目標程序,所以不同類型的計算機可以執行同一個C語言程序。

而匯編程序僅是機器語言的另一種表現形式。不同類型的計算機有不同的機器語言,也就有不同的匯編語言。一臺計算機完全不能理解另一臺不同類型計算機的機器語言,所以一臺機器上的匯編語言的程序不能在另一臺不同類型的計算機上運行。

主站蜘蛛池模板: 蕉岭县| 宕昌县| 崇文区| 万荣县| 郯城县| 德昌县| 彭阳县| 利辛县| 夹江县| 鸡泽县| 航空| 乌什县| 台南县| 香港 | 四平市| 岳阳市| 西安市| 韩城市| 甘孜| 同心县| 榆中县| 陇西县| 高陵县| 祁阳县| 启东市| 平顺县| 达日县| 开平市| 开化县| 胶南市| 银川市| 濉溪县| 遂宁市| 准格尔旗| 沙湾县| 大冶市| 呼伦贝尔市| 灵台县| 洪湖市| 武定县| 开化县|