黑马程序员技术交流社区

标题: 初学C语言打印图形,精解.四种三角形.心得(面试用) [打印本页]

作者: sf1215225    时间: 2015-11-5 23:32
标题: 初学C语言打印图形,精解.四种三角形.心得(面试用)
本帖最后由 sf1215225 于 2015-11-5 23:46 编辑


小弟是初学者,看到很多同学在打印正三角形和倒三角形时屡不清思路.
便想看看自己能不能把自己的思路讲清,以便帮助同学们(其实也就是日常敲代码精细了备注而已
先说一下我的思路,输入1-5,打印出不同的图形..
被抽楼了,不开心了,不想说太多...
#include<stdio.h>


//定义一个函数printfPicture,使之可以接收数字打印相应地图形.
int printfPicture(int inputNum){

    //用switch语句来判断每个字符对应的是什么图形.
    switch(inputNum){

        //case1为打印正方形,5行5列ab相等,故a和b都是各循环5次.
            /*

             * * *
             * * *
             * * *

             */
    case 1:{
        for (int a=0; a<5; a++) {
            for (int b=0; b<5; b++) {
                printf("* ");
            }
            printf("\n");
        }
    }
    break;


        //case2为打印正直角三角形.
            /*

             *
             * *
             * * *

             */
    case 2:{
            //外循环5次,a循环5次不变.

        for (int a=0; a<5; a++) {
            //里循环5次,但每次随a的值递增自己循环的次数.里循环随外循环的值从1次开始递增循环次数.
            //故说a会越来越大,b随a的值变大且b大不过a.即b<=a.
            for (int b=0; b<=a; b++) {
                printf("* ");
            }
            printf("\n");
        }
    }
    break;



        //case3打印倒直角三角形.
            /*

             * * *
             * *
             *

             */
    case 3:{
            //外循环5次不变.
        for (int a=0; a<5; a++) {
            //里循环打出的*从多到少***** **** ***可以形成倒三角形
            //里循环从循环5次然后4次3次逐渐递减可以是(b=5,b>0,b--),进行b的自减运算
            //也可以b仍然是自增,用一个数减去b,b自增的越大,减b得出的值就越小,同样完成了自减运算.
            for (int b=0; b<5-a; b++) {
                printf("* ");
            }
            printf("\n");
        }
    }
    break;

        //case4打印正三角形.
            /*

                *
              * * *
            * * * * *

             */
    case 4:{
            //正三角形为5行不变,所以外层循环不动.
        for (int a=0; a<5; a++) {
            /*
               先像case2一样打出正直角三角形,即b<=a
               但是正三角形左边要像右边一样也要有角,我们分两步来做.
               第一步先给左边充斥上列数和右边对等的矩形
               * * *
               * * * *
               * * * * *    即b运行的次数(列数)每次都加了右边三角形的列数-1,即5-1,
                     再加随a外层循环的递增值,就等于里循环b要打印的列数.即5-1+a,a+4
             */
            for (int b=0; b<=a+4; b++) {

            /*
               第二步再给多数来得那部分*打印成空格,剩下的打印*
               即打印          参照case3,b<5-a时打印出五行五列的倒直角三角形
                     ^ ^ ^      而此时我们只需要打印4行4列的空格就OK.即b<4-a就可以了
                     ^ ^            剩下个都打印成*,就可以了.
                     ^
             */
                if (b<4-a) {        //建立if语句判断上方打印.
                    printf("  ");
                }else{
                    printf("* ");
                }
            }
            printf("\n");
        }
    }
    break;
    case 5:{
        for (int a=0; a<5; a++) {
            for (int b=5; b>a-4; b--) {
                if (6-b<=a) {
                    printf("  ");
                }else{
                    printf("* ");
                }
            }
            printf("\n");
        }
    }
    break;
    }
    return 0;
}



int main(){
    int n;
    printf("输入1打印正方形\n输入2打印正直角三角形\n输入3打印倒直角三角形\n");
    printf("输入4打印正三角形\n输入5打印倒直角三角形\n");
    scanf("%d",&n);
    printfPicture(n);
    printf("\n");

}



发了好多遍才出来,心情都木有了..
不想说话了.
对了小弟初学,求轻喷(ios入学辅导班第四天)
最后一个图形没注释  因为屡思路太久,脑子容易炸 容易炸 容易炸   恩,重要的事情说三遍.
还有 ,开头说面试可能用是我猜的

作者: sf1215225    时间: 2015-11-5 23:34
为毛我打印了那么多....最后只显示了这两行!!!!!!!崩溃了!!!!!!
作者: sf1215225    时间: 2015-11-5 23:37
标题: 怎么删掉这一楼 ..啊啊啊啊
本帖最后由 sf1215225 于 2015-11-5 23:49 编辑

怎么删掉这一层..啊啊......
各种崩溃





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2