A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙健 中级黑马   /  2013-10-22 19:43  /  1001 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

            Console.WriteLine("请输入要打印菱形的行数(不能是偶数)");
            //保存用户输入的数字
            int num=int.Parse(Console.ReadLine());
            //判断用户输入的是否为奇数
            while(num%2==0)
            {
                Console.WriteLine("只能输入奇数,请从新输入");
                num = int.Parse(Console.ReadLine());
            }
            //打印菱形的上半部
            for (int i=1; i<=(num+1)/2;i++ )
            {
                for (int k = i; k <= (num - 1) / 2; k++)
                {
                    Console.Write(" ");
                }
                for (int j=1;j<=2*i-1 ;j++ )
                {
                    Console.Write("*");
                    
                }
                Console.WriteLine();
            }
            //打印菱形的下半部分
            for (int i=1;i<=(num-1)/2 ;i++ )
            {
                for (int k=1;k<=i ;k++ )
                {
                    Console.Write(" ");
                }
                for (int j = 1; j <= num-2*i;j++ )
                {
                    Console.Write("*");
                    
                }
                Console.WriteLine();
            }
            Console.ReadKey();
使用for双重循环打印菱形。首先让用户输入一个打印菱形的行数,只有在奇数的情况下才能构成菱形,所以提示用户只能输入奇数。
比方用户输入的是9,num=9;那么我们需要打印出9行并且菱形的最长(*)也是9;
根据用户输入的数字来进行分析,
旁边自己打出来的图,我们从图中来找出它的循环规律,菱形是由两个等腰三角形组成,一正,一倒                       
从总行数来看一共是9行,从第五行往上面看(*)号是一个等腰三角形,从第六行向下看是(*)是个倒立等腰三角形         第一行 ####*
那么我们分两部把它打印出来,先看上面五行,打印五行那么外层循环5次,                                            第二行 ###***
                                                             外层次数  #次数  *次数                            第三行 ##*****               
外层循环第1次  内层打印(#)循环4次  内层打印(*)循环1次       1      4       1                               第四行 #*******     
外层循环第2次  内层打印(#)循环3次  内层打印(*)循环3次       2      3       3                               第五行 *********
外层循环第3次  内层打印(#)循环2次  内层打印(*)循环5次       3      2       5                               第六行 #*******
外层循环第4次  内层打印(#)循环1次  内层打印(*)循环7次       4      1       7                               第七行 ##*****
外层循环第5次  内层打印(#)循环0次  内层打印(*)循环9次       5      0       9                               第八行 ###***
列出了循环规律,从左边的数字来找出它的循环条件,先看外层循环条件,通常用for循环5次循环条件这样写                 第九行 ####*
(int i=1;i<=5;i++),但用户输入的是num=9;找出5和9之间的关系,5=(9+1)/2,把表达式内的5替换
可以得到外层的条件表达式(int i=1;i<(num+1)/2),再来看内曾循环打印(#) 当i=1时 #循环4次
当i=2时  #循环3次,从数字找出的循环条件(int k=i;k<=4;k++),同样找出4和9之间的关系,4=(9-1)/2,
将其替换,得出条件表达式(int k=i;k<=(num-1)/2;k++),循环体内打印出(#)
内层循环打印(*) 当i=1时 *循环1次 当i=2时 *循环3次 当i=3时 *循环5次......
可以看出i和j的关系,j=2*i-1;循环条件表达式(int j=1;j<=2*i-1;j++),循环体内打印*,在(*)for循环外部(})下面加上一个换行,上半部打印完成
下半部是打印一个到三角形
                                                            外层次数  #次数  *次数
外层循环第1次  内层打印(#)循环1次  内层打印(*)循环7次     1        1       7
外层循环第2次  内层打印(#)循环2次  内层打印(*)循环5次     2        2       5
外层循环第3次  内层打印(#)循环3次  内层打印(*)循环3次     3        3       3
外层循环第4次  内层打印(#)循环4次  内层打印(*)循环1次     4        4       1
列出规律,同样从左边数字找出循环条件,外层循环表达式(int i=1;i<=4;i++),找出4和9之间的关系,4=(9-1)/2,在表达式中替换(int i=1;i<=(num-1)/2;i++)
内层#的表达式(int k=1;k<=i;k++),循环体打印出(#)
内层循环*  j和i的关系   j=num-2*i  内层循环*的条件表达式(int j=1;j<=num-2*i),循环体打印出(*),在(*)for循环外部(})下面加上一个换行,下半部打印完成
总结:
(除foreach遍历循环外)所有的循环都必须有着一定的规律,while,do{}while,for循环都是找寻到它的规律后,利用规律编写循环条件,编写循环条件是最为重要的,
最后在来填写循环的代码;有循环就必须要有跳出循环语句或跳出循环条件,不然会成为死循环。
























0 个回复

您需要登录后才可以回帖 登录 | 加入黑马