好像最多只能算出一百以内的奇偶数什么的?是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++,我很多同学跟你情况差不多,甚至比你还差。

感谢各位大足

我也是刚看完语言的基础书籍,正迷惑不解。

各位让我又坚定了继续学习的信心


推荐阅读:
相关文章