分⽀和循环(上)

前言

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实
现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种
结构的组合。
我们可以使⽤ifswitch 实现分⽀结构,使⽤forwhiledo while实现循环结构

1.if语句

1.1 单分支if语句

单分支if语句是最基本和常见的条件语句。它的语法格式如下:

if (条件表达式) {
    // 条件成立时执行的代码
}

首先,if是一个关键字,后面紧跟着一对圆括号,括号中是条件表达式。这个条件表达式可以是任何能够返回布尔值的表达式,结果只有两种可能:真或假。如果条件表达式的结果为真,则执行花括号中的代码;如果条件表达式的结果为假,则不执行花括号中的任何代码。

请注意,如果if语句后面只有一条语句,则可以不使用花括号。例如:

if (a > b)
    printf("a > b");

这个if语句只有一条语句,所以可以省略花括号。然而,为了代码的清晰和可读性,建议还是添加花括号。

下面是一个单分支if语句的示例:

#include <stdio.h>

int main()
{
    int x, y;
    printf("请输入两个整数:\n");
    scanf("%d%d", &x, &y);
    if (x > y)
        printf("x大于y\n");
    printf("程序结束\n");
    return 0;
}

上面的程序中,用户输入两个整数,然后判断x是否大于y,如果成立,输出一句话。无论条件是否成立,都会输出“程序结束”。这个示例中使用了单分支if语句来做条件判断,它非常简单而常见,常用于控制程序的执行流程。

1.2 双分支if-else

双分支if-else语句用于条件判断,它的语法格式为:

if (condition) {
    // 执行condition为真的语句
}
else {
    // 执行condition为假的语句
}

其中,condition是一个表达式或变量,用于判断条件是否成立。如果条件成立,就执行if语句块中的语句;如果条件不成立,就执行else语句块中的语句。

双分支if-else语句可以嵌套使用,如下所示:

if (condition1) {
    // 执行condition1为真的语句
}
else if (condition2) {
    // 执行condition2为真的语句
}
else {
    // 执行condition1和condition2都为假的语句
}

其中,else if语句块可以有多个,用于判断多个条件。如果第一个if语句的条件不成立,则执行下一个else if语句块的条件判断,直到找到条件成立的else if语句块,或者执行最后一个else语句块。

需要注意的是,condition表达式的值应该是一个布尔类型(truefalse),但C语言中没有布尔类型,通常使用整型来表示布尔类型,0表示假,非0表示真。如果condition表达式的值是一个实数或字符类型,它会被自动转换为整型进行判断。

1.3分⽀中包含多条语句

if语句的分支中可以包含多条语句,这些语句可以是单个语句,也可以是一个代码块。代码块使用花括号{}将多条语句括在一起形成一个单一的语句。语法格式如下:

if (condition) {
    statement1;
    statement2;
    ...
}

或者

if (condition) {
    // 多个语句组成的代码块
    {
        statement1;
        statement2;
        ...
    }
}

程序的执行顺序是从上向下顺序执行if分支中的所有语句,直到if分支中的所有语句执行完成,或者遇到returnbreakcontinue等控制语句强制跳出if语句块。

需要注意,当if语句的分支中存在多条语句时,没有使用花括号将多条语句括在一起可能会引起逻辑错误。因此,我们建议尽可能使用花括号将多条语句括在一起。如果if分支中只有一条语句,可以省略花括号,但这种做法会使代码不易于阅读和维护,因此也不建议这样做。

1.4 嵌套if

if语句可以嵌套使用,也就是在一个if语句中再嵌套一个if语句或多个if语句,以实现更复杂的判断逻辑。

嵌套if语句的语法形式如下:

if (condition1){
  //code to be executed if condition1 is true
  if (condition2){
    //code to be executed if both condition1 and condition2 are true
  }
}

在嵌套if语句中,每个if语句都必须有一个对应的else语句或者外层if语句的else语句,以应对所有可能的情况。

下面是一个简单的嵌套if语句的例子:

#include <stdio.h>

int main() {
   int num1 = 10, num2 = 20;

   if (num1 == 10) {
      printf("num1 is equal to 10\n");

      if (num2 == 20) {
         printf("num2 is equal to 20\n");
      }
      else {
         printf("num2 is not equal to 20\n");
      }
   }
   else {
      printf("num1 is not equal to 10\n");
   }

   return 0;
}

