1. 程式人生 > >程式設計學習小結(2)程式設計需要哪些基礎知識

程式設計學習小結(2)程式設計需要哪些基礎知識

編碼這麼久,編碼需要哪些基礎知識呢?有人說“貌似不需要什麼基礎知識?我們公司只要是大學畢業,不管什麼專業,在我們這搞一段時間都可以做的很好!”。的確很多公司,尤其是大公司,培訓流程相對完善,工作流程也比較規範,無論是什麼專業,即使程式設計0基礎,在公司學習一段時間,掌握一些編碼基礎知識和程式設計規範後,隨著對業務流程越來越熟悉,都可以做的很好,甚至比有基礎的同學還好~ 這裡原因很多,很想聽聽大家的意見,從個人開發角度簡單來看,可以認為進入公司後做技術也有兩個方向 1、業務流程:行業相關性稍強,是對公司所進行業務的掌握程度,通訊如各種協議等 2、技術能力:相對通用,對非流程問題的解決能力,如記憶體被改寫,在業務上分析不出原因時,解決這類問題的能力
這裡同同學們分享的主要是第二條,相對通用的能力。
首先看一個簡單的問題: 在螢幕上輸出10次hello world! 如何寫: 方式 1、知道程式設計的同學 int main(int argc, char *argv[]) { printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); } 方式2、學過程式設計的同學 int main(int argc, char *argv[]) { for(int i = 0; i < 10; ++i) printf("hello world!"); } 方式3、某些同學 void out(int i) { if(i>1) out(i-1); printf("hello world!"); } int main(int argc, char *argv[]) { out(10); } 對於上面的三種情況,提幾個問題 1、為什麼每種方式都有一個main函式,有哪些寫法? 2、那種方式“較好”? 3、方式3有什麼優點麼? ……(歡迎提問)
問題1:為什麼需要有這個main函式呢?
程式碼是人和機器交流的橋樑,當你寫好一段程式碼,在windows上編譯連結生成一個二進位制的exe檔案,它的內容是一條條機制指令,計算機載入這個檔案開始執行;那麼,問題來了,A:計算機如何知道這個檔案是一個二進位制檔案,儲存的是機器指令呢?它同word文件有什麼區別?B:計算機知道這是一個程式二進位制檔案之後,如何載入?從那一條指令開始執行呢? A:感興趣的同學可以以文字的方式開啟一個exe檔案看下(直接將exe檔案拖放到記事本中即可),會發現都是由MZ開頭,16進位制是4D5A,它是window可執行檔案的特定格式的開始(PE格式)感興趣的同學可以瞭解下。當系統遇到該格式時就按照PE格式的標準開啟,載入,如何載入呢?(可以自行搜尋下) B:載入好了之後,從那一條指令開始執行呢? 對於C語言是由一個個函式組成,作業系統如何知道從哪一條指令開始執行來啟動程式呢?作業系統代用那個函式開始執行啊?main……,為什麼是main呢? 這個mian函式怎麼寫呢? 在 C語言的早期標準C89中,main() 是可以是void型別。Brian W. Kernighan 和 Dennis M. Ritchie 的經典鉅著 The C programming Language(《C 程式設計語言》)用的就是void main( )。但最新的 C99 標準中,只有以下兩種定義方式是正確的: int main( void ) int main( int argc, char *argv[] ) 如果你不需要從命令列中獲取引數,請用 int main( void ) ;否則請用 int main( int argc, char *argv[] ) 。 main 函式的返回需要是 int ,這樣返回值才能傳遞給作業系統。 如果沒有寫 return 語句的話,C99 規定編譯器要自動在生成的目標檔案中(如 exe 檔案)加入 return 0 ,表示程式正常退出。但是加上return 0是個好習慣。 這裡涉及的知識有 作業系統、編譯,如期望進一步瞭解程式設計,這些方面最好掌握一些~
問題2:那種方式較好?
這個很難說,但是方式1很少見,在這裡很想聽聽小夥伴們的意見?
問題3: 這裡使用了簡單的遞迴演算法,對於一些問題,使用該方式可以使程式碼變得簡單,但是不是所有的語言都能夠支援
(未完待續)