tft每日頭條

 > 科技

 > 編程必須學的十種方法

編程必須學的十種方法

科技 更新时间:2024-06-28 17:41:46

“Hello World”在編程的世界裡是個“梗”,說的是所有教編程的老師在第一節課都會讓學生們在計算機屏幕上輸出一個“Hello World!”。

編程必須學的十種方法(為什麼編程第一課都要學Hello)1

瑞問:“為什麼第一節課都要學‘Hello World!’?”

其實,在計算機屏幕上輸出一個什麼東西,并不是編程語言天然該有的功能。因為計算機發明的最初目的,隻是能夠快速運算,所以,C 語言發明的時候,也将注意力放在如何運算上。但很快,人們就發現,計算機運行了程序、做了運算,卻不知道如何将結果告訴我們。這就意味着,無論運算能力有多強大,如果不能把結果告訴我們,那麼這個運算都毫無意義。于是,讓計算機把運行結果顯示出來,就成了編程的首要任務。

瑞問:“有道理!那麼,計算機到底怎麼在屏幕上顯示内容呢?”

計算機發展的早期,有過很多顯示方案,最終人們發現,顯示器是最棒的輸出設備。然而,把内容顯示到顯示器上,并不容易。顯示屏上密密麻麻地布滿了點,我們稱其為像素點。這些像素點的亮與滅形成了顯示器上的圖案,比如,我們要顯示“5”,在顯示器上顯示的是 5 的圖像點陣。将 5 這個數字轉換成圖像點陣,是一個複雜的過程。

然而,把要顯示的内容傳輸到顯示器上,這個過程更複雜。我嘗試着将這個過程簡單地描述出來:顯示器上的像素點,是和存儲器的某個區域對應的。存儲器其實分為兩個類型,有一類存儲器處于計算機最核心的位置,稱為内存。程序操作内存很容易。将需要顯示的内容放在内存裡,計算機裡的一個硬件裝置叫顯卡,它負責将那段内存區域的内容轉移到顯示器對應的像素點。

編程必須學的十種方法(為什麼編程第一課都要學Hello)2

在計算機發展的早期,人們要顯示的内容比較簡單,現在變得越來越複雜了,我們不僅要輸出給顯示器,還有打印機、耳機,未來肯定會出現更多輸出設備。當時,每增加一個輸出設備,就要修改計算機硬件設計,專門支持新設備,這太麻煩了,所以人們想到了更好的辦法。計算機隻需将信息從内存送到外邊,這個操作統稱為輸出。在設計計算機的時候,所有的輸出設備一視同仁,不針對具體設備進行專門的設計,新發明的輸出設備自己想辦法用合适的方式顯示,這樣計算機的設計就簡化了下來。輸入設備也用了同樣的設計方案,組合在一起簡稱 I/O(Input/Output)。

瑞說:“聽起來相當複雜,不好理解。”

把東西顯示到屏幕上,很複雜,需要幾百行的程序,初學者根本不可能完成這樣的任務。好在有編程的前輩把那一大堆程序統一成一個叫 printf()的程序。我們隻要在程序裡寫“printf()”,就能将結果輸出到顯示器上。而至于這幾百行程序在處理什麼,以及其間發生什麼事情,我們不需要關心。

瑞問:“printf 後面有兩個小括号,那是幹什麼的?”

printf 告訴計算機即将顯示東西,而括号中的信息就是我們需要顯示的内容。小括号是個不錯的設計,看上去像是填空題,例如,運行 printf("Hello World!"),就能在顯示器上顯示出“Hello World!”。另外,還有一點需要提醒,printf()不是C 語言自身的功能,所以你還需要再寫一句話“#include<stdio.h>”,告訴程序:我需要使用 stdio.h 裡面的輸入輸出功能。

還有一些細節,我需要進一步解釋一下。在 C 語言中,單詞拼寫正确、大小寫正确,十分重要。在嚴謹的計算機中,“A”和“a”是完全不同的東西。編程語言的初學者,常常會在大小寫上出錯。為此,有些編程語言人性化地不區分大小寫,但是這個“人性化”會增加計算機的計算負擔,在 C 語言被發明的年代,計算機硬件性能完全不足以提供這樣的“人性化”。

瑞問:“stdio.h 是個名字嗎?”

#include 可以解釋成“我需要使用别人的程序”。需要使用的程序放在<>中。stdio.h 僅僅是一個名字。但是你能看到一個優秀的程序員在起名字的時候,會盡可能讓别人一眼看懂,如 std 是英文 Standard(标準)的縮寫,i 和 o 分别代表 Input(輸入)和 Output(輸出)。

還記得我前面解釋程序是什麼的時候說過,給人一張紙,上面寫了很多命令,人會照着去做。人的習慣是從紙的第 1 行開始向下看,而計算機不是這樣的,它會尋找一個特定的位置執行你所寫的程序。我們将這個位置稱為程序的入口。

編程必須學的十種方法(為什麼編程第一課都要學Hello)3

瑞問:“程序入口怎麼寫?是規定好的嗎?”

