C判断与循环+

本文介绍了C语言中的逻辑类型bool及其运算,包括逻辑运算的短路特性,并通过实例展示了如何使用if-else进行嵌套判断以及如何使用switch-case实现多路分支。强调了在编写if-else和switch-case结构时的注意事项和最佳实践。
摘要由CSDN通过智能技术生成

一,逻辑类型和运算

1.逻辑类型bool

需要输入头文件#include<stbool.h>之后就可以使用bool和true,false. 

事实上并没有真正的bool类型,其本质仍为整数

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<stdbool.h>
 
int main()
{
	bool t = 7 > 6;
	bool f = false;
	printf("%d %d", t, f);
	return 0;
}

输出结果为 

 2.逻辑运算

 逻辑运算是对逻辑量进行的运算,结果只有0/1,逻辑量是关系运算或逻辑运算的结果

 

区别   !age<20 和 !(age<20)  因为!属于单目运算符 优先级在比较运算之前,所以前者输出的值无论age赋值多少都为1(!age的值不是0就是1,但都比20小,所以判断为真,输出1).

 优先级 +

 

  短路

  • 逻辑运算是自左向右进行的,如果左边的结果已经能够决定结果了,就不会做右边的计算
  • 如果有a==6&&b==1 当a的值不为6时运算就结束了,因为逻辑与要求两边都为真结果才为真,这样提前结束计算会避免不必要的计算,提高计算速度;而如果有a==6&&b+=1,此时当a的值不为6时,右边的赋值就会被忽略,造成短路

  • 对于&&,如果左边是false时就不做右边了
  • 对于||,如果左边是true时就不做右边了
  • 因此不要把赋值,包括复合赋值组合进表达式!

二,级联和嵌套的判断

1.嵌套的if-else 

比较最大数

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{//比较最大数
	int a, b, c;
	int max = 0;
	printf("请输入三个数字。\n");
	scanf("%d %d %d", &a, &b, &c);
	if (a > b) 
	{
		if (a > c) {
			max=a ;}
		else max= c;
	}
	else {
		if (b > c) {
			max=b;
		}
		else max=c;
	}
	printf("最大值为%d", max);
	return 0;
}

else的匹配

else总是与最近的拿个if匹配  但前提是在同一个大括号中。

缩进

有时匹配好的if-else会同时缩进,但缩进格式不能暗示else的匹配。

if(code==READY)
    if(count<20)
        printf("一切正常\n");
else
        printf("继续等待\n");

当我希望else与第一个if匹配时 ,可以将最近的if放入大括号中。

if(code==READY)
    {if(count<20)
        printf("一切正常\n");}
else
        printf("继续等待\n");

建议 

养成在if或else后面总是用{}的习惯,即使只有一条语句。

2.级联的if-else

分段函数

 

if (x<0){
    f=-1;
}else if (x==0){
    f=0;
}else{
    f=2*x;
}

  

三,多路分支

switch-case

对于一个判断程序

int main()
{
	int type;
	scanf("%d", &type);
	if (type == 1)
		printf("你好");
	else if (type == 2)
		printf("早上好");
	else if (type == 3)
		printf("中午好");
	else if (type == 4)
		printf("下午好");
	else
		printf("???");
	return 0;
}

可以用switch-case来实现 

int main()
{
	int type;
	scanf("%d", &type);
	switch (type) {
	case 1:
		printf("早上好");
		break;
	case 2:
		printf("中午好");
		break;
	case 3:
		printf("下午好");
		break;
	case 4:
		printf("晚上好");
		break;
	default:
			printf("???");
	}
	return 0;
}

 switch-case并没有一步一步的执行判断,更为精干

  • 控制表达式只能是整数型的结果。
  • 常量可以是常数,也可以是常数计算的表达式。    C99!
  • switch语句可以看作是一种基于计算的跳转,计算控制表达式的值后,程序会跳转到相匹配的case(分支标号)处。分支标号只是说明switch内部位置的路标,在执行完分支中的最后一条语句后,如果后面没有break,就会顺序执行到下面的case里去,直到遇到一个break,或者switch结束为止
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vⅤ_Leon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值