第三章 三大结构 | 循环语句
while 函数
可以这样理解,当满足什么条件时,执行while循环。
编写格式
while (condition) {
// this is the function
}
当满足condition
时,循环可以运行。
如果condition
内的东西不变,那么就会造成一个死循环。
do-while循环
先进行一次循环,然后再检查条件是否满足,如果条件不满足(即表达式为零),则退出循环。
编写格式
do {
//To do
} while ( condition );
例子
这让我们想到如果用它来算位数,也是不错的选择
#include <stdio.h>
int main () {
int num;
scanf("%d",&num);
int i = 0;
do {
num /= 10;
i++;
} while ( num > 0 );
printf("是%d位数",i);
return 0;
}
这就可以解决用户输入0的问题了。
其实,它等同于下面的代码
while (1) {
// this is the function
if( condition ) {
break;
}
}
for循环
编写格式
for ( 初始条件(控制变量); 循环条件; 循环要执行的步长) {
// to do
}
例子
输出3的n次方
#include <stdio.h>
#include <math.h>
int main() {
int n;
scanf("%d",&n);
for(int i = 0; i <= n; i++) {
printf("pow(3,%d) = %.0f\n", i, pow(3,i));
}
return 0;
}
读取数组
#include <stdio.h>
int main() {
int n[10] = {1,2,3,4,5,6,7,8,9,10};
for(int i = 0; i <= n; i++) {
printf("n[%d] = %d",i,n[i]);
}
return 0;
}
还是输出3的n次方,如果把初始变量的部分去掉呢?
就像这样
#include <stdio.h>
#include <math.h>
int main() {
int n;
scanf("%d",&n);
for(; n >= 1; n--) {
printf("pow(3,%d) = %.0f\n", i, pow(3,n));
}
return 0;
}
结果也是可以的。
i = 0; i < 10; i++
和i = 1; i <= 10; i++
的循环次数是一样的,但是起始的值不一样:一个是从i=0
开始,一个是从i=1
开始。
for循环要注意的事情
请看代码1和代码2
代码1
for (int i = 0; i < N; i++) {}
代码2
for (int i = 0; i <= N; i++) {}
这两个的不同之处在于,代码2比代码1多运行了一次,就如PTA里面的练习2-14 求奇数分之一序列前N项和中的那样:如果用代码1则可以求出前23项之和,代码2则可以求出前24项之和。
所以代码1等同于代码3
代码3
for (int i = 1; i <= N; i++) {}
何时用while、do-while、for循环
- 如果有固定次数,用for循环是最好的;无论如何都要执行一次,用do-while循环;其他情况用while循环。
- 其实,for循环和while循环是等价的。特别是for(; condition;){}和while(condition){},简直就是完全等价
本文来自博客园,作者:Mryan2005,转载请注明原文链接:https://www.cnblogs.com/Mryan2005/p/17872801.html