
前面已对对逻辑操作符、switch 语句、while 语句的详细讲解,不知各位是否能够熟练的掌握。接下来将对 for 循环、do - while 循环、break 和 contunue 语句,以及非常重要的循环嵌套进行讲解、分析和练习。希望这篇文章能够帮助每一位算法竞赛的前行者,更好的了解条件判断与循环。
for循环是三种循环中使用最多的,for循环的语法形式如下:
//形式1
for(表达式1; 表达式2; 表达式3)
语句; //形式2
//如果循环体想包含更多的语句,可以加上
大括号
for(表达式1; 表达式2; 表达式3)
{
语句1;
语句2;
...
}表达式1:用于循环变量的初始化 表达式2:用于循环结束条件的判断 表达式3:用于循环变量的调整

首先执行表达式 1 初始化循环变量,接下来就是执行表达式 2 的判断部分,表达式 2 的结果如果 ==0,则循环结束;表达式2的结果如果 !=0 则执行循环语句,循环语句执行完后,再去执行表达式 3 ,调整循环变量,然后再去表达式2的地方执行判断,表达式 2的结果是否为0,决定循环是否继续。
整个循环的过程中,表达式 1 初始化部分只被执行 1 次,剩下的就是表达式 2、循环语句、表达式 3 在循环。
练习:使用 for 循环在屏幕上打印 1~10 的值
参考代码:
//代码1
#include <iostream>
using namespace std;
int main()
{
int n;
for(n = 1; n <= 10; n++)
{
cout << n << " ";
}
return 0;
} //代码2
#include <iostream>
using namespace std;
int main()
{
for(int n = 1; n <= 10; n++)
{
cout << n << " ";
}
return 0;
} 运行结果:

提示: 上面两种代码的差异是,代码 1 中 for 循环结束后,i的值还可以继续使用;但是代码 2 中 for 循环的外边是不能使用的,i 只能在 for 循环中使用。

for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部分非常集中,便于代码的维护,而如果代码较多的时候 while 循环的三个部分就比较分散,所以从形式上 for 循环要更优一些。
计算 1~100 之间 3 的倍数的数字之和
参考代码:
#include <iostream>
using namespace std;
int main()
{
int i = 0;
int sum = 0;
for(i = 1; i <= 100; i++)
{
if(n % 3 == 0)
{
sum += i;
}
}
cout << sum <<endl;
return 0;
} 这里由于产生的数比较多,计算运算时间比较长,我们可以小小的优化一下,直接生成 3 的倍数。
#include <iostream>
using namespace std;
int main()
{
int i = 0;
int sum = 0;
for(i = 3; i <= 100; i += 3)
{
if(i % 3 == 0)
{
sum += i;
}
}
cout << sum <<endl;
return 0;
} 参考代码:
#include <iostream>
using namespace std;
int main()
{
int n;
int age = 0;
int sum = 0;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> age;
sum += age;
}
printf("%.2lf\n", sum * 1.0 / n);
return 0;
} 参考代码:
#include <iostream>
using namespace std;
int n, p1, p2, p3, sum, a, b, c;
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> a >> b >> c;
p1 += a;
p2 += b;
p3 += c;
}
sum = p1 + p2 + p3;
cout << p1 << " " << p2 << " " << p3 << " "<< sum << endl;
return 0;
}错误演示:

这些题可以自行先试一试做做,后面会集中讲解
在循环语句中do while语句的使用最少,它的语法如下:
//形式1
do
语句;
while( 表达式 );//形式2
do
{
语句1;
语句2;
...
}
while( 表达式 );while 和 for 这两种循环都是先判断,条件如果满足就进入循环,再执行循环语句,如果不满足就跳出循环;
而 do while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。

在 do while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的结果是 !=0,则继续循环,执行循环语句;判断表达式的结果 ==0,则循环结束。
所以在 do while 语句中循环体是至少执行一次的,这是 do while 循环比较特殊的地方。
使用do while循环在屏幕上打印1~10的值
#include <iostream>
using namespace std;
int main()
{
int i = 1;
do
{
cout << i << " ";
i = i + 1;
} while (i <= 10);
return 0;
}
输入一个正整数,计算这个整数是几位数?
例如: 输入:1234 输出:4 输入:123 输出:3
参考代码:
#include <iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
int count = 0;
do
{
n = n / 10;
count++;
}while(n);
cout << count << endl;
return 0;
} 该题可以自己研究研究,后续会讲。
#include <iostream>
using namespace std;
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
{
break;
}
cout << i << " ";
i++;
}
return 0;
} #include <iostream>
using namespace std;
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
{
break;
}
cout << i << " ";
}
return 0;
} #include <iostream>
using namespace std;
int main()
{
int i = 1;
do
{
if(i == 5)
{
break;
}
cout << i << " ";
i++;
}while(i<=10);
return 0;
}演示结果:

最终打印的都为:1 2 3 4。
打印了 1,2,3,4 后,当 i 等于 5 的时候,循环正 break 的地方终止,不再打印,不再循环。所以 break 的作用就是永久的终止循环,只要 break 被执行,break 外的第一层循环就终止了。那以后我们在循环中,想在某种条件下终止循环,则可以使用 break 来完成我们想要的效果。
continue 是继续的意思,在循环中的作用就是跳过本次循环中 continue 后边的代码,继续往下执行。
上面的代码,如果把break换成continue会是什么结果呢?
while
#include <iostream>
using namespace std;
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
{
continue;
}
cout << i << " ";
i++;
}
return 0;
} 演示结果:

for
#include <iostream>
using namespace std;
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
{
continue;
}
cout << i << " ";
}
return 0;
} 演示结果:

do-while
#include <iostream>
using namespace std;
int main()
{
int i = 1;
do
{
if(i == 5)
{
continue;
}
cout << i << " ";
i++;
}while(i<=10);
return 0;
}演示结果:

到这里我们就能分析出来,continue 可以帮助我们跳过某一次循环 continue 后边的代码,直接到循环的判断部分,进行下一次循环的判断,如果循环的调整是在 continue后边的话,可能会造成死循环。
在 for 循环中,continue 跳过本次循环中 continue 后边的代码,接下来执行的是 i++,在这里循环变量得到了调整,就没有造成死循环,所以 continue 在 while 循环,do-while 和 for 循环中略有差异。
练习:质因数分解
解析:首先要了解什么是质数,质数是只能被 1 和它本身整除的数字,也就是质数只有 2 个因子,就是 1 和它本身。所以假设 n 有两个质数的因子,首先就是 n = m1 * m2,m1 和 m2 是两个质数因子。m1 和 m2 是质数的话,就说明没有除了 1 和它本身的因子,所以 n 的因子也只能是1、m1、m2 和 n,所以我们只需要找出 2~n-1(不包含 1 和 n)之间较小的因子 m1,则 m2 = n / m1。
参考代码:
#include <iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
for(int i=2; i<n; i++)
{
if(n%i == 0)
{
cout << n / i << endl;
break;
}
}
return 0;
} 前面学习了三种循环while,do while,for,这三种循环往往会嵌套在一起才能更好的解决问题,就是我们所说的:循环嵌套。这三种循环都可以任意嵌套使用,这里我们通过一个示例来了解循环嵌套。
比如:写一个代码,打印一个乘法口诀表

参考代码:
#include <iostream>
using namespace std;
int main()
{
for(int i=1; i<10; i++)
{
for(int j=1; j<=i; j++)
{
printf("%d*%d=%2d ", i, j, i*j);
}
cout << endl;
}
return 0;
}演示结果:

参考上面的就行
参考代码:
#include <iostream>
using namespace std;
int main()
{
int i = 0;
int count = 0;
for(i = 1; i <= 2019; i++)
{
int n = i;
while(n)
{
if(n%10 == 9)
{
count++;
break;
}
n /= 10;
}
}
cout << count <<endl;
}#include<iostream>
using namespace std;
int main()
{
int n;
int a;
cin >> n;
while(n--)
{
cin >> a;
int x = 1;
int y = 1;
int z = 1;
while(a > 2)
{
z = x + y;
x = y;
y = z;
a--;
}
cout << z << endl;
}
return 0;
} #include <iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
int i = 1;
double e = 1;
while (i <= n)
{
int j = 0;
long long fac = 1;
for (j = 1; j <= i; j++)
{
fac *= j;
}
e += 1.0 / fac;
i++;
}
printf("%.10lf\n", e);
return 0;
}这些题可以先练练手,后期会讲。
好了,条件判断与循环如今已经结束,希望能给各位带来帮助,能够更好的了解并使用它,接下来我们将会对数组进行详细的探讨。
同时愿诸君能一起共渡重重浪,终见缛彩遥分地,繁光远缀天。