工程师思维浅析_工程师

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

工程师思维的笔记

从一个问题说起:使用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"); } } 

在这里插入图片描述

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

今天的文章
工程师思维浅析_工程师分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/60598.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注