分支语句与循环语句

 一、if语句


单分支 :if (条件) { ... }

#include<stdio.h>
int main()
{
    int a = 10;
    int num = 0;//初始化
    scanf("%d",&num);
    if(num==10)
    {
       printf("Yes");
    }
    return 0;
}


双分支 :if (条件) { ... }

                   else { ... }

#include<stdio.h>
int main()
{
    int a = 10;
    int num = 0;//初始化
    scanf("%d",&num);
    if(num==10)
    {
       printf("Yes");
    }
    else
    {
       printf("No");
    }
    return 0;
}


多分支 :if (条件1) { ... }

                   else if (条件2) { ... }

                   else { ... }

#include<stdio.h>
int main()
{
    int a = 10;
    int num = 0;//初始化
    scanf("%d",&num);
    if(num==10)
    {
       printf("猜对了");
    }
    else if(num<10)
    {
       printf("猜小了");
    }
    else if(num>10)
    {
       printf("猜大了");
    }
    return 0;
}

注意事项:在if语句的判断语句中,符号 == 是一个容易出错漏写成 = 的一个点,但在编译器中 = 的作用是赋值,所以编译器不会报错,这就让我们很难发现错误点。

解决方法:若 == 的两边是一个常量和一个变量,我们可以把常量放在左边,变量放在右边,如(10 == num),这样的话,如果漏写编译器就会报错,这样就比较容易发现错误。

 二、switch语


- 基本语法:switch (表达式) { case 值1: ... break; case 值2: ... break; default: ... }
- switch语句的执行顺序遵循以下规则:

1. `switch`语句较首先评估括号中的表达式,并将其结果与每个`case`标签后面的常量表达式进行比。
2. 如果表达式的值与某个`case`标签后面的常量表达式相匹配,则执行从该`case`标签开始的语句,直到遇到`break`语句或者`switch`语句的结尾。
3. 如果没有任何`case`标签的常量表达式与表达式的值相匹配,并且存在`default`标签,则执行`default`标签下的语句,同样直到遇到`break`语句或者`switch`语句的结尾。
4. 如果`switch`语句中没有`break`语句,即使找到了匹配的`case`标签,程序也会继续执行下一个`case`标签的语句,直到遇到`break`语句或者`switch`语句的结尾。
5. 如果`switch`语句中的所有`case`标签都没有匹配到表达式的值,并且没有`default`标签,则整个`switch`语句不执行任何操作。

例如,考虑以下代码片段:

int num = 3;
switch (num) {
    case 1:
        printf("Case 1\n");
        // Fallthrough to Case 2
    case 2:
        printf("Case 2\n");
        // Break out of the switch statement
        break;
    case 3:
        printf("Case 3\n");
        // No break, so it falls through to Case 4
    case 4:
        printf("Case 4\n");
        // Default case is not executed because there's a match before it
        break;
    default:
        printf("Default case\n");
}

在这个例子中,`num`的值为3,所以首先执行`case 3:`的代码,然后因为没有`break`语句,它会继续执行`case 4:`的代码。由于`case 4:`后面有`break`语句,所以执行完成后跳出`switch`语句。`case 1:`和`case 2:`虽然有匹配的值,但是因为`case 3:`和`case 4:`已经被执行,所以它们不会被执行。`default`标签由于前面已经有匹配的`case`,所以也不会被执行。

break语句的作用:

在C语言中,`break`语句主要用于立即终止循环(如`for`、`while`、`do-while`)或`switch`语句中的执行流程。当程序执行到`break`语句时,它会立即跳出当前的循环或`switch`结构,并继续执行该结构之后的代码。

1.循环中的`break`语句

当`break`语句位于循环内部时,它会导致循环立即结束,并跳过循环剩余的部分,继续执行循环后面的语句。例如,在`for`循环中,如果满足某个条件,使用`break`可以提前终止循环。

2.`switch`语句中的`break`语句

在`switch`语句中,`break`用于终止当前`case`的执行,并防止程序流向下一个`case`。如果没有`break`语句,程序会继续执行后续的`case`,直到遇到`break`或`switch`语句的末尾。

3.嵌套循环中的`break`语句

如果你使用的是嵌套循环,`break`语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。这意味着它不会影响外层循环的执行。

注意:`break`语句只能在循环或`switch`语句中使用,如果在这些结构之外使用,编译器将会报错。

default语句的使用:

`default`语句在C语言中主要用于`switch`语句中,它的作用是当`switch`语句中的`case`标签都不匹配时执行的代码块。`default`语句是可选的,如果没有提供`default`语句,而`switch`表达式的值又没有匹配任何`case`,则程序将不执行任何代码块。

`default`语句的语法如下:

switch (表达式) {
    case 常量1:
        // 代码块1
        break;
    case 常量2:
        // 代码块2
        break;
    // 更多case语句
    default:
        // 默认代码块
        break;
}

如果`switch`表达式的值与任何一个`case`后的常量都不匹配,程序将执行`default`后的代码块。

以下是一个使用`default`语句的示例:

#include <stdio.h>

int main() {
    int day = 4;
    switch(day) {
        case 1:
            printf("Monday\n");
            break;
        case 2:
            printf("Tuesday\n");
            break;
        case 3:
            printf("Wednesday\n");
            break;
        default:
            printf("Other day\n");
    }
    return 0;
}

在这个示例中,如果`day`的值是1、2或3,程序将分别打印出对应的星期几。如果`day`的值不是1、2、3,那么程序将执行`default`后的代码块,输出"Other day"。

注意事项:

- `default`语句通常出现在`switch`语句的最后,但这不是强制的,可以放在其他位置。
- `default`语句是可选的,如果没有提供,而`switch`表达式的值又没有匹配的`case`,则程序将不执行任何代码块。
- 如果`default`语句在所有`case`之后,可以不加`break`语句,因为它已经是最后一个分支了。但如果`default`语句之前还有其他`case`语句,为了避免执行到`default`后的其他`case`,通常需要在`default`后面加上`break`语句。
- `default`语句应该谨慎使用,因为它代表了所有未预见的情况,应当确保程序能够妥善处理这些情况。

三、while循环


- 基本语法 while (条件) { ... }
- 循环的执行过程

1. 初始化条件:在进入`while`循环之前,首先需要初始化一个或多个控制循环的变量。

2. 循环条件判断:接下来,程序会检查`while`循环的条件表达式。如果条件表达式的结果为真(即非零值),则执行循环体中的语句。

3. 循环体执行:如果条件表达式为真,程序将执行循环体中的语句。循环体可以包含一个或多个语句。

4. 更新条件变量:在循环体执行完毕后,程序会更新控制循环的变量,以便在下一次循环条件判断时使用新的值。

5. 返回循环条件判断:更新变量后,程序返回到循环条件判断阶段,再次检查条件表达式。如果条件仍然为真,程序将重复执行上述步骤(步骤2至步骤5)。

6. 循环结束:一旦条件表达式的结果为假(即为零),循环将终止,程序将继续执行循环之后的下一条指令。

以下是一个简单的`while`循环示例,用于打印数字1到10:

#include <stdio.h>

int main() {
    int i = 1;
    while (i <= 10) {
        printf("%d ", i);
        i++;
    }
    return 0;
}

在这个例子中,变量`i`被初始化为1,然后进入`while`循环。循环条件是`i <= 10`,每次循环结束后,`i`的值增加1。当`i`的值达到11时,条件不再满足,循环结束,程序打印出数字1到10,并继续执行`main`函数的其余部分。

此外,`while`循环还可以配合`break`和`continue`语句使用,以控制循环的执行流程。`break`语句用于立即终止循环,而`continue`语句用于跳过当前循环的剩余部分,直接进入下一次循环的条件判断[1][2][3][4]。

- 避免无限循环的技巧:

为了避免`while`循环变成无限循环,需要确保循环条件最终会变为假(即为零)。以下是一些常见的方法:

1. 使用递增或递减操作符:

int count = 0;
   while (count < 10) {
       // 循环体
       count++; // 每次循环后计数器递增
   }

2.使用逻辑运算符:

bool isRunning = true;
   while (isRunning) {
       // 循环体
       // 某些条件满足时设置isRunning为false以退出循环
   }

3. 使用`break`语句:

 while (true) {
       // 循环体
       if (某个条件) {
           break; // 当条件满足时跳出循环
       }
   }

4. 使用`continue`语句:

 while (true) {
       // 循环体
       if (某个条件) {
           continue; // 当条件满足时跳过当前循环迭代,继续下一次迭代
       }
       // 其他代码
   }

5. 使用`do...while`循环作为备选方案:

