搜索
查看: 1766|回复: 4
打印 上一主题 下一主题

【初学者】关于【for循环】打印菱形的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2016-2-29 09:24:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
20啊哈币
编程界诸君,请教一个问题。说实话,for打印菱形我看了很多答案,有时候能看懂,但是真的回味着编写时,总是莫名地出错。
比如说,对我来讲理解起来比较容易的代码就是for循环里嵌套一个if +else的语句来实现“*”和“空格”的打印。
我有点迷茫,不知道作为一个编程的人,他的策略和思路是怎么来的。。。。我想培养,可是有点找不到入门点。
请教热心的朋友指点迷津。

——一个工作多年,初接触编程的理工科老男孩。

沙发
发表于 2016-3-2 22:36:20 | 只看该作者
本帖最后由 huyu_shuang 于 2016-3-2 22:37 编辑

最简单的方法是分上下两部分输出:
#include <stdio.h>
int main()
{
    int i,j;
    for(i=1;i<=5;i++)//输出上三角形
      {
          for(j=5-i;j>0;j--)//输出空格
           printf(" ");
         for(j=1;j<=2*i-1;j++)//输出"*"
            printf("*");
        printf("\n");  
      }
    for(i=1;i<5;i++)//输出下三角形
      {
         for(j=1;j<=i;j++)//输出空格
            printf(" ");
        for(j=9-2*i;j>0;j--)//输出"*"
           printf("*");
        printf("\n");
      }
    return (0);
  }
板凳
发表于 2016-3-22 15:42:49 | 只看该作者
你其实可以这么想,用for语句循环是为了完成输出9行*,for语句主要是完成九行,具体你要输出什么怎么输出和他关系并不大,然后你明确你要输出“*”但是是组成菱形的就涉及到空格的问题,仔细观察你会发现第一行空的格数和第九行一样,同理第二行和第8行一样,一直到第五行输出9个*没有空格。所以我们想只要满足第一行和第九行输出" 四个空格一个*“就可以了其他行数以此类推,那么什么控制行数呢,是a,for循环中控制行数的是a,判断行数是否为第一行或第九行涉及判断语句if,只要满足if语句中的判断输出要输出的内容不就是答案了看下面的代码。
int main()
{
        int a;
    for(a=1;a<=9;a++)
    {
    if(a==1||a==9)
    printf("    *\n");
    if(a==2||a==8)
    printf("   ***\n");
    if(a==3||a==7)
    printf("  *****\n");
    if(a==4||a==6)
    printf(" *******\n");
    if(a==5)
    printf("*********\n");
    }
        system("pause");
        return 0;
}
满足第一行或第九行就输出”四个空格一个*".满足第二行或第八行就printf ("三个空格三个*")
地板
发表于 2016-3-22 15:49:54 | 只看该作者
int main()
{
        int a;//设变量a
    for(a=1;a<=9;a++)//完成输出九行内容
    {
    if(a==1||a==9)//判断当前行数是不是第一行或第九行
    printf("    *\n");//是则输出四个空格一个*,不是则继续向下运行
    if(a==2||a==8)//判断当前行数是否为第二行或第八行
    printf("   ***\n");//是则输出三个空格三个*,不是则继续向下运行
    if(a==3||a==7)//判断当前行数是否为第三行或第七行
    printf("  *****\n");//是则输出两个空格5个*,不是则继续向下运行
    if(a==4||a==6)//判断当前行数是否为第四行或第六行
    printf(" *******\n");//是则输出一个空格7个*,不是则继续向下运行
    if(a==5)//判断当前行数是否为第五行
    printf("*********\n");//是则输出9个*,不是则继续向下运行
    }
        system("pause");
        return 0;
}
5#
发表于 2016-3-22 15:51:26 | 只看该作者
输出语句后还有/n记得写
为了到下一段,所有*都会在一排
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表