本章节作为循环结构三的补充,继续讲解嵌套循环图形的相关题目。
学习路线:C++从入门到NOI学习路线
学习大纲:C++全国青少年信息学奥林匹克竞赛(NOI)入门级-大纲
上一站:C++程序结构入门之循环结构三
下一站:
假设i是1~5的连续自然数,学会通过循环变量i得到常见数列。
输出结果为:1 2 3 4 5。
for(int i=1;i<=5;i++){
cout<<i<<" ";
}
输出结果为:2 4 6 8 10。
for(int i=1;i<=5;i++){
cout<<i*2<<" ";
}
输出结果为:1 3 5 7 9。
for(int i=1;i<=5;i++){
cout<<i*2-1<<" ";
}
输出结果为:5 4 3 2 1。
for(int i=1;i<=5;i++){
cout<<5-i+1<<" ";
}
输出结果为:9 7 5 3 1。
for(int i=1;i<=5;i++){
cout<<(5-i+1)*2-1<<" ";
}
(1)连续自然数:cout<<i<<" “;
(2) 连续的偶数:cout<<i * 2<<” “;
(3)连续的奇数:cout<<i * 2-1<<” “;
(4)倒序的自然数:cout<<5-i+1<<” “;
(5)倒序的奇数:cout<<(5-i+1) * 2-1<<” ";
输入一个整数打印字符图形。
根据分析的已知,未知按需要定义变量。
//二、数据定义
int n;
从键盘读入整数n。
//三、数据输入
cin>>n;
根据现有图形分析规律。
首先观察图形,虽然只输出 * 图形,实际上图形中还包含空格元素,所以需要用一个循环控制空格,一个循环控制星号。
空格:
假如输入的整数n=3,那么会有两行出现空格,并且空格依次递减,第一行2个即n-1,第二行1个即n-2。
已知i递增,所以,空格的数量刚好为n-i。
for(int j=1;j<=n-i;j++){
//五、输出结果
cout<<" ";
}
星号:
假如输入的整数n=3,星号出现的数量为1,3,5,是一个奇数数列。在上面总结的规律中,奇数数列i * 2-1,因此星号的数量为i * 2-1。
for(int k=1;k<=2*i-1;k++){
//五、输出结果
cout<<"*";
}
然后我们将每一行的内容循环n次即可,注意换行。
//四、数据计算
for(int i=1;i<=n;i++){
cout<<endl;
}
#include<iostream>
using namespace std;
int main(){
//一、分析问题
//已知:一个整数
//未知:图形
//关系:数列规律
//二、数据定义
int n;
//三、数据输入
cin>>n;
//四、数据计算
for(int i=1;i<=n;i++){
for(int j=1;j<=n-i;j++){
//五、输出结果
cout<<" ";
}
for(int k=1;k<=2*i-1;k++){
//五、输出结果
cout<<"*";
}
cout<<endl;
}
return 0;
}
输入一个整数打印字符图形。
根据分析的已知,未知按需要定义变量。
//二、数据定义
int n;
从键盘读入整数n。
//三、数据输入
cin>>n;
根据现有图形分析规律。
首先观察图形,虽然只输出 * 图形,实际上图形中还包含空格元素,所以需要用一个循环控制空格,一个循环控制星号。
空格:
假如输入的整数n=3,那么会有两行出现空格,并且空格依次递增,第一行0个,第二行1个,第三行2个。每行的空格刚好受到行数控制。
已知i递增,所以,空格的数量刚好为就 j < i。
for(int j=1;j<i;j++){
//五、输出结果
cout<<" ";
}
星号:
假如输入的整数n=3,星号出现的数量为5,3,1,是一个倒序的奇数数列。在上面总结的规律中,倒序奇数数列(3-i+1) * 2-1,因此星号的数量为(n-i+1) * 2-1。
for(int k=(n-i+1)*2-1;k>0;k--){
//五、输出结果
cout<<"*";
}
然后我们将每一行的内容循环n次即可,注意换行。
//四、数据计算
for(int i=1;i<=n;i++){
cout<<endl;
}
#include<iostream>
using namespace std;
int main(){
//一、分析问题
//已知:一个整数
//未知:图形
//关系:数列规律
//二、数据定义
int n;
//三、数据输入
cin>>n;
//四、数据计算
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
//五、输出结果
cout<<" ";
}
for(int k=(n-i+1)*2-1;k>0;k--){
//五、输出结果
cout<<"*";
}
cout<<endl;
}
return 0;
}
输入一个整数 n ,请打印出 n ? 2+1 行的字符图形。
根据分析的已知,未知按需要定义变量。
//二、数据定义
int n;
从键盘读入整数n。
//三、数据输入
cin>>n;
本题属于上下对称类图形,这种类型的题目都应采取分而治之的方法,即将图形按规律分成几部分打印。
上半部分:
将菱形分成两部分,上半部分即为正三角形。根据上题《1068 - 字符图形4-星号正三角》可以轻松得到以下代码。
//四、数据计算
for(int i=1;i<=n+1;i++){
for(int j=n-i;j>=0;j--){
//五、输出结果
cout<<" ";
}
for(int k=1;k<=2*i-1;k++){
//五、输出结果
cout<<"*";
}
cout<<endl;
}
下半部分:
将菱形分成两部分,下半部分即为倒三角形。根据上题《1070 - 字符图形6-星号倒三角》可以轻松得到以下代码。
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
//五、输出结果
cout<<" ";
}
for(int k=(n-i+1)*2-1;k>0;k--){
//五、输出结果
cout<<"*";
}
cout<<endl;
}
#include<iostream>
using namespace std;
int main(){
//一、分析问题
//已知:一个整数
//未知:图形
//关系:数列规律
//二、数据定义
int n;
//三、数据输入
cin>>n;
//四、数据计算
for(int i=1;i<=n+1;i++){
for(int j=n-i;j>=0;j--){
//五、输出结果
cout<<" ";
}
for(int k=1;k<=2*i-1;k++){
//五、输出结果
cout<<"*";
}
cout<<endl;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
//五、输出结果
cout<<" ";
}
for(int k=(n-i+1)*2-1;k>0;k--){
//五、输出结果
cout<<"*";
}
cout<<endl;
}
return 0;
}
请打印n行的放大的箭头( n 一定是一个奇数)。
根据分析的已知,未知按需要定义变量。
//二、数据定义
int n;
从键盘读入整数n。
//三、数据输入
cin>>n;
本题属于上下对称类图形,这种类型的题目都应采取分而治之的方法,即将图形按规律分成几部分打印。
上半部分:
空格:
上半部分的空格是依次递增的。可以参考星号三角写法。
for(int k=1;k<i;k++){
//五、输出结果
cout<<" ";
}
星号:
每行输出的星号数量都是确定,即n个。
for(int j=1;j<=n;j++){
//五、输出结果
cout<<"*";
}
因为是奇数列,所以要么上半部分多输出一行,要么在下半部分多输出一行。
for(int i=1;i<=n/2+1;i++){
cout<<endl;
}
下半部分:
空格:
下半部分的空格是依次递减的。
for(int k=1;k<=i-1;k++){
//五、输出结果
cout<<" ";
}
星号:
同理,下半部分的每行输出的星号数量也是确定,即n个。
for(int j=1;j<=n;j++){
//五、输出结果
cout<<"*";
}
循环n/2次,做减法,是方便倒序输出空格。
for(int i=n/2;i>=1;i--){
cout<<endl;
}
#include<iostream>
using namespace std;
int main(){
//一、分析问题
//已知:一个整数
//未知:图形
//关系:数列规律
//二、数据定义
int n;
//三、数据输入
cin>>n;
//四、数据计算
for(int i=1;i<=n/2+1;i++){
for(int k=1;k<i;k++){
//五、输出结果
cout<<" ";
}
for(int j=1;j<=n;j++){
//五、输出结果
cout<<"*";
}
cout<<endl;
}
for(int i=n/2;i>=1;i--){
for(int k=1;k<=i-1;k++){
//五、输出结果
cout<<" ";
}
for(int j=1;j<=n;j++){
//五、输出结果
cout<<"*";
}
cout<<endl;
}
return 0;
}
使用DEV C++进行调试可以让您更好地了解程序的执行流程,并且可以在运行时查看变量的值。帮助你发现程序的逻辑错误。
以下是使用DEV C++进行调试的一般步骤:
打开或者新建项目。
在有数字的地方点击一次,看见与其他行出现不同变化即可。
可以在调试栏中选择下一步,跳过,下一条语句等操作。
鼠标选择变量后,点击调试栏中的添加查看,即可在左边“监视”窗口看到变量变化的情况。
和查看变量是一样的操作。
从键盘读入一个整数 n ,代表等腰三角形的边长,请输出一个边长为 n 的等腰三角形!
赵老师最近在编一个操作系统,正好编到鼠标的繁忙状态,需要一个沙漏符号,正好大家都在学C++ ,你的任务就是帮赵老师编一个程序打印一个沙漏符号。
请输出 n 行的蝴蝶结的形状,n 一定是一个奇数!
请从键盘读入一个整数 n(1~10 的范围内的奇数),打印出如下图所示的n行的完整的蝴蝶结!
请从键盘读入一个整数 n ,代表有 n 行,输出 n 行的9*9乘法表。
输入一个整数打印字符图形。
打印星号三角形。
请你编程画一个放大的 X (大写字母)。
在数学上,我们发现有一类图形是对称图形。我们对于左右一样的图形叫做沿 y 轴对称,对于上下一样的图形叫做沿 x 轴对称。
以上就是利用嵌套循环打印出各种图形的内容,关于这种类型的题目都要从图形入手,根据图形的变化规律按需将图形分割或者不分割。再从中找到数列的规律。