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…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...