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

一、分支和跳转

1.1 什么是流程控制

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

1.2 流程控制的分类

1、顺序执行

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

2、选择执行

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

3、循环执行

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

1.3 选择执行

1.3.1 if 选择结构

1.3.1.1 语法

if (表达式){
    
    
当表达式为真时,需要执行的语句
}else{
    
    
当表达式为假时,需要执行的语句
}

示例1: if最简单的用法

#include <stdio.h>

int main(void)
{
    
    
	// 因为3>1恒成立,所以就会执行printf语句
	if (3 > 1)
	printf("AAA\n");
	return 0;
}

1.3.1.2 if的范围问题

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

#include <stdio.h>

int main(void)

{
    
    
	if (0 > 1)
		printf("AAA\n");
		printf("BBB\n");
	return 0;
}
/*
总结:
如果表达式为真,输出结果为AAA
如果表达式为假,输出结果为BBB
if默认的只能控制一个语句的执行或不执行
*/
#include <stdio.h>

int main(void)
{
    
    
	if (3 > 2);
	// 当用大括号包裹起来时,就是执行整个大括号中的内容
	{
    
    
		printf("AAA\n");
		printf("BBB\n");
	}
}

1.3.1.3 if…else…的用法

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

#include <stdio.h>

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.3.1.4 if…else if…else…的用法

#include <stdio.h>

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.3.1.5 if的嵌套

示例:

#include <stdio.h>

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.3.1.6 C语言对真假的处理

非零即真
零就是假

1.3.1.6 if举例

1.3.1.6.1 求分数等级
#include <stdio.h>

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.3.1.6.2 交换变量值
#include <stdio.h>

int main(void)

{
    
    
	int i = 1;	
	int j = 2;
	int  t;		//中间变量
	t = i;
	i = j;
	j = t;
	printf("%d %d", i ,j);
}
1.3.1.6.3 if方法实现排序1
#include <stdio.h>

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.3.1.6.4 if方法实现排序2
#include <stdio.h>

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.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、所有case后面的常量表达式为便于描述我们姑且称为标签,这些标签都只能是
	(1)枚举常量
	(2)数值常量
	(3)字符常量
	(4)常变量
	(5)宏名中的一种,注意普通变量,枚举变量是不能作为标签使用的。
2、switch后面括号里的表达式允许是任何类型。
3、 switch是选择不是循环,如果在switch中出现了break语句,该语句的功能只是退出
    switch语句去执行它下面的语句。在switch中出现continue是错误的,除非switch本身
    就属于for或while循环的一部分。
4、default语句 可选。

1.3.2.2 switch实例

1.3.2.2.1 示例1
#include <stdio.h>

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.3.2.3 多重标签

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

1.3.2.3.1 多重标签示例
# include <stdio.h>

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;

}

猜你喜欢

转载自blog.csdn.net/qq_46292926/article/details/127568790
今日推荐