【习题——菱形的打印】

一、打印下面的图形(菱形)

我们可以先来看一个简单点的菱形:
输入描述:
输入一个char类型字符
输出描述:
输出一个用这个字符填充的对角线长5个字符,倾斜放置的菱形:
在这里插入图片描述

1、思路:

我们看到这个图形,可以直接打印出来,这个方法也是最简单的:

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

通过我们敲代码的过程可以发现,这种敲法太累了,不能节省时间。所以我们可以仔细看看这题,发现图形中的规律。

在这里插入图片描述
我们可以分成上下两个部分来发现规律,首先定义一个变量i,用它来表示行数,这里我是从0开始计算的,所以我们i的初值就赋值成0。第0行的时候,空格有2个,符号有1个;第1行的时候,空格有1个,符号有3个;第2行的时候,空格有0个,符号有5个,这就是上半部分的规律。

附一个图(便于理解):
在这里插入图片描述
我们再来看看下半部分:
在这里插入图片描述
我们依然可以从0开始算行数,一共有1行。
在这里插入图片描述
然后我们可以发现空格与行数之间的关系,以下半部分为例:

行数是0,空格可以用1乘以0+1表示,也就是(1*行数+1),这个式子对于第1行也同样适用,所以,我们的规律找到了,符号也是如此去寻找规律。

2、代码:

#include<stdio.h>
int main()
{char ch;scanf("%c", &ch);int i = 0;//上半部分for (i = 0; i < 3; i++)   //3是上半部分的行数{//根据图形,我们先要打印空格for (int j = 0; j <2-i; j++)//j是我们打印多少个空格{printf(" ");}//打印符号for (int j = 0; j < 2 * i + 1; j++){printf("%c", ch);}printf("\n");}//打印下半部分for (i = 0; i < 3; i++){//空格for (int j = 0; j < 1 * i + 1; j++){printf(" ");}//字符for (int j = 0; j < 2 * (2 - i) - 1; j++){printf("%c", ch);}printf("\n");}return 0;
}

输入一个字符:#
在这里插入图片描述
我们可以发现这个方法比直接输出要难理解许多,而且写的也很多,但是直接输出有很大的弊端,如果像下面这个图形的话,就不能简单的直接输出了。

3、菱形(大)

在这里插入图片描述
像这种图形就不适合一个一个的输出,这就需要我们去找规律,也是一样,分成上下部分去找。

在这里插入图片描述
在这里插入图片描述

发现规律的原则是一样的,大家可以自己下去找找看。

