鱼C论坛

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

for循环 输出图案问题

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

  2. int main()
  3. {
  4.         int i, j, k;

  5.         for (i = 0; i <= 3; i++)
  6.         {
  7.                 for (j = 0; j <= 2 - i; j++)
  8.                         printf(" ");

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

  11.                 printf("\n");

  12.                 for (i = 0; i <= 2; i++)
  13.                 {
  14.                         for (j = 0; j <= i; j++)
  15.                                 printf(" ");

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

  18.                         printf("\n");
  19.                 }
  20.         }

  21.         return 0;
  22. }
复制代码

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

最佳答案

查看完整内容

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

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

  2. int main()
  3. {
  4.        // i 用于控制输出的行数
  5.        // j 用于控制每行空格输出
  6.        // k 用于控制每行星星的输出
  7.         int i, j, k;

  8.         
  9.                  //打印上半部分
  10.                  /*
  11.                        *        1
  12.                       ***        2
  13.                      *****        3
  14.                     *******        4

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

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

  41.                  /*
  42.                 *******
  43.                  *****
  44.                   ***
  45.                    *
  46.                  */
  47.                 // 这里是输出下半部分
  48.                 // 可以按照我上半段的思路来分析
  49.                 for (i = 0; i <= 2; i++)
  50.                 {
  51.                         for (j = 0; j <= i; j++)
  52.                                 printf(" ");

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

  55.                         printf("\n");
  56.                 }

  57.         return 0;
  58. }
复制代码

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

  6.         draw(rowCount);
  7.         return 1;
  8. }
  9. /*
  10. *
  11. ***
  12. *
  13. */
  14. void draw(int rowCount){
  15.         if(!(rowCount % 2))
  16.         {
  17.             printf("rowCount 必须是一个奇数!!!!");
  18.             return;
  19.         }

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

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

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

  30.         // 控制行
  31.         for(row = 1; row <= rowCount; row ++)
  32.         {
  33.             // 计算当前所在行要打印的星星的数量
  34.             if(row <= maxStarCountRow) starCount = row * 2 -1;
  35.             else
  36.                 starCount = (2 * maxStarCountRow - row) * 2 -1;
  37.             // 计算当前所在行要打印的空格的数量
  38.             sapceCount = (maxStarCount - starCount) / 2;
  39.             // 星星和空格的总数量
  40.             spaceAndStarCount = sapceCount + starCount;
  41.             // 控制列
  42.             for(column = 1; column <= spaceAndStarCount; column ++)
  43.             {
  44.                 // 空格
  45.                 if(column <= sapceCount){
  46.                     printf(" ");
  47.                 }
  48.                 //星星
  49.                 else
  50.                 {
  51.                     printf("*");
  52.                 }
  53.             }
  54.             printf("\n");
  55.         }
  56. }

复制代码




想知道小甲鱼最近在做啥?请访问 -> 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-5-26 23:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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