我們買回家的計算機,本身已經包含了一些程序,其中最重要的程序就是操作系統。我們使用計算機時下達的每條命令,都會被操作系統獲取并翻譯成由計算機硬件執行的一系列動作。而我們編寫的程序,也是運行在操作系統這個程序之上的。可以這麼理解:操作系統就是一個太空的空間站,我們所編寫的程序是要到達這個空間站的飛船;無論是哪個國家的飛船,無論是貨運飛船還是客運飛船,都需要和空間站連接在一起。

要連接,就需要一個接口。C 語言所編寫的程序和操作系統之間的接口的名字叫作 int main(){},這是一個标準的寫法,因為接口就是這麼定義的,你會看到其中也有一對小括号。随着學習越來越深入,你會發現 C 語言裡有一些規則,有助于我們觸類旁通地去理解另外一個地方出現的相同符号。這裡的小括号也是允許你填寫信息的。現在我們并不需要填什麼,但是即便什麼都不填,小括号也必須寫。

後面還有一對大括号,你跟計算機說的話、編寫的程序都放在這對大括号裡。思考一下,如果由你來設計 C 語言,是否有更好的方案?其他的編程語言确實也有不同的做法,不過不同的做法各有優缺點,{}的設計其實還不錯。

瑞說:“接口為什麼要有小括号?我還是不明白。”

這個目前先當成固定寫法記住,時間久了才能理解。

編程必須學的十種方法(為什麼編程第一課都要學Hello)4

我們現在的任務就是在屏幕上顯示“Hello World!”,那麼完整的程序是這個樣子的。

#include <stdio.h> int main() { printf("Hello World!"); }

瑞問:“看起來怪怪的,一定要按照這樣的格式寫嗎?”

這個程序寫了很多行。把它們全部都寫在一行中,計算機是認識的,但是這樣看上去不夠優雅。雖然對于計算機來說,優雅并不重要,但是優秀的程序員會遵循一些規則,努力地把自己的程序寫得優雅。

你會發現,printf()後面有一個分号,分号代表我們跟計算機說的一句話結束了,這是必須寫的。其他幾行末尾沒有分号,是因為那些行的語句都是編寫這個程序的準備動作,而不是真正的指令。還記得編譯器嗎?分号對編譯器而言非常重要。編譯器在“翻譯”時是一句話一句話地處理的,分号是一句話結束的标識符,是需要讓編譯器識别的。

前面說過,printf 後邊的括号裡放的是我要輸出的内容,今天我要輸出的“Hello World!”對于 C 語言來說是一句話。而一句話需要放在英文的雙引号裡。放在雙引号裡的内容,稱為字符串。這樣就會讓編譯器處理成在顯示時将原文輸出。

瑞問:“哦!我明白了,都不能寫錯,問題是程序怎麼能寫到計算機裡呢?”

現在,你需要想辦法将這段程序輸入計算機。所有的文本編輯器都可以用來輸入程序,計算機自帶的記事本就能完成這個工作。而 Word 并不是一個标準的文本編輯器,因為它提供了太多的功能。程序輸入的“标準範式”,就是要使用純文本編輯器。

瑞問:“我寫完了,前面說過的編譯器,計算機裡有嗎?”

瑞說:“現在可以開始寫程序了,我寫的程序也應該有個名字吧?”

瑞問:“C 語言的擴展名是什麼?”

瑞問:“控制台又是什麼?”

瑞問:“編譯好了怎麼運行呢?

。。。。。。

編程必須學的十種方法(為什麼編程第一課都要學Hello)5

以上來自一位從未接觸過計算機編程的小學生提問,作者嘗試站在編程語言發明者的角度來回答,提問有趣活潑,從不懂計算機編程到能參加信息學奧林匹克比賽;回答清晰深刻,描述正确的編程思維并能學以緻用!

編程必須學的十種方法(為什麼編程第一課都要學Hello)6

編程必須學的十種方法(為什麼編程第一課都要學Hello)7

編程必須學的十種方法(為什麼編程第一課都要學Hello)8

作者把孩子帶到發明C語言的年代,與孩子一起面對計算機科學發展道路上遇到的一個個難題和挑戰,假設我們就是當年的計算機科學家,思考我們會如何解決這些問題;讨論假如C語言是我發明的,我是否還會發明這些規則。

這本書并沒有簡單地迎合孩子想要的趣味案例,而是針對C語言和計算機科學進行深入的探讨,給孩子帶來好奇心的滿足和成就感,這樣的引導會讓孩子更高效、深入地理解C語言,為未來學習更加複雜的算法打下堅實的基礎,助力孩子攀登信息學奧林匹克競賽高峰。

每一個孩子都該學習編程,信息學奧林匹克競賽是對學有餘力孩子的智力挑戰,孩子是否有這個方向的天賦,需要通過機會嘗試一下。

這本書有非常好的可讀性,完全可以送給孩子享受駕馭計算機的快樂!

編程必須學的十種方法(為什麼編程第一課都要學Hello)9

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved