C语言分支结构

关系运算符

在学习分支结构前,先来了解一下C语言的关系运算符。在C语言中,关系运算符就是比较运算符,对两个操作数进行比较,结果为“真”或“假”。C语言共提供了6中关系运算符,如下:

运算符 < <= > >= == !=

名称 小于 小于或等于 大于 大于或等于 等于 不等于

if-else语句

if-else语句的一般形式为:

if(表达式)

    语句1;

else

    语句2;

该语句用于实现分支结构,根据表达式的值选择语句1或语句2中的一条执行。if-else语句的执行流程如下:

首先需要求解表达式,如果表达式的值为“真”,则执行语句1;如果表达式的值为“假”,则执行语句2。

例:判断一个数字是奇数还是偶数。

#include<stdio.h>

int main(){

    int x;

    printf("请输入一个数字:");

    scanf("%d", &x);

    if(x % 2 == 0){

        printf("%d是偶数!\n", x);

    }else{

        printf("%d是奇数!\n", x);

    }

    return 0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

scanf()函数:

上述代码中的scanf()函数是系统提供的用于输入的库函数,也在系统文件stdio.h中声明。该函数用于从键盘输入数据,其调用格式与函数printf()类似:

scanf(格式控制字符串,输入参数1,…,输入参数n);

格式控制字符串表示输入的格式,输入参数是变量地址(变量名前加&)。

格式控制字符串中包含两种信息:格式控制说明和普通字符。

① 格式控制说明:按指定的格式读入数据,它包含以%开头的格式控制字符,不同类型的数据采用不同的格式控制字符(和printf()函数一样)。

scanf()函数的输入参数必须和格式控制字符串中的格式控制说明相对应,并且它们的类型,个数和位置要一一对应。

② 普通字符:在输入数据时,需要原样输入的字符。

例:scanf(“x=%d”, &x);

程序输入:

x = 13

上述代码运行效果:

多分支结构和else-if语句

else-if语句是最常用的实现多分支(多路选择)的方法,一般形式为:

if(表达式1)

    语句1;

else if(表达式2)

    语句2;

else if(表达式n-1)

    语句n-1;

else

    语句n;

执行的流程图如下:

首先会求解表达式1,如果表达式1的值为“真”,则执行语句1,并结束整个if语句的执行,否则,求解表达式2…最后的else处理给出条件都不满足的情况,即表达式1、表达式2…表达式n-1的值都为“假”时,执行语句n。

下面来看一个简单的例子:

输入一个形式如 “操作数    运算符   操作数” 的四则运算表达式,输出运算结果。

#include<stdio.h>

int main(){

    double value1, value2;

    char op;

    printf("请输入一个表达式: ");

    scanf("%lf%c%lf", &value1, &op, &value2);

    if(op == '+')

        printf("%.2f + %.2f = %.2f\n", value1, value2, value1+value2);

    else if(op == '-')

        printf("%.2f - %.2f = %.2f\n", value1, value2, value1-value2);

    else if(op == '*')

        printf("%.2f * %.2f = %.2f\n", value1, value2, value1*value2);

    else if(op == '/')

        printf("%.2f / %.2f = %.2f\n", value1, value2, value1/value2);

    else

        printf("请输入正确格式数据!\n");

    return 0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

char字符内息的数据,包含一个字符型常量,字符写在单引号中。

输出%.2f为输出字符型变量,并保留2位小数。

上述案例中输出结果为:

字符型数据的输入和输出

字符型数据的输入输出可以用scanf()、printf(),也可以用getchar()、putchar()。

scanf()和printf()这里就不多说了,这里说一下getchar()和putchar()。

字符输入函数getchar()

调用字符输入函数getchar()可以从键盘输入一个字符。

设ch是字符型变量,函数getchar()的一般使用格式为:

ch = getchar();

其功能是从键盘输入一个字符,并赋值给变量ch。

由于函数getchar()只能读入一个字符,如果输入多个字符,则需要多次调用该函数。

字符输出函数putchar()

调用字符输出函数putchar()可以输出一个字符

函数putchar()的一般调用格式为:

putchar(输出参数);

其功能是输出参数是字符型变量或字符型常量。

【注】函数getchar()和putchar()只能处理单个字符的输入和输出,即调用一次函数,只能输入或输出一个字符。

逻辑运算符

上面的例子关系表达式都是只给定了一个条件,如果需要同时满足两个条件时,就需要用到逻辑运算符了。C语言提供了三种逻辑运算符,如下:

运算符 ! && ||

名称 逻辑非 逻辑与 逻辑或

设a和b表示逻辑运算对象,逻辑运算符的功能描述如下:

!a:如果a为“真”,结果是“假”;如果a为“假”,结果是“真”。

a && b:当a和b都为“真”时,结果是“真”;否则结果为“假”。

a || b:但a和b都为“假”时,结果是“假”;否则结果是“真”。

同样来通过一个例子来了解一下其用法

判断键盘输入的字符是否为英文字母

#include<stdio.h>

int main(){

    char ch;

    printf("请输入一个字符:");

    ch = getchar(); /* 输入一个字符赋值给ch变量 */

    printf("输入的字符为:");

    putchar(ch);

    if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){

        printf("\n%c是字母!", ch);

    }else{

        printf("\n%c不是字母!", ch);

    }

    return 0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

测试运行结果如下:

输入一个年份,判断是否是闰年

#include<stdio.h>

int main(){

    int year;

    printf("请输入一个年份:");

    scanf("%d", &year);

    if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))

        printf("%d是闰年", year);

    else

        printf("%d不是闰年", year);

    return 0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

测试结果如下:

嵌套if语句

在if-else语句的内嵌语句是另一条基本的if语句,就形成了嵌套的if-else语句。形式如下。

if(表达式1)

    if(表达式2)   语句1;

    else   语句2;

else

    if(表达式3)   语句3;

    else 语句4;

流程图如下:

具体用法如下:

#include<stdio.h>

int main(){

    int x;

    printf("请输入一个整数:");

    scanf("%d", &x);

    if(x > 50){

        if(x % 2  == 0){

            printf("%d是一个大于50的偶数!", x);

        }else{

            printf("%d是一个大于50的奇数!", x);

        }

    }else{

        printf("%d小于50", x);

    }

    return 0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

测试效果如下:

switch语句

switch语句可以处理多分支选择问题,根据其中break语句的使用方法(break语句为强制结束循环),一般分两种情况。

1、在switch语句的每个语句段中都使用break语句,也是switch语句的主要使用方法,一般形式为:

switch(表达式){

    case 常量表达式1:语句段1; break;

    case 常量表达式2:语句段2: break;

        …

    case 常量表达式n:语句段n; break;

    default: 语句段n+1; break;

}

该switch语句的执行流程如下:

首先求解表达式,如果表达式的值与某个常量表达式的值相等,则执行该常量表达式后的相应语句段,如果表达式的值与任何一个常量表达式的值都不相等,则执行default后的语句段,最后执行break语句,跳出switch语句。

在switch语句中,表达式和常量表达式的值一般是整形或字符型。每个语句段可以包括一条或多条语句,也可以为空语句。

switch语句中default可以省略,如果省略了default,当表达式的值与任何一个常量表达式的值都不相等时,就什么都不执行。

还是上面的那个小例子:输入一个形式如 “操作数 运算符 操作数” 的四则运算表达式,输出运算结果。用switch语句编写。代码如下:

#include<stdio.h>

int main(){

    double value1, value2;

    char op;

    printf("请输入一个表达式:");

    scanf("%lf%c%lf", &value1, &op, &value2);

    switch(op){

        case '+':

            printf("%.2f + %.2f = %.2f\n", value1, value2, value1+value2);

            break;

        case '-':

            printf("%.2f - %.2f = %.2f\n", value1, value2, value1-value2);

            break;

        case '*':

            printf("%.2f * %.2f = %.2f\n", value1, value2, value1*value2);

            break;

        case '/':

            printf("%.2f / %.2f = %.2f\n", value1, value2, value1/value2);

            break;

        default:

            printf("请输入正确格式数据!\n");

            break;

    }

    return 0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

运行效果如下:

2、在switch语句中不使用break语句

break语句在switch语句中是可选的,不使用break的switch语句如下:

switch(表达式){

    case 常量表达式1:语句段1;

    case 常量表达式2:语句段2:

        …

    case 常量表达式n:语句段n;

    default: 语句段n+1;

}

该switch语句的执行流程如下:

求解表达式后,如果表达式的值与某个常量表达式的值相等,则执行该常量表达式后的所有语句段,如果表达式的值与任何一个常量表达式的值都不相等,则执行default后的所有语句段。

不使用break时,如果表达式的值与常量表达式2的值相等,不但执行语句段2,还执行其后的所有语句段,即执行语句段2 ~ 语句段n+1。

比较这两种switch语句的形式和用法,如果执行相应的语句段后,要终止switch语句的继续执行,可以使用break语句,它一般放在语句段的最后,用于跳出正在执行的switch语句;否则,就继续执行其后的所有语句段。

由此可见,在switch语句所有语句段的末尾使用break,可以降低,清晰的实现多分支选择,这也是switch语句的主要使用方法。

————————————————

版权声明:本文为CSDN博主「小马 同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_40205116/article/details/105514390

默认分类 2022-04-13 01:46:01 通过 网页 浏览(1420)

共有0条评论!

发表评论