分支和循环(下)

1. while循环

C语⾔提供了3种循环语句,while就是其中⼀种,接下来就介绍⼀下while语句。
while语句的语法结构和if`语句⾮常相似

1.1 if 和 while的对⽐

C语言中的ifwhile都是控制语句,用于控制程序的执行流程。
if语句是一种单向分支结构,它的作用是根据条件的真假来执行特定的代码。if语句的基本语法如下:

if (condition) {
    // if语句为真时执行的代码
}

在if语句中,condition是一个逻辑表达式,它的值为truefalse。当conditiontrue时,if语句中的代码块将会被执行;当conditionfalse时,if语句中的代码块将会被跳过。

while语句是一种循环结构,它会重复执行一段特定的代码,直到某个条件不再为true为止。while语句的基本语法如下:

while (condition) {
    // while语句为真时执行的代码
}

while语句中,condition是一个逻辑表达式,它的值为true或false。当condition为true时,while语句中的代码块将会被重复执行;当condition为false时,while语句将会结束循环,并继续执行后续代码。

if和while的对比:

  1. 功能不同:if语句是一种单向分支结构,用于根据条件的真假执行特定的代码;while语句是一种循环结构,会根据条件是否为真重复执行一段特定的代码。
  2. 语法不同:if语句只有一个代码块;while语句有一个开头和一个结尾,并且可以包含多个代码块。
  3. 使用场景不同:if语句通常用于判断条件是否为真,并执行相应的操作;while语句通常用于重复执行相同的操作,直到满足某个条件为止。

在实际编程中,if和while经常会一起使用,来实现更为复杂的逻辑。例如,在while循环中嵌套if语句,可以根据不同的条件执行不同的操作。

1.2 while语句的执⾏流程

在这里插入图片描述

2.for循环

2.1 语法形式

for循环是一种非常常用的循环结构。for循环的语法形式如下:

for (初始化表达式; 循环条件; 迭代表达式) {
    循环体语句;
}

其中,初始化表达式是在循环开始前执行的语句;循环条件是一个逻辑表达式,如果值为true则继续执行循环体,否则跳出循环;迭代表达式是在每次循环结束后执行的语句。

for循环的执行顺序如下:

  1. 执行初始化表达式;
  2. 判断循环条件,如果条件为false则跳出循环;
  3. 执行循环体语句;
  4. 执行迭代表达式;
  5. 重复步骤2~4,直到循环条件为false。

for循环可以用于遍历数组、进行计数器循环等多种场景。在初始化表达式、循环条件和迭代表达式中,可以使用多个语句,这些语句以逗号分隔。也可以在循环体中使用break语句和continue语句来控制循环的执行。

2.2 for循环的执行流程

在这里插入图片描述
⾸先执⾏表达式1初始化循环变量,接下来就是执⾏表达式2的判断部分,表达式2的结果如果
==0,则循环结束;表达式2的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表达式 3,调整循环变量,然后再去表达式2的地⽅执⾏判断,表达式2的结果是否为0,决定循环是否继
续。
整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循
环。

3.do-while循环

3.1 语法形式

do-while循环语句是一种控制流程语句,也称为“后测试循环”或“至少执行一次循环”语句。它的语法形式如下:

do {
    循环体语句;
} while(循环条件);

其中,do后面是循环体语句,花括号中是需要执行的代码。while后面是一个循环条件,一旦条件为真,就会继续执行循环体语句。如果条件为假,则跳出循环。

与while循环不同的是,do-while循环保证循环体至少会执行一次,无论循环条件是否成立。这是因为它的判断语句是在循环体末尾执行的。

do-while循环通常用于用户输入的校验,或者需要至少执行一次循环体的情况。需要注意的是,由于do-while循环保证循环体至少执行一次,因此在循环体中的第一次执行可能不受循环条件的限制,需要特别注意循环体的安全性。

下面是一个简单的do-while循环的例子,用于计算输入的数字之和,直到输入0为止:

#include <stdio.h>

int main()
{
    int num, sum = 0;
    
    do {
        printf("请输入一个整数(输入0结束):");
        scanf("%d", &num);
        sum += num;
    } while (num != 0);
    
    printf("输入的数字之和为:%d\n", sum);
    
    return 0;
}

3.2 do while循环的执行流程

do-while循环是一种后测试循环,它允许至少一次执行循环体,之后在条件检查前反复执行循环体,直到条件成立或被中断。其基本语法结构为:

do {
    循环体语句;
} while (循环条件);

执行流程如下:

  1. 程序运行到do关键字时,先执行循环体内的语句。

  2. 执行完循环体内的语句后,程序会执行while后的条件检查。

  3. 如果条件为真,则回到第1步,继续执行循环体内的语句;否则,退出循环,继续执行do-while语句后面的代码。

需要注意的是,在执行do-while循环时,循环条件是在循环运行完之后再进行检查的,所以无论循环条件是否成立,循环体内的语句至少会执行一次。这就是do-while循环和while循环的主要区别

4.break和continue语句

break和continue语句是跳转语句,用于在循环语句中控制程序的执行流程。

break语句:当执行到break语句时,程序立即跳出当前循环语句,继续执行紧接着循环语句的下一行代码。break通常用于满足某些条件后终止循环,例如:

for(int i = 0; i < 10; i++) {
  if(i == 5) {
    break;
  }
  printf("%d ", i);
}

上面的代码中,当i等于5时,程序将跳出循环,不再执行后续的循环语句,输出结果为:0 1 2 3 4。

continue语句:当执行到continue语句时,程序会跳过当前循环中剩余的代码,继续执行下一次循环。continue通常用于满足某些条件后跳过本次循环,例如:

for(int i = 0; i < 10; i++) {
  if(i % 2 == 0) {
    continue;
  }
  printf("%d ", i);
}

上面的代码中,当i为偶数时,程序将跳过本次循环,不再执行后续的循环语句,输出结果为:1 3 5 7 9。

4.1 while循环中的break和continue

4.1.1 break举例

在C语言中,while循环可以使用break语句来中断循环。当某个条件满足时,break语句将立即终止while循环,并跳转到循环后面的代码。

下面是一个使用while循环和break语句的示例:

#include <stdio.h>

int main() {
    int i = 0;
    while (1) {
        i++;
        if (i == 5) {
            break;
        }
        printf("%d\n", i);
    }
    printf("End of loop\n");
    return 0;
}

在这个例子中,while循环将一直执行,直到i的值等于5。当i等于5时,break语句被执行,并立即退出循环。输出结果如下:

1
2
3
4
End of loop

注意,在使用while循环和break语句时要小心,以避免无限循环或过早退出循环。如果循环条件不正确或者break语句的位置不正确,循环可能会变得无限循环或终止得太早。因此,在编写代码时应仔细考虑使用break语句的位置和条件。

4.1.2 continue举例

continue语句用于跳过当前循环中的某次迭代,继续下一次循环迭代。

while循环中,当continue语句被执行时,程序会跳过本轮循环内continue语句后面的语句,直接进入下一轮循环的条件判断。

以下是一个简单的例子,展示了在while循环中使用continue的情况:

#include <stdio.h>

int main() {
    int i = 0;
    while (i < 10) {
        i++;
        if (i == 5)
            continue;    // 跳过本轮循环,继续下一次循环
        printf("%d\n", i);
    }
    return 0;
}

上述程序输出结果为:

1
2
3
4
6
7
8
9
10

因为当i等于5时,continue语句被执行,跳过了打印5这一步,继续下一轮循环输出剩余的数字。

4.2 for循环中的break和continue

4.2.1 break举例

for循环中的break语句可以用于立即退出循环。当循环中的某个条件满足时,可以使用break语句来退出循环。此时程序将跳出整个循环体,继续执行循环体后的语句。

下面是一个示例,当循环变量i等于5时,break语句将使得整个循环立即退出。

#include<stdio.h>
int main()
{
    int i;
    for(i=1;i<=10;i++)
    {
        if(i==5)
            break;
        printf("%d ", i);
    }
    return 0;
}

运行结果:

1 2 3 4

4.2.2 continue举例

for循环中的continue是一个关键字,用于控制循环的过程。当程序执行到continue时,会直接跳过当前循环中剩余的代码,开始下一轮的循环。具体来说,当循环条件中的判断语句为真时,执行循环体内的代码,如果遇到了continue,就会跳过当前循环剩余的代码,开始下一轮循环的判断。

例如,下面的代码展示了一个使用continue的示例:

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue;  // 如果i是偶数,跳过剩余代码,开始下一轮循环
    }
    printf("%d ", i);  // 输出奇数
}

以上代码中,for循环的循环条件是i < 10,当i是偶数时,遇到了continue,就跳过了下面的printf语句,直接开始下一轮循环,输出的结果只包括奇数。在C语言中,for循环中的continue是一个关键字,用于控制循环的过程。当程序执行到continue时,会直接跳过当前循环中剩余的代码,开始下一轮的循环。具体来说,当循环条件中的判断语句为真时,执行循环体内的代码,如果遇到了continue,就会跳过当前循环剩余的代码,开始下一轮循环的判断。

例如,下面的代码展示了一个使用continue的示例:

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue;  // 如果i是偶数,跳过剩余代码,开始下一轮循环
    }
    printf("%d ", i);  // 输出奇数
}

以上代码中,for循环的循环条件是i < 10,当i是偶数时,遇到了continue,就跳过了下面的printf语句,直接开始下一轮循环,输出的结果只包括奇数。

4.3 do while循环中的break和continue

4.3.1 break举例

do-while循环中的break是一个关键字,用于控制循环的过程。当程序执行到break时,会直接跳出整个循环,开始执行循环之后的代码。

具体来说,当循环体内部的某个条件满足时,程序执行到break语句时,循环就会立即终止。

以下是一个使用do-while循环和break语句的示例程序:

#include <stdio.h>

int main() {
    int i = 0;
    do {
        if (i == 5) {
            break;
        }
        printf("%d ", i);
        i++;
    } while (i < 10);
    printf("\n");
    return 0;
}

以上程序中,我们使用do-while循环输出0到9之间的数字,当程序执行到i等于5时,使用break语句直接跳出整个循环,开始执行循环之后的代码,因此只输出了0到4之间的数字。在C语言中,do-while循环中的break是一个关键字,用于控制循环的过程。当程序执行到break时,会直接跳出整个循环,开始执行循环之后的代码。

具体来说,当循环体内部的某个条件满足时,程序执行到break语句时,循环就会立即终止。

以下是一个使用do-while循环和break语句的示例程序:

#include <stdio.h>

int main() {
    int i = 0;
    do {
        if (i == 5) {
            break;
        }
        printf("%d ", i);
        i++;
    } while (i < 10);
    printf("\n");
    return 0;
}

以上程序中,我们使用do-while循环输出0到9之间的数字,当程序执行到i等于5时,使用break语句直接跳出整个循环,开始执行循环之后的代码,因此只输出了0到4之间的数字。

4.3.2 continue举例

do while循环中的continue语句用于跳过当前循环中的剩余语句并进入下一次循环的执行。在do while循环中使用continue和在其他类型循环中使用一样。当continue语句执行时,程序将跳过当前循环中出现的其余语句,而直接进行下一次循环的执行。

例如,下面的代码展示了如何使用do while循环中的continue语句来计算一个数组中所有偶数的和:

int array[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int sum = 0;
int i = 0;

do {
    if (array[i] % 2 != 0) {
        continue;   // 如果是奇数就跳到下一次循环
    }
    sum += array[i];
    i++;
} while (i < 10);

printf("偶数和为:%d", sum);

在上面的代码中,如果当前处理的数字是奇数,那么continue语句将跳过计算sum的语句并进行下一次循环。如果当前处理的数字是偶数,那么sum会加上当前处理的偶数的值。最终,程序将输出所有偶数的和。do while循环中的continue语句用于跳过当前循环中的剩余语句并进入下一次循环的执行。在do while循环中使用continue和在其他类型循环中使用一样。当continue语句执行时,程序将跳过当前循环中出现的其余语句,而直接进行下一次循环的执行。

例如,下面的代码展示了如何使用do while循环中的continue语句来计算一个数组中所有偶数的和:

int array[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int sum = 0;
int i = 0;

do {
    if (array[i] % 2 != 0) {
        continue;   // 如果是奇数就跳到下一次循环
    }
    sum += array[i];
    i++;
} while (i < 10);

printf("偶数和为:%d", sum);

在上面的代码中,如果当前处理的数字是奇数,那么continue语句将跳过计算sum的语句并进行下一次循环。如果当前处理的数字是偶数,那么sum会加上当前处理的偶数的值。最终,程序将输出所有偶数的和。

5. 循环的嵌套

循环的嵌套是指在一个循环中嵌套另一个循环。循环嵌套是一种常见的编程技巧,常用于多重循环中,例如处理二维数组、矩阵等数据结构。C语言中支持多重循环嵌套,可以使用for、while、do while等不同类型的循环来实现。

循环嵌套的结构通常是外层循环控制行数,内层循环控制列数,例如:

for (int i = 0; i < 3; i++) {     // 外层循环控制行数
    for (int j = 0; j < 4; j++) { // 内层循环控制列数
        printf("*");
    }
    printf("\n");
}

上面的代码将在控制台输出一个3行4列的矩形,其中外层循环控制行数,内层循环控制列数。

在多重循环中,需要特别注意循环变量的范围和循环条件的判断,否则程序可能会出现死循环或者逻辑错误。同时,一般情况下不建议嵌套过多的循环,过多的循环嵌套会导致程序执行效率低下,影响程序的性能。

在实际开发中,需要灵活运用循环嵌套技巧,根据具体问题选择合适的循环结构和变量控制,从而提高代码执行效率并实现更加优雅的编程。在C语言中,循环的嵌套是指在一个循环中嵌套另一个循环。循环嵌套是一种常见的编程技巧,常用于多重循环中,例如处理二维数组、矩阵等数据结构。C语言中支持多重循环嵌套,可以使用for、while、do while等不同类型的循环来实现。

循环嵌套的结构通常是外层循环控制行数,内层循环控制列数,例如:

for (int i = 0; i < 3; i++) {     // 外层循环控制行数
    for (int j = 0; j < 4; j++) { // 内层循环控制列数
        printf("*");
    }
    printf("\n");
}

上面的代码将在控制台输出一个3行4列的矩形,其中外层循环控制行数,内层循环控制列数。

在多重循环中,需要特别注意循环变量的范围和循环条件的判断,否则程序可能会出现死循环或者逻辑错误。同时,一般情况下不建议嵌套过多的循环,过多的循环嵌套会导致程序执行效率低下,影响程序的性能。

在实际开发中,需要灵活运用循环嵌套技巧,根据具体问题选择合适的循环结构和变量控制,从而提高代码执行效率并实现更加优雅的编程。

6.goto语句

goto语句是一种无条件跳转语句,可以将程序控制转移到指定标记(即标签)的代码行处。其语法如下:

goto label;
...
label: statement;

其中,label是标记的名称,statement是需要执行的语句。

使用goto语句可以在代码任意位置跳转到指定位置,例如:

for (int i = 0; i < 10; i++) {
    if (i == 5) goto end;
    printf("%d\n", i);
}
end:
printf("Loop finished.\n");

在上面的示例中,当i等于5的时候,程序会跳转到标记end处,并输出"Loop finished.",从而提前结束循环。

然而,由于goto语句过于灵活,其使用容易引起程序可读性和可维护性的问题,因此一般情况下建议尽量避免使用goto语句,而采用其他结构化的控制语句(如break、continue、return等)来实现相应的功能。在C语言中,goto语句是一种无条件跳转语句,可以将程序控制转移到指定标记(即标签)的代码行处。其语法如下:

goto label;
...
label: statement;

其中,label是标记的名称,statement是需要执行的语句。

使用goto语句可以在代码任意位置跳转到指定位置,例如:

for (int i = 0; i < 10; i++) {
    if (i == 5) goto end;
    printf("%d\n", i);
}
end:
printf("Loop finished.\n");

在上面的示例中,当i等于5的时候,程序会跳转到标记end处,并输出"Loop finished.",从而提前结束循环。

然而,由于goto语句过于灵活,其使用容易引起程序可读性和可维护性的问题,因此一般情况下建议尽量避免使用goto语句,而采用其他结构化的控制语句(如break、continue、return等)来实现相应的功能。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值