循环结构
while
当表达式为真时才回去执行while语句
c
while(表达式){
语句1;
语句2;
语句3;
...
语句n;
}
WARNING
问以下case会执行多少次?
c
int k = 0;
while(k=1) k++;
无限次
do...while语句
与while语句不同的是,它会首先执行一次
c
do {
语句1;
语句2;
语句3;
...
语句n;
} while(表达式)
for循环
c
for(赋值语句;条件语句;更新值){
循环体
}
执行步骤:
- 赋值语句
- 判断是否符合条件
- 执行循环体
- 更新值(更新操作在每次循环的末尾)
变异情况
- 没有条件语句
c
for(赋值语句;;更新值){
循环体
}
效果等价于while(true)
或者while(1)
- 赋值语句放在外部,更新值操作放在循环体内部
c
赋值语句;
for(;条件语句;){
循环体;
更新值;
}
for循环与while语句的转化
break与continue
break:终止当前循环,例如:在多层循环中只跳出当前层循环
continue:跳过本次循环
测试题
- 求出所有的水仙花数,水仙花数为一个三位数的各个位数上的值的立方和等于它本身,例如:153是一个水仙花数,因为153=1*1*1+5*5*5+3*3*3
c
#include <stdio.h>
#include <math.h>
int main() {
for (int i = 100; i <= 999; i++) {
int a = i / 100;
int b = (i - a * 100) / 10;
int c = (i - a * 100 - b * 10) / 1;
if (i == pow(a, 3) + pow(b, 3) + pow(c, 3)) {
printf("水仙花数:%d", i);
}
}
return 0;
}
- 输入一个数n,计算出它的阶乘n!,注:n的值不能大于10
c
#include <stdio.h>
int main() {
int num, result = 1;
printf("请输入一个小于等于10的正整数:");
scanf("%d", &num);
if (num <= 10) {
for (int i = num; i > 0; i--) {
result *= i;
}
printf("%d!:%d", num, result);
}
return 0;
}
切记
题目中的之间表示的是双开区间,例如:在50-100之间取第一个被7整除的数,意思是在(50, 100)取值