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

相关推荐
BD_Marathon9 小时前
多轮对话聊天机器人
开发语言·机器人·c#
Sarvartha9 小时前
接口基础知识
java·开发语言
沐晓时光10 小时前
C语言入门,深入理解指针(1)
c语言·开发语言
AC赳赳老秦10 小时前
OpenClaw 数据引用规范自动生成:为公开数据构建可信来源标注与标准引用体系
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw
无忧.芙桃10 小时前
C++语言原理与实践(十):vector类的底层实现
开发语言·c++·算法
天l志10 小时前
DL/T 645—2007《多功能电能表通信协议》的跨平台 C 语言实现
c语言·电表·dlt645
变与不变80610 小时前
js同步和异步难点重点详解
开发语言·javascript·ecmascript
qq_25183645711 小时前
理发管理系统 —— 会员模块
开发语言·前端·python·flask
Dovis(誓平步青云)11 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
郝学胜-神的一滴12 小时前
AI 编程智能体 03:拆解当下主流智能体能力
开发语言·c++·人工智能·python·程序人生·游戏