《初学C语言》第五讲:分支结构和操作符分类2

思维导图

在这里插入图片描述

一.分支结构

1.if语句

1.1 语法结构

非0

为0

输入

表达式

语句

结束

1.2 语法形式

if (表达式)
{
语句1;
语句2;
...
}
  • 表达式:表达式为真,则语句执行,反之,表达式不执行;在C语言中,非0为真,0为假
  • { }:if语句原则上只能执行一个语句,但有了{ }则可以执行多语句

代码演示

#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age>=18)
	{
		printf("成年了\n");
		printf("可以谈恋爱了\n");
	}
	return 0;
}

1.3 else

语法形式:

if(表达式)
{
语句1;
语句2;
...
}
else
{
语句1;
语句2;
...
}
  • else :同样默认只能控制一条语句
  • { } :控制多条语句

代码演示

#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age>=18)
	{
		printf("成年了\n");
		printf("可以谈恋爱了\n");
	}
	else
	{
		printf("未成年\n");
		printf("不可以早恋\n");
	}
	return 0;
}

1.4 嵌套 if

在if else语句中,else可以与另一个 if 语句连用,构成多重判断

代码演示:输入任意一个整数值,计算除3的余数

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 3 == 0)
	{
		printf("余数是0\n");
	}
	else if (num % 3 ==1)
	{
		printf("余数是1\n");
	}
	else
		printf("余数是2\n");
	return 0;
}

1.5 悬空 else

注:else 总是跟最近的 if 匹配

在这里我们很容易认为打印的是haha
在这我么很容易误会成会打印 haha,真实结果是什么也不打印
在这里插入图片描述
该代码如果加上{ },则会一眼就看出代码的结果

2.switch语句

switch语句是一种特殊的if else 结构,用于判断有多个结果的情况

2.1 语法形式

switch(expression)
{
case vlaue1:
语句1
break;
case value2:
break;
...
default:
语句
}
  • expression:必须是整型表达式
  • value:必须是整型常量的值
  • default:执行的是表达式的相反结果
  • break:在一个case语句执行完,加上break,表示switch语句执行结束,case语句是否加break,需自行判断
  • 注:case与value之间必须加上一个空格;value后面“:”不能省略

2.2 与else if相比较

switch能把多重的else if 改成更医用、可读性更好的形式

代码演示:输入任意一个整数值,计算除3的余数

#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	switch (num % 3)
	{
	case 0:
		printf("余数为0\n");
		break;
	case 1:
		printf("余数是1\n");
		break;
	case 2:
		printf("余数是2\n");
	default:
		printf("输入错误\n");
	}
	return 0;
}

二.操作符的分类

1.关系操作符

1.1 关系操作符的种类

        < 小于                                     > 大于
       <= 小于等于                                >= 大于等于
       == 相等                                    != 不相等

1.2 关系表达式

C语言用于比较的表达式

(1)关系表达式通常返回 1 或 0 ,来表示真与假。例如:12>10返回1,10>12返回0
(2)关系表达式常用语 if 或 while 结构
(3)== 相等操作符 与 = 赋值操作符是不相等的,==是起判断作用的,而=是用来赋值的。为了区分开这两个操作符产生的报错,通常把数字写在前面,变量希望在后面
if( x = 3 )//表示对 x 赋予一个 3 的值,这个判断式总是成立,if 的表达总为真
if( 3 = x )// 这时编译器就会报错
if( 3== x )//表示 x = 3
(4)多个关系操作符不宜连用,关系操作符是从左到右计算,每计算一个表达式就会返回 1 或 0
1 < 2 < 3
//执行的是 1 < 2 成立,返回 1,在判断 1 < 3 成立,所以并没有判断 2与3的大小关系
//正确写法
i < j && j < k

2.条件操作符

条件操作符也叫三目操作符,执行三个操作数

2.1 语法形式

exp1 ? exp2 : exp3
真      ✅️    ❌️
假      ❌️    ✅️
  • exp1:指判断表达式结果的真假
  • exp2:如exp1结果为真,exp2计算,计算的的结果是整个表达式的结果
  • ecp3:如exp1结果为假,exp3计算,计算的的结果是整个表达式的结果

2.2 应用场景

找出两个数中较大值

代码演示:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	int m = (a > b ? a : b);
	printf("%d", m);
	return 0;
}

3.逻辑操作符 &&、||、!

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式

3.1 &&(逻辑与运算)

(1)&&是并且的意思,两侧的表达式都为真,则为真,否则为假
(2)是双目操作符,执行两个操作数
aba&&b
非0非01
非000
0非00
000

代码演示:求一年中春季的月份

#include <stdio.h>
int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month >= 3 && month <= 5)
	{
		printf("春季\n");
	}
	
	return 0;
}

3.2 ||(逻辑或运算)

(1)||是或者的意思,两侧至少有一个表达式为真,则为真,否则为假
(2)也是双目操作符,执行两个操作数
aba或b
非0非01
非001
0非01
000

代码演示:判断一个月份是冬季的月份

#include <stdio.h>
int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month ==12 || month==1||month==2)
	{
		printf("冬季\n");
	}
	
	return 0;

3.3 !(逻辑取反运算符)

(1)是相反的意思,改变单个表达式的真假
(2)是单目操作符,执行一个操作数
a!a
非00
01

代码演示:如果变量为假,就做一些事

#include <stdio.h>
int main()
{
	int flag = 0;
	if (!flag)
	{
		printf("do something\n");
	}
	
	return 0;
}

4.短路

4.1 基本概念

通常情况下,逻辑操作符的执行的顺序是从左到右,即先对左侧表达式求值,在对右侧表达式求值,但如果左侧表达式满足逻辑操作符的条件,就不再对右侧表达式求值。

4.2 短路求值

(1)&&短路求值:左边操作数的结果为0,右边操作数就不再执行
#include <stdio.h>
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;//后置++:先使用,后+1,即a = 0,后边表达式不执行,表达式结束,a + 1
	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//a = 1,b = 2,c = 3,d = 4
	return 0;
}
(2)||短路求值:左边操作数的结果不为0,右边操作数就不再执行
#include <stdio.h>
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ || ++b || d++;//a = 0不执行,继续执行b,b = 3不为0,后边表达式不执行
	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//a = 1,b = 3,c = 3,d = 4
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值