前言
本章会详细介绍每种语句和操作符的语法和使用方法,还会通过大量实例和练习题,帮助读者理解如何在实际编程中灵活运用这些工具。无论你是初学者,还是希望在算法竞赛中提升逻辑控制能力的进阶学习者,本章内容都将为你提供宝贵的指导。让我们一起开启这段探索条件判断与循环控制的编程之旅,为你的程序增添更多智能和效率;
6. while循环
C + + \mathsf{C}\substack{++} C++ 中有3种循环语句, while 就是其中一种,接下来就介绍一下 while 语句。
6.1 while语法形式
while 语句的语法结构和 if 语句非常相似,但不同的是 while 是用来实现循环的, if 是无法实现循环的。
下面是 while 循环的语法形式:
//形式1
while ( 表达式 )
语句;
if(表达式)
语句;
//形式2
//如果循环体想包含更多的语句,需要加上⼤括号
while ( 表达式 )
{
语句1;
语句2;
...
}
6.2 执行流程
首先上来就是执行判断表达式,表达式的值为 0 ,循环直接结束;表达式的值不为 0 ,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。
6.3 实践
题目:使用 while 循环在屏幕上打印 1 ∼ 10 \mathtt{1}{\sim}10 1∼10 的值
参考代码:
#include <iostream>
using namespace std;
int main()
{
int i = 1;
while (i <= 10)
{
cout << i << " ";
i = i+1;
}
return 0;
}
6.4 练习
练习1:反向输出每一位
输入一个正的整数,逆序打印这个整数的每一位
例如:
输入:1234,输出:4 3 2 1
输入:521,输出:1 2 5
小提示:
-
要想得到 n 的最低位,可以使用 n % 10 的运算,得到的余数就是最低位,如:1234 % 10 得到4
-
要想去掉n的最低位,找出倒数第二位,则使用 n = n / 10 \texttt{n}=\texttt{n}/\texttt{10} n=n/10 操作就可以去掉最低位的,如: n = 1234 / 1 ⊙ \scriptstyle\mathsf{n}=1234/1\odot n=1234/1⊙ 得到 123 ,123相较于1234就去掉了最低位, 123%10 就得到倒数第二位 3 。
-
循环1和2两个步骤,在 n 变成 0 之前,就能到所有的位。
参考代码:
#include <iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
while (n)
{
cout << n % 10;
n /= 10;
}
return 0;
}
练习2:数位之和
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int ret = 0;
while (n)
{
ret += n % 10;
n /= 10;
}
cout << ret << endl;
return 0;
}
小提示:前面两个题目是相似的,当我们学会做一个题目的时候,要有举一反三的能力,要能将知识和思维迁移。
练习3:求和1
#include <iostream>
using namespace std;
int main() {
int n = 0;
cin >> n;
long long count = 0;
while(n)
{
count += n;
n--;
}
cout << count << endl;
return 0;
}
小提示:
注意数据范围,合理设置变量数据类型, 1 ⩽ n ⩽ 1 0 ∧ 9 1\leqslant{\mathsf{n}}\leqslant10^{\wedge}9 1⩽n⩽10∧9 ,那么求和的结果在int类型的变量中是无法保存的。
练习4:含 k 个 3 的数
#include <iostream>
using namespace std;
int main()
{
long long m = 0;
int k = 0;
int count = 0;
cin >> m >> k;
while(m)
{
if(m % 10 == 3)
{
count++;
}
m /= 10;
}
if(count == k)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
return 0;
}
小提示:
还是数据范围的问题,使用long long 类型是合适的。
练习5:角谷猜想
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
long long n = 0;
cin >> n;
while(n != 1)
{
if( n % 2 == 1)
{
printf("%lld*3+1=%lld\n", n ,n*3 + 1);
n = n*3 + 1;
}
else
{
printf("%lld/2=%lld\n", n, n/2);
n /= 2;
}
}
cout << "End" << endl;
return 0;
}
练习6:计算多项式的值
#include <cmath>
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
float x;
int n;
double sum = 1;
cin >> x >> n;
while(n)
{
sum += pow(x,n);
n--;
}
printf("%.2lf", sum);
return 0;
}
7. for循环
7.1 for循环语法形式
for 循环是三种循环中使用最多的, for 循环的语法形式如下:
//形式1
for(表达式1; 表达式2; 表达式3)
语句;
//形式2
//如果循环体想包含更多的语句,可以加上
⼤括号
for(表达式1; 表达式2; 表达式3)
{
语句1;
语句2;
...
}
表达式1 用于循环变量的初始化;
表达式2 用于循环结束条件的判断;
表达式3 用于循环变量的调整 .
7.2 执行流程
for循环的执行流程
首先执行 表达式1 初始化循环变量,接下来就是执行 表达式2 的判断部分, 表达式2 的结果如果!=0,则循环结束; 表达式2 的结果如果! =0 则执行循环语句,循环语句执行完后,再去执行表达式3 ,调整循环变量,然后再去 表达式2 的地方执行判断, 表达式2 的结果是否为0,决定循环是否继续。
整个循环的过程中, 表达式1 初始化部分只被执行1次,剩下的就是 表达式2 、循环语句、 表达式3在循环。
7.3 实践
练习:使用 for 循环在屏幕上打印1~10的值
参考代码:
//代码1
#include <iostream>
using namespace std;
int main()
{
int i = 0;
for(i = 1; i <= 10; i++)
{
cout << i << " ";
}
return 0;
}
//代码2
#include <iostream>
using namespace std;
int main()
{
for(int i = 1; i <= 10; i++)
{
cout << i << " ";