习题4-9 打印菱形图案(15分)
本题要求编写程序,打印一个高度为n的、由 “*” 组成的正菱形图案。
输入格式:
输入在一行中给出一个正的奇数n。
输出格式:
输出由n行星号 “*” 组成的菱形,如样例所示。每个星号后跟一个空格。
输入样例:
7
输出样例:
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
#include <stdio.h>int main()
{int i,j,n;scanf("%d",&n);int k=(n+1)/2;for(i=1;i<=k;i++){for(j=1;j<=n-2*i+1;j++){printf(" ");}for(j=1;j<=2*i-1;j++){printf("* ");}printf("\n");}for(i=n-k;i>=1;i--){for(j=1;j<=n-2*i+1;j++){printf(" ");}for(j=1;j<=2*i-1;j++){printf("* ");}printf("\n");}return 0;
}
运行结果:
题目解析:
- 看到此题目,要想到用循环的嵌套来解决此问题;
- 嵌套的循环可以构成一个平面图案,用 i 控制行, j 控制列;
- 用一个外循环来打印行,此题目需要我们打印一个菱形图案,可以将图案分为上下两个部分,并对上下两个部分的图行进行仔细分析,找出一行中空格和 * 号的数量规律。
- 以输出的样例为题目,总共由7行,先分析第一行到第四行的规律:第一行:6个空格,一个* ;6=7-(2*1-1) 。第二行:4个空格,3个* ;4=7-(2*2-1) 。第三行:2个空格,5个* ;2=7-(2*3-1) 。 第四行:0个空格,7个* ; 0=7-(2*4-1) 。因此,可以找出列号(j)和行号(i)、空格之间的关系:j<=n-2*i+1; 列号(j)和行号(i)、* 号之间的关系:j<=2*i-1。
for(i=1;i<=k;i++){ //打印行for(j=1;j<=n-2*i+1;j++){ //打印空格printf(" ");}for(j=1;j<=2*i-1;j++){ //打印*和空格printf("* ");}printf("\n"); //换行}
- 分析图形的下半部分,第5行到第六行,可以再用一个for循环来控制,外循环的i从 n-(n+1)/2开始,这里需要注意的地方是每一行图形的数量是依次减少的,空格的数量是依次增加的,同样找出图形的规律,用循环的嵌套将此图形实现。
二 、习题延申
上面打印的图形,每两个 * 号之间有一个空格,且写的代码用了两个循环的嵌套,针对此类题目做一个优化,接下来写的代码,和此题目类似,区别是用一个循环的嵌套来输出图形。此代码输出的图形每两个*号之间没有空格,只要找准(*)星号,空格,n之间的关系,解决此类题目的方法都一样。
#include <stdio.h>
#include<math.h>
int main()
{int n,i,j,k;scanf("%d",&n);k=(n+1)/2;for(i=1;i<=n;i++){ //打印行for(j=1;j<=abs((n+1)/2-i);j++){ printf(" "); //打印空格}for(j=1;j<=n-abs((k-i))*2;j++){printf("*"); //打印*}printf("\n"); //换行}return 0;
}
1、abs()函数:绝对值函数;
2、以n=9为例,给出下列解题思路。
三、
打印空的菱形,空菱形的特点是只有第一个和最后一个位置上需要打印*,其余打印空格。
#include <stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{int n,i,j,k;scanf("%d",&n);k=(n+1)/2;for(i=1;i<=n;i++){ //打印行for(j=1;j<=abs((n+1)/2-i);j++){ printf(" "); //打印空格}for(j=1;j<=n-abs((k-i))*2;j++){if(j==1||j==n-abs((k-i))*2){printf("*"); //打印*}else{printf(" "); //打印*号中间的空格}}printf("\n"); //换行}return 0;
}
习题4-9 打印菱形图案(15分)相关推荐
- 习题4-9 打印菱形图案 (15 分)
习题4-9 打印菱形图案 (15 分) 本题要求编写程序,打印一个高度为n的.由"*"组成的正菱形图案. 输入格式: 输入在一行中给出一个正的奇数n. 输出格式: 输出由n行星号& ...
- PTA 7-26 打印菱形图案 (15分)模拟
本题要求编写程序,打印一个高度为n的.由"*"组成的正菱形图案. 输入格式: 输入在一行中给出一个正的奇数n. 输出格式: 输出由n行星号"*"组成的菱形,如样 ...
- 7-59 打印菱形图案 (15 分)
本题要求编写程序,打印一个高度为n的.由"*"组成的正菱形图案. 输入格式: 输入在一行中给出一个正的奇数n. 输出格式: 输出由n行星号"*"组成的菱形,如样 ...
- php编辑菱形图案代码,打印菱形图案 (15 分)
打印菱形图案 (15 分) 本题要求编写程序,打印一个高度为n的.由"*"组成的正菱形图案. 输入格式: 输入在一行中给出一个正的奇数n. 输出格式: 输出由n行星号"* ...
- PTA 7-12 打印菱形图案
7-12 打印菱形图案 (15分) 本题要求编写程序,打印一个高度为n的.由"*"组成的正菱形图案. 输入格式: 输入在一行中给出一个正的奇数n. 输出格式: 输出由n行星号&qu ...
- 实验1-5 输出菱形图案 (5 分)
实验1-5 输出菱形图案 (5 分) 本题要求编写程序,输出指定的由"A"组成的菱形图案. 输入格式: 本题无输入 输出格式: 按照下列格式输出由"A"组成的菱 ...
- 打印菱形图案(C语言实现)
习题4-9 打印菱形图案(C语言实现) 分析:分上下两个三角形打印 #include <stdio.h>int main() {int n,i,j,k;scanf("%d&quo ...
- java打印菱形图案_java打印出菱形图案实例详解
第一步:首先对图像进行解析 想要打印该图形必须要进行多层循环嵌套,分两个部分进行打印. 第一部分为上半部分前四行,他们是递增的关系,后半部分后三行为递减关系,由此可以得出我们需要写两个打的循环.并且由 ...
- 习题4-7 最大公约数和最小公倍数 (15分)
习题4-7 最大公约数和最小公倍数 (15分) 题目描述 本题要求两个给定正整数的最大公约数和最小公倍数. 输入格式: 输入在一行中给出两个正整数M和N(≤1000). 输出格式: 在一行中顺序输出M ...
- 花式打印菱形图案!!
(一).首先我们先来看最简单的打印5行5列 ***** ***** ***** ***** ***** 具体代码如下: /*** 双循环打印菱形图案* * A ** *** BBB * ** **** ...
最新文章
- 难点电路详解之负反馈放大器电路(1)
- python 行为驱动_什么是行为驱动的Python?
- 湖畔大学最新学员名单公布:胡彦斌以纽班文化董事长身份被录取
- python线程安全吗_线程安全及Python中的GIL
- Docker 基础技术之 Linux namespace 详解
- 想去机器学习初创公司做数据科学家?这些问题值得你三思!
- Ubuntu zip压缩文件夹 和解压文件
- Eclipse用SVN上传新项目
- DIY01_NE555叮咚门铃
- java 重写或者覆父类方法的使用throws 抛出异常,为什么要小于父类父类,java面试点
- win10计算机删除了怎么恢复,win10文件误删除怎么恢复-互盾数据恢复软件
- 计算机一直重启故障原因可能是,Windows电脑一直自动重启的原因和解决方法
- 大学生用什么样的笔记本电脑好
- 敲开bp神经网络之门(三,机器视觉斑点blob匹配中使用)
- 幸福人生心得体会之如何得到好婚姻好事业
- 【技术贴】禁止打印进程spoolsv - spoolsv.exe随机启动
- 02前端入门HTML5 +CSS3+电商网页制作:CSS
- 数字图像处理 使用opencv+python识别七段数码显示器的数字
- 【经验】研究方向要专一,日常积累素材和案例
- linux驱动篇-LCD
热门文章
- matlab仿真电磁波的产生,电磁场与电磁波Matlab仿真
- 三种求平方根的算法——C/C++
- 苹果授权登录绑定手机号被拒绝
- Mac安装Java反编译工具JD-GUI(解决打不开问题)
- 继续安利两个漫画App
- 如何在PCB中放置禁止触摸标志
- 【C++】用代码写一个气派的圣诞树发给身边的亲朋好友
- R或RStudio下载包时出错解决方案
- android如何使用ios14组件,iOS14如何添加和删除小组件 iOS14添加和删除小组件的方法...
- php 文章页面阅读全文,给WordPress文章内容页增加阅读全文展开功能