当前位置: 首页 > news >正文

对初学C语言者的一些建议(原创)

许多学校和专业都需要大一学习C语言,这是一门学习如何编程的入门课。但不少初学者会觉得C语言不好学,感到无从下手。其实,只要同学们掌握一些方法,多读多练、克服心理上畏难情绪,C语言是完全可以学好的并且灵活应用的。希望本文可以对初学C语言的同学有一定的帮助。

1.C语言的前生往事

在编程语言界,从最开始的机器语言到编汇语言,再到高级语言,一直在不断地发展中,并一直有新语言不断地代替旧语言。但有一个语言的地位,是没法被撼动的,那便是C语言。

1972年,D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。1973年初,C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了UNIX,直到今天,各种版本的UNIX内核和周边工具仍然使用C语言作为最主要的开发语言。在开发中,他们还考虑把UNIX移植到其他类型的计算机上使用。C语言强大的移植性在此显现。机器语言和汇编语言都不具有移植性,为x86开发的程序,不可能在Alpha、SPARC和ARM等机器上运行。而C语言程序则可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。因此,学C语言时要先写代码、再编译连接,然后才能运行。

1977年,Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。这就是,C语言具有良好的底层性的原因,例如灵活的指针方法,使得C语言也是后面单片机等课程的基础。1989年,ANSI发布了第一个完整的C语言标准——ANSIX3.159—1989(简称C89,也称ANSI C)。

这就是C语言的前世往事,这么久以来,C语言的地位从来没有被撼动过,作为最底层的基础开发语言,它显得尤为重要。

2.学习C语言掌握算法将在未来工作生活中具有优势思维能力

C语言作为大一的必修课,主要并不仅是让大家了解一门编程语言,而是为了培养大家的算法思维。这是一种与现代社会共存的信息素养,是未来社会生存的必备技能。

算法与人生,看上去没有什么联系,其实不然。

算法是由若干条指令组成的有穷序列。例如,烤面包的步骤包括加入20克白砂糖,放入180度的烤箱里,烤30分钟…,这就是烤面包的算法。而人生亦是由若干条指令(去吃饭、去睡觉、去工作等)组成的有穷列,掌握好人生算法思维,就能掌握好自己的人生规划与执行。

以排序算法为例,你们在课程中会学到最大值或最小值排序,这个最大值或最小值可以人为设定,也可以是函数给出,那么在工作生活中会有什么样的应用呢?

事实上,每年一到要找工作的时候,我就能收到很多人给我发来的问题:该怎么选择他们的offer呢,去腾讯还是去百度,去外企还是去国内的企业,去创业还是去考研,去大城市还是回老家……。为什么大家难以选择,因为写不好人生的函数,找不到自己需求的主要参数,不知道该求利益的最大值,还是该求损失的最小值。

而真正懂算法的人是应该知道怎么做选择的:如果主参数是未来发展,那应该会选择天地广阔的大企业如腾讯;如果看中薪酬,那应该会选择高薪单位;如果期望的目标函数是人脉熟、工作轻松、离家近,应该会选择回老家……

你不可能要所有的东西,所以你只能要你最重要的东西,你要知道什么东西最重要,你就需要对你心内的那些欲望和抱负有清楚的认识,不然,你就会在纠结中度过。这就需要排序算法的思维。

所以选择中你首先最需要参考的就是“冒泡排序”——这种算法的思路就是每次只冒泡出一个最大的数。因此你有必要问问你自己,面对那些影响你选择的因子,如果你只能要一个的话,你会要哪个?而剩下的都可以放弃。于是,当你把最大的数,一个一个冒泡出来的时候,并用这个决策因子来过滤选项的时候,你就能比较容易地知道你应该选什么了。这个算法告诉我们,人的杂念越少,就越容易做出选择。

