OLAOLMUDA 2022-03-02 21:26 采纳率: 100%
浏览 278
已结题

画一个字母组成的菱形(关键词-for)

输入顶行字符和图形的高,输出如图所示图形。

例如顶行字符为 ' A ' ,图形的高为 5

          A

        B   B

      C     C

    D         D

   E            E

    D         D

      C    C

        B B

         A
#include<stdio.h>
int main()
{
    int m,n,i,j,a,b;
    scanf("%c,%d",&j,&i);
    for(m=1;m<=2*i-1;m++)
    {
        if(m<=i)
        {
            a=i-m,b=2*m-1;
        }
        else
        {
            a=m-i,b=4*i-2*m-1;
        }
        for(n=1;n<=a;n++)
        {
            printf(" ");
        }
        for(n=1;n<=b;n++)
        {
            if(m<=i)
            {
                if(n==m||n==2*i-m)
                {
                    printf("%c",j);
                }
                else
                {
                    printf(" ");
                }
                j++;
                printf("\n");
            }
            else
            {
                if(n==m||n==2*i-m)
                {
                    printf("%c",j);
                }
                else
                {
                    printf(" ");
                }
                j--;
                printf("\n");
            }
            
        }
    }
    return 0;
}

哪里出现了错位,请指正,谢谢

  • 写回答

1条回答 默认 最新

  • zhengzhisheng6 2022-03-02 21:43
    关注
    #include <stdio.h>
    int main() {
        int h;
        char c;
        scanf("%c,%d", &c, &h);
        int i = 1, num = 0;  //i记录我们在分析时指定的循环变量、num记录已经输出的行数
        int flag = 0;  //flag = 0 表示正在输出上半部分(包含最中间行)、否则表示正在输出下半部分
        /* 循环输出 2h - 1 行 */
        while (num < 2 * h - 1) {
            /* 输出首尾两行的情况 */
            if (i == 1) {
                for (int j = 0; j < h - i; j++) 
                    printf(" ");
                printf("%c", c);
                for (int j = 0; j < h - i; j++) 
                    printf(" ");
                printf("\n");
            }
            else {
                for (int j = 0; j < h - i; j++) 
                    printf(" ");
                printf("%c", c);
                for (int j = 0; j < 2 * i - 3; j++)  
                    printf(" ");
                printf("%c", c);
                for (int j = 0; j < h - i; j++)
                    printf(" ");
                printf("\n"); 
            }
            if (i >= h)  //当已经输出了最中间的一行
                flag = 1; //将flag设置为1
            /* 在输出上半部分的时候 */
            if (flag == 0) {
                i++;
                c++;
            }
            /* 在输出下半部分的时候 */
            else {
                i--;
                c--;
            }
            num++;  //累加行数
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月11日
  • 已采纳回答 3月3日
  • 创建了问题 3月2日

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)