看完整本C語言教材,為什麼只學到幾個計算方法和一些命令行?
好像最多隻能算出一百以內的奇偶數什麼的?是C語言本來就只有這種程度還是我應該買下一本書了?百度說linux,有大佬給我詳細說一下C語言到底應該怎麼學纔有用,至少……能讓我寫個像樣的程序,不要讓我覺得學完一本書一點用都沒有,算數什麼的……有什麼用嘛?惆悵。
題主的困惑其實很多C的初學者都有過,C語言有什麼用?產生這樣的困惑可能有兩方面原因。一方面是,跟許多高級語言相比,C語言的「用處」並不那麼直觀;另一方面是,也許正是因為不那麼直觀,所以很多教材只教C語言的語法,不教C語言的用法。
看看如今流行的編程語言,Java、PHP、Python、JavaScript、C#等等等等,不說各種功能完備強大的框架,即便只是語言本身的標準庫,都提供了大量的實用功能。學習者能夠很快利用這些功能,方便地寫出各種「看得見」的程序:計算器、鬧鐘、五子棋遊戲、網頁表單……跟它們相比,C語言標準庫的功能確實少得可憐,似乎什麼都做不出來。當然,前面這些東西C語言都能做,但涉及到各種不同平臺的系統調用及第三方函數庫,嚴格地講,這已經不屬於C語言的範疇了。
那麼,C語言到底有什麼用呢?教材裏都會講,C語言是一種「系統編程語言」,可以編寫操作系統、驅動程序、嵌入式系統等。在我看來,這些用途本質上就是在操作內存,C語言編程本質上就是對內存進行讀寫,通過指針、位操作等工具,精準高效地操縱內存裏的數據結構。C語言其實是披著高級語言外衣的彙編語言,所以,在學習C語言的時候,要努力摒棄其他高級語言的思維,在腦海里鋪展開一張內存空間地圖,使用C語言指令去塗寫這幅數據的地圖。
前面說了,很多C語言教材只教語法,不教用法,我這裡要又一次推薦一本有點「過時」的教材《C和指針》(Pointers on C)。學完這本書,重點是做完後半本的所有習題,可以算初步掌握C語言的精髓了。當然,想要寫操作系統、驅動程序、嵌入式系統,還需要繼續學習更多相關的軟硬體知識,這是後話了。
再多看看書
試試自己寫寫微型操作系統
讀讀早期linux的源碼。
看The C programming language 2nd edition,就是這本,不用看別的C語言書了。把這本書讀透,習題都做完,C語言的基礎應該就沒問題了。
你覺得做不了什麼實際性的東西,是因為你還缺少領域特定的知識。光了解編程語言還不足以讓你做出你覺得有趣的東西(也不盡然,下一步可以打好數據結構,演算法的基礎,它們十分有用)。比如,你想做一個Android的手機應用,你知道開發Android app要用Java語言, 你學了Java,但是如果不瞭解Android的話,你還是沒法做出來的。
不知道你說的「寫個像樣的程序」是個什麼程序。不過我猜你是想弄個帶圖形界面的程序,因為有好多人都覺得C語言只能在黑黑的控制檯裏搗鼓,「沒啥用」。帶界面的程序多帥啊,顯得高級。這裡姑且不論這種說法的對錯,你只要繼續學習下去,相信有一天你會想回來刪了這一貼的。
ZkqT1:C語言 第一個程序 基本數據類型 變數 格式化輸入輸出 類型重命名?zhuanlan.zhihu.com
看我的文章,有詳細教程,每天更新
那是因為中國的大多數教材都是為了考試而寫的。而考試只考那麼一些東西。
除了書上寫的之外,C語言還有很多用處。C語言的主要應用領域是嵌入式領域等偏硬體的方面,例如單片機,單片機是一種微型CPU,可以做機器人、物聯網等,如今的很多設備中都有單片機,而單片機的程序一般是由C語言開發的。
當然,C語言也可以做那種有界面的程序,可以使用Windows API,也可做有圖形的程序,可以使用OpenGL,也可以開發Web應用程序,只不過現在幾乎沒有人用C語言做這些。
關於演算法等方面,C語言可以做的不僅僅是計算100以內的奇偶數(如果你用的是Windows,至少也能算到上萬),此外,C語言還能夠實現類似於如下的程序:1.大小寫轉換;2.括弧匹配;3.計算輸入的四則混合運算式;4.各種簡單的科學問題;5.點餐系統;6.圖書管理系統等等。
其他答主不是在裝逼就是在秀優越感。我覺得題主可以先學學C++,比較在PC端寫應用程序一般都不會用純C了。然後找些QT的書來學,Qt很多源碼demo,可以試著跑一下。這樣可以寫一些GUI的程序。
用結構體寫一個大頂堆,輸入十個字元,然後用堆排序出來。
這個書上應該寫了的,都掌握了,就去看計算機系統。學計算機系統,就用類或者結構體寫一個模仿信號量運作機制的流程管理(比如日程安排)模型。
論眼界的重要性。去看下畢業季招聘it崗的要求,再想想自己想做什麼。回頭就明白C語言咋學了。
學完C就可以看LINUX KERNEL了.而通過學kernel,你就知道計算機是怎麼運行的了.
當然你看kernel的時候,需要補點操作系統的知識.
c語言核心是計算機模型,這也是c語言的主要操作對象。
你想做計算之外的事,就得通過這個計算機模型,間接的和硬體或操作系統聯繫,說白了就是外帶的庫和介面
學會寫漢字下一步就開始學寫文章
讀書百遍其義自現。剛入門是覺得很沒意思。編程語言只是工具。就像解決問題的工具,比如你要騎車旅行。緊緊掌握騎上不到只是入門,要了解旅遊路線,自行車發展史。為啥出現了從語言,從語言之前如何使用計算機,軟體和硬體什麼關係?程序和固件什麼關係?彙編和指令什麼關係,指令和asic什麼關係?asic和fpga什麼關係?fpga和vhdl什麼關係?vhdl和計算機架構什麼關係?隨便一個關係你徹底明白了,找個月薪上萬養活自己jd沒問題。
我理解你的感受。
為什麼看了教材,只看到了計算方法和命令行。
舉個例子,我們寫作業,拿起筆,運用當天學習的知識,在紙上寫了一通。
學習的知識是什麼?就是看教材。
那拿筆在紙上寫呢?這個在教材上可沒有教。什麼時候教的?學齡前。
我的意思是,你還需要看一本書《Visual Studio 2015 高級編程》(如有必要請替換為你所使用的IDE使用說明)。
記得我在學習CUDA的時候,從官網下載了《GPU高性能編程CUDA實戰》,安裝好cuda_9.2.148_win10,下載好《nVIDIA CUDA 初級教程》視頻,看完自信滿滿,結果,把代碼寫在.h和.cpp裏,居然不能編譯,好吧……
後來在CUDA Blog上看到一篇學習筆記,原來是把代碼寫在.cuh和.cu裏,然後.h和.cpp中引用一下,編譯……
結果就是通篇全是link2019和link1120錯誤碼,又開始網上找解決方法:
1:添加工程的頭文件目錄
項目-屬性-配置屬性-C/C++-常規
附加包含目錄=C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.2include
2:添加文件引用的lib靜態庫目錄
項目-屬性-配置屬性-鏈接庫-常規
附加庫目錄=C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.2libx64
3:添加工程引用的lib名
項目-屬性-配置屬性-鏈接庫-輸入
附加依賴項=C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.2libx64下所有文件名
即下方的文件列表
cublas.lib
cublas_device.lib
cuda.lib
cudadevrt.lib
cudart.lib
cudart_static.lib
cufft.lib
cufftw.lib
curand.lib
cusolver.lib
cusparse.lib
nppc.lib
nppial.lib
nppicc.lib
nppicom.lib
nppidei.lib
nppif.lib
nppig.lib
nppim.lib
nppist.lib
nppisu.lib
nppitc.lib
npps.lib
nvblas.lib
nvcuvid.lib
nvgraph.lib
nvml.lib
nvrtc.lib
OpenCL.lib
4:設置為CUDA程序
右鍵點擊項目-生成依賴項-生成自定義-選擇CUDA
5:設置項類型
右鍵點擊.cu文件-屬性-項類型=CUDA C/C++
以上這些步驟都nvidia官網是不會說的,他會認為這個是IDE的事情……而visual studio又不會出一本錯誤代碼集……只能網上找解決方法
最後,總結一句話,這特麼怎麼自學……
看完C就能寫一些小的項目了,比如可以嘗試寫一個學生管理系統,這樣就說明你的C語言水平算入門了,想要進階的話就必須得教練數據結構與演算法,可以買一數據結構與演算法的書。
用基礎元素搭建宏觀世界
想像生活中的一些情形物件,是否能用程序實現,比如紅綠燈,計算器
還有比較有意思的就是可以自己寫小遊戲,貪食蛇什麼的,比較有動力。
遇到問題再上網查,看別人的代碼,能學到更多東西。
大一學了一年的c++,我很多同學跟你情況差不多,甚至比你還差。
感謝各位大足
我也是剛看完語言的基礎書籍,正迷惑不解。
各位讓我又堅定了繼續學習的信心
推薦閱讀: