当前课程知识点:C语言程序设计(上) >  循环结构的程序设计(二) >  4.7 循环的综合应用 >  4.7.5 循环综合应用——打印空心图案

返回《C语言程序设计(上)》慕课在线视频课程列表

4.7.5 循环综合应用——打印空心图案在线视频

4.7.5 循环综合应用——打印空心图案

下一节:数的排列组合.c

返回《C语言程序设计(上)》慕课在线视频列表

4.7.5 循环综合应用——打印空心图案课程教案、知识点、字幕

下来再给大家一个打图形的题

大家看一下这个图形

跟我们前边讲过的图形

大体上的样子也还是有点像的

我们讲过一个打空心的三角形

看上去像这

上半边

只是说

我们当时给的那个不是打字符

直边上就是打

星号

打固定的字符

不是打这种

可变的

我们看到这个题目里边是

Z X Y

是X Y Z

那么从

下面往上数的话是

连着的

是一个排列有序的

一个字符

其实呢

你还可以是排列有序的数

比如说可以是

从上面

1 2 3 4 5

这样排

也可以是

a b c d

这样排

或者是说

其它的一个组合

有规律的一个组合

我们首先看宏观上

这道题目

是不是可以这样

我们从中间要插一下

一个横线的话

这个横线是插进来的

不是要的这个图案

是说我们可以

从思路上这样

你把这个

图案切割一下

切割成

上面是一个这样的

正的空心三角

下边是一个倒着的空心三角

那么这道题就可以变成

一个串形的

就跟两道题拼起来一样

就是说

上面

做按照我们

空心三角这个大环境

来构建

来考虑

下边是一个倒的

空心的三角

是这样

那么只要上边

我们的方法找对了

下边的方法呢

就是一个复制了

只是一个

终止表达式不同

其它方法都是一样的

这道题怎么考虑呢

我们看一下

它跟前边咱们构建的

那个打印图形的

所有的不同

我们刚才说除过这种切割看

我们这个

程序是这样

上面这个

for

这个循环

两重的循环

和下边的这两重循环

是对称的

那么就是说 显然

上半截是做的什么呢

这个

上边的

空心三角

而下边是对应下边的空心三角

我们先看

上边的这一块

上面的这个

外循环

我们说永远都是

打一行打一行

再打一行

那就是循环从

i从1开始

我们要几行呢

i n

到我们的n

这是外循环

行控制

那列控制这块呢

跟我们前面分析的一样

你怎么打这个Z呢

先打空

再打字符

所以呢

我们这一个for

说的是

从1

这是怎么得到的呢

是我们现在要

考虑

这个空

和后边的字符

以及

里边的这个空

所以呢

这一块我们是判断

给了这么一个表达式

这个表达式

就使得

我们上边的图案

没有像

我们前面讲过空心三角的时候说

打空

打字符

比如说

这一行

我们打空打字符

再打空

再打字符

是这样的思路

就是说在内循环里边

我们并列的有两个

内循环

for

先打空打字符

再for

打空打字符

这是我们前面

讲的一个算法

那么

我们现在在这道题里边是怎么呢

我们内循环就一个for

一个for

就是要把这个空

字符

空 字符

打完

那么要打完

这里边的

终止表达式

是什么呢

n+i

同样

是跟行

控制变量

相关的一个表达式

n是终值

n加上i再减上2

就是我们这个内循环的

循环终值

在这里边我们要判断一下

到底是打字符还是打空呢

是因为我们用一个循环来控制的

打空打字符

打空打字符

我们要去识别一下

如果j

等于

n-i+1

大家可以仔细算一下

这个对不对

如果

j

等于这个式子

这个式子一定是与

行号有关的

一个表达式

如果满足这个条件

我们就打字符

打这一块的字符

否则

就打空

也就是说

我根据这个判断

满足这个条件打字符

不满足这个条件就打空

凡是满足这个条件

无论是这块的字符还是

下面的字符

都是打字符

每打一个字符

我们看见了吗

字符是减减的

比如说Z

Z下来到

Y

那是

它的asc码值

减一个

再到下是减一个

W V都是减一个

所以这块的

c是减减的

那么c里放的是什么东西呢

我们来看c

最开始的时候

差了一个什么呢

给它赋了一个初值是Z

就是我们要打的

第一个字符

然后呢

往下依次类推

从Z开始减减

那么大家考虑一下

如果我把这个

c里边开始放的

初值是A

比如说是大写的A

大家想

A

到下减减

那A挨着的谁呢

那你一定要查一下asc码表里边

大写的A

比它的asc码值

小一个号的

是几

我们可以

可以说

比如说你这块是要打的数字0

那你0再减减

是谁呢

一定找0

下边挨着的那个

那我们如果说9的话

我一定知道它是8 它是7

它是6

它是5

这样子往下减减

所以呢

这块给的是Z

是往回退的

那下边的情况

是跟这上面非常像的

所不同的只是什么呢

大家注意看一下

内循环的

循环终止表达式

是不一样的

所以呢

打图形的这件事

内循环的

循环终止表达式

决定了这个图案

长得什么样子

我们把这个程序

运行一下看看

这是我们刚才看到的程序

这里边初值

我们给它赋值的是Z

然后呢

谁来控制它

打多少行呢

这scanf n

n控制它打多少行

我们现在要一个几行

给个6行

6行

那它指的是

上半边是6行

下边呢

往下数也是6行

中间这一行是被借用的

是Z

那咱要是把这块改一下

比如说

我改的这是一个9

我们看一下

这块我还给一个6

也打6行

大家看

0下来就是斜杠了

在原点了

这是在

asc码表里边

排序的是这样

所以呢

就是这个初始值

就是

你下边减减的

起点

要从这往下减减

这道题目我们

第一是想说什么呢

一个图案

可以是由

一个固定的字符构成的

也可以是由任何的数字字符

以及asc码表里边

凡是有编码表跟它对应的

所有的都可以

如果我们这块给的是一个

斜杠

比如说斜杠5

大家知道

这个斜杠里

是一个转义字符

那斜杠5

会出来是什么呢

之前我们见到过这个

还给6

大家看

上面是不是一个 梅花

那么梅花再下来是一个

菱形

不同的符号

就是我们平常从键盘上

敲不进去的符号

所以呢就这一块

起点是什么

后边按照什么样的一个规律

再变化

我们还把这复原回去

就是按照什么样的规律再变化

是决定了

哪里来决定的呢

是你这里边要打的

这个东西

你是减减还是加加

比如说

我们现在这个Z

这一块

我给的不是减减

是加加

你的程序出来

运行的结果出来的样子

还给6

你看

就成了这样子了

Z Y

你是往上加的

是因为Z是最后一个字母

Z下边的再是哪个字母

因为我们只变了这块

而这一块是没有变化的

这块

整体上你的变化要

协调起来

因为我

变了上边

下边的没有变化

所以呢

刚才出来的图案就会有一点问题

包括

我们

变了上半段

而下半段

没有变化

大家可以下去

我还把它复原成

这样的

减减的

这样的情况

大家可以

由这样的一个程序

来给它起始点不同

和它的算法不同

你可以得到

任何你想要的图案

假如说我给的不是7

给的是9

大家看

图形就会

行数就会

增加了

我们反复在这个

循环的嵌套里边用打图形来说

那是因为

我们数组还没有学

然后呢

前面只讨论循环

而循环在嵌套里边

对一个平面问题

正好是用一个双重循环解决它

是一个

比较方便的

程序解决的方法

所以我们拿

打图形

来说这件事

C语言程序设计(上)课程列表:

从问题到C语言程序设计

-1.1 计算机的问题求解方法

--1.1.1--程序设计面向的问题

--1.1.2--关于计算

--1.1.3-1关于算法-算法的特征

--1.1.3-2关于算法——算法的表示

--1.1.3-3关于算法——算法的优化

--1.1.4-1-程序设计方法

--1.1.4-2-程序设计方法

--讨论题:数学模型

-1.1 计算机的问题求解方法--作业

-1.2 C语言与C程序

--1.2.1-1-C概述

--1.2.1-2-C概述

--1.2.2-C初步

--讨论题:运算符

-1.3 C语言处理系统与程序调试运行

--1.3.1C程序如何调试运行

--1.3.2常用C语言处理系统

--1.3.3DEVC++的使用-v1

--1.3.4C语言概貌小程序

--例程

-1.4 程序中的人机交互

--1.4 printf用法

--1.4.2 scanf的用法

--例程

--作业讨论区

数据计算实现与顺序结构程序设计(一)

-2.1 算术运算的C程序实现

--2.1.1 第二章

--2.1.2 C语言算术表达式概念

--2.1.3 算术运算的实现

--2.1.4 整数相除

--2.1.5 输入格式造成的计算错误

--2.1.6 求余运算

--2.1.7 自增自减运算

--2.1.8 复合运算

--fangcheng.c

--fangcheng-1.c

--fangcheng-2.c

--fangcheng-3.c

--fangcheng-4.c

--算术混合运算.c

--讨论题:自增自减符

--讨论题:程序输出结果

--讨论题:程序运行结果

-2.1 算术运算的C程序实现--作业

-2.2 关系运算的C程序实现

--2.2.1 关系比较问题

--2.2.2 C语言关系表达式

--2.2.3关系运算优先级

--2.2.4 用关系运算做判断条件

--2.2.5 程序实例

--2.2.6 字符比较

--bukao.c

--pingshifen-1.c

--panduanzhengshu.c

--pingshifen-2.c

--字符比较.c

--讨论题:比较大小

--讨论题:程序的运行

-2.2 关系运算的C程序实现--作业

-第二周作业--作业

数据计算实现与顺序结构程序设计(二)

-2.3 逻辑运算的C程序实现

--2.3.1 逻辑运算问题~1

--2.3.2 逻辑运算表达式

--2.3.3 如何判断闰年

--2.3.4 逻辑运算优先级

--2.3.5 条件运算符

--计算结合性

--2.3.7 一个简单实例

--闰年.c

--自动购票问题.c

--讨论题:逻辑表达式

-2.3 逻辑运算的C程序实现--作业

-2.4 位运算的C程序实现

--2.4.1 什么是位运算

--2.4.2 位运算有哪些

--2.4.3 位运算怎么用

--讨论题:位运算

-2.5 几种很个别的运算

--2.5 几个很个别的运算

--讨论题

--讨论题

-2.5 几种很个别的运算--作业

-2.6 混合运算及数据类型转换

--2.6 混合运算及数据类型转换

--讨论题:数据类型

-2.7 顺序结构程序实例

--2.7.1 第一个程序:三角形

--Video

--三角形面积.c

--讨论题:工业产值

--讨论题:程序无效结果

-2.7 顺序结构程序实例--作业

选择结构的程序设计

-3.1 程序中的路径选择实现

--3.1.1_1 第三章

--3.1.1_2 神奇的if_else

--打印学生成绩.c

--一元二次方程.c

-3.1 程序中的路径选择实现--作业

-3.2 路径中的再选择——嵌套判断

--3.2.1_1 if语句的嵌套

--3.2.1_2三个数排序1029

--例程

--3.2.2 用户登录检查

--三个数排序_未优化.c

--三个数排序_优化.c

--讨论题:程序改错

-3.2 路径中的再选择——嵌套判断--作业

-3.3 复杂判断问题的C程序设计

--3.3 多级选择

--银行存款.c

--讨论题:多级选择

-3.4 多分支问题的C程序设计

--3.4.1 switch语句表达式

--3.4.2 加减乘除计算

--3.4.3 几类说明

--加减乘除运算.c

--讨论题:关于switch

-3.4 多分支问题的C程序设计--作业

-3.5 GOTO的适当使用

--3.5 GOTO的适当使用

-3.6 选择结构的程序实例

--3.6 程序展示

--计算第几天.c

--存款利息__switch实现.c

--讨论题:输出奇数

--讨论题:计算税金

-3.6 选择结构的程序实例--作业

-第四周作业--作业

循环结构的程序设计(一)

-4.1 需要重复执行的程序

--4.1.1----第四章~1

--4.1.2---while实现先判断后循环~1

--4.1.3----while循环的应用-录入速度~1

--求和.c

--打印学生成绩.c

--统计录入速度.c

--求平均数.c

-4.1 需要重复执行的程序--作业

-4.2 至少要执行一次的循环

--4.2.1至少要执行一次的循环

--4.2.2-do-while循环应用

--成绩录入_do while实现.c

--n的阶乘.c

--字符分类统计.c

--讨论题:关于while

-4.2 至少要执行一次的循环--作业

-4.3 已知循环次数用for语句

--4.3.1--用for语句控制循环次数

--4.3.2--循环的应用-求和

--求和问题.c

--斐波那契数列问题.c

--数列求和.c

--讨论题:循环语句的不同

--讨论题:循环语句

-4.3 已知循环次数用for语句--作业

-4.4 循环控制——简单循环应用

--4.4.1-循环的应用-找数-水仙花数

--4.4.2--循环的应用-求素数

--水仙花数.c

--讨论题:死循环

--讨论题:continue和break

--讨论题:猜数字

-循环结构的程序设计(一)--4.4 循环控制——简单循环应用

循环结构的程序设计(二)

-4.5 循环的嵌套

--4.5.1 循环的嵌套——九九乘法表

--4.5.2 循环的嵌套——打印三角形

--打印九九乘法表.c

--打印实心三角图案.c

--打印空心三角图案.c

--讨论题:程序运行

-4.5 循环的嵌套--作业

-4.6 break与continue

--4.6 循环中断与继续循环——break再讨论

--最大素数.c

--求正数个数及平均数.c

-4.6 break与continue--作业

-4.7 循环的综合应用

--4.7.1 数的排列组合问题

--4.7.2 循环综合应用——穷举算法

--4.7.3 循环综合应用——满足条件的数

--4.7.4 循环综合应用——求最后三位数

--4.7.5 循环综合应用——打印空心图案

--数的排列组合.c

--数的排列组合优化.c

--鸡兔同笼.c

--找满足条件的数.c

--输出14的13次方的最后三位数.c

--打印空心字符.c

--讨论题:打印图形

--讨论题:打印空心图形

--讨论题:计算闰年

-第六周作业

--虚拟实验:循环程序设计实验

-第六周作业--作业

数组(一)

-5.1 同类有序数据处理问题

--5.1.0 数组开篇

--5.1.1 同类有序数据存储问题

--讨论题:下标变量与下标

-5.2 一维数组的定义和引用

--5.2.1_1 数组的定义~1

--5.2.1_2 数组的初始化

--5.2.2 一维数组的输入输出

--5.2.3 一维数组的应用1--成绩排序(选择法)~2

--5.2.4 一维数组的应用2--Fibonacci数列

--数组定义.c

--数组初始化.c

--输出大于平均值的数.c

--反向输出.c

--选择法_成绩排序.c

--求斐波那契数列前n项.c

--讨论题:对称数

--讨论题:关于'\0'

-5.2 一维数组的定义和引用--作业

-5.3 一维字符串数组

--5.3 一维字符串数组11.24~1

--用函数测试字符串长度.c

--讨论题:编程

-5.4 字符串处理函数

--5.4 字符数组的输入与输出

--字符串反向.c

--字符串函数

--讨论题:程序如何运行

--讨论题:黑色星期五

数组(二)

-5.5 二维数组的定义与使用

--5.5 二维数组定义

--二维数组的定义与初始化.c

-5.6 二维数组的输入输出

--5.6 二维数组的输入与输出

--二位数组输出_矩阵输出.c

--讨论题:随机数据存储

-5.6 二维数组的输入输出--作业

-5.7 二维数组的应用‍

--5.7.1二维数组的应用-转置矩阵

--5.7.2 用一维数组方式引用二维数组元素

--转置矩阵.c

--找二维数组最大数.c

--讨论题:修改程序

--讨论题:关于随机数函数 rand()

-5.8 二维字符数组

--5.8 单词排序

--单词排序.c

--讨论题:回文字符串

-5.8 二维字符数组--作业

-5.9 数组综合应用

--5.9.1 应用1——学生成绩统计

--统计成绩.c

--5.9.2 应用2——删除重复字符

--删除串中的重复字符串

--5.9.3 应用3——统计字符

--5.9_4数组的应用4--矩阵相乘

--统计字符次数.c

--讨论题:洗牌

-本期课程结束语

--end

-第八周编程作业

--虚拟实验:冒泡排序算法程序设计实验

期末复习

-《C语言程序设计(上)》期末复习参考

--html

期末复习答案

-《C语言程序设计(上)》期末复习参考答案

--html

4.7.5 循环综合应用——打印空心图案笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。