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语言的知识模块!!!

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

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

相关文章

Julia 基本语法

Julia 基本语法 Julia 是一种为高性能数值计算设计的动态编程语言。它结合了其他编程语言的优点,如 Python 的易用性和 C 的性能。Julia 的语法简洁明了,使得编写和理解代码都变得容易。本文将介绍 Julia 的基本语法,帮助读者快速入门。 变量和数据类型 在 Julia 中,变量…

知识图谱增强的RAG(KG-RAG)详细解析

转自&#xff1a;知识图谱科技 这是一个与任务无关的框架&#xff0c;它将知识图谱&#xff08;KG&#xff09;的显性知识与大型语言模型&#xff08;LLM&#xff09;的隐含知识结合起来。这是该工作的arXiv预印本 https://arxiv.org/abs/2311.17330 。 我们在这里利用一个名为…

Typescript配置文件(tsconfig.json)详解系列四:esModuleInterop和allowSyntheticDefaultImports

Typescript版本 Typescript5.5.2 如果我们使用ESM作为模块系统&#xff0c;那么我们经常会用以下两种方式去导入另一个模块&#xff1a; // 引入一个对象&#xff0c;包括了所有的export xxx 和 export default import * as A from ./xx; // 引入export default import B fr…

自定义表格_可拖拽排序

在做后台管理系统的时候&#xff0c;经常需要表格里面的每行排序&#xff0c;自定义可拖拽表格&#xff0c;更改样式方便。 一、实现效果 进行拖拽演示&#xff1a; 可拖拽排序表格 无滚动条样式&#xff1a; 有滚动条样式&#xff1a; 二、代码 使用reactscssts,实现页面。 …

用最简单的方法对大数据进行处理 vs spark(不需要安装大数据处理工具)

一、大文件处理策略 &#xff08;一&#xff09;、难点 内存管理&#xff1a; 大文件无法一次性加载到内存中&#xff0c;因为这可能会导致内存溢出&#xff08;OutOfMemoryError&#xff09;。 因此&#xff0c;需要使用流&#xff08;Stream&#xff09;或缓冲区&#xff08…

Linux(CentOS)ftp服务搭建

ftp服务器搭建 1. 下载ftp服务2. 查找ftp配置文件3. 查看配置文件信息4. Windows连接ftp服务1&#xff09;使用文件资源管理器连接2&#xff09;使用FlashFXP工具&#xff0c;比文件资源管理器好用&#xff0c;强烈推荐 5. Linux连接 1. 下载ftp服务 yum install -y vsftpd2. …

Docsify:快速用Markdown文档搭建网站的利器

Github官方地址&#xff1a;Docsify 什么是Docsify&#xff1f; 对于经常写博客的人来说&#xff0c;markdown大家都不陌生。今天介绍一个在最近需求中碰到的软件Docsify&#xff0c;通过它能够将Markdown直接转换为网页。话不多说&#xff0c;下面直接介绍它的快速用法。 D…

Apache、nginx

一、Web 1、概述 Web&#xff1a;为⽤户提供的⼀种在互联⽹上浏览信息的服务&#xff0c;Web 服务是动态的、可交互的、跨平台的和图形化的。 Web 服务为⽤户提供各种互联⽹服务&#xff0c;这些服务包括信息浏览服务&#xff0c;以及各种交互式服务&#xff0c;包括聊天、购物…

fastapi教程(五):中间件

一&#xff0c;什么是中间件 中间件是一种软件组件&#xff0c;它在请求到达应用程序处理程序之前和/或响应发送回客户端之前执行操作。 请求从客户端发出。 请求首先经过Middleware 1。 然后经过Middleware 2。 请求到达FastAPI路由处理器。 响应从路由处理器返回。 响应经过…

LeetCode242 有效的字母异位词

前言 题目&#xff1a; 242. 有效的字母异位词 文档&#xff1a; 代码随想录——有效的字母异位词 编程语言&#xff1a; C 解题状态&#xff1a; 成功解答&#xff01; 思路 问题的本质就是两个字符串是否包含相同的元素。字符串的元素都是小写的字母&#xff0c;那么元素的种…

如何通过 CloudCanal 实现从 Kafka 到 AutoMQ 的数据迁移

01 引言 随着大数据技术的飞速发展&#xff0c;Apache Kafka 作为一种高吞吐量、低延迟的分布式消息系统&#xff0c;已经成为企业实时数据处理的核心组件。然而&#xff0c;随着业务的扩展和技术的发展&#xff0c;企业面临着不断增加的存储成本和运维复杂性问题。为了更好地…

Android Studio Module 引入aar

1. 把 aar 文件放到 module 的 libs 目录下 2. 作为 lib 的 module 的 build.gradle 文件&#xff1a; repositories {flatDir {dirs libs}}dependencies {.....implementation (name: TestLibrary-release, ext: aar)}3. app 的 build.gradle 文件&#xff1a;(必须配置) rep…

《LeetCode热题100》---<双指针篇四道>

本篇博客讲解LeetCode热题100道双指针篇中的 第一道&#xff1a;移动零&#xff08;简单&#xff09; 第二道&#xff1a;盛最多水的容器&#xff08;中等&#xff09; 第一道&#xff1a;移动零&#xff08;简单&#xff09; class Solution {public void moveZeroes(int[] nu…

web小游戏开发:拼图(一)

web小游戏开发:拼图(一) 拼图游戏规则拼图方式原始拼图对调拼图移动拼图拼图难度拼图交互puzzle8.com联众拼图其他部分拼图游戏准备工作htmljscss小结拼图游戏规则 对于拼图游戏来说,整理有两种拼图块,一种就是方形的,一种是不规则的,带有咬合齿的。一般来说,线下手工…

基于CentOS Stream 9平台安装JDK17.0.12

官方&#xff1a; https://www.oracle.com/java/technologies/downloads/#java17 1. 下载&#xff1a; https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 2. 存放目录 mkdir /usr/local/javacd /usr/local/java3. 解压 tar -zxvf jdk-17_linux-x64_…

除了GPT,还有哪些好用的AI工具?

最强AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 多得很&#xff0c;这20个免费的国产AI工具&#xff0c;打工人必备&#xff0c;除了比chatGPT好用&#xff0c;甚至还可以用来变现…

Linux:进程通信之管道

管道 A.What 本质是内核缓存区 B. 管道的特点 内核缓冲区大小固定位4k管道独立于进程存在管道的数据结构&#xff1a;环形队列&#xff08;读端和写端&#xff09;单工&#xff1a;写端流向读端读数据相当于出队列默认阻塞&#xff1a;管道无数据&#xff0c;默认读端阻塞&am…

C语言中的指针基础

文章目录 &#x1f34a;自我介绍&#x1f34a;地址&#x1f34a;C语言中的指针 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介绍 Hello,大家好&#xff0c;我是小珑也要变强&am…

099、Python 从网站上下载图片,并压缩发送到指定邮箱中

要实现从网站上下载图片&#xff0c;并压缩发送到指定邮箱中&#xff0c;可以按下面步骤进行编程。 一、从网络上下载图片&#xff1a; 这里我们使用requests 模块&#xff0c;requests 模块是一个非常流行的 HTTP 库&#xff0c;用于发送各种 HTTP 请求。 1、安装 pip ins…

论文阅读-《Distant Supervision for Relation Extraction beyond the Sentence Boundary》

文章提出了首个将远程监督应用于跨句子关系提取的方法&#xff0c;通过整合句内和句间关系&#xff0c;利用图表示和多路径特征提取提高了准确性和鲁棒性。 摘要 文章提出了一种新的方法&#xff0c;用于在远程监督下进行跨句子的关系抽取。这种方法利用图表示来整合依赖和话…