当前位置: 首页 > news >正文

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 思路分析

  1. 使用两个嵌套的循环,外层循环控制行数,内层循环控制每行的输出。
  2. 对于每行,先打印一定数量的空格,使得三角形对齐。
  3. 然后判断当前行的位置,如果是第一行、最后一行或者是每行的第一个和最后一个字符位置,打印 * ,否则打印空格。

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 代码解析:

  1. 定义一个变量rows用来存储行数
  2. 内层的第一个 for 循环 for (int j = 1; j <= rows - i; j++) 用于在每行的开头打印适当数量的空格,以使三角形对齐。
  3. 内层的第二个 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:图案打印

引言 本篇文章讲了一些常见的图形编程题&#xff0c;并总结了一些规律。 1、打印空心正方形 1.1 代码展示&#xff1a; #include<stdio.h> int main() {int a 0;//边长初始化scanf("%d", &a);//输入边长的值{int i 0;for (i 0; i < a; i)//控制行…...

WebLogic:弱口令,木马反弹连接

weblogic WebLogic 是 Oracle 公司开发的应用服务器&#xff0c;主要用作开发、集成、部署和管理大型分布式 Web 应用、网络应用和数据库应用的 Java 应用服务器。它在历史上曾出现过多个安全漏洞&#xff0c;其中包括弱口令、任意文件上传、SSRF、反序列化漏洞等 常见版本&a…...

深度学习图像处理环境搭建

Anaconda安装 Anaconda介绍 Anaconda是一个用于科学计算和数据科学的开源发行版&#xff0c;它包含了许多流行的Python库和工具&#xff0c;旨在简化数据分析和机器学习任务的开发过程。Anaconda提供了一个集成的开发环境&#xff0c;包括Python解释器、包管理工具&#xff0…...

这几个高级爬虫软件和插件真的强!

亮数据&#xff08;Bright Data&#xff09; 亮数据是一款强大的数据采集工具&#xff0c;以其全球代理IP网络和强大数据采集技术而闻名。它能够轻松采集各种网页数据&#xff0c;包括产品信息、价格、评论和社交媒体数据等。 网站&#xff1a;https://get.brightdata.com/we…...

【实战】机器学习Kaggle比赛—House Prices - Advanced Regression Techniques

House Prices - Advanced Regression Techniques 一、准备工作&#xff08;1&#xff09;查看项目概述&#xff08;2&#xff09;下载数据集&#xff08;3&#xff09;导入部分必要的库&#xff08;4&#xff09;参数设置&#xff08;图形显示大小屏蔽警告&#xff09;&#xf…...

【前端面试题】前端工程化、Webpack、Vite、Git项目管理相关问题

目录 关于前端工程化关于Webpack关于Vite关于Git项目管理综合性问题 关于前端工程化 1. 前端工程化的定义和好处 问题&#xff1a;什么是前端工程化&#xff1f;它的主要好处是什么&#xff1f;答案&#xff1a;前端工程化是指在前端开发中应用系统化、自动化和标准化的方法&…...

【号外】「省点时间」新功能暖心上线!

好消息&#xff0c;好消息&#xff0c;重大好消息&#xff01; 应广大用户朋友的要求&#xff0c;经过一个多月的鏖战&#xff0c;「省点时间」的VIP功能终于上线啦&#xff01; 新版本在原有基础上&#xff0c;新增VIP功能&#xff0c;用户拥有了更多选择&#xff0c;赶快来…...

Python面试题:如何使用WebSocket实现实时Web应用

使用 WebSocket 实现实时 Web 应用可以使你的应用程序具备实时双向通信的能力。以下是一个完整的指南&#xff0c;展示如何使用 Django Channels 和 WebSocket 实现一个简单的实时 Web 应用。 环境准备 安装 Django Channels: pip install channels创建 Django 项目: django-a…...

公交信息在线查询小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;线路信息管理&#xff0c;站点分类管理&#xff0c;站点信息管理&#xff0c;周边分类管理周边信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0…...

Airtest实施手机精准截图

Airtest实施手机精准截图 一、接口查找 首先我们需要知道我们应该怎么实现用脚本去进行局部截图&#xff0c;我们可以通过翻阅Airtest的API文档发现&#xff0c;Airtest提供了 crop_image(img, rect) 方法可以帮助我们实现局部截图&#xff0c;在我们往期的推文里也介绍过该接…...

前端面试宝典【设计模式】【2】

欢迎来到《前端面试宝典》,这里是你通往互联网大厂的专属通道,专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习,无论是一线大厂还是初创企业的面试,都能自信满满地展现你的实力。 核心特色: 独家实战案例:每一期专栏都将深入剖析真实的前端面试案例,从基础知…...

技术汇总笔记7:条件分支相关内容

嵌套Switch语句的使用和改进 嵌套的switch语句虽然在语法上是允许的&#xff0c;但可能会使代码难以阅读和维护。例如&#xff1a; switch (_get_urgency_ob_type(sData.structure_name)) {case URGENCY_OB_PRESSUREINFO:{switch(_get_urgency_ob_sub_type( sData.attribute_…...

