WNLee's Blog

I'm WeiNanLee, This is my personal blog!

C 语言编程流程心得

【C 语言编程流程心得】

摘要

很少用 C语言 写东西,但是代码这东西是需要一定的代码量来修炼的,一步一个脚印,练得多代码才能写得好!这是写了三个操作系统实验小程序之后做的总结。

目录

  • 摘要
  • 目录
  • 撰文缘由
  • 开发流程
  • 总结

撰文缘由

  1. 原因其实很简单,就是我最近一直在忙着学自己想学的,做自己的事情,很多都是新的尝试。学校老师你突然就搞了那么多的作业啊、实验报告啊、课程设计啊、一堆一堆的一坨一坨的。直接打乱了我的进度有木有啊?直接乱了我的节奏有木有啊?本来这个星期可以再在 github 上面弄个大大的深绿色方块的,就让你这样扼杀了,所以要写篇文章来补偿一下。

  2. 同学间网上拷贝代码应付作业的现象,首先我不说这样好还是不好。因为每个人的情况不一样。但是如果网上参考代码了,CV 下来又花了一天才把程序搞定我就觉得不值了。然后想下原因,因为这个问题我也遇到过。我总结一下就是缺乏一个对程序全面的思考,流程设计。借鉴代码变成帮别人调Bugger。部分人没怎么考虑就直接打开编译然后就开始写,这样效率很低。还有就是说自己算法差不知从何下手,我的观点是我们现在接触的作业啊,数据结构啊需要算法么?我觉得画个流程图,明白需要实现什么功能,然后连接起来就可以了。主要是缺乏思考,所以我要发表下我的观点。

  3. 这个原因最无耻了,小弟我花了几个小时写了个程序交给老师,别人上网’参考’一下也发了个作业给老师。我觉得自己有点吃亏啊!所以我要吐槽。

  4. 这才是真正的原因,哈哈,上面纯属吐槽!我只是想写下自己写一个 C 语言程序的流程,哪天不小心迷茫了,看一下,就知道要怎么写 C语言小程序了。

开发流程

【第一步】程序要求

比如我的作用是做一个单道处理系统的作业等待模拟程序,要求如下:

  1. 首先是单道处理系统,就是说单进程的,不需要考虑多进程的情况;
  2. 需要分别模拟 先到先服务调度算法(FCFS) 和 响应比高优先调度算法(HRN);
  3. 控制块统一命名 JCB,大概需要包含的信息(可以用来设计结构体);
  4. 模拟过程中需要输出 周转时间、带权周转时间、平均周转时间和平均带权周转时间;
【第二步】知识储备
  • 至少要知道什么是 FCFS 和 HRN 算法吧!
  • 响应比(Rp) = (等待时间+要求服务时间)/(要求服务时间);
  • 周转时间 = 完成时间 - 到达时间 = 等待时间 + 服务时间;
  • 带权周转时间 = 周转时间/服务时间;
【第三步】程序构思
  • 选择要测试的调度算法的类型,选择后对应进行测试
  • 程序需要数据,所以需要用户输入的过程
  • 输入结束,我要存储未到达进程、就绪进程、运行进程、完成进程
  • 存储时,我需要按进程的到达时间来进行筛选
  • 存储到就绪进程的需要按算法类型来排序
  • 运行进程每次都调用就绪进程首位的进程来运行
  • 运行过程中未到达的进程会到达,我需要计算到达时间
  • 程序要求记录进程完成时间需要设置 timer
  • 程序要求输出的结果需要另外存储完成的进程
  • 所有进程完成后需要计算结果
  • 结果得出后需要输出
【第四步】程序框图

程序框图

【第五步】准备工作
  1. 选择需要的预编译头文件;
  2. 选择数据结构,还有相关操作,这里我选择链表;
  3. 设计结构体,我为了方便插入删除增加了指向前面元素的指针;
  4. 设计功能块,可以按函数来分,函数间互相依赖;
  5. 按功能模块为函数分类,比如:功能函数我加上前缀 ‘md_ ‘、输出是’pf_ ‘、链表操作是’lt_‘;

大概就是这些,缺的欢迎补充……

【第六步】编写程序

这个怎么写呢?!每个人都有自己的编程习惯,编译器也有不同。但是,大部分人都会按模块来写吧!我个人比较喜欢先写输入输出,数据结构这两块。写输入输出再来添加逻辑模块方便调试,数据结果模块比较固定,而且是其他模块的依赖。

这一部分就略过,以后有心得再补充。。。

【第七步】测试和优化

【测试】也可以叫做 debugger 吧?多输入几组数据来看有木有 BUG!

【优化】主要讲下代码优化,包括代码风格、变量命名、功能块合并等等!

总结

理清思路来写代码的话,比上网拷贝抄袭好很多的,这样子思路清晰不用帮别人debugger。添加、删减功能思路也会很清晰。至少不会因为代码不是自己的而手足无措。还能锻炼自己的思维啊、编程能力啊。。。以上就是个人的一些心得希望读者喜欢,XDXDXD。。。