C++循环结构
一、循环结构
1、while 循环
1.1 语法
while(循环条件){//符合条件执行循环语句;否则退出循环
循环语句//重复执行
}
执行顺序:先判断循环条件,再执行循环语句
1.2 练习题
1.输出66遍 “Hello World”
int a = 1;
while (a <= 66)
{
cout << "第" << a << "遍: Hello World" << endl;
a++;//a++ 是非常重要的,如果去掉的话,a 的值永远保持 1,第二行行中的表达式将永远为 true,则循环就变成了“死循环”,必不可少的。
}
2.水仙花数
求出100~999中的水仙花数(while)
分析:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
例如:1^3 + 5^3+ 3^3 = 153
int num = 100;
while (num < 1000) {
int gw = num % 10;//个位数,对num进行余10,结果为个位数
int sw = num / 10 % 10;//十位数,先将num除以10得到十位和百位,再余10得到十位数
int bw = num / 100;//百位数,除以100 得出百位数
if (gw * gw * gw + sw * sw * sw + bw * bw * bw == num)
{
cout << num << endl;
}
num++;
}
1.3 代码找错
//第一个
int i = 1;//1
while (i <= 66);//2
{
cout << "Hello World" << endl;//3
i++;//4
}
//第二个
int i = 1;//1
while (i <= 66) //2
{
cout << "Hello World" << endl;//3
}
2、do-while 循环
2.1 语法
do{
循环语句
} while(循环条件);
执行顺序:先执行循环语句,再判断循环条件
2.2 练习题
1.输出66遍 “Hello World”
int a = 1;
do
{
cout << "Hello World" << endl;
a++;
} while (a <= 66);
2.水仙花数
求出100~999中的水仙花数(do-while)
分析:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
例如:1^3 + 5^3+ 3^3 = 153
int num = 100;
do
{
int gw = num % 10;//个位数
int sw = num / 10 % 10;//十位数
int bw = num / 100;//百位数
if (gw*gw*gw + sw*sw*sw + bw*bw*bw == num)
{
cout << num << endl;
}
num++;
} while (num < 1000);
3、for 循环
3.1 语法
for(起始表达式;条件表达式;末尾循环体) {
循环语句;
}
3.2 练习题
1.输出66遍 “Hello World”
for (int i = 1; i <= 66; i++)
{
cout << "Hello World" << endl;
}
2.水仙花数
求出100~999中的水仙花数(for)
for (int i = 100; i < 1000; i++)
{
int gw = i % 10;//个位数
int sw = i / 10 % 10;//十位数
int bw = i / 100;//百位数
if (gw * gw * gw + sw * sw * sw + bw * bw * bw == i)
{
cout << i << endl;
}
}
4、三种循环执行顺序
while 和 for 相同,先进行循环条件判断,后执行循语句
do-while 是先执行循语句,后判断循环条件
二、循环嵌套
在二重循环中,外层循环每执行一次,内层循环要执行一圈。
1.输出正方形
for (int i = 1; i <= 6; i++)
{
for (int j = 1; j <= 6; j++)
{
cout << "* ";
}
cout << endl;
}
当外层 i = 1 时,此时, j 从 1 开始,循环 6 次。
接下来返回外层循环 i = 2 ,准备打印下一行,依此类推,直到循环条件不成立
2.输出乘法口诀
一开始不知道怎么输出,可以先将乘法口诀表的九行九列输出
然后只需要更改输出那一行代码:cout << j << “" << i << “=”<<ij<<” ";
被除数第几列,除数是第几行,商i*j
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
//cout << "*";//先构建一个大框架
cout << j << "*" << i << "="<<i*j<<" ";//输出乘法口诀表
}
cout << endl;
}
3.输出平行四边形
for (int i = 1; i <=6; i++)
{
for (int j = 1; j <=6-i ; j++)
{
cout << " ";
}
for (int j = 1; j <=6 ; j++)
{
cout << "*";
}
cout << endl;
}
4.输出数字菱形
int b = 7;
for (int i = 1; i <= b; i++)
{
for (int j = 1; j <=b-i; j++)
{
cout << " ";//输出的空格
}
for (int j = 1; j <= i; j++)
{
cout << j;//正着输出的数
}
for (int j = i-1; j >= 1; j--)
{
cout << j;//倒着输出的数
}
cout << endl;
}
for (int i = 1; i <= b; i++)
{
for (int j = 1; j <= i-1; j++)
{
cout << " ";
}
for (int j = 1; j <= b+1-i; j++)
{
cout << j;
}
for (int j = b-i; j >= 1; j--)
{
cout << j;
}
cout << endl;
}
5.输出空心菱形
int b = 7;
for (int i = 1; i <= b; i++)
{
for (int j = 1; j <= b - i; j++)
{
cout << " ";//输出的空格
}
for (int j = 1; j <= i; j++)
{
if (j == 1) {
cout << j;
}
else {
cout << " ";
}
}
for (int j = i - 1; j >= 1; j--)
{
if (j == 1) {
cout << j;
}
else {
cout << " ";
}
}
cout << endl;
}
for (int i = 1; i <= b; i++)
{
for (int j = 1; j <= i - 1; j++)
{
cout << " ";
}
for (int j = 1; j <= b + 1 - i; j++)
{
if (j == 1) {
cout << j;
}
else {
cout << " ";
}
}
for (int j = b - i; j >= 1; j--)
{
if (j == 1) {
cout << j;
}
else {
cout << " ";
}
}
cout << endl;
}
三、跳转语句
1.break语句
break :跳出循环,
break关键字在 switch 中,可以跳出 switch,在循环中只跳出1层循环。
1.1 在 switch 中
int a = 0;
cout << "请输入你要看的书(1-4):1 三国演义,2 红楼梦,3 西游记,4 水浒传" << endl;
cin >> a;
switch (a)
{
case 1:
cout << "看三国演义" << endl;
break;
case 2:
cout << "看红楼梦" << endl;
break;
case 3:
cout << "看西游记" << endl;
break;
case 4:
cout << "看水浒传" << endl;
break;
default:
cout << "请输入正确的编号!" << endl;
break;
}
如下图:满足条件,break直接跳出switch
1.2 在循环中
for (int i = 1; i <= 20; i++)
{
for (int j = 1; j <= 20; j++)
{
if (j == 10)
{
break;
}
else {
cout << j << " ";
}
}
cout << endl;
}
break在循环中只跳出1层循环。
如下图所示,第二层循环小于等于20,等于10的时候跳出,只是跳出本层循环,外层循环接着执行。
2.continue语句
continue,跳出本次循环,继续下一次循环。
for (int i = 1; i <= 20; i++)
{
for (int j = 1; j <= 20; j++)
{
if (j % 2 == 0)
{
continue;
}
else {
cout << j << " ";
}
}
cout << endl;
}
continue不会使循环终止,而是将满足条件的跳过,继续向下执行。图中条件是余2跳出,右边控制台部分没有显示余2为零的数。
3. goto语句
goto:无条件转移语句
语法: goto 语句标号;(命名规则和标识符的命名规则与变量名称相同)
执行goto语句后,程序就会跳转到语句标号处,并接着执行其后的语句。
cout << "A" << endl;
cout << "B" << endl;
goto FLAG;
cout << "C" << endl;
cout << "D" << endl;
FLAG:
cout << "E" << endl;
执行结果: