什么是循环结构?
机器比人类最擅长的就是重复,人类持续做一件没有创造性的工作就会感到疲惫,所以要不断追求创新。
现代的智能工厂里面有各种各样的机器,会按照预先设置好的操作指令,昼夜不停的完成生产加工任务,这个过程就是循环结构。
for 循环
for(控制变量初始化; 循环条件表达式; 增量表达式)
{
循环体语句;
...
}
for 语句执行过程
待完善
for 循环常见写法
循环n次,i从0到n-1:for(int i = 0; i < n; i++)
循环n次,i从1到n:for(int i = 1; i <= n; i++)
循环n次,i从n到1:for(int i = n; i >= 1; i``--)
i从a到b: for(int i = a; i <= b; i++)
i每次变化2: for(int i = 1; i <= n; i += 2)
while 循环
for 和 while 循环
控制边量对比
while(条件表达式)
{
循环体语句;
...
}
题目:输入数字n,输出n个*。
int main()
{
int n, i;
cin >> n;
i = 0;
while (i < n)
{
cout << '*';
i++;
}
return 0;
}
i:循环控制变量
i = 0:设i的初始值
i < n:循环进行的条件
i++:每次循环后i的变化
while语句执行过程
待完善
do ... while 循环
do
{
循环体语句;
...
}while(条件表达式);
循环基本问题
计数问题
统计满足某种条件情况的数量问题。
设计数变量:cnt = 0
满足计数条件时 cnt 增加 1:cnt++
最后输出计数数量 cnt
例题:统计 1~n 中 3 的倍数的个数。
int main()
{
int n, cnt = 0;
cin >> n;
for(int i = 1; i <= n; i++)
{
if(i % 3 == 0)
cnt++;
}
cout << cnt;
return 0;
}
累加问题
统计满足某种条件的多个数字累加问题。
设累加器变量:s = 0
当数字x满足条件时,s 增加 x: s += x
最后输出累加器 s
例题:
输入 n,输入 n 个数,求这 n 个数的和。
int main()
{
int n, x, s = 0;
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> x;
s += x;
}
cout << s;
return 0;
}
累乘问题
统计满足某种条件的多个数字相乘的问题。
设表示累乘器的变量:r = 1
当数字x满足条件时,r 乘上 a: r *= x
最后输出累乘器 r
例题:输入 n,输入 n 个数,求这 n 个数的积。
int main()
{
int n, x, r = 1;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> x;
r *= x;
}
cout << r;
return 0;
}
最值问题
求 n 个数中的最大值。
设变量 maxn 保存当前已知的最大值,maxn 的初值为给定数字范围的下限(即小于等于所有可能出现的值)
每次循环输入数字 x
如果 x > maxn,那么 maxn = x
例题:输入 n,输入 n 个自然数,求这 n 个数中的最大值。
int main()
{
int n, x, maxn = 0;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> x;
if(x > maxn)
maxn = x;
}
cout << maxn;
return 0;
}
求 n 个数中的最小值。
设变量 minn 保存当前已知的最小值,minn 的初值为给定数字范围的上限(即大于等于所有可能出现的值)
每次循环输入数字 x
如果 x < minn,那么 minn = x
例题:输入 n,输入 n 个 1000 以内的自然数,求这 n 个数中的最小值。
int main()
{
int n, x, minn = 1000;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> x;
// minn = min(minn, x);
if(x < minn)
minn = x;
}
cout << minn;
return 0;
}
循环嵌套
请输出 n 行 m 列的 *
组成的长方形。
注意:内层、外层循环控制变量必须不同!
for(int i = 1; i <= n; i++)//外层循环,遍历行
{
for(int j = 1; j <= m; j++)//内层循环,遍历列
{
cout << '*' << ' ';
}
cout << endl;
}
循环跳出
continue 重新开始循环
break语句直接跳出当前循环
break语句在循环嵌套中只能跳出1层循环。
return 语句
标志位
标志位为一个布尔型变量,用来表示当前是否处于某一状态。
通常命名为isXXX,意为“是否如何”。
例题:
输入n,输出1~n,逗号分隔。比如,输入4,输出:1,2,3,4
int main()
{
int n;
cin >> n;
bool isFirst = true;
for(int i = 1; i <= n; i++)
{
if(isFirst)
isFirst = false;
else
cout << ',';
cout << i;
}
return 0;
}
while 读入不确定数量的元素
while(cin >> a)
{
//...
}
调试时,如果想结束输入,按 Ctrl+Z,屏幕中出现 ^Z 后,按回车,即可结束输入,查看输出。