接着你可能茫然到了怎么比较两个决策因子的大小,比如:你分不清楚,工资>业务前景吗?业务前景>能力提升吗?所以你完全没有办法进行冒泡法。那你,你不妨参考一个“快速排序”的思路——这个算法告诉我们,我们一开始并不需要找到最大的数,我们只需要把你价值观中的某个标准拿出来,然后,把可以满足这个价值的放到右边,不能的放到左边去。比如,你的标准是:工资大于5000元&&业务前景长于3年的公司,你可以用这个标准来过滤你的选项。然后,你可以再调整这个标准再继续递归下去。这个算法告诉我们,我们的选择标准越清晰,我们就越容易做出选择。

下一步,你还可以使用贪心算法、剪枝算法等不断地优化自己的工作取舍。人生中其它的工作与生活选择,无不同理可得。因此编程教育并不是定向培养一批批“码农”,是为了培养一种冷静的、科学的、逻辑化的思维来训练大家未来做事的能力。

算法就是人生,人生便是算法。

3.学习C语言几个关键点

3.1 绘制流程图

先说结论:程序流程图是非常非常重要的。

(1)图比代码更清晰;

(2)基于图的沟通协作会使工作更顺畅。

所以,学习编程的第一步:每个问题的解决,先为它画个流程图,哪怕它是让你简单地写一句,“HelloWorld”。

对于编程初学者来说,很多人都以为程序设计就是单纯的敲代码,接到任务摸起键盘就是一顿敲,结果敲着敲着就很容易把自己给绕进坑里。

画流程图,主要就是梳理需求与解决思路,否则就算后面代码实现了基本功能,自己看着都费劲。没有一个清晰的思路,代码注定是冗余。

聪明的程序员则会在编写复杂的程序之前先画一个程序流程图,这样一来不仅能理清程序思路,也便于自己更好的发现问题。同时,我们写编码不只是写给自己看的,而是要和其他成员进行沟通协作的。社会的本质,就是人与人的交流与协作。

在协同工作之前,大家基于流程图进行讨论,这样别人一眼就可以知道我要做什么,自己也加快了工作效率。既方便别人看懂你的代码,也方便日后自己看懂自己曾经的代码。

一定要画好流程图,它是由一些图形框和流程线组成的,其中图形框表示各种操作的类型,图形框中的文字和符号表示操作的内容,流程线表示操作的先后次序。流程图可以非常清楚地表达程序的基本结构:顺序结构、分支结构、循环结构。程序的灵魂是算法,而流程图是一种很好的算法表示方法,它的特点是结构清晰、直观,且容易学习和掌握。

3.2 掌握基本知识点

以英语为例,掌握英语需要掌握单词、语法、好词好句、别人好文章的篇章结构等,要通过精读与泛读来提升英语能力等等,这些方法在C语言学习中也是必备的。

第一行代码表示把标准的输入输出头文件包含在这个程序中。

第二行代码是C程序的主函数,每个C程序中必须有且仅有一个main()函数,然后是函数的一对“{}”。

定义变量的意思好比买一块地,有了这块地就可以在上面盖房、种庄稼之类的。但是为了便于统一管理,比如城市已经规划好了,你在郊区买的地就只能种庄稼,在市中心买的,就只能盖房,这就是变量类型的含义了。如“int a,b,c;”这行代码的作用其实是要了一块内存,然后在这块内存里存东西。如果需要存整数这种东西,就用int这个关键字来声明(相当于用这块地干什么)。那么变量a,b,c是什么呢?你买了一块地,总要知道这块地在哪是吧?不然就白买了,变量就是这样一个作用。我们需要把数据存在计算机中,什么样的数就定义什么样的类型,需要存几个数就定义几个变量。

输入数据有两种方法。第一种从键盘输入,就需要用到scanf()这个函数;第二种是直接赋值。

处理数据是对于初学者来说最难的一部分,也就是把我们刚才分析过程转换成语句。这里程序流程图可以很好地表达出处理问题和分析的思路。特别是在选择和循环中会有多种嵌套和复合的结构,不画图思路肯定会绕成毛线。

输出数据是每一个程序应该包含的部分。在C程序中的输出通常是从显示屏上输出最后的结果,最常使用的是printf()这个函数。

