【C++】C++程序结构入门之循环结构四

2023-12-26 11:22:49

文章目录


前言

本章节作为循环结构三的补充,继续讲解嵌套循环图形的相关题目。

学习路线:C++从入门到NOI学习路线

学习大纲:C++全国青少年信息学奥林匹克竞赛(NOI)入门级-大纲

上一站:C++程序结构入门之循环结构三

下一站:


一、常见的数值规律

假设i是1~5的连续自然数,学会通过循环变量i得到常见数列。

1.1 输出1 2 3 4 5的数列。

输出结果为:1 2 3 4 5。

for(int i=1;i<=5;i++){
	cout<<i<<" ";
}

1.2 输出2 4 6 8 10的数列。

输出结果为:2 4 6 8 10。

for(int i=1;i<=5;i++){
	cout<<i*2<<" ";
}

1.3 输出1 3 5 7 9的数列。

输出结果为:1 3 5 7 9。

for(int i=1;i<=5;i++){
	cout<<i*2-1<<" ";
}

1.4 输出5 4 3 2 1的数列。

输出结果为:5 4 3 2 1。

for(int i=1;i<=5;i++){
	cout<<5-i+1<<" ";
}

1.5 输出9 7 5 3 1的数列。

输出结果为:9 7 5 3 1。

for(int i=1;i<=5;i++){
	cout<<(5-i+1)*2-1<<" ";
}

总结:假设i是1-5的连续自然数

(1)连续自然数:cout<<i<<" “;
(2) 连续的偶数:cout<<i * 2<<” “;
(3)连续的奇数:cout<<i * 2-1<<” “;
(4)倒序的自然数:cout<<5-i+1<<” “;
(5)倒序的奇数:cout<<(5-i+1) * 2-1<<” ";

二、嵌套循环图形题

问题一:1068 - 字符图形4-星号正三角

输入一个整数打印字符图形。
在这里插入图片描述

1.分析问题

  1. 已知:一个整数
  2. 未知:图形
  3. 关系:数列规律

2.定义变量

根据分析的已知,未知按需要定义变量。

	//二、数据定义 
	int n;

3.输入数据

从键盘读入整数n。

	//三、数据输入 
	cin>>n;

4.数据计算

根据现有图形分析规律。

首先观察图形,虽然只输出 * 图形,实际上图形中还包含空格元素,所以需要用一个循环控制空格,一个循环控制星号。

空格:
假如输入的整数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;
	}

5.输出结果

#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;	
}

问题二:1070 - 字符图形6-星号倒三角

输入一个整数打印字符图形。
在这里插入图片描述

1.分析问题

  1. 已知:一个整数
  2. 未知:图形
  3. 关系:数列规律

2.定义变量

根据分析的已知,未知按需要定义变量。

	//二、数据定义 
	int n;

3.输入数据

从键盘读入整数n。

	//三、数据输入 
	cin>>n;

4.数据计算

根据现有图形分析规律。

首先观察图形,虽然只输出 * 图形,实际上图形中还包含空格元素,所以需要用一个循环控制空格,一个循环控制星号。

空格:
假如输入的整数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;
		
	}

5.输出结果

#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;	
}

问题三:1071 - 字符图形7-星号菱形

输入一个整数 n ,请打印出 n ? 2+1 行的字符图形。
在这里插入图片描述

1.分析问题

  1. 已知:一个整数
  2. 未知:图形
  3. 关系:数列规律

2.定义变量

根据分析的已知,未知按需要定义变量。

	//二、数据定义 
	int n;

3.输入数据

从键盘读入整数n。

	//三、数据输入 
	cin>>n;

4.数据计算

本题属于上下对称类图形,这种类型的题目都应采取分而治之的方法,即将图形按规律分成几部分打印。

上半部分:
将菱形分成两部分,上半部分即为正三角形。根据上题《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;
	}

5.输出结果

#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;	
}

