第三章 三大结构 | 循环语句

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循环

  1. 如果有固定次数,用for循环是最好的;无论如何都要执行一次,用do-while循环;其他情况用while循环。
  2. 其实,for循环和while循环是等价的。特别是for(; condition;){}和while(condition){},简直就是完全等价
posted on 2023-11-11 19:43  Mryan2005  阅读(6)  评论(0编辑  收藏  举报  来源