第1部分 重新认识C语言

学校C语言教材的缺陷

我在走出校门的时候非常的“轻狂”,认为自己在学校里面已经学得够多了,工作就只算是小菜一碟。但在工作中屡次碰壁之后,我才发现自己当时的想法是多么的天真。我们踏上工作岗位,一切几乎都要从零开始。

对于大家“非常熟悉”的C语言来说,我们在学校里面学的非但不够用,而且在很多地方对大家还有“误导”的作用,让我们认为编程就是那么一回事了。

我举某知名C语言教材中的“函数”那一章的某程序为例子加以说明。程序如下:

#include void main()
{
float fac(int n);
int n;
float y;
printf("input an integer number: ");
scanf("%d", &n);
y = fac(n);
printf("%d!=%10.0f\n", n, y);
}
float fac(int n)
{
float f;
if(n<0)
{
printf("n<0, dataerror!");
}
else
if(n == 0 || n == 1)
f=1;
else
f=fac(n-1)*n;
return(f);
}

对于以上程序,至少存在以下问题:

         第一,变量命名不规范,而且没有初始化。对于该程序,main函数里的变量n、y,fac函数里面的变量f的命名均不规范,不能让人一眼就看出它是什么意思、要做什么操作。这对于一小段程序来说,影响还不是很大,但如果代码行数达到数千行,那么阅读起来就比较的费力。另外,以上说的三个变量只是定义了,并没有初始化,这在实际项目中也是不允许的。

        第二,函数的命名不规范,且没有在主函数开始之前进行声明。本程序中的fac函数表示什么意思?如果你没有看程序开始之前的文字,那么只有通过阅读函数里面的代码才能知道。在实际项目中,函数命名非常的重要,因为一般涉及到函数个数较多,如果不能通过函数名称来了解其作用,而必须通过阅读代码才能获悉,那么工作效率是很低的。此外,我们一般不在调用该函数的函数的内部来对被调函数进行声明,而是应该将声明放在外部,最好新建一个头文件来对程序里面出现的函数进行声明。

        第三,程序代码排版不工整,“if…else”语句书写不规范。在fac函数中,存在排版不工整的情况。第一个if语句下面的大括号应该与“if”的“i”保持在同一列上,第二个“else”应该与第二个“if”保持在同一列上,“f=1;”和“f=fac(n-1)*n;”应该再缩进4个空格。另外,“if”和“else”下面的执行语句不管有多少行,都应该用“{}”括起来,以方便阅读。

        第四,程序注释过少,函数开头没有注释。一般说来,在程序的关键语句的前面或右边,都应该添加适当的注释,这对程序的理解有辅助的作用。函数fac的前面应该加注释,说明此函数的功能、输入/输出参数、返回值、修改记录等。在整个程序的开头处,也要添加版本信息、修改记录等注释信息,以方便日后查阅。

        第五,程序中出现了“printf”、“scanf”和“main”函数。这是大家都习以为常的,但在实际的项目中,几乎不可能出现这三个函数。因为公司都有自己的开发平台,而且代码都达到数千行,甚至上万行,大部分都不是基于VC开发的,你在哪里去输入,又在哪里去看输出呢?我一进公司,最开始看到程序,就想去找“printf”、“scanf”和“main”,但这是徒劳的,因为根本就没有。关于输入/输出,开发中会有专门的消息处理流程来处理,大家需要知道的就是一个完整的程序不一定非要有上面的三个函数。

短短的几十行代码,就出现了这么多大家“没有想到”的问题。

看到以上的分析,也许你会很惊慌:我以前的C语言难道是白学了?

非也!我举这个例子,一不是为了亵渎经典,二不是为了给大家当头一棒。我只是想说明,对于C语言,我们还有很多不知道的东西,即使是自己知道的,也与实际工作存在较大的偏差,大家要虚心学习。我和大家一样,也经历了最开的惶恐阶段,而后才逐渐去改变了自己“根深蒂固”的观念。“知错能改,善莫大焉”啊!

雄关漫道真如铁,而今迈步从头越!

