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

画一个字母组成的菱形(关键词-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日

悬赏问题

  • ¥15 Android STD快速启动
  • ¥15 如何使用simulink建立一个永磁同步直线电机模型?
  • ¥30 天体光谱图的的绘制并得到星表
  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动