
流程图(FlowChart):使用图形表示算法的思路是一种极好的方法,因为千言万语不如一张图
以特定的图形符号加上说明,表示算法的图,称为流程图或框图
流程图是流经一个系统的信息流、观点流或部件流的图形代表
在企业中,流程图主要用来说明某一过程
这种过程既可以是生产线上的工艺流程,也可以是完成一项任务必需的管理过程
例如,一张流程图能够成为解释某个零件的制造工序,甚至组织决策制定程序的方式之一
这些过程的各个阶段均用图形块表示,不同图形块之间以箭头相连,代表它们在系统内的流动方向
下一步何去何从,要取决于上一步的结果,典型做法是用“是”或“否”的逻辑分支加以判断
流程图是揭示和掌握封闭系统运动状况的有效方式
作为诊断工具,它能够辅助决策制定,让管理者清楚地知道,问题可能出在什么地方,从而确定出可供选择的行动方案
流程图有时也称作输入-输出图
该图直观地描述一个工作过程的具体步骤
流程图对准确了解事情是如何进行的,以及决定应如何改进过程极有帮助
这一方法可以用于整个企业,以便直观地跟踪和图解企业的运作方式
流程图使用一些标准符号代表某些类型的动作,如决策用菱形框表示,具体活动用方框表示
但比这些符号规定更重要的,是必须清楚地描述工作过程的顺序
流程图也可用于设计改进工作过程,具体做法是先画出事情应该怎么做,再将其与实际情况进行比较
得从点点滴滴的东西做起。。。本人也是学这个的,有些体会,。
《C程序设计》的内容很丰富,按照我们现在的教学大纲,主要内容是基础知识、四种结构的的程序设计、函数与数组的应用和一些简单的算法。在学习时,同学们应该把主要精力放在这些部分,通过实践(练习和上机调试等熟练掌握。当然,在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学的好?
学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。比如:在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调这种方法,这时也许你不能充分体会,但是学到函数时,再回头来仔细体会,温故知新,理解它就没有那么难了。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。
那么,我们如何学好《C程序设计》呢?
一.学好C语言的运算符和运算顺序
这是学好《C程序设计》的基础,C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。
先要明确运算符按优先级不同分类,《C程序设计》运算符可分为15种优先级,从高到低,优先级为1 ~ 15,除第2、3级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序。下面我们通过几个例子来说明:
(1) 58/4%10 这个表达式中出现3种运算符,是同级运算符,运算顺序按从左至右结合,因此先计算5 8=40,然后被4除,结果为10,最后是%(求余数)运算,所以表达式的最终结果为10%10 = 0;
(2)a = 3;b = 5;c =++ a b ;d =a + + b;
对于c=++ab来说,按表中所列顺序,+ +先执行,后执行,所以+ + a执行后,a的值为4,由于+ +为前置运算,所以a的值4参与运算,C的值计算式为45=20而不是35=15了;而对于d=a++b来说,由于a + +为后置运算,所以a值为4参与运算,使得d的值仍为20,而a参与运算后其值加1,值为5。 这个例子执行后,a的值为5,b的值为5,c的值为20,d的值也是20;
(3)(a = 3,b = 5,b+ = a,c = b 5)
例子中的“,”是逗号结合运算,上式称为逗号表达式,自左向右结合,最后一个表达式的结果值就是逗号表达式的结果,所以上面的逗号表达式结果为40,a的值为3,b的值为8,c的值为40。
(4)a=5;b=6;c=a>ba:b;
例中的a>ba:b是一个三目运算,它的功能是先做关系运算a>b部分,若结果为真,则取问号后a的值,否则取冒号后b的值,因此c的值应该为6,这个运算可以用来代替if…else…语句的简单应用。
二.学好C语言的四种程序结构
(1)顺序结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
例如;a = 3,b = 5,现交换a,b的值,这个问题就好象交换两个杯子水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为: c = a; a = b; b = c; 执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b = c; 则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。 顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 314159rr,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的复合语句、循环结构中的循环体等。
(2) 分支结构
顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。
学习分支结构不要被分支嵌套所迷惑,只要正确绘制出流程图,弄清各分支所要执行的功能,嵌套结构也就不难了。嵌套只不过是分支中又包括分支语句而已,不是新知识,只要对双分支的理解清楚,分支嵌套是不难的。下面我介绍几种基本的分支结构。
①if(条件)
{
分支体
}
这种分支结构中的分支体可以是一条语句,此时“{ }”可以省略,也可以是多条语句即复合语句。它有两条分支路径可选,一是当条件为真,执行分支体,否则跳过分支体,这时分支体就不会执行。如:要计算x的绝对值,根据绝对值定义,我们知道,当x>=0时,其绝对值不变,而x<0时其绝对值是为x的反号,因此程序段为:if(x<0) x=-x;
②if(条件)
{分支1}
else
{分支2}
这是典型的分支结构,如果条件成立,执行分支1,否则执行分支2,分支1和分支2都可以是1条或若干条语句构成。如:求ax^2+bx+c=0的根
分析:因为当b^2-4ac>=0时,方程有两个实根,否则(b^2-4ac<0)有两个共轭复根。其程序段如下:
d=bb-4ac;
if(d>=0)
{x1=(-b+sqrt(d))/2a;
x1=(-b-sqrt(d))/2a;
printf(“x1=%84f,x2=%84f\n”,x1,x2);
}
else
{r=-b/(2a);
i =sqrt(-d)/(2a);
printf(“x1=%84f+%84fi\n”r, i);
printf(“x2=%84f-%84fi\n”r,i)
}
③嵌套分支语句:其语句格式为:
if(条件1) {分支1};
else if(条件2) {分支2}
else if(条件3) {分支3}
……
else if(条件n) {分支n}
else {分支n+1}
嵌套分支语句虽可解决多个入口和出口的问题,但超过3重嵌套后,语句结构变得非常复杂,对于程序的阅读和理解都极为不便,建议嵌套在3重以内,超过3重可以用下面的语句。
④switch开关语句:该语句也是多分支选择语句,到底执行哪一块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,它不同if…else 语句,它的所有分支都是并列的,程序执行时,由第一分支开始查找,如果相匹配,执行其后的块,接着执行第2分支,第3分支……的块,直到遇到break语句;如果不匹配,查找下一个分支是否匹配。这个语句在应用时要特别注意开关条件的合理设置以及break语句的合理应用。
(3)循环结构:
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do –while循环和for循环。四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误,在学习中我们主要学习while、do…while、for三种循环。常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,这就要清楚三种循环的格式和执行顺序,将每种循环的流程图理解透彻后就会明白如何替换使用,如把while循环的例题,用for语句重新编写一个程序,这样能更好地理解它们的作用。特别要注意在循环体内应包含趋于结束的语句(即循环变量值的改变),否则就可能成了一个死循环,这是初学者的一个常见错误。
在学完这三个循环后,应明确它们的异同点:用while和do…while循环时,循环变量的初始化的 *** 作应在循环体之前,而for循环一般在语句1中进行的;while 循环和for循环都是先判断表达式,后执行循环体,而do…while循环是先执行循环体后判断表达式,也就是说do…while的循环体最少被执行一次,而while 循环和for就可能一次都不执行。另外还要注意的是这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,是不能用break和 continue语句进行控制的。
顺序结构、分支结构和循环结构并不彼此孤立的,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构,其实不管哪种结构,我们均可广义的把它们看成一个语句。在实际编程过程中常将这三种结构相互结合以实现各种算法,设计出相应程序,但是要编程的问题较大,编写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将C程序设计成模块化结构。
(4)模块化程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。 因些,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。
三.掌握一些简单的算法
编程其实一大部分工作就是分析问题,找到解决问题的方法,再以相应的编程语言写出代码。这就要求掌握算法,根据我们的《C程序设计》教学大纲中,只要求我们掌握一些简单的算法,在掌握这些基本算法后,要完成对问题的分析就容易了。如两个数的交换、三个数的比较、选择法排序和冒泡法排序,这就要求我们要清楚这些算法的内在含义,其中选择法排序和冒泡法排序稍难,但只要明白排序的具体过程,对代码的理解就不难了。如用选择法对10个不同整数排序(从小到大),选择法排序思路:设有10个元素a[1]~a[10],将a[1]与a[2]~a[10]比较,若a[1]比a[2]~a[10]都小,则不进行交换,即无任何 *** 作;若a[2]~a[10] 中有一个比a[1]小,则将其中最大的一个(假设为a)与a[1]交换,此时a[1]中存放了10个中最小的数。第二轮将a[2]与a[3]~a[10]比较,将剩下9个数中的最小者a与a[2]交换,此时a[2] 中存放的10个数中第2小的数;依此类推,共进行9轮比较,a[1]到a[10]就已按从小到大的顺序存放。即每一轮都找出剩下数中的最小一个,代码如下:
for(i=1;i<=9;i++)
for(j=i+1;j<=10;j++)
if(a>a[j]
{temp=a;
a=a[j];
a[j]=temp;
}
结语:当我们把握好上述几方面后,只要你能克服畏难、厌学、上课能专心听讲,做好练习与上机调试,其实C并不难学。
在word编写的流程图中条件判断的两条分支上加Y和N可通过文本框实现。
方法步骤如下:
1、打开需要 *** 作的WORD文档,在插入选项卡点击“文本框”。
2、然后在下面选择“绘制文本框”。
3、在相应的分支上画出对应的文本框并输入相关文本“Y/N”。
4、 同理,绘制另一个文本框,并输入相关文本“Y/N”。
5、选中两个文本框,在工具栏点击填充颜色后面的展开按钮,并选择“无填充颜色”。
6、点击轮廓后面的倒三角展开按钮,并选择“无轮廓”即可。
7、返回主文档,发现在word编写的流程图中条件判断的两条分支上加Y和N *** 作完成。
业务流程图的表达的6个关键问题
业务流程图的“烹饪三部曲”
在绘制业务流程图前,思考如何精美,如何交互,使用什么工具,都不应该是重点。
真正重点的是将业务流程图的关键要素给搜集一番。请试图回答清楚以下几个问题,否则不要开始绘制流程图:
整个流程的起始点是什么?整个流程的终结点是什么?
在整个流程中,涉及到的角色都是谁?
在整个流程中,都需要做什么事情?(可是是一个会议,可以是一个任务)
这些会议和任务是可选还是必选的?
分别产出什么文档?
这有点像一个头脑风暴,能够帮助你将所需用到的原材料获取到,有了这些“米”和“水”,那就不愁去如何烹饪了。
在项目管理中,上个月,我们也试图给去规范化一个数据产品的设计开发流程。
这是一个数据产品的项目,而我们都不是对此很有经验的人。所以我们召集到所有相关的角色,组织了一次头脑风暴及卡片分类法的混合式应用。
让大家头脑风暴出自己认为在项目里必须的节点,如“需求调研”,“需求分析”,“kick off会议”,“PRD撰写及确认”,“数据评估”,“技术架构”,“DEMO绘制”,“指标算法定义”,等等。
在头脑风暴过程中,主持人将这些节点都写到白板上,等没有新的节点诞生后,大家一起对节点进行合并归类。之后呢?
将这些剩余下来的真正有价值的节点,撰写到即时贴上,开始进行排序。在排序过程中,可以由一个人先主导,他会按照自己的理解,将各个节点放到按角色排布的泳道中,并设计好先后的顺序。在他进行的过程中,其他人不断进行提问:“这项任务开始前,需要什么样的条件?”“这个任务是必须的吗?”然后一起调整先后顺序。直到最终没有人有任何重大的异议。
之后拍照留念。
然后可整理成电子文档,如project或者excel版本(使用excel做项目管理?)
但是,业务流程图和上述项目中的流程不太相同的是:
项目中的各种活动节点有更宽泛的可配置性,任务A和任务B是否并行,还是串行,如果项目组成员达成共识,是可以调整,并且多做尝试的。所以可以用集思广益的做法去头脑风暴出一个暂定比较合理的流程。而业务流程图的梳理,有两种:
一种是基于现实发生的业务流程如实反映。这显然不是你一个团队能够YY的结果。更需要走到现实环境中,去调研,去梳理,去确认。
另一种是基于流程优化的方案,当你已经掌握了目前的流程现实如何运作时,基于分析,讨论,能够判断出流程中不合理的地方,给出一个更完善或者有更效率、成本更低的新的流程出来——或许你要求增加一个部门,或者你需要删减一个环节,或者中间的若干步使用新开发的系统去取代。
总之,大多数时候,你要想做第二种流程图,必然要先将第一种给梳理出来。所以,第一种如实反映的流程图是躲不过的。既然如此,基于YY或者头脑风暴是不现实的。我们需要走到前线去,掌握现实中业务是如何运作的。而且很多时候,越细节越好。
那怎么做呢?基于有限的知识与经验,我可以给如下建议:
调研——2梳理呈现——3评审确认三部曲,如图所示:
2 调研——问正确的问题,多问问题,多问几个人
除了在本部分开始的那几个问题要顾及到,其实调研过程解决的仍然是who,what,why,how,以及where的问题:谁,在什么情况下,做了什么事情,这个事情需要什么前置条件,又输出了什么,这个事情在哪里完成的?搞明白这几个问题,我们的调研就可以圆满完成了。
流程图的表现,要回答这几个问题:
Who——谁?部门,角色,岗位
What——什么事情?
Where——在哪里做的?在我梳理的业务流程图上,where更多表示是文档还是各种系统,用来表示信息化的程度。比如当我们梳理中发现,有一项登记,是用excel而不是业务系统来进行的,那么在这里的where就可以表示为:excel文档。
Document——那产生的这份文档叫什么名字?也写出来,代表有文件的传递,而以后要进行信息化的话,此份人肉文档也是需要被消除而被系统取代的。(相反,如果这项工作是在某个系统里 *** 作的,where就可以写成“人事系统”,文档可以继续存在,即该系统中的表单名称:“员工登记表单”)
Condition——条件。在这种条件下,下一个活动还能够继续,即用逻辑链接线的方式来表示一项活动的输入和输出,指向某个活动的箭头就表示此活动的前置输入条件。
Dicision——决策。有些活动会产生一个条件判断,根据不同的判断结果从而走不同的分支流程。比如输入员工信息的时候,可以根据员工之前是否就职过,选择不同的流程,对于已经就职过的,选用之前的工号而不用生成新的工号。
举个案例(如果不太恰当,请意会)。假设你受命要调研两家餐饮店的业务流程,目的是给他们提供性价比最高的点餐系统。
在调研中:
1 你首先可以要求精通业务流程的人给你系统讲解一遍。
2 调研具体 *** 作的人,来验证他给你讲解的是否全面和偏差。
3 实地观察和记录(花点时间走遍业务流程)
三种方式相互结合使用。第一种方法可以让你首先建立一个系统观,了解大体枝干,但是很难切入到可能会出现问题的细节。第二种方法太依赖于问题的质量以及问问题的场景。有很多结论的不正确其实是因为问错了人或者问问题的方法不对。那么就需要借助第三种,在观察中再进行验证。
比如,你现在找到了一个厨师:
你主要负责做什么菜系?
热菜。
那菜单都是谁给你的?
我们的服务员。
她都怎么提供给你?
她负责客人点菜后,然后手写一个单子,给我放到窗口上。
单子上都会写什么?
桌号,菜名等
那如何客人点的是冷菜呢?
恩,有复印本,直接拿一份给冷菜间。
那你怎么开始工作呢?从洗菜到切菜,一直烹饪都是一个人吗?
哦,不,我只负责烹饪。当接到菜单后,首先我的助理会进行择菜,刀工进行切菜,这样如果有几个菜就完全可以并行。
当你们做好后呢?
放到窗口,按铃,喊桌号和菜名,传菜员就会传菜。
……
在这些问题中,就涉及到了“分单”,“切菜”,“择菜”,”烹饪”,“传菜”,“上菜”几个活动,也涉及到了“服务员”,“厨师”,“助理”,“刀工”,“传菜员”几个角色。几个活动的次序也比较清楚了。
而另一家餐饮店的业务流程却是不一样的,你同样抓住一个厨师进行询问:
要做什么菜,菜单是哪里来的?
打印出来的。
所有菜都会在这里打印吗?
哦,只有热菜在这里打印出来,冷菜、酒水就会在冷菜间和酒水间打印出来。
打印机是谁在 *** 作的?
没人 *** 作,它会自动打印不同的单子给我们。
……下面的问题,可能厨师就不了解了,要问点菜员了。
请问你是怎么点菜的?
拿设备啊,客人点菜就按几下,确认就好了。
之后呢?
之后就可以将菜单打印出来。
不同的菜系会在不同的烹饪间打印吗?
是的,我们可以分单打印。是在这中心打印机里完成分单。
然后,你可以继续调研烹饪后的传菜和上菜流程。
3 梳理并呈现
你的调研和观察使你拥有了“烹饪”所需的原材料。
角色:部门、岗位或人
活动:做了什么事情
次序:做这些事情的次序如何
规则:什么情况下到什么事情
还记得我们之前提过的流程图要素吗?回顾下:
接下来的任务是不是很简单,对,就像填空题一样简单。将活动/事件按照一定的规则填到由部门和时间两条维度决定的框框里。
这个阶段是paper work,你需要将调研阶段收集到的原材料用更直观明了的方式呈现出来。从而能够更好进行评审和确认。也为以后的流程评审和优化做准备。
在刚开始,笔和纸的原始搭配仍然是最好的起步工具。你可以暂时忽略掉美观或者可复用的因素。但是当你对要呈现的流程已经有足够的信心时,就可以借助软件工具了。
31 复杂流程的分解
不可能将所有的活动都放到一张图里呈现。
“业务流程是有层次性的,这种层次体现在由上至下、由整体到部分、由宏观到微观、由抽象到具体的逻辑关系。这样一个层次关系符合人们的思维习惯,有利于企业业务模型的建立 企业部门之间的层次关系表。一般来说,我们可以先建立主要业务流程的总体运行过程(其中包括了整个企业的大的战略),然后对其中的每项活动进行细化,落实到各个部门的业务过程,建立相对独立的子业务流程以及为其服务的辅助业务流程。”
——引自《百度百科》 业务流程词条
对于很多新人来讲,业务最难的在于划分业务流程图的层次上。
首先,明确你要梳理的业务流程的范围——用大的粗略的关键节点,讲清楚这个业务流程范围中的故事,就是顶层业务流程图。你的顶层业务流程图是业务全局故事的简单表达,但是请注意这里的业务全局不见得是公司整体的业务全局,而是你界定好的业务范围。比如,下图是餐厅的日常运作流程图,若你界定的业务范围是面向顾客的点餐和结帐流程,那么这就是顶层业务流程图。但是若你界定的是整个餐厅的运作业务流程,那这显然还是一个子集——并没有包含餐厅的采购、供应商管理、一级库存管理等工作。
其次,先从顶层的业务流程分解开始,由粗至细。顶层业务流程图的梳理原则:
1 界定范围内的业务全局故事。
2 包含该范围内的关键节点。并且,当被质疑说某某环节怎么不存在时,自己要清楚它在下一层分解中应该被包含在那个关键节点中。比如,赠送10周年优惠券,应该会在结帐节点分解中出现。而打印分单,会在点菜节点中分解。而准备儿童座椅应该是接待入座环节。
3 顶层流程图分解出来的关键节点未必都会细化分解下去,生成二级以及三级的流程图。这要看该节点涉及到的“活动”以及“角色”是否复杂。
再看一个案例,对传统生产型企业的进销存主业务流程进行分解。橙色的代表被分解点,已经可以分解为四层。当我们分解到第四层,发现再往下去涉及到的活动和角色都已经很少时,就不必再分解了,而是可以将第四层的关键节点直接作为第三层业务流程的“活动”,而不是子流程图。
当然,这是依赖于你梳理业务流程的目标。如果你偏偏是要对“打样”环节进行剖析优化,则还可以继续分解下去。
这一步的工作会帮你建立出清晰的流程目录结构,如下图所示是摘选于刚完成的一个流程梳理的项目中的目录结构部分。可以看到全图即是顶层关键节点,作为老大,可能只要看这一层就够了。下面则会对顶层做更多细化拆解。
“H3样品认证”在顶层业务流程图中,仅仅是一个“活动”,而在自己细化的这一个层次中,则会包含详细的子活动一级参与者。
32 流程图的常用图示
我常用的就是前两行的“活动”,“判断”,“逻辑关系线”,“起始与终止”,以及第二行的“子流程”,和“文件/表单”。如果你不是符号控,我建议这几个就足够了。
其中,“子流程”此图示就是可以帮助你将流程分解得到的子流程能够串联起来,比如,当在”A流程”中涉及到进一步需要分解的”A11流程”时,就可以在”A流程”中用子流程符号代表“A11”。然后你的读者就会明白要想进一步了解”A11″应该参考另外一个流程图。
流程图的常用结构:
给大家看一些案例:
基本上包含大多数图示的流程图:
只用到少数几个图示画的简单流程图(台湾人的文档中称为程序图——不过这里的程序不是指计算机程序,而是process,仅仅是体现任务之间的处理流程,所以使用极简单的符号也不为怪了):
以上两个流程图案例,从符号的复杂程度上来讲,一个是完整流程图,一个是基本流程图,但是从表现形式来讲,都属于“泳道图”——Swimlane。这也是我们最常用的一种表现形式了。泳道图能够很好体现部门或者角色在流程中的职责以及上下游的协作关系。且流程图本身的标准容易掌握,达成共识也就更加容易。
33 泳道图精要
2大维度:一般泳道图的横向会作为部门或岗位维,当然也有例外,如上述案例中就是横的泳道。而纵向则做为阶段维——时间是从上到下发展的。如果复杂的泳道图,在任务分解上可以在阶段维里做一些划分,比如“采购”,“生产”,“销售”,”配送”等。
活动流转:活动就像一个游泳员一样,游到不同的泳道中去执行任务。
在上文中的软件推荐部分,我推荐过smartdraw工具,此工具还附带了泳道图的模板,大家比较更快能够上手:
34 Do vs Donnot 业务流程图的注意事项!
DO
1 让涉众参与,不要闭门造车
业务流程图包含了你图上的各个参与角色代表,与他们适时确认事情的原本流程,禁止自己YY。
2 恰当的层次分解,不要将所有都铺到一张图上
如上所示。
3 逐渐深入,先抓枝干
切忌胡子眉毛一把抓。
4 流程一定有开始和结束
切忌交付出来的流程图,让读者还来问你:流程的开始点是什么?用清晰的代表开始和结束的符号来完成第一步和最后一步。
5 编号,编号,编号
这是让沟通效率更高的优化措施。当你有了编号系统,相当于对你的流程图都赋予了唯一识别身份z号。这比中文名称更有效。比如当我们完成了业务流程图后,负责业务流程规则审核和优化的部门能够清楚在邮件里传达:H51流程优化,大家就更明确指的是什么。
DONNOT
1 自己YY应用的环节而不是现实中的环节
2 所有的环节都试图放到一张图上
3 一开始就陷入细节,胡子眉毛一起抓
4 流程很难让人分清楚从哪里开始,到哪里结束
4 评审及后续行动
验证你是否做到了以上的DO,以及规避了Donnot的做法是什么?
很好办,及时与各位进行评审。将各个涉众都叫到一起,给他们看你梳理出来的成果。
这会发现一些有意思的事情,除了评审你的流程图是否符合现实外,也会评审目前的业务流程是否符合理想。不同的部门和岗位的代表会在这个评审中,确认当前,也会相互提出意见,甚至吵起来,这不失于做流程优化的一个很好的契机。暂且不表了。
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。
C语言对 *** 作系统和系统使用程序以及需要对硬件进行 *** 作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。
C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。
常用的C语言IDE(集成开发环境)有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++ ,Borland C++ Builder,Borland C++ 31 for DOS,Watcom C++ 110 for DOS,GNU DJGPP C++ ,Lccwin32 C Compiler 31,Microsoft C,High C,Turbo C等等
[编辑本段]C语言的发展历史
C语言的原型ALGOL 60语言。(也称为A语言)
1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。
1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。
1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX *** 作系统。
而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的DMRITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
为了使UNIX *** 作系统推广,1977年Dennis MRitchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。即是著名的ANSI C。
1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由BWKernighan和DMRitchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C 语言,后来由美国国家标准协会(American National Standards Institute)在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。
1988年,随着微型计算机的日益普及, C语言出现了许多版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准3C语言的主要特点 。C语言发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。
[编辑本段]C语言的优点
1 简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以象汇编语言一样对位、字节和地址进行 *** 作, 而这三者是计算机最基本的工作单元。
2 运算符丰富
C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
3 数据结构丰富
C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
4 C是结构式语言
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
5 C语法限制不太严格,程序设计自由度大
虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。
6 C语言允许直接访问物理地址,可以直接对硬件进行 *** 作
因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行 *** 作,而这三者是计算机最基本的工作单元,可以用来写系统软件。
7 C语言程序生成代码质量高,程序执行效率高
一般只比汇编程序生成的目标代码效率低10へ20%。
8 C语言适用范围大,可移植性好
C语言有一个突出的优点就是适合于多种 *** 作系统, 如DOS、UNIX,也适用于多种机型。
[编辑本段]C语言的缺点
1 C语言的缺点主要是表现在数据的封装性上,这一点使得C在数据的安全性上做的有很大缺陷,这也是C和C++的一大区别。
2 C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。
[C语言指针]
指针就是C语言的一大特色,可以说C语言优于其它高级语言的一个重要原因就是因为它有指针 *** 作可以直接进行靠近硬件的 *** 作,但是C的指针 *** 作也给它带来了很多不安全的因素。C++在这方面做了很好的改进,在保留了指针 *** 作的同时又增强了安全性。Java取消了指针 *** 作,提高了安全性。
[编辑本段]C源程序的结构特点
1一个C语言源程序可以由一个或多个源文件组成。
2每个源文件可由一个或多个函数组成。
3一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。
4源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。
5每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。
6标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。
[编辑本段]学习C语言
在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学的好?
学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。
那么,我们如何学好《C程序设计》呢?
一.学好C语言的运算符和运算顺序
这是学好《C程序设计》的基础,C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。
先要明确运算符按优先级不同分类,《C程序设计》运算符可分为15种优先级,从高到低,优先级为1 ~ 15,除第2、3级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序
二.学好C语言的四种程序结构
(1)顺序结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
例如;a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为: c = a; a = b; b = c; 执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b = c; 则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。 顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 314159rr,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的复合语句、循环结构中的循环体等。
(2) 分支结构
顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。
学习分支结构不要被分支嵌套所迷惑,只要正确绘制出流程图,弄清各分支所要执行的功能,嵌套结构也就不难了。嵌套只不过是分支中又包括分支语句而已,不是新知识,只要对双分支的理解清楚,分支嵌套是不难的。下面我介绍几种基本的分支结构。
①if(条件)
{分支体}
这种分支结构中的分支体可以是一条语句,此时“{ }”可以省略,也可以是多条语句即复合语句。它有两条分支路径可选,一是当条件为真,执行分支体,否则跳过分支体,这时分支体就不会执行。如:要计算x的绝对值,根据绝对值定义,我们知道,当x>=0时,其绝对值不变,而x<0时其绝对值是为x的反号,因此程序段为:if(x<0) x=-x;
②if(条件)
{分支1}
else
{分支2}
这是典型的分支结构,如果条件成立,执行分支1,否则执行分支2,分支1和分支2都可以是1条或若干条语句构成。如:求ax^2+bx+c=0的根
分析:因为当b^2-4ac>=0时,方程有两个实根,否则(b^2-4ac<0)有两个共轭复根。其程序段如下:
d=bb-4ac;
if(d>=0)
{x1=(-b+sqrt(d))/2a;
x2=(-b-sqrt(d))/2a;
printf(“x1=%84f,x2=%84f\n”,x1,x2);
}
else
{r=-b/(2a);
i =sqrt(-d)/(2a);
printf(“x1=%84f+%84fi\n”r, i);
printf(“x2=%84f-%84fi\n”r,i)
}
③嵌套分支语句:其语句格式为:
if(条件1) {分支1};
else if(条件2) {分支2}
else if(条件3) {分支3}
……
else if(条件n) {分支n}
else {分支n+1}
嵌套分支语句虽可解决多个入口和出口的问题,但超过3重嵌套后,语句结构变得非常复杂,对于程序的阅读和理解都极为不便,建议嵌套在3重以内,超过3重可以用下面的语句。
④switch开关语句:该语句也是多分支选择语句,到底执行哪一块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,它不同if…else 语句,它的所有分支都是并列的,程序执行时,由第一分支开始查找,如果相匹配,执行其后的块,接着执行第2分支,第3分支……的块,直到遇到break语句;如果不匹配,查找下一个分支是否匹配。这个语句在应用时要特别注意开关条件的合理设置以及break语句的合理应用。
(3)循环结构:
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do Cwhile循环和for循环。四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误,在学习中我们主要学习while、do…while、for三种循环。常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,这就要清楚三种循环的格式和执行顺序,将每种循环的流程图理解透彻后就会明白如何替换使用,如把while循环的例题,用for语句重新编写一个程序,这样能更好地理解它们的作用。特别要注意在循环体内应包含趋于结束的语句(即循环变量值的改变),否则就可能成了一个死循环,这是初学者的一个常见错误。
在学完这三个循环后,应明确它们的异同点:用while和do…while循环时,循环变量的初始化的 *** 作应在循环体之前,而for循环一般在语句1中进行的;while 循环和for循环都是先判断表达式,后执行循环体,而do…while循环是先执行循环体后判断表达式,也就是说do…while的循环体最少被执行一次,而while 循环和for就可能一次都不执行。另外还要注意的是这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,是不能用break和 continue语句进行控制的。
顺序结构、分支结构和循环结构并不彼此孤立的,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构,其实不管哪种结构,我们均可广义的把它们看成一个语句。在实际编程过程中常将这三种结构相互结合以实现各种算法,设计出相应程序,但是要编程的问题较大,编写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将C程序设计成模块化结构。
(4)模块化程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。 因此,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。
三.掌握一些简单的算法
编程其实一大部分工作就是分析问题,找到解决问题的方法,再以相应的编程语言写出代码。这就要求掌握算法,根据我们的《C程序设计》教学大纲中,只要求我们掌握一些简单的算法,在掌握这些基本算法后,要完成对问题的分析就容易了。如两个数的交换、三个数的比较、选择法排序和冒泡法排序,这就要求我们要清楚这些算法的内在含义
结语:当我们把握好上述几方面后,只要同学们能克服畏难、厌学、上课能专心听讲,做好练习与上机调试,其实C语言并不难学
C源程序的关键字---------------------------------------------------------------------------------------
所谓关键字就是已被C语言本身使用, 不能作其它用途使用的字。例如关键字不能用作变量名、函数名等
由ANSI标准定义的C语言关键字共32个 :
auto double int struct break else long switch
case enum register typedef char extern return union
const float short unsigned continue for signed void
default goto sizeof volatile do if while static
根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。
1 数据类型关键字
A基本数据类型(5个)
void :声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果
char :字符型类型数据,属于整型数据的一种
int :整型数据,通常为编译器指定的机器字长
float :单精度浮点型数据,属于浮点数据的一种
double :双精度浮点型数据,属于浮点数据的一种
B 类型修饰关键字(4个)
short :修饰int,短整型数据,可省略被修饰的int。
long :修饰int,长整形数据,可省略被修饰的int。
signed :修饰整型数据,有符号数据类型
unsigned :修饰整型数据,无符号数据类型
C 复杂类型关键字(5个)
struct :结构体声明
union :共用体声明
enum :枚举声明
typedef :声明类型别名
sizeof :得到特定类型或特定类型变量的大小
D 存储级别关键字(6个)
auto :指定为自动变量,由编译器自动分配及释放。通常在栈上分配
static :指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
register :指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
extern :指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的对象的一个“引用”
const :与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
volatile :与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值
2 流程控制关键字
A 跳转结构(4个)
return :用在函数体中,返回特定值(或者是void值,即不返回值)
continue :结束当前循环,开始下一轮循环
break :跳出当前循环或switch结构
goto :无条件跳转语句
B 分支结构(5个)
if :条件语句
else :条件语句否定分支(与if连用)
switch :开关语句(多重分支语句)
case :开关语句中的分支标记
default :开关语句中的“其他”分治,可选。
C 循环结构(3个)
for :for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2循环,其中2为循环条件
do :do循环结构,do 1 while(2); 的执行顺序是 1->2->1循环,2为循环条件
while :while循环结构,while(1) 2; 的执行顺序是1->2->1循环,1为循环条件
以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。
评论|给力3不给力0
说句实在话,如果你想依靠程序设计为今后工作打基础或者想从事程序设计方面的工作的话,现在已经晚了点了。
如果你不想从事计算机工作,那么学这些也没有什么用,不会对你的毕业就业有什么作用。
如果你是想从事计算机程序设计工作的话,你有几种现在可以选择的道路。
1、学习简单的程序设计语言VB,然后学VBnet,这种计算机语言比较简单,学起来快,如果你C语言学的好的话,1个月就能把这些语言学的差不多,至少可以做点东西了。但现在需要VB人才的不多。
2、学习C++/C#/Java,这些语言要的人多,但学习周期长,你想在短时间内学好,是不太现实的,如果你打算走这条路,那就要做好持久战的准备,毕业也未必能马上找到合适的工作。
从我自己的角度来说,如果你学习C++的话,可能要学半年(我是在大学里自学的,花了半年,现在还在学,因为C++确实比想象的要复杂的多),光学C++是没有用的,你必须要会主流的编译器VC++或VS,当然还有别的选择,但就现在看,很多公司需要这些的。这个学习有牵涉到Windows程序设计、Win32 API、MFC,学习这些至少要2-3年,所以,说实在的,这是个持久战,除非你不打算深入学习,如果是这样,你也没有必要去学习C++。
或许你可以学习Java或C#,这些在语法上和C比较类似,但他们是面向对象的,你没有这样的基础,学起来也可能要比较长的时间。
说句实在的话,如果你对程序设计没有兴趣,或你不打算从事这个行业,呢就别学了,因为他对的今后的工作没有什么帮助。你要考虑的是你将来到底要干什么工作?你的发展方向是什么?毕业后是什么打算?学什么才对你未来发展有帮助?这些问题才是你的当务之急。
千锋Mars老师Java语言教程-2013年版,史上最牛java培训视频百度网盘免费资源在线学习
vwi9 千锋Mars老师Java语言教程-2013年版,史上最牛java培训视频 千锋-java语言教程-43_类集框架(三)mp4 千锋-java语言教程-42_类集框架(二)mp4 千锋-java语言教程-41_类集框架(一)mp4 千锋-java语言教程-40_Java当中的数组mp4 千锋-java语言教程-39_深入同步语法mp4 千锋-java语言教程-38_Java当中的线程(三)mp4 千锋-java语言教程-37_Java当中的线程(二)mp4 千锋-java语言教程-36_Java当中的线程(一)mp4 千锋-java语言教程-35_内部类和匿名内部类mp4 千锋-java语言教程-34_Java当中的IO(三)mp4 千锋-java语言教程-33_Java当中的IO(二)mp4 千锋-java语言教程-32_Java当中的IO(一)mp4 千锋-java语言教程-31_Java当中的异常(二)mp4 千锋-java语言教程-30_Java当中的异常(一)mp4
以上就是关于软件开发的基本流程包括哪些全部的内容,包括:软件开发的基本流程包括哪些、c语言的学习方法、怎样在word编写的流程图中条件判断的两条分支上加Y和N啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)