do {
       // 循环体
   } while (某个条件); // 只有在循环体执行完毕后才检查条件
   ```

6. 确保循环条件可变:

确保循环条件中涉及的变量会随着循环的进行而改变状态,否则循环将无法自然结束。

四、do-while循环


- 基本语法 :do { ... } while (条件);
在C语言中,do while循环是一种后置条件测试的循环结构。它的特点是至少执行一次循环体,因为循环条件是在循环体执行后进行测试的。do while循环的基本语法如下:

do {
    // 循环体代码
} while (条件表达式);

这里的do关键字后面跟着循环体,而while关键字后面跟随着条件表达式。循环体至少执行一次,因为条件的检验是放在循环的末尾。如果条件表达式的结果为真(非零),控制流会返回到循环体的开头,继续执行循环体内的代码。这个过程会一直持续,直到条件表达式的结果为假(零),这时循环终止。
以下是一个简单的C语言示例,展示了do while循环的使用:

#include <stdio.h>

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

在这个例子中,变量i初始化为1,然后进入do while循环。循环体打印出i的值并将其自增。由于循环条件i < 10在每次循环结束后才被检查,因此即使条件最初为真,循环体也至少执行一次。循环会继续执行,直到i的值达到10,这时条件变为假,循环结束。程序输出的结果将是数字1到9。
- 循环的执行过程:do while循环是一种先执行循环体再判断条件的循环结构。它的执行过程如下:

1. 执行循环体:首先执行do后的语句块,也就是循环体内的语句。
2. 判断条件:执行完循环体后,再判断while后的条件表达式。
3. 继续执行或跳出循环:如果条件为真(非0),则继续执行循环体,再次进行步骤1。如果条件为假(0),则跳出循环,执行循环后的语句。

需要注意的是,do while循环至少会执行一次循环体,因为循环体的执行是在条件判断之前。而且,在每次循环结束后,都会重新判断条件并决定是否继续执行循环。

- 与while循环的区别

C语言中的do-while循环和while循环在结构上有一些不同之处。

  1. 语法结构:

    • do-while循环:
      do {
          // 代码块
      } while (条件);
      

    • while循环:
      while (条件) {
          // 代码块
      }
      

  2. 执行顺序:

    • do-while循环会先执行一次代码块,然后再判断条件是否满足,如果满足则继续循环执行,直到条件不满足为止。
    • while循环会先判断条件是否满足,如果满足则执行代码块,然后再判断条件是否满足,如果满足则继续循环执行,直到条件不满足为止。
  3. 执行次数:

    • do-while循环保证代码块至少执行一次,即使条件一开始就不满足,因为判断条件是在执行代码块之后。
    • while循环可能会一次都不执行代码块,如果条件一开始就不满足。

总结:do-while循环和while循环的不同之处在于条件判断的时机。do-while循环先执行一次代码块再判断条件,保证代码块至少执行一次;而while循环先判断条件再执行代码块,可能一次都不执行。

五、for循环

C语言中的for循环是一种常用的循环结构,用于重复执行一段代码。

for循环的语法如下:

其中,初始化表达式在循环开始之前只执行一次,用于初始化循环变量;循环条件在每次循环迭代之前都会被检查,如果条件为真,则执行循环体代码,否则跳出循环;更新表达式在每次循环迭代之后执行,用于更新循环变量的值。

下面是一个计算1到10之间整数之和的例子:

#include <stdio.h>

int main() {
    int sum = 0;
    for (int i = 1; i <= 10; i++) {
        sum += i;
    }
    printf("Sum: %d\n", sum);
    return 0;
}

在这个例子中,初始化表达式初始化了循环变量`i`为1;循环条件判断`i`是否小于等于10;循环体代码将`i`加到`sum`上,并使用更新表达式将`i`递增。

- 循环变量的初始化、条件判断和更新

在C语言中,for循环的语法如下:

for (初始化; 条件判断; 更新) {
    // 循环体
}

循环变量的初始化:在for循环开始之前,可以通过初始化语句来给循环变量赋初始值。通常情况下,循环变量是一个整型变量,可以使用赋值语句为循环变量初始化,例如:

for (int i = 0; i < 10; i++) {
    // 循环体
}

条件判断:在每一次循环迭代开始之前,都会对条件进行判断,如果条件为真,则执行循环体;如果条件为假,则退出循环。条件判断通常使用比较运算符(如<、<=、>、>=、==、!=)进行判断,例如:

for (int i = 0; i < 10; i++) {
    // 循环体
}

更新:在每一次循环迭代结束之后,会执行更新语句,通常用于更新循环变量的值。更新可以是对循环变量进行自增或自减操作,也可以是对循环变量进行赋值操作。例如:

for (int i = 0; i < 10; i++) {
    // 循环体
}

需要注意的是,初始化、条件判断和更新都可以省略,但分号必须保留。如果省略了条件判断,则相当于条件永远为真,即无限循环。如果省略了初始化和更新,那么需要在循环外部提前定义循环变量,并确保更新循环变量的语句在循环体内部。例如:

int i;
for (; i < 10; ) {
    // 循环体
    i++;
}

 五、continue和break语句


- continue语句的作用

continue语句的作用是跳过当前循环中剩下的代码,直接进行下一轮循环的执行。当程序执行到continue语句时,它会立即结束当前循环的剩余代码,然后跳转到循环的控制条件处,判断是否继续执行循环体。

通常情况下,continue语句会与if语句结合使用,用于跳过某些特定条件下的循环迭代。当满足某个条件时,程序会调用continue语句,跳过该条件下的迭代过程,直接进行下一轮循环的判断和执行。

以下是一个使用continue语句的示例:


#include <stdio.h>

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


在上述示例中,循环从1到10,但是当i为偶数时,程序会调用continue语句,跳过该迭代过程,不执行printf语句。因此,输出结果为1 3 5 7 9。

- break语句的作用

在C语言中,`break`语句主要用于循环语句和`switch`语句中,其作用为跳出当前的循环或者`switch`语句。

在循环语句中,当满足某个条件时,可以使用`break`语句来立即跳出循环,而不需要继续执行循环中的剩余代码。这样可以有效地控制程序的流程,提高程序的效率。

在`switch`语句中,`break`语句用于结束当前`case`分支的执行,并跳出`switch`语句。这样可以避免后续`case`分支的代码被执行,从而实现选择性执行不同的代码块。

综上所述,`break`语句通过跳出循环或者`switch`语句,可以中断程序的正常执行流程,从而实现程序的跳转和控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值