详细设计 软件设计

详细设计的任务
不是具体的编写程序,而是设计程序的 “蓝图”
详细设计的目标不仅仅是逻辑上正确的设计每个模块的功能,更重要的是设计出的处理过程应该尽可能 简明易懂
过程设计
即确定每个模块的实现算法
数据设计
设计软件中所需要的数据结构
接口设计
设计软件内部各个模块之间、软件与协作系统之间以及软件与使用它的人之间的通信方式

展开
1.详细设计的目的?
      详细设计的根本目标是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。

2.详细设计的基本任务是什么?有哪几种描述方法?
   1)详细设计阶段的任务是要设计出程序的“蓝图”,以后程序员将根据这个“蓝图”写出实际的程序代码。

   2)有如下六种描述方法——

     ·程序流程图:也称为程序框图,使用五种基本控制结构;

     ·盒图(N—S图):出于要有一种不允许违背结构程序设计精神的图形工具考虑提出;

     ·PAD图:即问题分析图,用二维树形结构的图来表示程序的控制流,面向高级程序设计语言;

     ·判定表:能清晰表示复杂的条件组合与应做的动作之间的对应关系,包含条件、动作、条件组合及对应动作;

     ·判定树:是判定表的变种,形式简单但简洁性较低;

     ·过程设计语言(PDL):是一种用于描述功能模块的算法设计和加工细节的语言,是一种伪码。

3.下面是一段用Seidel迭代法求解线性方程组的程序。其中A[n,n]是方程组的系数矩阵。B[n]是方程组的右端项,X[n]是方程组的解向量。eps是控制迭代精度的较小实数。imax是控制迭代的最大次数。flag是标志,值为0时表示迭代不收敛,值为l时表示迭代收敛。
for(k=0;k<n;k++)
     X[k]=0.0;
X[n-1]=1.0;
for(i=1;i<imax;i++) {
    flag=1;
    for(j=0;j<n;j++) {
          s=B[j];
         for(k=0;k<n;k++) {
               if(j==k)
                    s += X[k];
                s=s-A[j,k]*X[k];
         }
        if (abs(X[j]-s) > (abs(s) + 1.0)*eps
               flag=0;
        X[j]=s;
     }
     if(flag==1)
          break;
}
画出该C伪码的程序流程图,N-S图,程序流图,并计算程序的McCabe环形复杂度。
程序流程图:

 

N—S图:

程序流图:

     V(G) = 7 + 1 = 8

4.画出下列伪码程序的程序流程图和盒图:
START
IF p THEN
    WHILE q DO
        f
    END DO
ELSE
    BLOCK
        g
        n
    END BLOCK
END IF
STOP
程序流程图:

 

盒图:

 

5.画出下列伪码程序的流图,计算它的环形复杂度。这个程序的逻辑有什么问题吗?
C EXAMPLE
 
LOOP: DO WHILE Z>0
    A = B+1
    IF A>10
        THEN X=A
    ELSE
        Y=Z
    END IF
    IF Y<5
    THEN PRINT X, Y
    ELSE IF Y=2
           THEN GOTO LOOP
        ELSE
           C=3
    END IF
    END IF
    G = H+R
END DO
IF F>0
    THEN PRINT G
ELSE
    PRINT K
END IF
STOP
程序流程图:

  

流图:

     V(G) = 5 + 1 = 6

     逻辑问题:

          Z值不明确且while循环内未改变,造成while内语句不执行或死循环;

          Y<5时一定有Y=2,使得goto loop失效。

支持goto 语句的高级语言可以在代码之间随意的跳来跳去,但是一般建议不使用goto,因为 goto 会使你的代码逻辑变的极其混乱。但是有时候我们不得不用它,因为它太高效了。比如进入循环内部深层一个 goto 就能回到最上层,还有可以定位到代码的任意一个位置,很是高效方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值