一文让你学会python:面向对象

面向对象编程&#xff08;OOP&#xff09; 一.类与实例 1.类&#xff1a; 是对现实世界描述的一种类型&#xff0c;是抽象的&#xff0c;是实例的模板&#xff0c;类名采用大驼峰&#xff0c;定义方式为 class 类名: pass 。 2.实例&#xff1a; 根据类创建的具体对象&…...

mac电脑安装 docker镜像 btpanel/baota

PS&#xff1a;docker链接&#xff1a;https://hub.docker.com/r/btpanel/baota 1、将docker下载到本地&#xff0c;然后运行端口映射 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&#xff0c;可以找到playwright的配置参数 目录 1. --browser{chromium,firefox,webkit} 2. --headed 3. --browser-channelBROWSER_CHANNEL 4. --slowmoSLOWMO 5. …...

java实现序列化操作

Java序列化是一种将对象转换为字节流的过程&#xff0c;以便在网络上传输或将对象持久化到磁盘中。在Java中&#xff0c;实现序列化的关键是实现Serializable接口。当一个类实现了Serializable接口时&#xff0c;它可以被Java序列化机制序列化成字节流&#xff0c;然后再反序列…...

视频帧的概念

一个视频帧是视频中的单一静态图像。视频帧的概念与电影胶片中的单一帧类似&#xff0c;视频帧序列的快速播放形成了连续运动的视觉效果。以下是视频帧的详细解释&#xff1a; 视频帧的定义&#xff1a; 视频帧&#xff1a;视频中的单一静态图像。视频是由一系列连续的帧按一定…...

卫星导航系统的应用领域与发展前景

当人们提到卫星导航系统&#xff0c;往往会联想到车载导航仪或手机上的地图应用。然而&#xff0c;卫星导航系统的应用远不止于此&#xff0c;它在许多领域都发挥着重要作用。下面将介绍几个卫星导航系统的应用领域及其发展前景。首先是海洋航行安全领域。在过去&#xff0c;海…...

FPGA开发——数码管的使用(二)

一、概述 在上一篇文章中我们针对单个数码管的静态显示和动态显示进行了一个设计和实现&#xff0c;这篇文章中我们针对多个数码管同时显示进行一个设计。这里和上一篇文章唯一不同的是就是数码管位选进行了一个改变&#xff0c;原来是单个数码管的显示&#xff0c;所以位选就直…...

技术汇总记录笔记5:在 C++ 中,如何使用正则表达式来验证一个字符串是否只包含数字?

在C中&#xff0c;你可以使用 <regex> 头文件中定义的正则表达式功能来验证一个字符串是否只包含数字。以下是一个基本的示例&#xff0c;展示如何使用正则表达式来检查一个字符串是否完全是数字&#xff1a; #include <iostream> #include <string> #inclu…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

【Java多线程从青铜到王者】单例设计模式(八)

wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本&#xff0c;sleep也是可以指定时间的&#xff0c;也就是说时间一到就会解除阻塞&#xff0c;继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒)&#xff0c;wait能被notify提前唤醒&#xf…...

旋量理论:刚体运动的几何描述与机器人应用

旋量理论为描述刚体在三维空间中的运动提供了强大而优雅的数学框架。与传统的欧拉角或方向余弦矩阵相比&#xff0c;旋量理论通过螺旋运动的概念统一了旋转和平移&#xff0c;在机器人学、计算机图形学和多体动力学领域具有显著优势。这种描述不仅几何直观&#xff0c;而且计算…...

第6章:Neo4j数据导入与导出

在实际应用中&#xff0c;数据的导入与导出是使用Neo4j的重要环节。无论是初始数据加载、系统迁移还是数据备份&#xff0c;都需要高效可靠的数据传输机制。本章将详细介绍Neo4j中的各种数据导入与导出方法&#xff0c;帮助读者掌握不同场景下的最佳实践。 6.1 数据导入策略 …...

【VLAs篇】02:Impromptu VLA—用于驱动视觉-语言-动作模型的开放权重和开放数据

项目描述论文标题Impromptu VLA&#xff1a;用于驱动视觉-语言-动作模型的开放权重和开放数据 (Impromptu VLA: Open Weights and Open Data for Driving Vision-Language-Action Models)研究问题自动驾驶的视觉-语言-动作 (VLA) 模型在非结构化角落案例场景中表现不佳&#xf…...

centos挂载目录满但实际未满引发系统宕机

测试服务器应用系统突然挂了&#xff0c;经过排查发现是因为磁盘“满了”导致的&#xff0c;使用df -h查看磁盘使用情况/home目录使用率已经到了100%,但使用du -sh /home查看发现实际磁盘使用还不到1G&#xff0c;推测有进程正在写入或占用已删除的大文件&#xff08;Linux 系统…...