选择结构程序设计及其应用

选择结构条件的构成

1.关系运算符和关系表达式
2.逻辑运算符和逻辑表达式

1.1 关系运算符

  • 关系运算是指两个运算量之间的大小比较,关系运算的结果为逻辑值或称为“布尔”值,其值只有两种可能:“真”或“假”。
运算符 关系
> 大于
< 小于
== 等于
!= 不等于
>= 大于等于
<= 小于等于

##1.2 关系表达式

  • 用关系运算符将两个表达式连接起来的式子
  • 一般形式为:<表达式1> <关系运算符> <表达式2>

关系表达式的值是逻辑值(“真”或“假”),在c语言编译系统中,没用“逻辑”类型数据,用1和0分别表示逻辑值的“真”和“假”。在进行判断时,系统视非零值为“真”,零值为“假”;而关系运算的运算的结果若为“真”,则其值为1,若为“假“,则其值为0,结果值是无符号整数,又可参与其后的运算。

int main()
{
    
    
	int a = 3!=5!=4;
	//先进行 3<=5  结果为1,再进行1!=4  结果为1;
	printf("%d", a);

	return 0;
}

运算结果:
在这里插入图片描述

2.1 逻辑运算符

1>.逻辑运算符

逻辑运算是表达运算对象的逻辑关系。

运算符 名称
逻辑非
&& 逻辑与
II 逻辑或

2>.运算规律

&&:当且仅有两个运算量的值都是“真”时,运算结果为“真”;否则为“假”
| | :当且仅有两个运算量的值都是“假”时,运算结果为“假“;否则为“真”
! :当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。

3>.逻辑表达式

用逻辑运算符(&&、||、!)把一个或两个表达式连接起来的式子。
如:

! 表达式
表达式1 && 表达式2
表达式1 | | 表达式2

  • 注意:如果表达式中包含多个运算符时,根据运算符的优先级来绝定运算顺序,高优先级的先参加运算,低优先级的后参加运算。
运算符 优先级
() 最高
其次
++ , - - 其次
*,/,% 其次
+,- 其次
<,<=,>,>= 其次
==,!= 其次
&& 其次
II,?: 其次
=,+=,-=,*=,/=,%= 其次

):
现在了解了选择结构判断条件的构成,现在就可以了解如何使用if语句进行选择结构程序设计!

单分支和双分支选择结构程序设计

选择结构是程序实设计的基础结构之一,所谓选择结构,就是根据不同的条件做出选择,做出不同操作。
选择结构可以按照分支的不同进行分类:单分支选择结构,双分支选择结构和多分支选择结构;
c语言提供了 if语句和switch语句实现这些分支结构。
if语句可分为三种表达形式:if单分支语句、if…else双分支语句、 和if…else if多分支语句

  • 单分支 if 语句
  • 双分支 if…else 语句

1.1单分支if语句

  1. 语句形式

if(表达式)

  1. 执行过程

如果表达式的值为“真”(非0),则执行语句;否则不执行该语句;

如例题

int main()
{
    
    int a=6;
	if(a>7)//如果a>7为真,则执行语句会打印 haha,否则什么都不打印
	{
    
    
		printf("haha\n");
	}
return 0;
}

2.1双分支if…else语句

  1. 语句形式

if(表达式)
语句1;
else
语句2;

2.执行过程

如果表达式的值为”真“(非0),则执行语句1,否则执行语句2.

例题

int main()
{
    
    	int a=6;
//如果a>7为“真”,则打印出hehe,否则打印出haha
	if(a>7)
	{
    
    
	  printf("hehe\n");
	}
	else
	{
    
    
	printf("haha\n");
	}

return 0}

3>.条件操作符与条件表达式

  1. 条件运算符

“?: ”是条件表达式,有三个操作数,所以是c语言中唯一的三目操作符。

2.条件表达式

  • 由条件运算符链接都表达式为条件表达式。

<表达式1>?<表达式2>:<表达式3>
其中 表达式1是一个关系表达式或逻辑表达式,用来判断条件,并且白“表达式2”和“表达式3”的类型必须相同。

3.运算规则