掌握了以上思路,你会发现,计算机简直是工科中的文科。

3.3 注意细节与注释

据说C语言是一门非常容易劝退学生的课程,原因是老师一讲就懂、自己上手一做就错;有些题目好不容易逻辑上通了,上机练习时总报错;别人的代码复制粘贴时尚能运行,自己辛辛苦苦打字一遍却运行报错……

常见错误往往有语法错、逻辑错和运行错,但更多的是粗心错,即很多问题是不注意细节造成的。例如,有些同学确实很认真地把代码打了一遍,结果不注意大小写、不注意英文半角与中文全角的区别(例如;和;是不同的,A和a也是不同的),结果造成了报错。还有就是C语言的变量一定要先定义才能使用,输入输出的数据的类型与所用格式说明符要一致,注意int型数据的数值范围不要溢出,输入变量时不要忘记使用地址符,语句后面漏分号……

以上这些靠平时自己注意积累,同时要养成写注释的好习惯,不可偷懒。还有一个简单的小窍门,就是你犯过的错大部分人也犯过,所以报错时直接百度就可知道问题所在了,但一定注意留下笔记,下次不再错。这就使得计算机更像工科中的文科了。

3.4 注意练习与模块化积累

算法思维中的核心思想就是要把一个大而复杂的东西通过分割,简化为若干个小问题,然后逐个解决,即模块化思维。如图当孩子们搭轮船积木时候,就会学会将轮船分为船身,桅杆等各个模块,先通过一步步的搭建好各个模块,最后在组装成完整的轮船。编程学习过程中也是类似的,你需要考虑将“代码”合理地安排在整个程序中,让程序能够有序去执行,这个过程对大家学会分析事物的逻辑性有极大的帮助。

换而言之就是,编程的本质是分析问题,找到解决问题的方法,再以相应的编程语言写出代码。当我们把大问题分解为基本问题时,这些基本问题就有成熟的算法来表达了,这就好比我们学习写作文段落的时候都有一些经典的好词好句,可以直接拿来用使文章添彩的道理一样的。因此,掌握一些简单常用算法(即模块化积累)是非常必要的,程序实现的功能虽然千变万化,但最基本的那些算法并不是特别多,掌握这些基本算法后,我们就可以根据不同的问题灵活应用了。

例如,百钱买百鸡的问题。(即用100元钱买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元三只。)这种问题用数学方法可以列出三元一次方程进行求解,而用计算机则可用穷举法。当我们能熟练地掌握了这类简单算法后就能实现一些比较复杂的编程问题了。而这种思维方法的培养就可以通过多做题、多读程序、多练习来培养。事实上,解决以上问题的算法不止一种,通过学习别人好的思维方法,你还可以多一种思考的维度,这更是算法思维的意义。

3.5 一开始就培养良好的编程习惯

培养良好的编程习惯要从第一行代码开始,这也是学好C语言的重要因素。例如编写程序时用缩进的方式、写注释、程序写到一定的阶段时要做一下测试等。这些工作可以帮我们在调试程序时有很大的帮助。程序代码实现后,错误是难免的,所以也要锻炼自己的调试查错能力,而良好的编程习惯可以使我们在调试时减小工作量和提高调试效率,也有助于形成自己的编程风格。

4. 光学习C语言就够了吗

答案显然是不够的。

C语言只是基础,如果下决心以后要做底层开发,那么学好C之后还要学好数据结构和算法;如果以后要做上层应用开发,那么还要学好数据库、网页编程、多种编程语言……。所以C语言只是基础,因此开在大一。下图分别展示了互联网业的职位举例与技能需求,而这些岗位大量是提供给非计算机专业毕业生的。

所以,上大学后要学会对自己负责,而不是对老师负责;学会对自己的未来负责,而不是对现在的作业负责;学会对知识负责,而不是对培养方案负责。

未来的社会需要大学生们拥有学科核心素养,而不仅仅是一张文凭,这些核心素养需要你们学会自己教育自己,学会面向未来的“社会化学习”。今天的学习正在变得越来越无边界,越来越“社会化”,变成一个高度开放多元的系统。

