工程师思维浅析

工程师思维的笔记

从一个问题说起:使用c语言在屏幕上画出指定的图形,如三角形,矩形,菱形等图形
如果我们一开始去做的话,会先想如何画一个矩形,根据过往的经验,会准备用双层for循环,然后很轻易的画出一个矩形,


void rect(int a,int b,char c)
{
    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
            printf("*");
        }
        printf("\n");
    }   
}

但是当画三角形的时候就会出现问题,因为每一行要画出来的字符数量是不定的,这需要做很多的判断,若是面向过程的方法,则需要一层一层的判断画的字符的数量,我们的大脑承受不了那么多条件的转变和判断,就会出现把问题搞得一团糟,这时工程师思维就可以很轻易的解决这些问题

  1. 把问题细化,人的大脑一次最多只能存储7个变量的转换和条件的判断,若是把问题细化到非常小的一部分,我们就可以很轻易的解决,首先,若要画一个图形,可以先定义一个函数,它能够画出指定的字符:
#include<stdio.h>
void printChar(char c)
{
    printf("%c",c);
}
  1. 一个图形是由多个字符组成的,则可以定义一个函数连续的画出指定的字符
void printChar(char c);
//连续打印一行字符
void printLine(int n,char c)
{
    for(int i=0;i<n;i++)
    {
        printChar(c);
    }
}
  1. 这时候我们已经可以画出矩形了,对比最开始用的双重循环,此方法条理清晰,逻辑明了,易于理解
//打印一个矩形
void rect(int a,int b,char c)
{
    for(int i=0;i<a;i++){
        printLine(b,c);
        printf("\n");
    }
}
  1. 接下来是三角形的问题,三角形要画的字符的位置是不一样的,有的要从一开始就画,有的要在某一个位置才开始画,这时又可以定义一个函数用于在指定的索引处开始画字符 而画多少个则由上一个函数printLine来实现
//在指定索引处连续打印指定数目的字符
void indexPrint(int a,int index,int n,char c)
{
    for(int i=0;i<a;i++){
        if(i==index){
            printLine(n,c);//从指定的索引楚开始打印字符
            break;
        }
        printChar(' ');//其他位置打印空白字符

    }
}
  1. 这时,已经可以解决一开始的所有问题,画一个三角形
//打印等腰三角形
void isoscelesTriangle(int a,int b,char c,int flag)
{
    /*用一个标志位flag来判断是要画正等腰还是倒等腰三角形
     * 1为正,0为倒
     * a表示要画的行数,b表示画的列数
     * */
    if(flag==1){
        for(int i=0;i<a;i++){
            if(i>b/2){
                break;
            }
            indexPrint(b,b/2-i,2*i+1,c);
            printf("\n");
        }
    }

    if(flag==0){
        int count=b/2;
        for(int i=0;i<a;i++){
            if(i>count){
                break;
            }
            indexPrint(count*2,i,b,c);
            b-=2;
            printf("\n");
        }
    }
}

在这里插入图片描述
画一个菱形

//打印菱形
void diamond(int a,int b,char c)
{
    //只需要打印两次等腰三角,一次正等腰,一次倒等腰
    isoscelesTriangle(a,b,c,1);
    isoscelesTriangle(a,b,c,0);
}

在这里插入图片描述
空心矩形

//打印空心矩形
void hollowRect(int a,int b, char c)
{
    for(int i=0;i<a;i++){
        if(i==0||i==a-1){
            printLine(b,c);
            printf("\n");
            continue;
        }
        printChar(c);
        for(int j=0;j<b-2;j++){
            printChar(' ');
        }
        printChar(c);
        printf("\n");
    }
}

在这里插入图片描述

其他图形都是如此,只需要使用不同的函数就可以画出想要的图形,在遇到问题时先不想大的解决方法,而是着眼于小问题的解决方法,解决一个个小问题,最后再将这些解决方法总结起来综合运用,就能够解决很多一开始解决不了的大问题,这就是工程师的思维,在面对问题时使用层次化,结构化的思想将问题分层依次解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值