c语言 输出菱形字符串

BC8 牛牛的字符菱形

  • 题目
  • 题解(344)
  • 讨论(196)
  • 排行
  • 面经

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

牛牛尝试用键盘读入一个字符,然后在屏幕上显示用这个字符组成的菱形:对角线长 55 个字符,且倾斜放置。请帮他编写程序输出这个倾斜的菱形。

输入描述:

在一行上输入一个可见字符 cc,且保证其为 ASCII 符号。

输出描述:

输出一共五行,表示你所绘制的倾斜菱形。您可以查看样例得到更具体的说明。

示例1

输入:

复制代码
#

复制输出:

复制代码
  #
 ###
#####
 ###
  #

解析:

输入一个字符,输出 5 行:

复制代码
  #
 ###
#####
 ###
  #

第 1 行:前面 2 个空格 + 1 个字符 第 2 行:前面 1 个空格 + 3 个字符 第 3 行:前面 0 个空格 +5 个字符 第 4 行:前面 1 个空格 +3 个字符 第 5 行:前面 2 个空格 +1 个字符

方法 1:直接 printf 写(简单,适合新手)

复制代码
#include <stdio.h>
int main()
{
    char c;
    scanf("%c", &c);
    printf("  %c\n", c);
    printf(" %c%c%c\n", c,c,c);
    printf("%c%c%c%c%c\n", c,c,c,c,c);
    printf(" %c%c%c\n", c,c,c);
    printf("  %c\n", c);
    return 0;
}

方法 2:双重 for 循环(考试常用,通用菱形写法)

行号 i 从 0~4 一共 5 行

  • 空格数量:abs(2-i)

  • 字符数量:5 - 2*abs(2-i)

    #include <stdio.h>
    #include <stdlib.h> // abs绝对值函数头文件

    int main()
    {
    char c;
    scanf("%c", &c);

    复制代码
      int i,j;
      for(i = 0; i < 5; i++)
      {
          int space = abs(2 - i);       // 该行要打印多少空格
          int ch_cnt = 5 - 2 * space;   // 该行要打印多少字符
          
          //打印空格
          for(j=0;j<space;j++){
              printf(" ");
          }
          //打印字符
          for(j=0;j<ch_cnt;j++){
              printf("%c",c);
          }
          printf("\n"); //换行
      }
      return 0;

    }

方法 3:while 版本(你刚才问的 while 循环写法)

复制代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char c;
    scanf("%c", &c);
    int i = 0;
    while(i <5)
    {
        int space = abs(2-i);
        int ch_cnt = 5 - 2*space;
        
        int j=0;
        while(j < space){
            printf(" ");
            j++;
        }
        j=0;
        while(j < ch_cnt){
            printf("%c",c);
            j++;
        }
        printf("\n");
        i++;
    }
    return 0;
}

运行示例

输入:# 输出:

复制代码
  #
 ###
#####
 ###
  #

关键点

  1. abs() 绝对值函数,需要头文件 #include <stdlib.h>
  2. 一共固定 5 行,对角线长度 5;中间第 3 行最多 5 个符号
  3. %c读取字符,别忘了&符号 scanf("%c", &c);

面试 / 刷题优先记双重 for 循环版本,如果题目改成 7 行、9 行菱形,只改数字就能复用。

相关推荐
学习智者2 小时前
《玄》IDE v3.6.3重磅发布:全功能修复与性能飞跃
开发语言·c++·ide·算法·中文语言 玄
奔跑吧树袋熊2 小时前
多租户隔离该做到哪一层:从连接池到 ORM 的取舍
开发语言·数据库·oracle·系统架构
大江东去浪淘尽千古风流人物2 小时前
【LoMa】局部特征匹配重访:从LoMa-B到旋转不变LoMa-R的架构与工程实践
开发语言·深度学习·计算机视觉·r语言·视觉定位·sfm·局部特征匹配
菜鸟~noob2332 小时前
【电子战】测向精度极限——克拉美-罗下限(CRLB)与误差分析【含matlab代码】
开发语言·matlab
m0_734571762 小时前
深入理解C++ 析构函数<二>析构顺序
开发语言·c++
T1mzhou2 小时前
ARM64 Linux 6.10 内核驱动(14):drivers/base/platform.c:板级设备主战场
linux·c语言·开发语言·arm开发
小孩玩什么2 小时前
深入理解字符串匹配算法:BF算法,KMP算法
java·c语言·开发语言·数据结构·c++·算法
clz13145212 小时前
设备反欺诈的四大支柱:从设备指纹到关联图谱
开发语言·php
clear sky .3 小时前
内存8字节对齐是什么?
c语言·stm32·嵌入式硬件