【C++】C++程序结构入门之循环结构四
前言
本章节作为循环结构三的补充,继续讲解嵌套循环图形的相关题目。
学习路线: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.分析问题
- 已知:一个整数
- 未知:图形
- 关系:数列规律
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.分析问题
- 已知:一个整数
- 未知:图形
- 关系:数列规律
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.分析问题
- 已知:一个整数
- 未知:图形
- 关系:数列规律
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.分析问题
- 已知:一个整数
- 未知:图形
- 关系:数列规律
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 轴对称。
五、总结
以上就是利用嵌套循环打印出各种图形的内容,关于这种类型的题目都要从图形入手,根据图形的变化规律按需将图形分割或者不分割。再从中找到数列的规律。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!