(欢迎访问南邮BBS:http://bbs.njupt.edu.cn/)
        (欢迎访问重邮BBS:http://bbs.cqupt.edu.cn/nForum/index)

(本系列文章每周更新两篇,敬请期待!本人新浪微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

让你提前认识软件开发(3):学校C语言教材的缺陷相关推荐

  1. 软件开发培训学校三大服务体系

    一.教学保障服务 Tams是一套集教学,诊断,辅导为一体的信息化服务体系,共分为6大部分内容,服务学员学前,学中,毕业,就业等环节,为学员构建一套完整高效的服务体系,提升学习效果和质量. Tams教学 ...

  2. 学Java软件开发,就选动力节点软件开发培训学校

    随着软件开发领域的盛行,越来越多的同学想要从业软件开发行业中,但又因为伴随着学习软件开发的人越来越多,许多软件开发培训学校犹如春笋一样的出现,然而教学水平并没有因为软件开发培训学校数量的提高而有所提升 ...

  3. 让你提前认识软件开发(14):程序中的算法

    第1部分 又一次认识C语言 程序中的算法 [文章摘要]         算法(Algorithm),是程序的灵魂.著名计算机科学家.图灵奖获得者沃思曾提出过一个公式:数据结构+算法=程序. 可见,算法 ...

  4. 让你提前认识软件开发(40):既要写好代码,又要写好文档

    第3部分 软件研发工作总结 既要写好代码,又要写好文档 对于软件相关行业,在学校或单位上,大家或许都已经注意到了,除了要编写的程序.绘制设计图之外,另一个重要的工作便是写文档.为什么要写文档呢?由于我 ...

  5. 让你提前认识软件开发(39):软件研发之殇

    第3部分 软件研发工作总结 软件研发之殇 在经典著作<人月神话>中,作者提出了一个观点:绝大部分的软件研发项目都不能按期完成.我工作也有一段时间了,发现这确实是一个不争的事实.我所从事的项 ...

  6. 让你提前认识软件开发(46):首先是为人编写程序,其次才是计算机

    第3部分 软件研发工作总结 首先是为人编写程序,其次才是计算机 "首先是为人编写程序,其次才是计算机",这是软件开发的基本要点,软件的生命周期贯穿于产品的开发.测试.生产.发布.用 ...

  7. 让你提前认识软件开发(51):VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改

    第3部分 软件研发工作总结 VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改 [文章摘要] Pclint是一种C/C++软件代码静态分析工具.它是一种更加严格的编译器,能够发 ...

  8. 让你提前认识软件开发(8):memset()与memcpy()函数

    第1部分 重新认识C语言 memset()与memcpy()函数 软件项目中的代码,少则数千行,多则上万行,但并非无规律可循.阅读了那么多代码之后,我发现有两个函数出现的频率很高,那就是memset( ...

  9. 2023届-多益网络(提前批)-软件开发-凉经

    今天不想卷,分享一下秋招经历吧. 非科班转码,总觉的自己准备的还不够,开始的比较晚. 1.简历投递:投递过程一言难尽,正了八经填写1h起步,可惜我不正经. 2.测试:常规心理测试. 3.笔试:需要下载 ...

  10. 让你提前认识软件开发(28):数据库存储过程中的重要表信息的保存及相关建议...

    第2部分 数据库SQL语言 数据库存储过程中的重要表信息的保存及相关建议 1. 存储过程中的重要表信息的保存 在非常多存储过程中,会涉及到对表数据的更新.插入或删除等,为了防止改动之后的表数据出现故障 ...

最新文章

  1. 12cR2 RAC+RAC+ADG ORA-16854
  2. Console命令详解,让调试js代码变得更简单
  3. POJ 2828 Buy Tickets 线段树
  4. EXCEL 中找出两个sheet相同列
  5. 视频 + PPT | 数字化运营,从理论到实践
  6. boost::python::detail::result相关的测试程序
  7. For the king:出色的冒险,失败的角色扮演
  8. lamp架构-访问控制-禁止php解析、屏蔽curl命令访问
  9. gps84转换gcj02公式_【测绘基础】关于投影坐标和坐标转换,这几点你不得不知道!...
  10. KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态获取 《寒江独钓》内核学习笔记(5)...
  11. 关于djangorestframework
  12. 百度关键词模拟发包php程序,仿百度的关键词匹配搜索示例
  13. 试用版的和正式版的软件有什么区别
  14. linux脚本看日历,Linux查看日历之cal命令
  15. ERROR: Removing unused resources requires unused code shrinking to be turned on.
  16. 华为机试HJ102:字符统计
  17. 华为PPPoE简单实验
  18. 【Python】字符串不足位数补零/补空格
  19. 数学建模常用模型07 :模糊综合评价法
  20. python网络爬虫——pyquery的使用(六)

热门文章

  1. 基于python实现网络课程秒刷
  2. 2004-2020年数学建模美赛O奖论文合集(免费)
  3. 怎样批量修改图片格式
  4. 订单系统管理系统 开源_8个开源销售点系统
  5. 2021荣耀秋招笔试代码题
  6. 【毕设狗】【单片机毕业设计】基于单片机的红外非接触测温设计-实物设计
  7. 蓝牙厂商代码与公司对应列表
  8. 8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码
  9. 维纳滤波python 函数_图像维纳滤波实现(1)
  10. 计算机中丢失xvidcore.dll,找不到xvidcore.dll怎么办?