好像最多隻能算出一百以內的奇偶數什麼的?是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++,我很多同學跟你情況差不多,甚至比你還差。

感謝各位大足

我也是剛看完語言的基礎書籍,正迷惑不解。

各位讓我又堅定了繼續學習的信心


推薦閱讀:
相關文章