在上面的例子中,如果num1等于10,则进入第一个if语句。然后,如果num2等于20,则进入第二个if语句,如果num2不等于20,则进入第二个if语句的else语句。如果num1不等于10,则进入第一个if语句的else语句。

需要注意的是,当if语句嵌套过多时,代码可读性会变得很差。因此,尽量避免过多地嵌套if语句,可以采用其他方式,如switch语句或函数来处理复杂的判断逻辑。

1.5 悬空else问题

else语句可以和最近的if语句或者是最近的未匹配的if语句关联。如果在if语句中使用了嵌套的if语句,那么就可能出现悬空的else问题。

所谓的悬空的else问题,是指一个else语句与多个if语句匹配的问题。当if语句不止一个时,else语句不知道与哪个if语句匹配,就会出现悬空的情况。

例如:

if (a > 0)
    if (a > 10)
        printf("a is greater than 10\n");
else
    printf("a is not greater than 0\n");

在这个例子中,else语句是和最近的if语句关联的,也就是if (a > 10)。这个代码可能会被认为是:

if (a > 0)
{
    if (a > 10)
    {
        printf("a is greater than 10\n");
    }
    else
    {
        printf("a is not greater than 10\n");
    }
}

但是实际上,由于else语句只和最近的if语句匹配,所以这段代码的真正含义是:

if (a > 0)
{
    if (a > 10)
    {
        printf("a is greater than 10\n");
    }
}
else
{
    printf("a is not greater than 0\n");
}

这种悬空的else问题可能导致代码逻辑错误。为了避免这种情况,应该使用括号明确if语句和else语句的关系。例如:

if (a > 0)
{
    if (a > 10)
    {
        printf("a is greater than 10\n");
    }
}
else
{
    printf("a is not greater than 0\n");
}

或者是:

if (a > 0)
{
    if (a > 10)
    {
        printf("a is greater than 10\n");
    }
    else
    {
        printf("a is not greater than 10\n");
    }
}
else
{
    printf("a is not greater than 0\n");
}

总之,为了避免悬空的else问题,应该养成在if语句和else语句中明确使用花括号的好习惯。

2.关系操作符

关系操作符用于比较两个数值的大小关系,返回的结果是一个布尔值(true或false)。

C语言中的关系操作符如下:

操作符含义
==等于
!=不等于
>大于
>=大于等于
<小于
<=小于等于

这些操作符都是二元操作符,左右两边都必须是数值类型(如int、float等)。比较时,左右两边的值会被自动转换为相同的类型,然后进行比较。

例如:

int a = 5, b = 3;
if (a > b)
{
    printf("a is greater than b\n");
}

在这个例子中,>是关系操作符,用于比较a是否大于b。由于a和b都是整数类型,可以直接进行比较。

另外需要注意的是,关系操作符的优先级比赋值操作符低,比算数操作符高。

例如,表达式a > b = c在C语言中会被解释为(a > (b = c)),也就是先将b赋值为c,然后再比较ab的大小。

因此,为了避免出现意外的结果,建议在使用关系操作符时加上括号来明确优先级。例如:

int a = 5, b = 3, c = 2;
if ((a > b) == (b > c))
{
    printf("a is greater than b, and b is greater than c\n");
}

在这个例子中,为了比较a是否比b大,并且b是否比c大,使用了括号来明确优先级,保证了操作的正确性。

3. 逻辑操作符:&& , || , !

C语言里的逻辑操作符有三个:&&(逻辑与)、||(逻辑或)、(逻辑非)。

  1. 逻辑与(&&):如果两个操作数都为真,则整个表达式的值为真。如果有一个操作数为假,则整个表达式的值为假。

  2. 逻辑或(||):如果两个操作数中至少有一个为真,则整个表达式的值为真。如果两个操作数都为假,则整个表达式的值为假。

  3. 逻辑非():如果操作数为真,则整个表达式的值为假;如果操作数为假,则整个表达式的值为真。

逻辑操作符通常用于if语句、while循环等条件判断语句中,使得程序可以根据不同的条件来执行不同的操作。例如,可以使用逻辑与操作符将两个条件组合起来,只有当两个条件都满足时才执行某个操作。逻辑或操作符则可以将两个条件组合起来,只要其中一个条件满足就可以执行某个操作。而逻辑非操作符则可以将一个条件的结果取反,改变其原有的逻辑意义。

3.1 逻辑取反运算符

逻辑取反运算符是一个前缀操作符,用符号“!”表示。它在布尔表达式中使用,以将表达式的值反转。如果表达式为真,则取反后变成假;如果表达式为假,则取反后变成真。

