5、C语言选择结构

什么是选择结构

C程序的执行通常是按照顺序从上到下逐行执行。
而选择结构是根据某个变量或表达式的值来选择哪些语句执行,哪些语句不执行。
选择结构需要先进行条件判断(对表达式的值判断),根据表达式的值选择是否执行。
三木运算符(?:)就是一个简单的条件判断语句。

if语句

if语句是最常用的条件判断语句
if语句又分为单分支和多分支。
顾名思义,单分支只有一个分支(一次判断),多分支有多个分支(多个判断)。

单分支if语句
单分支if语句是判断表达式是否为真,为真时,执行花括号中的语句(复合语句),为假时跳过复合语句,继续执行后面的代码。
if语句中条件表达式的值只有真(0)、假(0)两个值。

单分支if语句执行流程
在这里插入图片描述

单分支if语句的一般形式
if(条件表达式)
{
语句序列
}

#include"stdio.h"
int main()
{
	int a=5;
	if(a>3)//4>3,表达式为真
	{//if后的表达式为真执行符合语句
		printf("a>3\n");
	}
    return 0;
}

if中的表达式值为真那么执行if语句后的第一条语句(或者说if语句的下一条语句)。

#include"stdio.h"
int main()
{
	int a=5;
	if(a>3)
	printf("a>3\n");
	//你也可以这样写
	if(a>3)printf("a>3\n");
    return 0;
}

如果在if表达式值为真后要执行多条语句就要用花括号括起来,这样多条语句就变成了一条复合语句。(你可以把符合语句看成一条语句)

#include"stdio.h"
int main()
{
	int a=5;
	if(a>4)
	{//这条复合语句是if后的第一条语句 
		printf("a>4\n");
		printf("我在if中执行"); 
	} 
    return 0;
}

if中也可以直接放一个变量,在C语言的条件判断语句中不为0的值都为真。

#include"stdio.h"
int main()
{
	int a=5;
	if(a)//a不为0,表达式为真
	{
		printf("%d\n",a);
	}
    return 0;
}

我们之前讲的关系运算符和逻辑运算符大多在if中使用,用来判断运算符两边的关系是否为真。

#include"stdio.h"
int main()
{
	int a=5,b=3,c=100,d=4;
	if(a>b)//a是否大于b 
	if(a>=b)//a是否大于或等于b 
	if(a<b)//a是否小于b 
	if(a<=b)//a是否小于或等于b 
	if(a==b)//a是否等于b 
	if(a!=b)//a是否不等于b 
	if(a>=b&&a>=d)//a大于等于b并且a大于等于d(两个表达式必须同时满足)
	if(a>c||a>d)//a大于c或者a大于d(两个表达式满足一个就可)
    return 0;
}

如果有多个单分支if,那么每个if都要判断。

#include"stdio.h"
int main()
{
	int a=5,b=3;
	if(a>b)
	{
		printf("a大于b\n"); 
	}
	if(a>=b)
	{
		printf("a小于或等于b\n");
	}
	if(a==b)
	{
		printf("a等于b\n");
	}
	if(a!=b) 
	{
		printf("a不等于b\n");
	}
    return 0;
}

在这里插入图片描述
多分支if语句
多分支if语句中如果表达式的值为假,那么继续判断下一个分支,如果某一个分支表达式为真,后面的所有分支都不执行(也就是说这个多分支if执行完了)。

多分支if语句的一般形式为:
if(条件表达式)
{
}
else if(条件表达式)
{
}
.
.
.
else
{
}

#include"stdio.h"
int main()
{
	int a=3,b=5;
	if(a>b)
	{
		printf("a大于b\n"); 
	}
	else if(a>=b)//第一个分支
	{
		printf("a小于或等于b\n");
	}
	else if(a<b)//第二个分支
	{
		printf("a小于b\n");
	}
	else if(a!=b) 
	{
		printf("a不等于b\n");
	}
	else//可以没有
	{
		printf("都不满足\n");
	}
	printf("多分支if执行完了\n");
    return 0;
}

在这里插入图片描述
多分支if语句可以有多个else if,最后一个else是在所有分支的表达式都为假时执行。(也可以没有else)
嵌套
无论是单分支if还是多分支if,他们都都可以嵌套(相互嵌套)
单分支和单分支嵌套

#include"stdio.h"
int main()
{
	int a=3,b=5,c=4;
	if(a<b)
	{
		if(a<c)
		{
			
		}
	}
    return 0;
}

单分支和多分支嵌套

#include"stdio.h"
int main()
{
	int a=3,b=5,c=4;
	if(a<b)
	{
		if(a>c)
		{
		}
		else if(a<c)
		{
		}
		else if(a==c)
		{
		}
	}
    return 0;
}

多分支和单分支嵌套

#include"stdio.h"
int main()
{
	int a=3,b=5,c=2;
	if(a>b)
	{
		if(a>c)
		{	
		}
	}
	else if(a>c)
	{
		if(b>c)
		{
		}
	}
    return 0;
}

多分支值和多分支嵌套

#include"stdio.h"
int main()
{
	int a=3,b=5,c=2;
	if(a>b)
	{
		if(c>b)
		{
		}
		else if(a>c)
		{
		}
	}
	else if(a>c)
	{
		if(b>c)
		{
		}
		else if(a>b)
		{
		}
	}
    return 0;
}

多分支嵌套时,else总是于最近的if匹配。

switch语句

switch是一个多分支的选择结构,又称为开关语句。
switch语句的一般形式:
switch(表达式)
{
case 常量表达式1 : 语句1 break;
case 常量表达式2 : 语句2 break;
.
.
.
default : 语句n
}
执行流程:
先判断switch的表达式的值是否于第一个case的常量表达式相等,不相等判断是否等于下一个case的常量表达式,相等执行 : 后面的语句以及后面所有case :后的语句。(后面case的常量表达式不参与判断直接执行)
如果switch的表达式和所有case的常量表达式都不相等,那么执行default 后面的表达式。(default可以没有)

#include"stdio.h"
int main()
{
	int a=3;
	switch(a)
	{
		case 5 :printf("5\n");
		case 4 :printf("4\n");
		case 3 :printf("3\n");//case执行后还会执行后面所有 : 后的语句。
		case 2 :printf("2\n");
		case 1 :printf("1\n");
		default :printf("哈哈\n");
	}
    return 0;
}

在这里插入图片描述
为避免这种情况发生要使用break语句。
break的作用是结束这个语句。由于switch后是一个复合语句,运行了break语句就是告诉程序这个语句执行结束,即使break后还有语句也不执行。

#include"stdio.h"
int main()
{
	int a=3;
	switch(a)
	{
		case 5 :printf("5\n");break;
		case 4 :printf("4\n");break;
		case 3 :printf("3\n");break;//执行break后结束这个复合语句
		case 2 :printf("2\n");break;
		case 1 :printf("1\n");break;
		default :printf("哈哈\n");break;
	}
    return 0;
}

在这里插入图片描述
default这条语句后如果有break可以放在任何位置,不然执行default后所有 case都会执行一遍。(default语句即使有break也建议放最后)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值