写了这么多,也不知道大家会不会多读几遍。想到一个故事,讲一位叫木村秋则的日本果农坚持二十年种植无农药无化肥苹果的故事。这当然不是一本有关农林的技术书籍,准确地说,这是一本励志书。因为,很多人读完之后都想哭。

是的,既然选择当老师,那么这一生,就至少做几次教育的傻瓜吧。

吴彦文

http://www.jsqmd.com/news/1009971/

相关文章:

  • 电商用户行为分析实战:SQL清洗、Session识别与RFM建模
  • 别光看手册了!用AXI BRAM Controller在Zynq上搭个简易‘内存测试仪’,实战理解所有参数
  • 富芮坤FR801xH蓝牙开发踩坑记:从Keil授权到FreqChip烧录,这些细节决定成败
  • Hierarchical-Graph RAG:用知识图谱提升ICD-10-CM编码检索召回率
  • 包头市2026年最新黄金回收白银回收铂金回收彩金回收五家靠谱门店及联系方式地址电话推荐TOP排行榜 - 盛世金银回收
  • 2026图片去背景抠图保姆级教程:专业电脑软件+免费在线网站+手机APP全攻略
  • 金仓数据库KStudio实战:从零配置SSL连接,保障数据传输安全(附证书生成指南)
  • HAL库真的‘笨重’吗?用CubeMX和LL库在STM32G0上做平衡开发
  • 从单片机到PLC:手把手教你根据项目需求选对迪文串口屏(DGUS vs 指令集避坑指南)
  • 2026年6月目前做得好的工业省电空调企业推荐分析,比较好的工业省电空调推荐 - 品牌推荐师
  • Discord机器人定时任务实现详解
  • 2026年免费抠图软件保姆级教程:这2款小程序3秒搞定,手残党也能轻松上手
  • 宝鸡市2026年最新黄金回收白银回收铂金回收彩金回收五家靠谱门店及联系方式地址电话推荐TOP排行榜 - 盛世金银回收
  • 反事实评估:让AB测试结果真正可信的因果推断方法
  • 多维聚合不是GROUP BY:数据变形术与语义校准实战
  • MLflow生产级落地:PostgreSQL+MinIO构建可审计模型追踪系统
  • 告别隐私合规烦恼:用uniappx插件Ba-IdCode-U一站式搞定Android设备ID获取(附厂商支持清单)
  • AUTOSAR SHE与HSM怎么选?一张图看懂汽车ECU安全硬件选型指南
  • MuleSoft企业级AI编排:让大模型真正懂ERP、CRM和业务规则
  • CANN单边通信库hixl在PD分离推理中的实战应用:昇腾NPU大模型Prefill-Decode分离部署与零拷贝通信优化深度指南
  • 上岸必看!【中药学】真实模考纯净版(卷号:06121219_09)
  • 2026年四川省琳琅井矿泉水:技术细节与服务联系推荐 - 优质品牌商家
  • 保定市2026年最新黄金回收白银回收铂金回收彩金回收五家靠谱门店及联系方式地址电话推荐TOP排行榜 - 盛世金银回收
  • 机器学习模型上线后的系统性风险与工程治理实践
  • 给STM32新手的建议:别急着学HAL库,先用标准库搞懂GPIO和TIM(附CubeMX对比)
  • DJI A3飞控安装避坑指南:GPS干扰、接收机对频、电调兼容性,这些细节别忽略
  • 在树莓派5上跑70B大模型?实测Shimmy的CPU/GPU混合推理(MOE技术详解)
  • MIMO雷达不止于‘堆天线’:深入解读TDM与BPM两种复用策略的实战选择与性能折衷
  • 从GMapping到Cartographer:聊聊激光SLAM中‘玻璃墙’检测方案的演进与选型
  • 别再折腾JDK环境了!保姆级教程:用BurpSuite社区版2024免Java一键安装