内容正文:
CCF-GESP C++二级
CCF-GESP C++二级
编程能力等级认证
1
多层循环1
多层循环1
第九课
本次课学习的内容为多层循环
2
多层循环的嵌套
01
01
首先我们来学习多层循环的嵌套
3
循环的嵌套
循环体里包含循环语句的结构叫做循环的嵌套
for(int i=1; i<=3; i++){
for(int j=1; j<=2; j++){
cout<<i<<" "<<j<<endl; }
}
外层循环
内层循环
双层for循环的嵌套
知识讲解
在我们要解决的问题比较复杂的情况下,使用简单的循环可能无法解决实际的问题,这个时候可能就会用到多层循环的嵌套。循环的语句可以嵌套,循环体里包含循环语句的结构叫做循环的嵌套。例如:现在展示的代码,就是一个外层for循环中又包含了另外一个for循环,我们一般称其为双层for循环的嵌套。我们将嵌套在循环体内的循环称为内层循环,外面的循环则称为外层循环。现在展示的这个双层for循环,它的执行流程是怎样的呢?
4
双层for循环嵌套的执行流程
for(int i=1; i<=3; i++){
for(int j=1; j<=2; j++){
cout<<i<<" "<<j<<endl; }
}
开始
int i=1
i<=3?
是
int j=1
j<=2?
输出 i 和 j 的值
j++
i++
否
是
输出
1 1
1 2
2 1
2 2
3 1
3 2
循环次数:3×2=6
结束
否
知识讲解
下面来分析双层for循环的执行流程:
程序一开始,先执行外层循环,循环变量i的初始值为1,之后判断循环条件i<=3是否成立,成立则执行该循环的循环体,此时进入内层循环,循环变量j的初始值为1,之后判断循环条件j<=2是否成立,成立则输出i和j的值,分别是1和1。再继续执行j++,j的值变为2。继续判断j<=2是否成立,成立则继续输出i和j,之后令j++,j的值变为3。此时j<=2不成立,内层循环结束,回到外层循环,令i++,i的值变为2,继续判断i<=3是否成立,成立则执行循环体,又进入内层循环....重复上面的步骤,直到i<=3不成立,此时整个程序结束。
思考一下:这个双层for循环,一共循环了多少次呢?很检查,可以查看输出了多少次,一共输出了6次。如果计算出6次呢,我们可以使用外层循环次数×内层循环次数,也就是3×2,计算的结果为6。
5
双层循环嵌套的几种形式
for while do while
for for( ){
for( ){
}
} while( ){
for( ){
}
} do{
for( ){
}
}while( )
while for( ){
while( ){
}
} while( ){
while( ){
}
} do{
while( ){
}
}while( )
do
while for( ){
do{
}while( )
} while( ){
do{
}while( )
} do{
do{
}while( )
}while( )
知识讲解
目前我们学习了三种循环的语句:for语句、while语句和do...while语句,这三种循环语句不但可以嵌套循环语句自身,而且还可以相互嵌套。它们可以可以互相嵌套自由组合。例如:for循环中可以嵌套for循环,while循环和do while循环。while循环中也能嵌套for循环,while循环,do while循环。do while循环中也可以嵌套for循环,while循环或者do while循环。当我们解决问题用到嵌套结构时,可以结合实际情况进行选择。
6
判断题
下列程序中,语句1执行了5次,语句2执行了6次。
正确 错误
int i=5,j=0;
for(; i>=0; i--){
cout<<'*';
for(; j<=6; j++){
cout<<'#';
}
}
语句1
语句2
课堂练习
解析:外层for循环i的初始值为5,循环条件为i>=0,循环步伐为i--,因此外层循环的循环次数为6次。语句1执行了6次。内层for循环j的初始值为0,循环条件为j<=6,循环步伐为j++。因此外层循环的循环次数为7次,语句2执行了7次。因此题目中的说法是错误的。
7
选择题
以下程序段中循环体的总次数是( )。
20
25
24
30
A
for(int i=1; i<=5; i++){
for(int j=1; j<=4; j++){
cout<<i+j;
}
}
课堂练习
解析:外层循环,循环的次数为5次,内层循环,循环的次数为4次,循环体的总的执行次数:外层循环次数×内层循环次数,共为20次。因此本题应该选择A选项。
8
多层循环嵌套输出图形
02
02
刚才我们学习了循环的嵌套,现在我们来了解一下多层循环嵌套主要的一个应用:输出图形。
9
输出n行m列矩形
*****
*****
*****
3行5列矩阵
//外层循环
for(int i=1; i<=3; i++){
//内层循环
for(int j=1; j<=5; j++){
cout<<"*";
}
cout<<endl;
}
控制列
控制行
知识讲解
我们经常会使用循环嵌套输出一些多行多列的图形,比较常见的就是输出一个多行多列的矩形:
这里我们先来看如何使用循环嵌套输出n行m列的矩形。例如:使用双层for循环输出如下3行5列,由*组成的矩形。我们首先可以先利用一个for循环输出一行的5个星号,就是循环5次,每次输出一个星号。之后添加一个换行,与其他行进行分隔。矩形由三行组成,因此可以将该for循环和输出换行的代码重复执行3次,也就是将他们在放入另外一个for循环中,将该循环的循环次数设置为3次。这样就可以利用双层for循环输出n行m列的矩形了。
我们来分析一下这个双层for循环,其中循环体中的for循环为内层for循环,循环次数为5次,代表5列,外部的循环是外层for循环,循环次数为3次,代表3行。我们会发现,外层循环控制的是矩形的行,内层循环控制的是矩形的列。这就是输出n行m列矩阵的代码模版。现在我们是以输出n行m列由*组成的矩形为例,之后还可能遇到一些输出数字矩形,字母矩形的问题等等,当遇到此类问题的时候将输出的内容替换成数字或者字母就可以了。
10
输出n行直角三角形
*
**
***
****
*****
//外层循环
for(int i=1; i<=5; i++){
//内层循环
for(int j=1; j<=i; j++){
cout<<"*";
}
cout<<endl;
}
5行
直角三角形
控制行
控制列
i 和 j 相关联!!!
知识讲解
除了输出矩形之外,我们还会经常遇到输出三角形的问题。
输出三角形和输出矩形的问题类似,都是多行多列的图形。这里以输出5行直角三角形为例,因此我们依旧可以使用双层for循环解决这个问题,外层循环控制行,内层循环控制列。这个三角形为5行,因此外层循环应该循环5次。因此外层循环的条件是i<=5。我们需要思考的是内层循环应该怎么写。想要解决这个问题需要找到行列之间的关系。行列之间的关系就是j的值小于等于i。
例如:第一行有1个星号,j的计数范围就是1~1也就是1,第二行有两个,j的计数范围就是1~2;第三行有三个,j的计数范围就是1~3;第四行是4个,j的计数范围就是1~4;第5行是5个,j的计数范围就是1~5。j的值从1开始,结束的值刚好跟对应的i值相等。因此j的范围应该是1~i。因此内层循环,循环的条件应该为j<=i。这就是输出n行直角三角形的代码模版。除了输出符号组成的三角形之外,题目还可能会要求输出数字三角形,字母三角形等。遇到这类要求的时候,也是将输出的内容进行替换就可以了。
11
输出n行等腰直角三角形
等腰三角形
*
***
*****
*******
*********
5行
for(int i=1; i<=5; i++){
for(int j=1; j<=5-i; j++)
cout<<' ';
for(int k=1; k<=2*i-1; k++)
cout<<"*";
cout<<endl;
}
控制行
控制列
输出空格
输出星号
知识讲解
除了输出直角三角形之外,我们还可以使用双层for循环输出等腰三角形:
这里以输出5行等腰三角形为例,依然是外层循环控制行,内层循环控制列。这个三角形为5行,因此外层循环应该循环5次。因此外层循环的条件是i<=5。我们需要思考的是内层循环应该怎么写。
等腰三角形的每一行分两部分输出,一部分输出空格,另外一部分输出星号,因此内层需要写2个for循环,第一个for循环先输出空格,第二个for循环紧接着输出星号。输出空格。先分析第一个for循环,输出空格,循环的次数就是输出空格的个数。第一行输出4个,第二行输出3个,第三行输出2个,第四行输出1个,最后一行不输出空格。所以每行输出空格的个数就是5-i。因此第一个for循环的循环次数就是5-i。第二个for循环控制星号,第一行1个星号,第二行3个,第三行5个,第四行7个,第五行9个,所以每行输出的星号的个数就是2*i-1。因此第二个for循环的循环次数就是2*i-1。我们需要将等腰三角形呈行列形式呈现,因此需要在内层for循环执行完成之后,输出endl进行换行。
这就是输出n行等腰三角形的代码模版。可以将输出内容替换成数字或者字母,形成数字三角形或者字母三角形。
12
选择题
(2023年9月)如下图所示,输出 N 行 N 列的矩阵,对角线为1,
横线处应填入( )。
int N=0;
cout<<"请输入行列数量:";
cin>>N;
for(int i=1; i<N+1; i++){
for(int j=1; j<N+1; j++)
if(_______)//在此处填写代码
cout<<1<<" ";
else
cout<<0<<" ";
cout<<endl;
}
i=j
i!=j
i>=j
i==j
D
请输入行列数量:9
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1
真题解析
解析:目前该题目中要求数字1全部在主对角线上。主对角线上的数字,行号和列号相同。因此if语句的判断条件就是行号和列号是否相等,如果相等,输出1,否则输出0。外层循环控制行,循环变量i代表行号,内层循环控制列,循环变量j代表列号,循环条件即为:i==j。因此本题正确的选项为D。
13
题目解析
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
主对角线
1 2 3 4 5
1
2
3
4
5
主对角线上的元素位置:i==j
行(i)
列(j)
主对角线:连接左上角和右下角的一条线。
5行5列矩阵:
int N=0;
cout<<"请输入行列数量:";
cin>>N;
for(int i=1; i<N+1; i++){
for(int j=1; j<N+1; j++)
if(____________)//在此处填写代码
cout<<1<<" ";
else
cout<<0<<" ";
cout<<endl;
}
i==j
真题解析
这道题目涉及到了N行N列矩阵主对角线的问题,我们来详细讲解一下有关于n行n列矩阵主对角线的问题:
连接N行N列矩阵左上角到右下角的一条线叫作主对角线,观察主对角线上的每个数字的位置:1行1列,2行2列,3行3列....,这些的元素的位置都有一个特点,就是行号与列号相同。因此主对角线上的元素都满足行号等于列号。本题当中,i代表行号,j代表列号,因此在主对角线上的元素位置满足i==j这个条件。题目要求:在主对角线上输出的数字为1,因此当判断i==j条件成立时,输出1,否则输出0。所以横线处的代码应该填写为i==j,所以本题的正确答案为D。
14
选择题
(2023年9月)下面图形每一行从字母A开始,以ABC方式重复。行数为输入的整数。请在C++代码段横线处填入合适代码( )。
'A' + j/3
(char)('A'+j/3)
'A'+j%3
(char)('A'+j%3)
int N=0;
cout<<"请输入行列数量:";
cin>>N;
for(int i=1; i<N+1; i++){
for(int j=0; j<i; j++)
cout<<_________; //此处填写代码
cout<<endl;
}
请输入字母行数:7
A
AB
ABC
ABCA
ABCAB
ABCABC
ABCABCA
D
真题解析
本题的正确选项为D,详见下一页题目解析。
15
题目解析
for(int i=1; i<N+1; i++){
for(int j=0; j<i; j++)
cout<<____________________; //此处填写代码
cout<<endl;
}
A
A B
A B C
A B C A
A B C A B
A B C A B C
A B C A B C A
0
1
2
3
4
5
6
循环变量j 输出字母
0 'A'
1 'B'
2 'C'
3 'A'
4 'B'
5 'C'
6 'A'
7 ...
'A'+0
'A'+1
'A'+2
'A'+0
'A'+1
'A'+2
'A'+0
...
'A'+j%3
整数
(char)('A'+j%3)
字符
7行
j%3
真题解析
题目分析:
首先观察这个双层for循环,想要输出的是一个字母组成的直角三角形,外层循环遍历行,从第1行~N行,内层循环遍历列,注意循环变量j的值是从0开始的,也就是列号是从0开始。
举例:以一个7行的直角三角形为例,列号从0开始。我们会发现每列输出的内容都是相同的。第0列输出内容均为A,第1列输出的内容都是B,第2列输出的内容都是C,第三列输出的内容又全都是A,依次类推... 不断重复输出ABC。如何实现循环输出呢?A可以直接输出,B可以令A+1,C则令A+2...不断重复这个过程,每次A加的数字可以使用j%3来表示。因此我们可以使用A+j%3表示当前要输出的字母。但是字母和整数做运算,得到的结果还是整数。所以我们需要使用char()将计算出来的整数转为字符。
16
总结规律
当字母到C之后,重新从A开始:A B C A B C A B C
当字母到L之后,重新从A开始:A B C D E F G H I J K L A B C...
当字母到Z之后,重新从A开始:A B C D E F G H I ... Y Z A B C …
cout<<'A'+j%3<<" ";
cout<< 'A'+j%12<<" ";
cout<< 'A'+j%26<<" ";
真题解析
总结规律
17
选择题
(2023年9月)输入行数,约定1≤lineCount≤9,输出以下图形。应在C++代码横线处填入( )。
(lineCount - i - 1) * 2
(lineCount - i) * 2
lineCount - i – 1
lineCount - i
int lineCount=0;
cout<<"请输入行数量:";
cin>>lineCount;
for(int i=0; i<lineCount; i++){
for(int j=0; j<_________; j++)
cout<<' ';
for(int j=1; j<i+1; j++)
cout<<j<<" ";
for(int j=i+1; j>0; j--)
cout<<j<<" ";
cout<<endl;
}
请输入行数量:9
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 6 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
A
真题解析
本题的正确选项为A,详见下一页题目解析。
18
题目解析
int lineCount=0;
cout<<"请输入行数量:";
cin>>lineCount;
for(int i=0; i<lineCount; i++){
for(int j=0; j<_________; j++)
cout<<' ';
for(int j=1; j<i+1; j++)
cout<<j<<" ";
for(int j=i+1; j>0; j--)
cout<<j<<" ";
cout<<endl;
}
输出左侧的空格
输出数字和数字之间的空格
lineCount=5
i=0
i=1
i=2
i=3
i=4
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
j<8
j<6
j<4
j<2
j<0
第一个内层循环的条件:
循环次数=空格数
真题解析
题目解析:
首先观察这个程序,多层循环嵌套,输出一个数字三角形。外层for循环一定是控制行,内层for循环控制每列输出。我们通过观察可以发现,这三个内层for循环输出的内容不同,第一个for循环输出的内容为空格,这就是数字三角形左侧的空格。它的循环次数就是左侧输出的空格数。第二个和第三个三角形输出的都是变量j的值和一个空格,也就是输出数字和数字之间的空格。题目挖空的位置是第一个for循环的循环条件。这个循环控制的就是输出空格的个数。因此我们来分析,每行输出多少个空格。输出左侧空格的循环条件是什么?
例如:当lineCount=5时,我们应该输出如下数字三角形,注意外层循环和循环变量都是从0开始的。这里我从最后一行开始分析,这行数字顶头,所需要输出空格,所以输出左侧空格循环肯定是不执行的,这个循环的循环变量j=0,所以可以将循环条件写成j<0。继续分析上面一行,i=3,此时左侧需要输出两个空格。因此循环的条件应该是j<2,循环2次,每次输出一个空格。继续分析当i=2的时候应该输出4个空格,循环条件应该是j<4。当i=1的时候,需要输出6个空格,循环条件是j<6。当i=0的时候,左侧应该输出8个空格,循环条件为j<8。
19
题目解析
i 第一个内层循环的条件
0 j<8
1 j<6
2 j<4
3 j<2
4 j<0
A.(lineCount-i-1)*2
B.(lineCount- i)*2
C.lineCount-i–1
D.lineCount-i
8
6
4
2
0
10
8
6
4
2
4
3
2
1
0
5
4
3
2
1
lineCount=5
分析四个选项,带入具体数值:
for(int j=0; j<_______; j++)
cout<<' ';
真题解析
题目分析:
我们现在就可以罗列出四个选项,已知当前举例子的lineCount=5,我们可以计算当i取不同值的时候,哪个选项满足第一个内层循环的条件。我们会发现选项A是完全满足的。
20
选择题
(2023年9月)下面C++代码执行后的输出是( )。
16 B. 28 C. 35 D. 36
A
int cnt=0;
for(int i=1; i<9; i++)
for(int j=1; j<i; j+=2)
cnt+=1;
cout<<cnt;
真题解析
本题的正确选项为A,详见下一页题目解析。
21
题目解析
int cnt=0;
for(int i=1; i<9; i++)
for(int j=1; j<i; j+=2)
cnt+=1;
cout<<cnt;
i j
1
2 1
3 1
4 1、3
5 1、3
6 1、3、5
7 1、3、5
8 1、3、5、7
循环总次数:16
统计循环总次数
真题解析
题目解析:
我们来分析一下这个程序的执行流程。当外层循环i=1时,内层循环的循环条件为j<1,此时循环条件不成立,不执行内层循环。当外层循环i=2时,内层循环的值可以取1,此时cnt的值为1。当外层循环i=3时,内层循环j的取值为1,执行到这cnt的值为2。逐一分析,直到程序执行结束,cnt的值为16。
22
(2023年9月)小杨的X矩阵
【问题描述】
小杨想要构造一个N×N的 X 字矩阵(N为奇数),这个矩阵的两条对角线都是半角加号 + ,其余都是半角减号 - 。例如,一个5×5 的 X 字矩阵如下:
+---+
-+-+-
--+--
-+-+-
+---+
请你帮小杨根据给定的N打印出对应的“X 字矩阵”。
【输入描述】
一行一个整数N(5≤N≤49,保证N为奇数)。
【输出描述】
输出对应的“X 字矩阵”。
请严格按格式要求输出,不要擅自添加空格、标点、空行等任何符号。你应该恰好输出N行,每行除了换行符外恰好包含N个字符,这些字符要么是 + ,要么是 - 。
真题解析
讲师分析题目,注意强调N为奇数。
23
思路分析
【输入样例1】
5
【输出样例1】
+---+
-+-+-
--+--
-+-+-
+---+
【输入样例2】
7
【输出样例2】
+-----+
-+---+-
--+-+--
---+---
--+-+--
-+---+-
+-----+
副对角线
主对角线
副对角线
主对角线
真题解析
分析样例数据。
24
思路分析
输入矩阵的行列数n。
int n;
cin >> n;
循环输出n*n矩阵。
for (int i=1; i<=n; i++) {
for (int j=1; j<=n; j++) {
}
cout << endl;
}
主对角线和副对角线上输出'+'
其余输出'-'
+---+
-+-+-
--+--
-+-+-
+---+
副对角线
主对角线
真题解析
题目分析:
1、输入矩阵的行列输保存在变量n中
2、循环输出n×n矩阵,这个矩阵也是一个多行多列的图形,可以使用双层for循环完成,由于行列数相同,因此无论是内层循环还是外层循环都是循环n次。在循环中需要输出两种符号,+和-。
题目已知在n×n矩阵的主对角线和副对角线上是+,其余位置是-。因此在双层for循环中需要判断,对角线和副对角线输出+,否则输出-。注意内层for循环输出一行内容之后,要输出一个换行。
25
n × n矩阵对角线
+ - - - +
- + - + -
- - + - -
- + - + -
+ - - - +
副对角线
主对角线
1 2 3 4 5
1
2
3
4
5
主对角线上的元素位置:i==j
副对角线上的元素位置:i+j==n+1
行(i)
列(j)
5行5列矩阵:
主对角线:连接左上角和右下角的一条线。
副对角线:连接右上角和左下角的一条线。
真题解析
题目分析:
这道题目涉及到了N行N列矩阵对角线的问题,我们来详细讲解一下有关于n行n列矩阵对角线的问题:
n行n列的矩阵有两条对角线,对角线上的元素位置是有规律的。
连接N行N列矩阵左上角到右下角的一条线叫作主对角线,观察主对角线上的每个数字的位置:1行1列,2行2列,3行3列....,这些的元素的位置都有一个特点,就是行号与列号相同。因此主对角线上的元素都满足行号等于列号。
另外连接N行N列矩阵右下角到左下角的一条线叫作副对角线,副对角线上的数字的位置也存在一个规律,就是行号+列号等于n+1。可以来验证一下:1行5列的数字位于副对角线上,行号+列号的结果等于5+1。2行4列的数字也在副对角线上,行号+列号的结果也等于5+1。可以验证得出:副对角线上的元素位置,满足行号+列号等于n+1。
在使用双层for输出n行n列矩阵时,经常会考查到对角线的知识点,所以要记住n×n矩阵两条对角线上的元素位置特点。
根据主对角线和副对角线上的元素位置特点,我们可以进行如下判断。
26
主对角线和副对角线上输出'+'
其余输出'-'
思路分析
循环输出n*n矩阵。
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
}
cout << endl;
}
if (i == j || i + j == n + 1)
cout << "+";
else
cout << "-";
+ - - - +
- + - + -
- - + - -
- + - + -
+ - - - +
副对角线
主对角线
主对角线上的元素位置:i==j
副对角线上的元素位置:i+j==n+1
真题解析
题目分析:
如果满足行号等于列号 或者 行号+列号的和等于n+1,只要满足两个条件其中之一,就输出+,否则输出-。
27
【完整代码】
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i == j || i + j == n + 1) cout << "+";
else cout << "-";
}
cout << endl;
}
return 0;
}
真题解析
完整代码
28
(2023年3月)画三角形
【问题描述】
输入一个正整数 n,请使用大写字母拼成一个这样的三角形图案(参考输入输出样例):
三角形图案的第 1 行有 1 个字母,第 2 行有 2 个字母,以此类推; 在三角形图案中,由上至下、由左至右依次由大写字母 A-Z 填充,每次使用大写字母 Z 填充后,将从头使用大写字母 A 填充。
【输入描述】
输入一行,包含一个正整数 n。约定 2≤n≤40。
【输出描述】
输出符合要求的三角形图案。注意每行三角形图案的右侧不要有多余的空格。
【输入样例1】
3
【输出样例1】
A
BC
DEF
【输入样例2】
7
【输出样例2】
A
BC
DEF
GHIJ
KLMNO
PQRSTU
VWXYZAB
真题解析
讲师读题
29
思路分析
输入一个正整数n。
int n;
cin >> n;
循环输出字母三角形。
for (int i=1; ________; i++) {
for (int j=1; ________; j++) {
}
cout << endl;
}
行
列
输出字母
A
B C
D E F
G H I J
K L M N O
P Q R S T U
V W X Y Z A B
1
2
3
4
5
...
n
1
2
3
4
5
...
n
i<=n
j<=i
真题解析
题目分析:
1、输入一个正整数代表三角形的行数n
2、循环输出字母三角形,字母三角形也是多行多列的图形,我们依然可以使用双层for循环来进行输出,输出的时候外层循环控制行,内层循环控制列,每次循环都输出一个字母。三角形的行数是确定的是n行,因此外层循环的循环次数就是n次,循环条件为i<=n。内层循环控制列数,这个直角三角形,每行中,列号从1开始,最后一个列号与行号相等。因此内层循环的循环条件为j<=i。
接下来我们来分析如何输出字母。
30
分析如何循环输出大写字母
A
B C
D E F
G H I J
K L M N O
P Q R S T U
V W X Y Z A B
1
2
3
4
5
...
n
1
2
3
4
5
...
n
行( i )
列( j )
当字母到Z之后,重新从A开始
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++){
}
cout << endl;
}
输出字母
char c = 'A';
cout << c;
c++;
if(c>'Z') c='A';
从A开始
真题解析
题目分析:
首先明确,我们要输出的是大写字母,从A开始,因此我们可以现在程序中创建一个char类型的变量保存每次输出的字母。最开始要输出的是字母A,我们就可以将该变量的初始值设置为A。在内层循环中输出该变量,之后令该变量++,就可以将该变量的值变为下一次要输出的字母。例如:输出字母A后,令c++,此时c的值将会变为B,下一次输出的就是B。不断重复这个过程,直到输出的内容为Z,当字母大于Z时,应该重新从A开始。所以在程序中,如果c++之后的值大于Z,那么我们需要将该变量的值重置为A。再依次输出A-Z。
31
【完整代码】
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
char c = 'A';
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++){
cout<<c;
c++;
if(c>'Z') c='A';
}
cout << endl;
}
return 0;
}
真题解析
完整代码
32
感谢你的学习
33
$$