例如,如果有一个布尔变量x为真,则逻辑取反运算符可以用来将其值变为假:

x = true; // x = 1
x = !x;   // x = false (0)

在上面的例子中,变量x首先被赋值为真(1),然后使用逻辑取反运算符将其值反转为假(0)。

逻辑取反运算符常用于条件语句中,例如:

if (!x) {
   // 如果x为假,则执行这里的代码
}

在上面的例子中,如果变量x为假,则if语句中的代码将被执行。

需要注意的是,在C语言中,任何非零的值都被视为真,而0被视为假。因此,使用逻辑取反运算符时,非零的值将被取反为0,而0将被取反为1。在C语言中,逻辑取反运算符是一个前缀操作符,用符号“!”表示。它在布尔表达式中使用,以将表达式的值反转。如果表达式为真,则取反后变成假;如果表达式为假,则取反后变成真。

例如,如果有一个布尔变量x为真,则逻辑取反运算符可以用来将其值变为假:

x = true; // x = 1
x = !x;   // x = false (0)

在上面的例子中,变量x首先被赋值为真(1),然后使用逻辑取反运算符将其值反转为假(0)。

逻辑取反运算符常用于条件语句中,例如:

if (!x) {
   // 如果x为假,则执行这里的代码
}

在上面的例子中,如果变量x为假,则if语句中的代码将被执行。

需要注意的是,在C语言中,任何非零的值都被视为真,而0被视为假。因此,使用逻辑取反运算符时,非零的值将被取反为0,而0将被取反为1。

3.2 与运算符

与运算符是一个二元操作符,用符号“&&”表示。它用于对两个布尔表达式进行逻辑“与”操作,只有当两个表达式都为真时,整个表达式才会为真。否则,整个表达式为假。

例如,如果有两个布尔变量x和y,它们的值分别为真和假,使用与运算符可以执行以下操作:

x = true; // x = 1
y = false; // y = 0
if (x && y) {
   // 如果x和y都为真,则执行这里的代码
} else {
   // 如果x或y有一个为假,则执行这里的代码
}

在上面的例子中,由于变量y的值为假,因此整个布尔表达式的结果也为假,所以执行了else语句中的代码块。

需要注意的是,C语言中的与运算符是一个“短路”操作符,即如果第一个表达式已经为假,那么第二个表达式将不会被计算。这是因为如果第一个表达式为假,整个布尔表达式的值已经为假,不需要再计算第二个表达式。

例如,如果有两个变量x和y,它们的值都是一个函数的返回值,但是函数可能会返回0,那么可以使用与运算符进行短路操作:

if (x != 0 && y != 0) {
   // 如果x和y都不为0,则执行这里的代码
}

在上面的例子中,如果函数返回值为0,那么第一个表达式就会为假,整个布尔表达式的值就是假,因此第二个表达式不会被计算。这种技巧在避免函数调用时的不必要开销时非常有用。在C语言中,与运算符是一个二元操作符,用符号“&&”表示。它用于对两个布尔表达式进行逻辑“与”操作,只有当两个表达式都为真时,整个表达式才会为真。否则,整个表达式为假。

例如,如果有两个布尔变量x和y,它们的值分别为真和假,使用与运算符可以执行以下操作:

x = true; // x = 1
y = false; // y = 0
if (x && y) {
   // 如果x和y都为真,则执行这里的代码
} else {
   // 如果x或y有一个为假,则执行这里的代码
}

在上面的例子中,由于变量y的值为假,因此整个布尔表达式的结果也为假,所以执行了else语句中的代码块。

需要注意的是,C语言中的与运算符是一个“短路”操作符,即如果第一个表达式已经为假,那么第二个表达式将不会被计算。这是因为如果第一个表达式为假,整个布尔表达式的值已经为假,不需要再计算第二个表达式。

例如,如果有两个变量x和y,它们的值都是一个函数的返回值,但是函数可能会返回0,那么可以使用与运算符进行短路操作:

if (x != 0 && y != 0) {
   // 如果x和y都不为0,则执行这里的代码
}

在上面的例子中,如果函数返回值为0,那么第一个表达式就会为假,整个布尔表达式的值就是假,因此第二个表达式不会被计算。这种技巧在避免函数调用时的不必要开销时非常有用。

3.3 或运算符

C语言中的或运算符是"||",也被称作逻辑或运算符。它是一种二元运算符,其作用是将两个逻辑表达式连接起来,并返回一个布尔值。

