while语句(填鸭式讲解)

 while 循环也是一种常用的循环结构,用于在满足特定条件时重复执行一段代码。




1. 语法结构剖析
 
while (条件表达式) {
    // 循环体语句
}
 
 
- 条件表达式:
 
- 作用:这是 while 循环的核心判断依据,用于决定循环是否继续执行。它是一个逻辑表达式,在每次循环开始前都会被评估。只有当条件表达式的值为真(在C语言中,非零值表示真,零值表示假)时,循环体语句才会被执行;一旦其值变为假,循环就会终止。
- 示例:
-  i < 10 :这是一个常见的条件表达式示例,其中 i 通常是一个整型变量。表示只要变量 i 的值小于10,循环就会持续进行。随着循环体内相关操作对 i 值的改变(比如在循环体中对 i 进行递增或递减操作),当 i 的值达到或超过10时,条件表达式的值变为假,循环结束。
-  num > 0 && flag == 1 :条件表达式也可以是更复杂的逻辑组合。这里假设 num 是一个浮点型变量, flag 是一个整型变量。这个表达式表示只有当 num 大于0并且 flag 的值等于1时,循环才会继续。这种复杂的条件表达式可以根据具体的程序需求来设置,以实现更精细的循环控制。
- 循环体语句:
 
- 作用:位于 while 循环的大括号内,是要重复执行的代码部分,也就是循环的核心执行内容。它可以是一条简单的语句,也可以是由多条语句组成的语句块(用大括号括起来)。
- 示例:
-  printf("%d ", i); :如果循环是用来计数并打印数字的,比如前面以 i 为变量且条件表达式为 i < 10 的例子,那么循环体语句可以是通过 printf 函数打印当前变量 i 的值。
- 以下是一个由多条语句组成的循环体语句块的例子:
 
{
    int sum = 0;
    sum += i;
    printf("当前累加和为:%d\n", sum);
}
 
 
在这个例子中,循环体语句块内首先定义了一个新的整型变量 sum 并初始化为0,然后将当前变量(假设这里是 i ,与前面条件表达式中的变量相关联)的值累加到 sum 上,最后通过 printf 函数打印出当前的累加和。
 




2. 执行流程
 
 while 循环的执行流程遵循以下步骤:
 
1. 首先,对条件表达式进行初次评估。在进入循环之前,程序会先判断条件表达式的值是否为真。如果条件表达式的值为假,那么循环体语句将不会被执行,程序直接跳过 while 循环,继续执行后续的代码。
2. 如果初次评估条件表达式的值为真,那么就会执行循环体语句。循环体语句中的代码会按照顺序依次执行,就像普通的顺序结构代码一样。
3. 在执行完循环体语句后,程序会再次回到循环的开头,对条件表达式进行再次评估。如果此时条件表达式的值依然为真,那么就会再次执行循环体语句;如果条件表达式的值变为假,那么循环就会停止,程序继续执行 while 循环后面的代码。
 
例如,以下代码展示了 while 循环的执行流程:
 
#include <stdio.h>

int main() {
    int i = 0;

    while (i < 5) {
        printf("当前数字是:%d\n", i);
        i++;
    }

    printf("循环结束\n");

    return 0;
}
 
 
在这个示例中:
 
- 程序开始时,定义了变量 i 并初始化为0。
- 然后对条件表达式 i < 5 进行初次评估,因为此时 i 的值为0,条件表达式的值为真,所以进入循环体。
- 在循环体中,首先通过 printf 函数打印出当前数字是0,然后将 i 的值增加1。
- 执行完循环体后,再次回到循环开头对条件表达式进行评估。此时 i 的值为1,条件表达式 i < 5 依然为真,所以再次执行循环体,依次类推。
- 当 i 的值增加到5时,条件表达式 i < 5 变为假,循环结束,然后程序执行 while 循环后面的代码,即打印出“循环结束”。
 




3. 常见应用场景
 
- 计数循环:
- 用途:虽然 for 循环在计数循环方面更为常用,但 while 循环同样可以实现计数功能。通过在循环体内部或外部对计数变量进行初始化、递增或递减等操作,来实现按照一定次数重复执行某段代码。
- 示例:
 
#include <stdio.h>

int main() {
    int i = 1;

    while (i <= 10) {
        printf("第 %d 次循环\n", i);
        i++;
    }

    return 0;
}
 
 
在这个示例中,在循环体外部定义了变量 i 并初始化为1,然后通过 while 循环,只要 i 的值小于等于10,就会执行循环体,打印出当前是第几次循环,并在每次循环后将 i 的值增加1,实现了从1到10的计数循环。
 