首先计算表达式1的值,如白表达式1的值是真(非0),则整个表达式的值取表达式2的值;否则整个表达式的值取表达式3的值。

例题

int main()
{
    
    int a=10;
//先计算a<8的值:为“假”,则整个表达式的结果取a-8==2

	int ret =(a<8)?(8-a):(a-8);
printf("%d",ret);
//最后打印出2
return 0;
}

多分支选择结构程序设计

1.嵌套if…else语句

  • 所谓嵌套就是在if… else语句中多次包含了if…else的语句。
  • 其目的是解决多分支选择结构程序设计。

1.语句形式

if(表达式1)
语句1
else if (表达式2)
语句2
else if(表达式2)
语句3

else if(表达式n)
表达式n
else
表达式n+1

2.执行过程

依次判断表达式的值,当出现某个表达式的值是“真”,则执行其对应的语句,然后跳到整个if语句之外继续执行。若所有表达式的值均为“假”,则执行 语句n+1,然后再执行后续语句;

例题:

int main()
{
    
    //依次判断表达式的值,首先a==0为真,执行其对应语句,则打印huhu,然后会跳出整个if语句。
	int a=0;
    if(a==0)
    printf("huhu\n");
    else if(a==2)
    printf("haha\n");
    else
    printf("hehe\n");

return 0;
}
  • 严格要求

1>.if 后面的条件表达式必须要圆括号()括起来。
2>.如果每个表达式后的语句如果不止一条语句,则必须使用“{}”括起来组成复合语句.
如:

int main()
{
    
    //如表达式1后语句超过一句则用{}组成复合语句;
	int a=0;
	if(a==0)
	{
    
    a+=1;
	printf("%d",a);
	}
	else
	printf("%d",a);

return 0;
}

3.表达式可以是任意类型的c语言合法表达式,如:算数表达式、关系表达式、逻辑表达式…

2>.if语句的不同嵌套形式

1.一般形式:

1.嵌套在if语句中
if(表达式1)
{
if语句1;
}
else 语句2;

2.嵌套再else语句中
if(表达式1)
语句1;
else
{
if 语句2;
}

3.1 switch语句

  • switch语句是多分支结构语句,其实现的功能与if实现的多分支语句很相似;
  • 多数可能switch语句可能更直观,简单,效率

1.switch语句基本形式

switch(表达式)
{
case<常量表达式1>:语句1;break;
case<常量表达式2>:语句2;break;
case<常量表达式3>:语句3;break;

case<常量表达式n>:语句n;break;
case<常量表达式n+1>:语句n+1;break;
default: 语句n+2;break、;

}

2.switch语句的执行过程

1.首先计算switch后的表达式的值。
2.然后将case后的常量表达式比较,如果找到匹配的case,程序就执行相应的语句,直到遇到break语句,switch语句执行结束;如果找不到匹配的case,则程序执行default后语句,再直到遇到break语句,switch语句结束;(如果没有default语句,则不执行任何操作)。

如以下代码:

int main()
{
    
    
int a=3;
switch(a)
{
    
    
	case 1:  //若a的值与1相等,则执行其后语句
	{
    
    printf("lala\n");
	break;
	}
	case 2:  //如a的值与2相等,则执行其后语句
	{
    
    printf("haha\n");
	break;
	}
	default:  //若a的值与case后常量表达式都不相等,则执行其后语句
	{
    
    printf("hehe\n");
	break;
	}
}//结果打印hehe
return 0;
} 
  • 注意:
    1.switch后“表达式“和”常量表达式“都必须式整数类型或枚举类型,如:int,char…
    2.case后的”常量表达式“必须互异,不能有重复,其中default和其后语句可省略。
    3.switch语句中case和default的出现是任意的,且case的次序也没用要求;

最后再来一题的拓展练习

  • 从键盘输入一个表示年份的整数,并判断该年份是否为闰年,并显示判断结果;
int main()
{
    
    
	int year=0;//year为某一年份,
	scanf("%d",&year);
	if((year%4==0 && year%100!=0) || year%400==0)//判断闰年条件
	{
    
    
	printf("%d是润年",year);
	}
return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_66780695/article/details/130187182