“自顶向下,逐步求精”——面向过程程序设计方法

自顶向下(top-down)
将复杂的大问题分解为相对简单的小问题,找出每个问题的关键、重点所在,然后用精确的思维定性、定量地去描述问题。其核心本质是”分解”。
对要完成的任务进行分解,先对最高层次中的问题进行定义、设计、编程和测试,而将其中未解决的问题作为一个子任务放到下一层次中去解决。这样逐层、逐个地进行定义、设计、编程和测试,直到所有层次上的问题均由实用程序来解决,就能设计出具有层次结构的程序。 按自顶向下的方法设计时,设计师首先对所设计的系统要有一个全面的理解.然后从顶层开始,连续地逐层向下分解,起到系统的所有模块都小到便于掌握为止
“自顶向下,逐步求精”——面向过程程序设计方法_第1张图片
逐步求精
将现实问题经过几次抽象(细化)处理,最后到求解域中只是一些简单的算法描述和算法实现问题。即将系统功能按层次进行分解,每一层不断将功能细化,到最后一层都是功能单一、简单易实现的模块。求解过程可以划分为若干个阶段,在不同阶段采用不同的工具来描述问题。在每个阶段有不同的规则和标准,产生出不同阶段的文档资料。

“自顶向下,逐步求精”——面向过程程序设计方法_第2张图片
举个简单的例子:蛇形矩阵
Description
蛇形矩阵是由 1 开始的自然数依次排列成的一个矩阵上三角形。
Input
本题有多组数据,
每组数据由一个正整数 N 组成。(N不大于 100)
Output
对于每一组数据,输出一个 N 行的蛇形矩阵。两组输出之间不要额外的空行。
矩阵三角中同一行的数字用数域控制符“%4d”分开。行尾不要多余的空格。
Sample Input
5
Sample Output
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
首先把蛇形矩阵问题分解成若干个小问题:
1.使用一个二维数组储存数字,方便表格形式打印
2.使用嵌套循环结构赋值,大循环有n次,小循环起点为第一列,终点为第一行,每次小循环结束后行数+1,列数初始化为0
3.按照行列打印数组
代码如下:

#include
  int main()
  {
    int n,a[100][100]={0},row=1,col,coun,x,m=1;
    //赋值,大循环嵌套小循环,终点在第一行 
    scanf("%d",&n);
    for(coun=1;coun<=n;coun++){
        col=1;
        for(x=row;x>=1;x--){
            a[x][col++]=m++;
            }     
        row++;
        }
    //打印数组
    for(coun=1;coun<=n;coun++){
        for(x=1;x<=n-coun+1;x++){
            printf("%4d",a[coun][x]);
        }
        printf("\n");
    } 
    return 0;
   } 

“自顶向下,逐步求精”——面向过程程序设计方法_第3张图片
另附其他版本的蛇形矩阵:

#include
int main()
{
int i,j,a[100][100],n,k;
printf("请输入列数n= ");
scanf("%d",&n);
k=1;
//输出上三角
for(i=0; ifor(j=0; j<=i; j++)
{
if(i%2==0) a[i-j][j]=k;
else a[j][i-j]=k;
k++;
}
//输出下三角
for(i=n; i<2*n; i++)
for(j=1; j<2*n-i; j++)
{
if(i%2==0) a[n-j][i-n+j]=k; //n+1在这里是定值了
else a[i-n+j][n-j]=k;
k++;
}
for(i=0; iprintf("\n");
for(j=0; jprintf("%4d",a[i][j]);
}
printf("\n");
return 0;
}

“自顶向下,逐步求精”——面向过程程序设计方法_第4张图片
洗衣机程序设计:


  1. 进水,洗涤(漂洗)、排水、脱水
  2. Waterinswitch open getwatervolume(V) IF V==20 Waterinswitch close WHILE time<=0.5h motorrun(direction) direction%=2
    direction++ //dirction=0 left
    左转, //dirction=1right 右转, wateroutswitch open if V==0 wateroutswitch close motorrun(direction) direction%=2 direction++

  3. 快速洗衣跳过了浸泡过程 改进:加大电机运转速率

  4. Wait(time) Motorrun(time) Warning(time) 注水(vol,time)

你可能感兴趣的:(作业)