- 条件判断循环:
- 用途:当需要根据某个条件的持续满足情况来决定是否继续循环时, while 循环非常适用。这种情况通常是在程序运行过程中,某个条件可能会不断变化,只有当该条件满足时,才需要继续执行某段代码。
- 示例:
 
#include <stdio.h>

int main() {
    int num = 10;
    int flag = 1;

    while (num > 0 && flag == 1) {
        printf("当前数字是:%d\n", num);
        num--;
        if (num == 5) {
            flag = 0;
        }
    }

    return 0;
}
 
 
在这个示例中,循环的条件是 num > 0 且 flag == 1 。开始时, num 的值为10, flag 的值为1,满足条件,所以进入循环体。在循环体中,先打印出当前数字,然后将 num 的值减少1。当 num 的值达到5时,通过 if 语句将 flag 的值设为0,此时条件表达式 num > 0 && flag == 1 变为假,循环结束。这种方式可以根据程序运行过程中的具体情况来灵活控制循环的终止条件。
 
- 数据处理循环:
- 用途:在处理一些需要根据某个条件持续处理数据的情况时, while 循环可以发挥作用。比如,读取文件中的数据,直到文件末尾或者满足其他特定条件为止。
- 示例:
 
#include <stdio.h>

int main() {
    FILE *fp;
    char buffer[100];

    fp = fopen("test.txt", "r");
    if (fp == NULL) {
        printf("无法打开文件\n");
        return 0;
    }

    while (fgets(buffer, 100, fp)!= NULL) {
        printf("%s", buffer);
    }

    fclose(fp);

    return 0;
}
 
 
在这个示例中,首先通过 fopen 函数打开一个名为“test.txt”的文件,如果文件打开失败则提示并退出程序。然后通过 while 循环,只要 fgets 函数从文件中读取到的数据不为空(即还未到达文件末尾),就会执行循环体,将读取到的内容通过 printf 函数打印出来。最后,通过 fclose 函数关闭文件。
 




4. 注意事项
 
- 无限循环:与 for 循环一样,如果不小心设置错了条件表达式,可能会导致 while 循环变成无限循环,也就是循环永远不会停止。例如:
 
#include <stdio.h>

int main() {
    int i = 0;

    while (i < 10) {
        printf("无限循环中...\n");
        // 这里忘记了对i进行递增或递减等改变其值的操作,导致条件表达式i < 10始终满足
    }

    return 0;
}
 
 
在这个例子中,由于在循环体中没有对变量 i 进行任何改变其值的操作,所以条件表达式 i < 10 始终满足,循环会一直进行下去,形成无限循环。要避免这种情况,需要在循环体中或外部对用于判断条件的变量进行相应的操作,以确保条件表达式最终会变为假,从而结束循环。
 
- 初始化和更新变量:在使用 while 循环时,对于用于判断条件的变量(如前面例子中的 i 、 num 等),其初始化和更新操作需要格外注意。初始化可以在循环体外部或内部进行,更新操作也可以在循环体内部或外部进行,但要确保这些操作能够使条件表达式最终达到或超过终止条件,从而使循环正常终止。例如,在前面计数循环的例子中,变量 i 是在循环体外部初始化的,然后在循环体内部进行递增操作;而在条件判断循环的例子中,变量 num 是在循环体外部初始化的,在循环体内部进行递减操作,并且通过 if 语句对另一个变量 flag 进行了更新操作,以改变条件表达式的值,进而控制循环的终止。
- 循环体语句的完整性:当循环体语句是由多条语句组成的语句块时,一定要用大括号括起来,否则可能会导致代码执行结果不符合预期。例如:
 
#include <stdio.h>

int main() {
    int i = 0;

    while (i < 5)
        printf("当前数字是:%d\n", i);
        i++;

    return 0;
}
 
 
在这个例子中,由于没有用大括号将循环体语句括起来,编译器会认为只有 printf 函数所在的语句是循环体语句,而 i++ 语句不属于循环体语句,这就会导致循环无法正常终止,因为 i 的值不会按照预期进行更新。所以,为了确保循环体语句的完整性,当有多条语句时,一定要用大括号括起来。
 




总之, while 循环是C语言中重要的循环结构之一,掌握好它的语法、执行流程、应用场景以及注意事项等方面的内容,对于编写高效、正确的C语言程序至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值