什么是循环结构?
机器比人类最擅长的就是重复,人类持续做一件没有创造性的工作就会感到疲惫,所以要不断追求创新。
现代的智能工厂里面有各种各样的机器,会按照预先设置好的操作指令,昼夜不停的完成生产加工任务,这个过程就是循环结构。
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语句执行过程
控制台等待输入,假定输入值为 3,赋给 n。
i = 0,小于 3,准备进入 while 循环。
输出一个 '*'。
变量 i 自增。
i = 1,小于 3,进入下一轮循环。
do ... while 循环
do
{
循环体语句;
...
}while(条件表达式);
for 循环
for 和 while 循环控制边量对比
for(控制变量初始化; 循环条件表达式; 增量表达式)
{
循环体语句;
...
}
for 语句执行过程
首先,控制台输入 3,赋值给 n。
循环控制变量 i 初始化为 0。
循环条件,0 < n 成立。
执行循环体,输出一个 '*'。
然后执行增量表达式,i 自增,变为 1。
进入下一轮循环,判断 1 < n。
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)
循环基本问题
计数问题
统计满足某种条件的情况的数量问题。
设计数变量: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;
}
利息与利率
小明爸爸将赚的钱存入银行,年利率 5%。每存满一年,他会将本息和作为本金再存一年。请问 n 年后,小明爸爸账户中有多少钱?
利息 = 本金 *
利率 本息和=本金+利息
最值问题
求 n 个数中的最大值。
设变量 maxv 保存当前已知的最大值,maxv 的初值为给定数字范围的下限(即小于等于所有可能出现的值)
每次循环输入数字 x
如果 x > maxv,那么 maxv = x
例题:输入 n,输入 n 个自然数,求这 n 个数中的最大值。
int main()
{
int n, x, maxv = 0;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> x;
if(x > maxv)
maxv = x;
}
cout << maxv;
return 0;
}
求 n 个数中的最小值。
设变量 minv 保存当前已知的最小值,minv 的初值为给定数字范围的上限(即大于等于所有可能出现的值)
每次循环输入数字 x
如果 x < minv,那么 minv = x
例题:输入 n,输入 n 个 1000 以内的自然数,求这 n 个数中的最小值。
int main()
{
int n, x, minv = 1000;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> x;
// minv = min(minv, x);
if(x < minv)
minv = x;
}
cout << minv;
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 后,按回车,即可结束输入,查看输出。
如果使用在线 IDE,正常填写输入数据就可以,不需要人为终止。