当使用或运算符时,如果两个表达式中有任意一个为真,整个表达式就会返回真;只有当两个表达式都为假时,表达式才返回假。

例如:

int a = 5;
int b = 10;
if(a == 5 || b == 5) {
    printf("a或b等于5\n");
}

在这个例子中,逻辑表达式"a == 5"为真,因此整个表达式为真。注意到第二个表达式"b == 5"并没有被运算,这是因为在或运算中,只需要一个为真即可得到真,因此第二个表达式不必被计算。

或运算也可以用于连接多个表达式:

int a = 5;
int b = 10;
int c = 15;
if(a == 5 || b == 5 || c == 5) {
    printf("a、b或c等于5\n");
}

在这个例子中,只要a、b或c中有任意一个为5,整个表达式就为真。C语言中的或运算符是"||",也被称作逻辑或运算符。它是一种二元运算符,其作用是将两个逻辑表达式连接起来,并返回一个布尔值。

当使用或运算符时,如果两个表达式中有任意一个为真,整个表达式就会返回真;只有当两个表达式都为假时,表达式才返回假。

例如:

int a = 5;
int b = 10;
if(a == 5 || b == 5) {
    printf("a或b等于5\n");
}

在这个例子中,逻辑表达式"a == 5"为真,因此整个表达式为真。注意到第二个表达式"b == 5"并没有被运算,这是因为在或运算中,只需要一个为真即可得到真,因此第二个表达式不必被计算。

或运算也可以用于连接多个表达式:

int a = 5;
int b = 10;
int c = 15;
if(a == 5 || b == 5 || c == 5) {
    printf("a、b或c等于5\n");
}

在这个例子中,只要a、b或c中有任意一个为5,整个表达式就为真。

3.4 短路

短路是C语言中一种逻辑运算符的行为。在C语言中,逻辑运算符包括AND、OR和NOT等。在使用逻辑运算符时,如果表达式中的操作数已经能够确定表达式的返回结果,那么编译器将不再计算剩余的表达式。这种行为被称为短路。

具体来说,AND运算符表示逻辑与,OR运算符表示逻辑或。在使用AND和OR运算符时,如果第一个操作数的值能够确定整个表达式的值,则不会计算第二个操作数的值。这被称为逻辑短路。例如:

if (a > b && c < d) {
    // do something
}

在这个例子中,如果a的值小于等于b,则整个表达式的值将为false,c < d的值将不会被计算。同样的,如果a的值大于b了,则c < d的值将会被计算。

对于OR运算符,如果第一个操作数的值已经是true,则不会计算第二个操作数。例如:

if (a == 0 || b == 0) {
    // do something
}

在这个例子中,如果a的值不等于0,则整个表达式的值将为true,b == 0的值将不会被计算。同样的,如果a的值等于0,则b == 0的值将会被计算。

逻辑短路是一种优化技术,在一些特定的情况下可以提高代码的执行效率。但是,需要注意的是,逻辑短路可能会导致一些隐藏的错误,特别是在使用赋值操作的时候。因此,在编写代码时需要注意这一点。短路是C语言中一种逻辑运算符的行为。在C语言中,逻辑运算符包括AND、OR和NOT等。在使用逻辑运算符时,如果表达式中的操作数已经能够确定表达式的返回结果,那么编译器将不再计算剩余的表达式。这种行为被称为短路。

具体来说,AND运算符表示逻辑与,OR运算符表示逻辑或。在使用AND和OR运算符时,如果第一个操作数的值能够确定整个表达式的值,则不会计算第二个操作数的值。这被称为逻辑短路。例如:

if (a > b && c < d) {
    // do something
}

在这个例子中,如果a的值小于等于b,则整个表达式的值将为false,c < d的值将不会被计算。同样的,如果a的值大于b了,则c < d的值将会被计算。

对于OR运算符,如果第一个操作数的值已经是true,则不会计算第二个操作数。例如:

if (a == 0 || b == 0) {
    // do something
}

在这个例子中,如果a的值不等于0,则整个表达式的值将为true,b == 0的值将不会被计算。同样的,如果a的值等于0,则b == 0的值将会被计算。

逻辑短路是一种优化技术,在一些特定的情况下可以提高代码的执行效率。但是,需要注意的是,逻辑短路可能会导致一些隐藏的错误,特别是在使用赋值操作的时候。因此,在编写代码时需要注意这一点。

