欢迎来到天天文库
浏览记录
ID:46976213
大小:298.50 KB
页数:96页
时间:2019-12-02
《软件工程第5章程序编码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第七章程序编码结构化程序设计程序设计风格程序效率程序复杂性度量做为软件工程过程的一个阶段,程序编码是设计的继续。程序设计语言的特性和程序设计风格会深刻地影响软件的质量和可维护性。为了保证程序编码的质量,程序员必须深刻地理解、熟练地掌握并正确地运用程序设计语言的特性。此外,还要求源程序具有良好的结构性和良好的程序设计风格。源程序的质量标准正确性可读性可靠性可维护性结构化程序设计结构化程序设计主要包括两方面:(1)在编写程序时,强调使用几种基本控制结构,通过组合嵌套,形成程序的控制结构。尽可能避免使用GOTO语句。(2
2、)在程序设计过程中,尽量采用自顶向下和逐步细化的原则,由粗到细,一步步展开。结构化程序设计的主要原则使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。选用的控制结构只准许有一个入口和一个出口。程序语句组成容易识别的块,每块只有一个入口和一个出口。复杂结构应该用基本控制结构进行组合嵌套来实现。语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统中前后一致。严格控制GOTO语句,仅在下列情形才可使用:①用一个非结构化的程序设计语言去实现一个结构化的构造。②若不使用GOTO语句就会使程
3、序功能模糊。③在某种可以改善而不是损害程序可读性的情况下。例1打印A,B,C三数中最小者的程序程序1if(A
4、)endifendif该程序结构清晰、可读性好。例2用二分法求方程f(x)=0在区间[a..b]中的根的程序假设在闭区间[a..b]上函数f(x)有唯一的一个零点程序1f0=f(a);f1=f(b);if(f0*f1<=0){x0=a;x1=b;for(i=1;i<=n;i++){xm=(x0+x1)/2;fm=f(xm);if(abs(fm)5、6、abs(x1-x0)0){x0=xm;f0=fm;}elsex1=xm;}finish:printf(“Th7、erootofthisequationis%d”,xm);}该程序是单入口,两出口。正常出口是循环达到n次,非正常出口是循环中途控制转出到标号finish所在位置。不满足结构化要求!程序2f0=f(a);f1=f(b);if(f0*f1<=0){x0=a;x1=b;for(i=1;i<=n;i++){//正常出口xm=(x0+x1)/2;fm=f(xm);if(abs(fm)<eps8、9、abs(x1-x0)<eps)break;//非正常出口if(f0*fm>0){x0=xm;f0=fm;}elsex1=xm;10、}}该程序仍然存在二个出口,不是结构化程序。程序3f0=f(a);f1=f(b);if(f0*f1<=0){x0=a;x1=b;i=1;finished=0;while(i<=n&&finished==0){xm=(x0+x1)/2;fm=f(xm);if(abs(fm)<eps11、12、abs(x1-x0)<eps)finished=1;if(finished==0)if(f0*fm>0){x0=xm;f0=fm;}elsex1=xm;}}引入布尔变量finished,改for型循环为while型,将单入口多出口结构改13、为单入口单出口结构。是结构化程序!自顶向下,逐步求精在详细设计和编码阶段,应当采取自顶向下、逐步求精的方法。把一个模块的功能逐步分解、细化为一系列具体的步骤,进而翻译成一系列用某种程序设计语言写成的程序。例用筛选法求100以内的素数筛选法就是从2到100中去掉2、3、…、9、10的倍数,剩下的就是100以内的素数。为了解决这个问题,可先按程序功能写出一个框架。程序框架main(){建立2到100的数组A[],其中A[i]=i;-----------------------------------1建立2到10的素数14、表B[],其中存放2到10以内的素数;-----------------------------------2若A[i]=i是B[]中任一数的倍数,则剔除A[i];-----------------------------------3输出A[]中所有没有被剔除的数;-----------------------------------4}对程序细化main
5、
6、abs(x1-x0)0){x0=xm;f0=fm;}elsex1=xm;}finish:printf(“Th
7、erootofthisequationis%d”,xm);}该程序是单入口,两出口。正常出口是循环达到n次,非正常出口是循环中途控制转出到标号finish所在位置。不满足结构化要求!程序2f0=f(a);f1=f(b);if(f0*f1<=0){x0=a;x1=b;for(i=1;i<=n;i++){//正常出口xm=(x0+x1)/2;fm=f(xm);if(abs(fm)<eps
8、
9、abs(x1-x0)<eps)break;//非正常出口if(f0*fm>0){x0=xm;f0=fm;}elsex1=xm;
10、}}该程序仍然存在二个出口,不是结构化程序。程序3f0=f(a);f1=f(b);if(f0*f1<=0){x0=a;x1=b;i=1;finished=0;while(i<=n&&finished==0){xm=(x0+x1)/2;fm=f(xm);if(abs(fm)<eps
11、
12、abs(x1-x0)<eps)finished=1;if(finished==0)if(f0*fm>0){x0=xm;f0=fm;}elsex1=xm;}}引入布尔变量finished,改for型循环为while型,将单入口多出口结构改
13、为单入口单出口结构。是结构化程序!自顶向下,逐步求精在详细设计和编码阶段,应当采取自顶向下、逐步求精的方法。把一个模块的功能逐步分解、细化为一系列具体的步骤,进而翻译成一系列用某种程序设计语言写成的程序。例用筛选法求100以内的素数筛选法就是从2到100中去掉2、3、…、9、10的倍数,剩下的就是100以内的素数。为了解决这个问题,可先按程序功能写出一个框架。程序框架main(){建立2到100的数组A[],其中A[i]=i;-----------------------------------1建立2到10的素数
14、表B[],其中存放2到10以内的素数;-----------------------------------2若A[i]=i是B[]中任一数的倍数,则剔除A[i];-----------------------------------3输出A[]中所有没有被剔除的数;-----------------------------------4}对程序细化main
此文档下载收益归作者所有