C:图案打印
引言
本篇文章讲了一些常见的图形编程题,并总结了一些规律。
1、打印空心正方形
1.1 代码展示:
#include<stdio.h>
int main()
{int a = 0;//边长初始化scanf("%d", &a);//输入边长的值{int i = 0;for (i = 0; i < a; i++)//控制行数{int j = 0;for (j = 0; j < a; j++)//控制列数{if (i == 0 || i == a - 1)//判断行数是否打印 *{printf("* ");//*后面留一个空格}else if (j == 0 || j == a - 1)//判断列数是否打印 *{printf("* ");//*后面留一个空格}else{printf(" ");//这里留两个空格} }printf("\n");//换行} }return 0;
}
图案展示:

1.2 代码解析:
1.通过scanf函数获得输入的边长值
2.通过两层循环来控制每行每列的输出
- 外层循环控制行数,当行号为 0(第一行)或
a - 1(最后一行)时,整行打印 *。 - 内层循环控制列数,当列号为 0(第一列)或
a - 1(最后一列)且当前行不是第一行和最后一行时,打印*,其他位置打印两个空格。
3.每行打印完换行。
1.3 分析i == 0 || i == a - 1
为什么满足这个条件就打印*就可以得到空心正方形?看下图:

这里就用图解释了,如果还有些不明白,可以私我
2、空心三角形
2.1 思路分析
- 使用两个嵌套的循环,外层循环控制行数,内层循环控制每行的输出。
- 对于每行,先打印一定数量的空格,使得三角形对齐。
- 然后判断当前行的位置,如果是第一行、最后一行或者是每行的第一个和最后一个字符位置,打印
*,否则打印空格。
2.2 代码展示:
#include <stdio.h>int main() {int rows = 0;scanf("%d", &rows);//输入行数for (int i = 1; i <= rows; i++) { // 外层循环控制行数for (int j = 1; j <= rows - i; j++) { // 打印每行前面的空格printf(" ");}for (int k = 1; k <= 2 * i - 1; k++) { // 处理每行的字符输出if (k == 1 || k == 2 * i - 1 || i == rows) { // 第一行、最后一行、每行的首尾位置打印*printf("*");} else { // 中间位置打印空格printf(" ");}}printf("\n"); // 换行}return 0;
}
2.3 代码解析:
- 定义一个变量rows用来存储行数
- 内层的第一个
for循环for (int j = 1; j <= rows - i; j++)用于在每行的开头打印适当数量的空格,以使三角形对齐。 - 内层的第二个
for循环for (int k = 1; k <= 2 * i - 1; k++)处理每行的字符输出。if (k == 1 || k == 2 * i - 1 || i == rows)这个条件判断用于确定是否打印*。当是每行的第一个字符(k == 1)、最后一个字符(k == 2 * i - 1)或者是最后一行(i == rows)时,打印*,否则打印空格。
3、X形图案
3.1代码展示:
#include <stdio.h>int main()
{int size = 0; // 初始化scanf("%d", &size);//输入值int i = 0;for ( i = 0; i < size; i++) // 行循环{ int j = 0;for ( j = 0; j < size; j++)// 列循环{ if (i == j || i + j == size - 1)// 判断是否为对角线上的位置{ printf("*"); // 打印 '*'}else {printf(" "); // 否则打印空格}}printf("\n"); // 换行}return 0;
}
图案展示:

3.2 代码解析:
1.先定义一个变量size来表示图案的大小;
2.使用两个嵌套的for循环,外层控制行数,内层控制列数;
3.你可以将图案看作在一张表格上,对于每个位置( i , j ),通过条件判断 i == j 表示主对角线(从左上角到右下角)上的位置,
i + j == size - 1表示副对角线(从右上角到左下角)上的位置。
4.如果当前位置在对角线上,则打印 *,否则打印空格。
5.每行打印完后,记得换行。
3.3 i == j || i + j == size - 1解释
假设我们有一个 size*size 的二维矩阵(例如 5×5)。
对于主对角线(从左上角到右下角),行索引 i 和列索引 j 是相等的,即 i == j 。(索引即下标);
例如,在 5*5 的矩阵中,主对角线上的点为 (0, 0)、(1, 1)、(2, 2)、(3, 3)、(4, 4),都满足 i == j 。
对于副对角线(从右上角到左下角),行索引 i 与列索引 j 的和等于矩阵的边长减 1,即 i + j == size - 1 。
例如,在 5*5 的矩阵中,副对角线上的点为 (0, 4)、(1, 3)、(2, 2)、(3, 1)、(4, 0),都满足 i + j == 4 (因为 5 - 1 = 4)。
所以,当满足 (i == j || i + j == size - 1) 这个条件时,就可以确定是在这两条对角线上。
3.4 注意事项:
printf("\n"); //换行不要写到内循环里面去了,否则会出现下面这种情况

4.沙漏
4.1 代码展示:
#include <stdio.h>
int main() {int a = 0;printf("请输入沙漏的行数(奇数): ");scanf("%d", &a);//输入行数for (int i = 1; i <= a; i++) { //外层循环控制上半部分沙漏的行数,从第 1 行到第 a 行for (int j = 1; j < i; j++) { //内层循环打印每行开头的空格,空格数量逐行递增printf(" ");}for (int k = 1; k <= 2 * (a - i + 1) - 1; k++) {printf("*");//内层循环打印星号,星号数量逐行递减}printf("\n");//换行}for (int i = a - 1; i >= 1; i--) { // 外层循环控制下半部分沙漏的行数,从倒数第 2 行到第 1 行for (int j = 1; j < i; j++) { // 内层循环打印每行开头的空格,空格数量逐行递减printf(" ");}for (int k = 1; k <= 2 * (a - i + 1) - 1; k++) {printf("*");// 内层循环打印星号,星号数量逐行递增}printf("\n");}return 0;
}
图案演示:

4.2 分析(结合注释)
对于上半部分:
- 随着
i的增加,每行前面的空格数量也增加,因为j < i。 - 同时,星号的数量通过
2 * (a - i + 1) - 1计算得到,随着i的增加而减少。
对于下半部分:(对称)
- 随着
i的减小,每行前面的空格数量减少。 - 星号的数量通过相同的公式计算,随着
i的减小而增加,从而形成与上半部分对称的沙漏形状。
5、一些规律
1 使用嵌套的循环结构
外层循环通常控制图形的行数。内层循环控制每行的输出内容,比如空格数量、特定字符的数量等。
2 利用对称性
对于对称的图形,常常可以利用上半部分和下半部分的对称关系,通过修改循环的条件和范围来减少重复的代码。
3 注意边界条件
例如对于三角形、矩形等图形,要正确处理第一行、最后一行、第一列和最后一列的输出,以确保图形的形状完整和准确。
4 使用控制语句
如 if-else 语句来区分不同的行或列的输出模式。
5 以行列的思想为基础
学会逐行逐列构造图形。
结语:
图形化编程题目对于帮助我们熟悉循环和控制结构的使用非常有帮助。通过这些题目,我们可以更加深入地理解循环和控制结构的工作原理,并且能够在实践中更好地应用它们。
明天开始更新C语言的知识模块!!!
相关文章:
C:图案打印
引言 本篇文章讲了一些常见的图形编程题,并总结了一些规律。 1、打印空心正方形 1.1 代码展示: #include<stdio.h> int main() {int a 0;//边长初始化scanf("%d", &a);//输入边长的值{int i 0;for (i 0; i < a; i)//控制行…...
WebLogic:弱口令,木马反弹连接
weblogic WebLogic 是 Oracle 公司开发的应用服务器,主要用作开发、集成、部署和管理大型分布式 Web 应用、网络应用和数据库应用的 Java 应用服务器。它在历史上曾出现过多个安全漏洞,其中包括弱口令、任意文件上传、SSRF、反序列化漏洞等 常见版本&a…...
深度学习图像处理环境搭建
Anaconda安装 Anaconda介绍 Anaconda是一个用于科学计算和数据科学的开源发行版,它包含了许多流行的Python库和工具,旨在简化数据分析和机器学习任务的开发过程。Anaconda提供了一个集成的开发环境,包括Python解释器、包管理工具࿰…...
这几个高级爬虫软件和插件真的强!
亮数据(Bright Data) 亮数据是一款强大的数据采集工具,以其全球代理IP网络和强大数据采集技术而闻名。它能够轻松采集各种网页数据,包括产品信息、价格、评论和社交媒体数据等。 网站:https://get.brightdata.com/we…...
【实战】机器学习Kaggle比赛—House Prices - Advanced Regression Techniques
House Prices - Advanced Regression Techniques 一、准备工作(1)查看项目概述(2)下载数据集(3)导入部分必要的库(4)参数设置(图形显示大小屏蔽警告)…...
【前端面试题】前端工程化、Webpack、Vite、Git项目管理相关问题
目录 关于前端工程化关于Webpack关于Vite关于Git项目管理综合性问题 关于前端工程化 1. 前端工程化的定义和好处 问题:什么是前端工程化?它的主要好处是什么?答案:前端工程化是指在前端开发中应用系统化、自动化和标准化的方法&…...
【号外】「省点时间」新功能暖心上线!
好消息,好消息,重大好消息! 应广大用户朋友的要求,经过一个多月的鏖战,「省点时间」的VIP功能终于上线啦! 新版本在原有基础上,新增VIP功能,用户拥有了更多选择,赶快来…...
Python面试题:如何使用WebSocket实现实时Web应用
使用 WebSocket 实现实时 Web 应用可以使你的应用程序具备实时双向通信的能力。以下是一个完整的指南,展示如何使用 Django Channels 和 WebSocket 实现一个简单的实时 Web 应用。 环境准备 安装 Django Channels: pip install channels创建 Django 项目: django-a…...
公交信息在线查询小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,线路信息管理,站点分类管理,站点信息管理,周边分类管理周边信息管理,系统管理 微信端账号功能包括:系统首页࿰…...
Airtest实施手机精准截图
Airtest实施手机精准截图 一、接口查找 首先我们需要知道我们应该怎么实现用脚本去进行局部截图,我们可以通过翻阅Airtest的API文档发现,Airtest提供了 crop_image(img, rect) 方法可以帮助我们实现局部截图,在我们往期的推文里也介绍过该接…...
前端面试宝典【设计模式】【2】
欢迎来到《前端面试宝典》,这里是你通往互联网大厂的专属通道,专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习,无论是一线大厂还是初创企业的面试,都能自信满满地展现你的实力。 核心特色: 独家实战案例:每一期专栏都将深入剖析真实的前端面试案例,从基础知…...
技术汇总笔记7:条件分支相关内容
嵌套Switch语句的使用和改进 嵌套的switch语句虽然在语法上是允许的,但可能会使代码难以阅读和维护。例如: switch (_get_urgency_ob_type(sData.structure_name)) {case URGENCY_OB_PRESSUREINFO:{switch(_get_urgency_ob_sub_type( sData.attribute_…...
一文让你学会python:面向对象
面向对象编程(OOP) 一.类与实例 1.类: 是对现实世界描述的一种类型,是抽象的,是实例的模板,类名采用大驼峰,定义方式为 class 类名: pass 。 2.实例: 根据类创建的具体对象&…...
mac电脑安装 docker镜像 btpanel/baota
PS:docker链接:https://hub.docker.com/r/btpanel/baota 1、将docker下载到本地,然后运行端口映射 docker run -d --restart unless-stopped --name baota -p 8888:8888 -p 22:22 -p 443:443 -p 80:80 -p 888:888 -v ~/website_data:/www/w…...
Python写UI自动化--playwright(pytest.ini配置)
在 pytest.ini 文件中配置 playwright 的选项可以更好地控制测试执行的过程。 在终端输入pytest --help,可以找到playwright的配置参数 目录 1. --browser{chromium,firefox,webkit} 2. --headed 3. --browser-channelBROWSER_CHANNEL 4. --slowmoSLOWMO 5. …...
java实现序列化操作
Java序列化是一种将对象转换为字节流的过程,以便在网络上传输或将对象持久化到磁盘中。在Java中,实现序列化的关键是实现Serializable接口。当一个类实现了Serializable接口时,它可以被Java序列化机制序列化成字节流,然后再反序列…...
视频帧的概念
一个视频帧是视频中的单一静态图像。视频帧的概念与电影胶片中的单一帧类似,视频帧序列的快速播放形成了连续运动的视觉效果。以下是视频帧的详细解释: 视频帧的定义: 视频帧:视频中的单一静态图像。视频是由一系列连续的帧按一定…...
卫星导航系统的应用领域与发展前景
当人们提到卫星导航系统,往往会联想到车载导航仪或手机上的地图应用。然而,卫星导航系统的应用远不止于此,它在许多领域都发挥着重要作用。下面将介绍几个卫星导航系统的应用领域及其发展前景。首先是海洋航行安全领域。在过去,海…...
FPGA开发——数码管的使用(二)
一、概述 在上一篇文章中我们针对单个数码管的静态显示和动态显示进行了一个设计和实现,这篇文章中我们针对多个数码管同时显示进行一个设计。这里和上一篇文章唯一不同的是就是数码管位选进行了一个改变,原来是单个数码管的显示,所以位选就直…...
技术汇总记录笔记5:在 C++ 中,如何使用正则表达式来验证一个字符串是否只包含数字?
在C中,你可以使用 <regex> 头文件中定义的正则表达式功能来验证一个字符串是否只包含数字。以下是一个基本的示例,展示如何使用正则表达式来检查一个字符串是否完全是数字: #include <iostream> #include <string> #inclu…...
3步打造极速安全系统:AtlasOS开源优化方案全解析
3步打造极速安全系统:AtlasOS开源优化方案全解析 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atl…...
全桥LLC变换器死区时间优化实战:从IGBT硬开通到完美ZVS的调试记录
全桥LLC变换器死区时间优化实战:从IGBT硬开通到完美ZVS的调试记录 在电力电子领域,LLC谐振变换器因其高效率、高功率密度和良好的EMI特性,已成为中高功率应用的理想选择。然而,实际调试过程中,死区时间与励磁电感的匹配…...
从YOLOv5到YOLOv8:停车位检测模型演进与实战性能对比
1. YOLO系列模型的技术演进路径 YOLO(You Only Look Once)系列模型作为目标检测领域的标杆算法,从2015年诞生至今已经经历了多次重大迭代。每次版本更新都带来了显著的性能提升和架构创新,这使得YOLO系列在实时目标检测任务中始终…...
LeetDown完全指南:系统降级功能解决A6/A7设备用户的卡顿痛点
LeetDown完全指南:系统降级功能解决A6/A7设备用户的卡顿痛点 【免费下载链接】LeetDown a GUI macOS Downgrade Tool for A6 and A7 iDevices 项目地址: https://gitcode.com/gh_mirrors/le/LeetDown LeetDown是一款专为macOS设计的图形化降级工具࿰…...
Python内存泄漏分析实战指南(生产环境零停机排查全流程)
第一章:Python内存泄漏的本质与危害Python内存泄漏并非源于C语言中常见的“未释放malloc内存”,而是指对象被意外长期持有,导致垃圾回收器(GC)无法将其回收,从而持续占用堆内存。其本质是**引用关系的非预期…...
Node RED实战:5分钟搞定MQTT消息发布与订阅(附EMQX配置)
Node RED与MQTT实战:从零构建物联网消息系统 1. 为什么选择Node RED与MQTT组合? 物联网开发领域一直存在一个核心挑战:如何快速搭建可靠的消息通信系统而不陷入底层协议实现的泥潭。这正是Node RED与MQTT这对黄金组合的价值所在——它们让开发…...
深度解析:Beyond Compare 5授权机制与密钥生成技术
深度解析:Beyond Compare 5授权机制与密钥生成技术 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 在软件授权领域,Beyond Compare 5的RSA加密授权系统展现了商业软件保护…...
MFCMouseEffect:把桌面输入反馈这件事,做成一个真正可扩展的引擎
MFCMouseEffect:把桌面输入反馈这件事,做成一个真正可扩展的引擎 很多录屏、教程、演示和桌面工具,功能本身已经足够好,但一到“用户看你怎么操作”这一步,体验就会突然掉下来。 为什么? 因为点击不够明…...
如何高效使用iOS推送调试工具:SmartPush完整操作指南
如何高效使用iOS推送调试工具:SmartPush完整操作指南 【免费下载链接】SmartPush SmartPush,一款iOS苹果远程推送测试程序,Mac OS下的APNS工具APP,iOS Push Notification Debug App 项目地址: https://gitcode.com/gh_mirrors/smar/SmartPush SmartPush是一款…...
STM32从入门到实战:两周速成指南
STM32快速入门指南:从零基础到项目实战1. 项目概述1.1 STM32与8051的对比分析对于已经掌握8051和C语言的开发者而言,STM32的学习曲线并不陡峭。关键在于理解何时需要从8051迁移到STM32平台:计算能力需求:当8051的主频无法满足复杂…...

