• C语言学习(四)之分支和跳转


    一、分支和跳转

    1.1 什么是流程控制

    控制程序按特定的条件执行,按照特定的逻辑实现代码的运行。

    1.2 流程控制的分类

    1、顺序执行
    
    • 1

    顺序执行就是按照程序从上到下依次的执行。

    2、选择执行
    
    • 1

    选择执行是想让有些代码按照特定的逻辑运行,符合逻辑时执行,不符合逻辑时不执行的执行顺序。(本文主要讲解选择执行)

    3、循环执行
    
    • 1

    循环执行就是让某段程序一直执行,直到不符合循环执行的条件时,退出循环执行。

    1.3 选择执行

    1.3.1 if 选择结构

    1.3.1.1 语法
    if (表达式){
    当表达式为真时,需要执行的语句
    }else{
    当表达式为假时,需要执行的语句
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    示例1: if最简单的用法

    #include 
    
    int main(void)
    {
    	// 因为3>1恒成立,所以就会执行printf语句
    	if (3 > 1)
    	printf("AAA\n");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1.3.1.2 if的范围问题

    if 默认只能控制一个语句的执行与不执行,如果想要控制多个语句的执行或不执行就必须把这些语句用{}括起来。

    #include 
    
    int main(void)
    
    {
    	if (0 > 1)
    		printf("AAA\n");
    		printf("BBB\n");
    	return 0;
    }
    /*
    总结:
    如果表达式为真,输出结果为AAA
    如果表达式为假,输出结果为BBB
    if默认的只能控制一个语句的执行或不执行
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    #include 
    
    int main(void)
    {
    	if (3 > 2);
    	// 当用大括号包裹起来时,就是执行整个大括号中的内容
    	{
    		printf("AAA\n");
    		printf("BBB\n");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1.3.1.3 if…else…的用法

    else和离它最近的且没有配对的if进行匹配。

    #include 
    
    int main() {
    
    	// 定义变量
    	int Number;
    
    	printf("Please enter a number: ");
    	scanf("%d", &Number);
    
    	// 判断输入的数字是否大于零,如果大于零输出数字大于零,否则输出数字小于零
    	if (Number > 0) {
    	
    		printf("The number > 0");
    	}
    	else
    	{
    		printf("The number < 0");
    	}
    
    	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
    1.3.1.4 if…else if…else…的用法
    #include 
    
    int main(void)
    
    {
    	int i = 0;
    	while (i < 3)
    	{
    		double num;
    		printf("请输入一个数字:");
    		scanf("%lf", &num);
    		if (num > 1)
    			printf("AAA\n");
    		else if (num == 0)  // 判断相等为双等号。
    			printf("BBB\n");
    		else
    			printf("CCC\n");
    		i++;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    1.3.1.5 if的嵌套

    示例:

    #include 
    
    int main(){
    
    // 初始化变量
    int num = 0;
    int score = 0;
    
    // 输入变量的值
    printf("please enter a num:");
    scanf("%d", &num);
    printf("Please enter you score:");
    scanf("%d", &score);
    
    // 判断条件,如果输入的num正确则进入判断分数的程序,并判断分数的等级。
    // 如果输入的num不正确,则输出num错误
    if(num == 111){
    
        printf("welocme");
    
        if (score > 60){
    
            printf("you score level is D");
        }
    }else{
    
        printf("the num error");
    }
        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
    • 28
    • 29
    • 30
    1.3.1.6 C语言对真假的处理

    非零即真
    零就是假

    1.3.1.6 if举例
    1.3.1.6.1 求分数等级
    #include 
    
    int main(void)
    
    {
    	float souce;
    	printf("请输入分数:");
    	scanf("%f", &souce);
    	if (souce > 100)
    		printf("输入超限!!!");
    	else if	(90 <= souce&&souce <= 100) //90-100 优秀
    		printf("优秀\n");
    	else if (80 <= souce&&souce < 90)   //80-90 良好
    		printf("良好\n");
    	else if (60 <= souce&&souce < 80)	//60-80 及格
    		printf("及格\n");
    	else
    		printf("不及格\n");				//0 - 60 不及格
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    1.3.1.6.2 交换变量值
    #include 
    
    int main(void)
    
    {
    	int i = 1;	
    	int j = 2;
    	int  t;		//中间变量
    	t = i;
    	i = j;
    	j = t;
    	printf("%d %d", i ,j);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1.3.1.6.3 if方法实现排序1
    #include 
    
    int main(void)
    
    {
    	while (1)
    	{
    		int a, b, c;	//定义三个变量
    		int d;	//定义中间变量
    		printf("请输入三个数值,空格间隔:\n");
    		scanf("%d %d %d", &a, &b, &c);
    		if (a > b && b > c)
    			printf("降序排序为:%d %d %d\n", a, b, c);
    		else if (b > a && a > c)
    		{
    			d = a; a = b; b = d;	//交换a b值
    			printf("降序排序为:%d %d %d\n", a, b, c);
    		}
    		else if (c > a && a > b)
    		{
    			d = c; c = a; a = d;	//交换a c值
    			d = b; b = c; c = d;	//交换b c值
    			printf("降序排序为:%d %d %d\n", a, b, c);
    		}
    		else if (c > b && b > a)
    		{
    			d = c; c = a; a = d;	//交换a c值
    			printf("降序排序为:%d %d %d\n", a, b, c);
    		}
    		else if (b > c && c > a)
    		{
    			d = a; a = b; b = d;	//交换a b值
    			d = b; b = c; c = d;	//交换b c值
    			printf("降序排序为:%d %d %d\n", a, b, c);
    		}
    		else
    		{
    			d = b; b = c; c = d;	//交换b c值
    			printf("降序排序为:%d %d %d\n", a, b, c);
    		}
    	}
    		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
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    1.3.1.6.4 if方法实现排序2
    #include 
    
    int main(void)
    
    {
    	int a, b, c;
    	int d;
    	while (1)
    	{
    		printf("请输入三个数字:\n");
    		scanf("%d %d %d", &a, &b, &c);
    		if (a > b)
    		{
    			if (a > c)
    			{
    				if (b > c)
    				printf("%d %d %d\n", a, b, c);
    				else
    				printf("%d %d %d\n", a, c, b);
    			}
    			else
    				printf("%d %d %d\n", c, a, b);
    		}
    		else
    		{
    			if (b > c)
    			{
    				if (a > c)
    					printf("%d %d %d\n", b, a, c);
    				else
    					printf("%d %d %d\n", b, c, a);
    			}	
    			else
    				printf("%d %d %d\n", c, b, a);
    		}
    	}
    	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
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    1.3.1.7 if的常见问题解析

    1、空语句的问题
    2、即便表达式1和2都成立,也只会执行一个语句。

    1.3.2 switch选择结构

    switch 程序根据表达式的值跳转到相应的case值处,然后执行剩下的所有语句,除非执行到break语句进行重定向。表达式和case标签都必须式整数值(包括char类型),标签必须是常量或完全由常量组成的表达式。如果没有case标签与表达式的值匹配,控制则转之标有default语句(如果有的话);否则,将转至执行紧跟在switch后面的语句。

    1.3.2.1 语法
    	switch (整型表达式)
    	{
    	case 常量1:语句; break;
    	case 常量2:语句; break;
    	default:语句;
    		break;
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
     1、所有case后面的常量表达式为便于描述我们姑且称为标签,这些标签都只能是
    	(1)枚举常量
    	(2)数值常量
    	(3)字符常量
    	(4)常变量
    	(5)宏名中的一种,注意普通变量,枚举变量是不能作为标签使用的。
    2、switch后面括号里的表达式允许是任何类型。
    3、 switch是选择不是循环,如果在switch中出现了break语句,该语句的功能只是退出
        switch语句去执行它下面的语句。在switch中出现continue是错误的,除非switch本身
        就属于for或while循环的一部分。
    4、default语句 可选。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1.3.2.2 switch实例
    1.3.2.2.1 示例1
    #include 
    
    int main() {
    
    	// 定义变量
    	int Number;
    
    	printf("Please enter a number:");
    	scanf("%d", Number);
    
    	// 判断输入的数字是否0或1
    	switch (Number)
    	{
    	case 0:printf("输入的数字为零"); break;
    	case 1:printf("输入的数字为壹"); break;
    	default:printf("输入的数字非零非壹");
    		break;
    	}
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    1.3.2.3 多重标签

    多重标签为有的case语句后没有break,执行完当前case语句后会继续执行后面的语句,不会退出switch。当遇到break时,会退出switch语句。

    1.3.2.3.1 多重标签示例
    # include 
    
    int main(){
    
    // 定义变量
    int num = 0;
    
    // switch选择结构
    switch (num)
    {
        // 当第一个case值满足表达式的值且case语句没有break时,第一个case语句执行完成后,
        // 会执行后面的case语句,遇到break后退出switch。
    case 0 :
    case 1: printf("输入的数字为0或1");break;
    
    case 2:
    case 3: printf("输入的数字为2或3");break;
    
    default:printf("不在范围内");
        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
  • 相关阅读:
    MySQL数据库(基础)——期末复习总结
    初识linux之简单了解TCP协议与UDP协议
    Java IO包之File类简介说明
    【Vue+ElementUI】Table表格实现自定义表头展示+表头拖拽排序(附源码)
    4×30m钢筋混凝土简支T梁桥结构设计与计算
    switch中的PVID、VID、untag、tag概念
    vue组件和插槽
    mysql数据库的全量与增量的备份以及恢复
    Linux三剑客:grep的基本使用
    七月集训(1)数组
  • 原文地址:https://blog.csdn.net/qq_46292926/article/details/127568790