4.switch语句

switch语句是一种多分支选择语句,用于根据一个表达式的值选择不同的执行路径。switch语句通常用于简化多个if-else语句的代码,使代码更加简洁、易读。

switch语句的基本语法如下:

switch (expression) {
    case value1:
        // do something if expression == value1
        break;
    case value2:
        // do something if expression == value2
        break;
    // more cases...
    default:
        // do something if expression doesn't match any case
        break;
}

switch语句中的expression是一个表达式,可以是任何标量类型(比如整数、字符等),它的值将与每个case的值进行比较。case后面跟着的value是一个常量表达式,用于与expression的值进行比较。

当expression的值与某个case的value匹配时,该case下的语句将被执行。如果没有匹配到任何case,那么将执行default下的语句。在每个case的代码块中,可以包含任意数量的语句,不过建议加上break语句,以避免执行其它case的代码。

需要注意的是,switch语句中的case标签必须是唯一的,不能重复。而且,case后面的值必须是常量表达式,不能是变量或表达式结果。

以下是一个简单的例子:

switch (grade) {
    case 'A':
        printf("Excellent\n");
        break;
    case 'B':
        printf("Good\n");
        break;
    case 'C':
        printf("Fair\n");
        break;
    case 'D':
        printf("Poor\n");
        break;
    case 'F':
        printf("Fail\n");
        break;
    default:
        printf("Invalid grade\n");
        break;
}

在这个例子中,switch语句根据变量grade的值选择不同的执行路径。如果grade的值为’A’,将输出"Excellent"。如果grade的值为’B’,将输出"Good",以此类推。如果grade的值不匹配任何case,将输出"Invalid grade"。C语言中的switch语句是一种多分支选择语句,用于根据一个表达式的值选择不同的执行路径。switch语句通常用于简化多个if-else语句的代码,使代码更加简洁、易读。

switch语句的基本语法如下:

switch (expression) {
    case value1:
        // do something if expression == value1
        break;
    case value2:
        // do something if expression == value2
        break;
    // more cases...
    default:
        // do something if expression doesn't match any case
        break;
}

switch语句中的expression是一个表达式,可以是任何标量类型(比如整数、字符等),它的值将与每个case的值进行比较。case后面跟着的value是一个常量表达式,用于与expression的值进行比较。

当expression的值与某个case的value匹配时,该case下的语句将被执行。如果没有匹配到任何case,那么将执行default下的语句。在每个case的代码块中,可以包含任意数量的语句,不过建议加上break语句,以避免执行其它case的代码。

需要注意的是,switch语句中的case标签必须是唯一的,不能重复。而且,case后面的值必须是常量表达式,不能是变量或表达式结果。

以下是一个简单的例子:

switch (grade) {
    case 'A':
        printf("Excellent\n");
        break;
    case 'B':
        printf("Good\n");
        break;
    case 'C':
        printf("Fair\n");
        break;
    case 'D':
        printf("Poor\n");
        break;
    case 'F':
        printf("Fail\n");
        break;
    default:
        printf("Invalid grade\n");
        break;
}

在这个例子中,switch语句根据变量grade的值选择不同的执行路径。如果grade的值为’A’,将输出"Excellent"。如果grade的值为’B’,将输出"Good",以此类推。如果grade的值不匹配任何case,将输出"Invalid grade"。

4.1 if语句和switch语句的对⽐

if语句和switch语句都是用于控制程序流程的条件语句,但它们的应用场景和使用方法略有不同,下面做一些对比介绍:

  1. 应用场景

if语句适合用于仅有少数条件需要检查的情况,比如判断一个数的正负性,或者检查某个变量是否为空等。

switch语句适合用于有多种条件需要检查的情况,并且这些条件都是基于同一个表达式的取值结果。比如根据用户的输入显示不同的选项,或者根据月份判断季节等。

  1. 写法

if语句的语法比较简单,通常类似于以下格式:

if (condition) {
    // do something
} else {
    // do something else
}

其中,condition是待判断的条件表达式,如果它的值为true,则执行if代码块中的语句;如果它的值为false,则执行else代码块中的语句。

switch语句的语法稍微复杂一些,通常类似于以下格式:

switch (expression) {
    case value1:
        // do something for value1
        break;
    case value2:
        // do something for value2
        break;
    default:
        // do something else
        break;
}

其中,expression是待判断的表达式,它的取值结果将会与后面的每个case的值进行比较。如果与某个case的值相等,则执行该case下的语句;如果都不相等,则执行default下的语句。

  1. 执行效率

