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 行菱形,只改数字就能复用。

相关推荐
十年Java程序媛2 分钟前
Java 面试常问 this、super:构造方法调用顺序避坑
java·开发语言·spring boot·面试·个人开发
yuniko-n21 分钟前
【JUC】内存屏障
java·开发语言
Linux运维技术栈25 分钟前
近期 PHP 高危安全风险排查与多环境升级实操
开发语言·安全·php
Fnetlink11 小时前
Fnet 云网安 261023
运维·开发语言·网络·人工智能·安全·web安全·php
ESDWAN1 小时前
SD-WAN 主备切换为什么仍会断网?从检测、切换到会话恢复分析
运维·开发语言·网络·php
jimy11 小时前
lvalue、xvalue、prvalue(二):引用是哪一类?
开发语言·c++·1024程序员节
cxyxixiy1 小时前
数智码力:数据核对不用人工比对,Python 快速完成多表格差异校验
开发语言·python·学习
一个风轻云淡1 小时前
从 int $0x80 到 iret:用 gdb 把 getpid 走一遍
linux·c语言·开发语言·汇编
杜 硕1 小时前
从零开始的C++生活——第三讲
开发语言·c++·生活
tianbin9111 小时前
批处理与微调辅助场景:Claude 中转并发、链路缓存与压测对比
java·开发语言·缓存