4、代码:
#include<stdio.h>
int main()
{char ch;scanf("%c", &ch);int i = 0;for (i = 0; i < 7; i++){for (int j = 0; j <6-i; j++){printf(" ");}for (int j = 0; j < 2 * i + 1; j++){printf("%c", ch);}printf("\n");//换行,每打印完一行要换行}for (int i = 0; i < 7; i++){for (int j = 0; j < i + 1; j++){printf(" ");}for (int j = 0; j < 2 * (6 - i)-1; j++){printf("%c", ch);}printf("\n");}return 0;
}

二、不知道行数的情况下,自己输入行数

上面的代码写完之后我们可以发现,每个代码都需要我们自己输入行数,但如果题目没有告诉行数就让我们输出菱形,我们该如何写?其实只需要用一个字母代表上面那些代码中的数字就行了,但是我们只需要输入菱形图一半的行数就可以了

#include<stdio.h>
int main()
{char ch;scanf("%c", &ch);int n = 0;scanf("%d", &n);for (int i = 0; i < n; i++){for (int j = 0; j < n - 1 - i; j++){printf(" ");}for (int j = 0; j < 2 * i + 1; j++){printf("%c", ch);}printf("\n");}for (int i = 0; i <n; i++){for (int j = 0; j < i+1; j++){printf(" ");}for (int j = 0; j < 2 * (n - 1 - i) - 1; j++){printf("%c", ch);}printf("\n");}return 0;
}

在这里插入图片描述

老样子,最后附上一张图片吧(希望大家喜欢!)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后端基础:Http请求实现

还在前公司的时候, 公司同事问过我一个问题, 他是搞硬件的, 我是搞软件, 在他眼里我似乎应该对http整个传输协议应该是门清的, 没想到我这个门外汉没有经历过以前的黑暗森林年代, 在高度封装的时代我对具体的细节其实并不大清楚, 虽然知道整体流程脉络, 但是到了最终聊…

黑马c++ STL部分 笔记(3) deque容器

双端数组&#xff0c;可以对头端进行插入删除操作 deque与vector区别&#xff1a; vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低&#xff08;每次头插&#xff0c;后面的元素就往后移&#xff09; deque相对而言&#xff0c;对头部的插入删除速…

【论文综述+多模态】腾讯发布的多模态大语言模型(MM-LLM)综述(2024.02)

论文链接&#xff1a;24.02.MM-LLMs: Recent Advances in MultiModal Large Language | 国内-链接 实时网站&#xff1a;https://mm-llms.github.io 参考说明1-readpaper:https://mp.weixin.qq.com/s/ESUVe1aTYFLVJ10S9c1dBg 一、什么是MM-LLM ? 多模态大语言模型&#xff…

我写了个ImageWindow应用

文章目录 0 引言1 应用简介2 主要功能和特点2.1 多图像同/异步像素级对比2.2 支持多达30种图像格式2.3 高效率的图像处理性能 3 简明使用教程3.1 软件下载安装与更新3.1.1 软件下载与安装3.1.2 软件更新 3.2 多视窗添加并自动最优排列3.3 多样化图像导入方式3.4 自动切换显示模…

node 之 模块化

1.什么是模块化 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 编程领域中的模块化 编程领域中的模块化&#xff0c;就是遵守固定的规则&#xff0c;把一个大文件拆成独立并…

【力扣 - 只出现一次的数字】

题目描述 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xff1a; 输入…

Rocketmq java hello world 入门案例

从零手写实现 mq rocketmq java 入门案例 整体结构 |____src | |____main | | |____java | | | |____com | | | | |____ryo | | | | | |____rocket | | | | | | |____demo | | | | | | | |____common | | | | | | | | |____consumer | | | | | | | | | |____Consumer.java | …

python pandas写入csv

在Python的Pandas库中&#xff0c;可以使用to_csv方法将DataFrame对象写入CSV文件。以下是一个简单的示例&#xff1a; import pandas as pd# 创建一个DataFrame对象 data {Name: [Alice, Bob, Charlie, David],Age: [25, 30, 35, 40],City: [New York, Los Angeles, Chicago…

MySQL统计信息更新

在MySQL使用“采样统计”的方式来维护统计信息。采样统计的时候&#xff0c;InnoDB默认会选择N个数据页&#xff0c;统计这些页面上的不同值&#xff0c;得到一个平均值&#xff0c;然后乘以这个索引的页面数&#xff0c;就得到了这个索引的基数。而数据表是会持续更新的&#…

怎么调用文心一言的api接口生成一个简单的聊天机器人(python代码)

寒假在学习大模型&#xff0c;但也没弄出多少眉目&#xff0c;电脑性能还有点小问题&#xff0c;大模型总跑不起来&#xff0c;只会简单调用一下现有的大模型的接口&#xff0c;例如&#xff1a;文心一言&#xff0c;下面展示一下代码&#xff1a; import tkinter as tk impor…

Postgresql中VACUUM操作原理和应用

VACUUM操作在PostgreSQL中的底层原理涉及几个关键概念&#xff0c;包括MVCC&#xff08;多版本并发控制&#xff09;、事务ID包裹、以及垃圾回收机制。我们逐一解析这些概念&#xff0c;以及它们是如何与VACUUM操作相互作用的。 关键概念 1. MVCC&#xff08;多版本并发控制&…

Mysql安装教程

一、下载 点开下面的链接&#xff1a;https://dev.mysql.com/downloads/mysql/ 点击Download 就可以下载对应的安装包了, 安装包如下: 二、解压 下载完成后我们得到的是一个压缩包&#xff0c;将其解压&#xff0c;我们就可以得到MySQL 8.0.31 的软件本体了(就是一个文件夹…

第三节-docker-cs架构分析

一、组成 docker engine&#xff1a;docker-client、rest-api、dockerd containerd&#xff1a; 1、管理容器生命周期 2、拉取/推送镜像 3、存储管理 4、调用runc 5、管理网络 containerd-shim&#xff1a;相当于一个驱动&#xff0c;containerd通过containerd-shim驱使…

10个SQL查询方法

SQL 是管理和分析关系数据库的基本工具。掌握基本的SQL命令能够完成简单的数据查询和操作&#xff0c;但是如果想从数据中提取更有价值的信息&#xff0c;数据分析工作者和开发人员应该深入学习和掌握高级的SQL技巧。 1 窗口函数 窗口函数是指在SQL查询中对一组相关行进行聚合…

关于静态应用程序安全测试(SAST)的自动修复(AutoFix)

SAST&#xff08;Static Application Security Testing&#xff0c;静态应用程序安全测试&#xff09;具是一种在软件工程中使用的安全解决方案&#xff0c;它主要用于在程序员编写好源代码后&#xff0c;无需经过编译器编译&#xff0c;直接对源代码进行扫描&#xff0c;以找出…

SSM框架,MyBatis框架的学习(下)

MyBatis多表映射 多表结果实体类设计技巧&#xff1a; 对一&#xff0c;属性中包含对方对象 对多&#xff0c;属性中包含对方对象集合 对一查询 对一查询在设计接收多表查询的结果的实体类时&#xff0c;设计一个对方类型的属性即可 查询的结果映射时&#xff0c;如果查询的…

MYSQL05高级_查看修改存储引擎、InnoDB和MyISAM对比、其他存储引擎介绍

文章目录 ①. 查看、修改存储引擎②. InnoDB和MyISAM对比③. Archive引擎 - 归档④. Blackhole引擎丢数据⑤. CSV - 引擎⑥. Memory引擎 - 内存表⑦. Federated引擎 - 访问远程表⑧. Merge引擎 - 管理多个MyISAM⑨. NDB引擎 - 集群专用 ①. 查看、修改存储引擎 ①. 查看mysql提…

动态获取权限,文件管理器选择文件,I/O流

AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><!-- <uses-permission and…

链表的总结

题目&#xff1a;将26个英文字母储存在链表中 #include <stdlib.h> #include <stdio.h> struct list { char Ach; struct list* next; }; void create( struct list* head , char* ch ) 而这个head是定义在局部函数的变量&#xff0c;当出局部函数的时候&…

Kotlin的各种骚气语法

1.奇怪的中括号? 前几星期在群里见群友问这种是什么鬼,kt中有这种语法吗? 但其实这种是重写的操作符,分别是重写了setter和getter,类似于list[0]1这样 上面的两个方法声明如下: 不过这种语法很容易引起歧义,所以除非很适合的情况下不建议重写 ps:更多的操作符重载参考最下…