if语句的执行效率相对比较高,因为它只需要检查一个条件,就可以确定代码的执行路径。而且,if语句的代码块可以包含任意数量的语句,非常灵活。

switch语句的执行效率相对较低,因为它需要依次检查每个case的值,直到找到相等的为止。而且,switch语句的代码块必须以break语句结束,不能包含其它控制流语句,不太灵活。

综上所述,if语句和switch语句各有其适用的场景和优缺点,需要根据具体情况选择使用。C语言中的if语句和switch语句都是用于控制程序流程的条件语句,但它们的应用场景和使用方法略有不同,下面做一些对比介绍:

  1. 应用场景

if语句适合用于仅有少数条件需要检查的情况,比如判断一个数的正负性,或者检查某个变量是否为空等。

switch语句适合用于有多种条件需要检查的情况,并且这些条件都是基于同一个表达式的取值结果。比如根据用户的输入显示不同的选项,或者根据月份判断季节等。

  1. 写法

if语句的语法比较简单,通常类似于以下格式:

if (condition) {
    // do something
} else {
    // do something else
}

其中,condition是待判断的条件表达式,如果它的值为true,则执行if代码块中的语句;如果它的值为false,则执行else代码块中的语句。

switch语句的语法稍微复杂一些,通常类似于以下格式:

switch (expression) {
    case value1:
        // do something for value1
        break;
    case value2:
        // do something for value2
        break;
    default:
        // do something else
        break;
}

其中,expression是待判断的表达式,它的取值结果将会与后面的每个case的值进行比较。如果与某个case的值相等,则执行该case下的语句;如果都不相等,则执行default下的语句。

  1. 执行效率

if语句的执行效率相对比较高,因为它只需要检查一个条件,就可以确定代码的执行路径。而且,if语句的代码块可以包含任意数量的语句,非常灵活。

switch语句的执行效率相对较低,因为它需要依次检查每个case的值,直到找到相等的为止。而且,switch语句的代码块必须以break语句结束,不能包含其它控制流语句,不太灵活。

综上所述,if语句和switch语句各有其适用的场景和优缺点,需要根据具体情况选择使用。

4.2 switch语句中的default

switch 语句用于根据不同的条件执行不同的代码块。语法如下:

switch (expression) {
    case constant-expression1: // 执行的代码块1
        break;
    case constant-expression2: // 执行的代码块2
        break;
    //...
    default: // 如果expression不匹配任何一个case就执行default
        break; // 可以省略break
}

其中,default 关键字用于指定在 switch 表达式的值与 case 子句中的任何常量表达式都不匹配时,要执行的语句块。如果所有的 case 子句都没有匹配到,就会执行 default 子句中的代码。

例如:

switch (x) {
    case 1:
        printf("x is 1\n");
        break;
    case 2:
        printf("x is 2\n");
        break;
    default:
        printf("x is neither 1 nor 2\n");
        break;
}

当 x 的值既不是 1 也不是 2 时,程序会执行 default 中的代码块,打印出 “x is neither 1 nor 2”。如果没有 default 子句,程序就会跳过 switch 语句,继续执行下一条语句。

4.3 switch语句中的case和default的顺序问题

在C语言中,switch语句是用于多选一的控制语句,其语法格式如下:

switch(expression){
    case constant-expression1: 
        statement1;
        break;
    case constant-expression2: 
        statement2;
        break;
    ...
    default: 
        statement_default;
        break;
}

其中,expression是要被测试的变量或表达式,case是不同情况的具体值或范围,default是所有case都不能匹配时的默认情况。

在switch语句中,case语句的顺序非常重要。如果两个case语句的值相同,则会执行第一个case语句,并忽略后面的case语句。例如:

switch(x){
    case 1:
        printf("x is 1\n");
        break;
    case 2:
        printf("x is 2\n");
        break;
    case 1:
        printf("x is 1 again\n");
        break;
    default:
        printf("x is neither 1 nor 2\n");
}

在这个例子中,当x=1时,输出结果将是"x is 1",而不是"x is 1 again"。这是因为第一个case语句已经匹配到了x等于1的情况。

相同的道理,default语句必须放在最后,因为它是所有case语句都不能匹配时的默认情况。如果将default语句放在前面,其他case语句就永远不会被执行了。

总之,switch语句中case语句的顺序必须仔细考虑,以确保每个可能的情况都能被正确处理。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值