鱼C论坛

 找回密码
 立即注册
查看: 2530|回复: 5

for循环 输出图案问题

 关闭 [复制链接]
发表于 2012-3-17 15:52:56 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 秋舞斜阳 于 2012-3-17 16:10 编辑
#include <stdio.h>

int main()
{
        int i, j, k;

        for (i = 0; i <= 3; i++)
        {
                for (j = 0; j <= 2 - i; j++)
                        printf(" ");

                for (k = 0; k <= 2 * i; k++)
                        printf("*");

                printf("\n");

                for (i = 0; i <= 2; i++)
                {
                        for (j = 0; j <= i; j++)
                                printf(" ");

                        for (k = 0; k <= 4 - 2 * i; k++)
                                printf("*");

                        printf("\n");
                }
        }

        return 0;
}
这个程序我看不懂,麻烦帮我注释下。谢谢。另外它输出菱形的功能也没有实现。好纠结。

最佳答案

查看完整内容

修改后的代码 下面是我以前写的代码,楼主可以借鉴下 可以输出任意长度的菱形哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-17 15:52:57 | 显示全部楼层
本帖最后由 wAterLoo 于 2012-3-18 00:10 编辑

修改后的代码
#include <stdio.h>

int main()
{
       // i 用于控制输出的行数
       // j 用于控制每行空格输出
       // k 用于控制每行星星的输出
        int i, j, k;

        
                 //打印上半部分
                 /*
                       *        1
                      ***        2
                     *****        3
                    *******        4

                */
        // 这里我把i由0该为1,可以更好的理解
        // 当i 等于1的时候,表示程序要打印第一行的空格和星星
        for (i = 1; i <= 4; i++)
        {
                 //打印空格
                 /*
                       *        1
                      ***        2
                     *****        3
                    *******        4

                */
                // 这里要注意有一个逻辑,也就是每行中要打印几个空格的逻辑
                // 注意观察,第一行要打印3个空格,第二行要打印2个,第三行打印1个,第四行0个
                // 空格的数量 正好满足 spcaceCount = 4 -i 这个关系式
                // 由于每次只能打印一个空格字符,所以这里用一个循环,循环4-i次 输出空格
                for (j = 1; j <= 4 - i; j++)
                        printf(" ");
                // 星星又有什么逻辑呢?
                // 第一行 1星,第二行 3星,第三行 5星 ......
                // 正好满足 starCount = 2 * i -1
                // 由于每次只能打印一个星星字符,所以这里用一个循环,循环2 * i -1次 输出星星
                for (k = 1; k <= 2 * i - 1; k++)
                        printf("*");
                        printf("\n");
        }

                 /*
                *******
                 *****
                  ***
                   *
                 */
                // 这里是输出下半部分
                // 可以按照我上半段的思路来分析
                for (i = 0; i <= 2; i++)
                {
                        for (j = 0; j <= i; j++)
                                printf(" ");

                        for (k = 0; k <= 4 - 2 * i; k++)
                                printf("*");

                        printf("\n");
                }

        return 0;
}
下面是我以前写的代码,楼主可以借鉴下
可以输出任意长度的菱形哦
#include <stdio.h>
void draw(int rowCount);
int main()
{
        int rowCount = 14;

        draw(rowCount);
        return 1;
}
/*
 *
***
 *
*/
void draw(int rowCount){
        if(!(rowCount % 2)) 
        {
            printf("rowCount 必须是一个奇数!!!!");
            return;
        }

        int maxStarCount;            // 所有行中,最多能输出星星的数量
        int maxStarCountRow;        // 所有行中, 输出最多星星的数量的行
        int starCount;                // 行,输出星星的数量
        int sapceCount;                // 行,输出空格的数量
        int spaceAndStarCount;

        // 其实这个程序无非就是打印空格和星星
        // 只要把其中的逻辑弄清楚了,就很简单了

        int row,column;
        maxStarCountRow = (rowCount + 1) / 2;
        maxStarCount = maxStarCountRow * 2 -1;

        // 控制行
        for(row = 1; row <= rowCount; row ++)
        {
            // 计算当前所在行要打印的星星的数量
            if(row <= maxStarCountRow) starCount = row * 2 -1;
            else 
                starCount = (2 * maxStarCountRow - row) * 2 -1;
            // 计算当前所在行要打印的空格的数量
            sapceCount = (maxStarCount - starCount) / 2;
            // 星星和空格的总数量
            spaceAndStarCount = sapceCount + starCount;
            // 控制列
            for(column = 1; column <= spaceAndStarCount; column ++)
            {
                // 空格
                if(column <= sapceCount){
                    printf(" ");
                }
                //星星
                else
                {
                    printf("*");
                }
            }
            printf("\n");
        }
}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-17 17:48:09 | 显示全部楼层
//前三个for循环用来输出图形的上半部分,后三个for循环用来输出下半部分

#include <stdio.h>

int main()

{

       int i, j, k;

           while(i < 3)
           {
                   for (i = 0; i <= 3; i++)

                  {

              for (j = 0; j <= 2 - i; j++)
                       printf(" ");

              for (k = 0; k <= 2 * i; k++)

                        printf("*");

              printf("\n");
                   }

           for (i = 0; i <= 2; i++)
            {

                  for (j = 0; j <= i; j++)

                            printf(" ");


                    for (k = 0; k <= 4 - 2 * i; k++)
                            printf("*");


                   printf("\n");
                                          
              }

                          
                          

       }


        return 0;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-18 00:02:32 | 显示全部楼层
注释已经添加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-18 23:41:08 | 显示全部楼层

谢谢您。您回答得很细心。
另外斜阳在这里谢谢帮助我的每一位鱼油。
还有那位亲自把每一步截图写得很仔细做成教程的朋友。斜阳向您们致敬。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-21 17:49:18 | 显示全部楼层
先输入一个整数  根据输入输出


#include <stdio.h>

int main ()
{
        int N;
        int i,j;

        scanf("%d",&N);
        for(i=1;i<=N;i++)
        {
                for (j=1;j<=N-i;j++)
                {
                        printf(" ");
                }
                for (j=1;j<=2*i-1;j++)
                {
                        printf("*");
                }
                printf("\n");
        }
        for(i=1;i<=N-1;i++)
        {
                for (j=1;j<=i;j++)
                {
                        printf(" ");
                }
                for (j=1;j<=2*N-1-2*i;j++)
                {
                        printf("*");
                }
                printf("\n");
        }
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-17 22:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表