问题四:1219 - 放大的箭头

请打印n行的放大的箭头( n 一定是一个奇数)。
在这里插入图片描述

1.分析问题

  1. 已知:一个整数
  2. 未知:图形
  3. 关系:数列规律

2.定义变量

根据分析的已知,未知按需要定义变量。

	//二、数据定义 
	int n;

3.输入数据

从键盘读入整数n。

	//三、数据输入 
	cin>>n;

4.数据计算

本题属于上下对称类图形,这种类型的题目都应采取分而治之的方法,即将图形按规律分成几部分打印。

上半部分:
空格:
上半部分的空格是依次递增的。可以参考星号三角写法。

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;
	}

5.输出结果

#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++进行调试的一般步骤:

3.1打开您的项目或源文件。

打开或者新建项目。

在这里插入图片描述

3.2 在菜单栏中选择“调试”>“开始调试”或使用快捷键F8来启动调试会话。

在这里插入图片描述

3.3在调试会话中,您可以使用以下调试功能:

3.3.1 设置断点:在您认为可能出错的代码行上设置断点。断点将使程序在执行到该行时暂停。

在有数字的地方点击一次,看见与其他行出现不同变化即可。

在这里插入图片描述

3.3.2 单步执行:使用F7键逐行执行程序。这将允许您逐步查看程序的执行流程。

可以在调试栏中选择下一步,跳过,下一条语句等操作。

在这里插入图片描述

3.3.3 查看变量:在调试会话中,您可以查看变量的当前值。您可以将鼠标悬停在变量上或使用“监视”窗口来查看变量的值。

鼠标选择变量后,点击调试栏中的添加查看,即可在左边“监视”窗口看到变量变化的情况。

在这里插入图片描述

3.3.4 监视表达式:您可以在“监视”窗口中添加表达式,以便在调试会话中查看其值。

和查看变量是一样的操作。

在这里插入图片描述

四、练习

问题一:1225 - 打印空心等腰三角形

从键盘读入一个整数 n ,代表等腰三角形的边长,请输出一个边长为 n 的等腰三角形!
在这里插入图片描述

问题二:1069 - 字符图形5-星号梯形

在这里插入图片描述

问题三:1073 - 沙漏

赵老师最近在编一个操作系统,正好编到鼠标的繁忙状态,需要一个沙漏符号,正好大家都在学C++ ,你的任务就是帮赵老师编一个程序打印一个沙漏符号。

在这里插入图片描述

问题四:1230 - 蝴蝶结

请输出 n 行的蝴蝶结的形状,n 一定是一个奇数!

在这里插入图片描述

问题五:1247 - 打印n行的完整的蝴蝶结

请从键盘读入一个整数 n(1~10 的范围内的奇数),打印出如下图所示的n行的完整的蝴蝶结!
在这里插入图片描述

问题六:1246 - 请输出n行的9*9乘法表

请从键盘读入一个整数 n ,代表有 n 行,输出 n 行的9*9乘法表。
在这里插入图片描述

问题七:1008 - 字符图形9-数字正三角

输入一个整数打印字符图形。

在这里插入图片描述

问题八:1006 - 打印星号三角形

打印星号三角形。
在这里插入图片描述

问题九:1239 - 挑战赛第二题——放大的X

请你编程画一个放大的 X (大写字母)。
在这里插入图片描述

问题十:1353 - 轴对称三角形

在数学上,我们发现有一类图形是对称图形。我们对于左右一样的图形叫做沿 y 轴对称,对于上下一样的图形叫做沿 x 轴对称。
在这里插入图片描述

在这里插入图片描述

五、总结

以上就是利用嵌套循环打印出各种图形的内容,关于这种类型的题目都要从图形入手,根据图形的变化规律按需将图形分割或者不分割。再从中找到数列的规律。

文章来源:https://blog.csdn.net/qq_39180358/article/details/134963230
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。