从单片机基础到程序框架(全集 2019pdf版).pdf - 第180页

语句 3; 语句 4; 在上 述格式 中, 只要 if 语 句后 面小 括号 内有 1 个(条件 判断 )是满 足的时 候, 整体 判断马 上裁 定为 真, 这时就会执 行到大括号 内的 “语句 1 ” 和“语句 2 ” ,否则, 必须 全部的(条件 判断)都不 满足,整体判断才会 裁定为假, 这时就会直接 跳到“语句 3” 处往下执行 。 再举一个具 体的例子, 比如要取除 了 70 到 80 之间以外的 所有数 据, 也就是说 , …

100%1 / 836
第四十三节:关系符中的关系符:与“&&”,或“||”
【43.1 关系符中的与“&&”
前面在讲关系符的时候讲了只存在 1 (判断条件)的情况下,根据这个判断为真还是为假再执行对
应的操作,那么,当同时存在 2 个(判断条件)以上的情况下,该如何描述(判断条件)与(判断条件)之
间的关系,这就涉及本节所讲的“关系符中的关系符”:与“&&”,或“||”
先讲“&&”语句,符号&&”称为“与”,它的含义是:假如有两个以上的(条件判断),当所有的(条
件判断)都满足的时候,才认为这个整体判断是真,否则,只要有 1 个(条件判断)不满足,那么整体判断
就是假。这个规律,有点像很多开关在电路回路中的串联关系,只有所有串联在回路中的开关都是闭合的状
态,这个回路才是畅通的,否则,只要有一个开关是断开的,整个回路就是断开的。
与语句“&&”的常见格式如下:
if(第 1 个条件判断&&第 2 个条件判断…&&第 N 个条件判断)
{
语句 1;
语句 2;
}
语句 3;
语句 4;
在上述格式中,只有 if 句后面小括号内所有的(条件判断)都满足的时候,整体判断才为真,才会执
行到大括号内的“语句 1”和“语句 2”,否则,只要有 1 不满足,就直接跳到“语句 3”处往下执行。
再举一个具体的例子,比如要取从 70 80 之间的所有数据,也就是说,既要大于等 70,同时又要小
于等于 80,程序代码可以这样书写:
if(a>=70&&a<=80) //在 70 80 的区间范围(包括边界 70 80)
{
语句 1;
语句 2;
……
语句 N;
}
【43.2 关系符中的或“||”
符号“||”称为“或”,它的含义是:假如有两个以上的(条件判断),只要有 1 个条件判断为真,则此
整体判断裁定为真,否则,必须所有的(条件判断)都不满足,此整体判断才会裁定为假。这个规律,有点
像很多开关在电路回路中的并联关系,并联在回路的多个开关,只要有 1 个开关是闭合的状态,那么这个回
路肯定是畅通的,否则,必须全部开关都是断开的,整个回路才会是断开的。
或语句“||”的常见格式如下:
if(第 1 个条件判断||第 2 个条件判断…||第 N 个条件判断)
{
语句 1;
语句 2;
}
语句 3;
语句 4;
在上述格式中,只要 if 句后面小括号内有 1 个(条件判断)是满足的时候,整体判断马上裁定为真,
这时就会执行到大括号内的“语句 1和“语句 2,否则,必须全部的(条件判断)都不满足,整体判断才会
裁定为假,这时就会直接跳到“语句 3”处往下执行
再举一个具体的例子,比如要取除 70 80 之间以外的所有数据,也就是说要么小于 70,或者要么
大于 80,可以这样写:
if(a<70||a>80) //在 70 80 的区间范围以外的数据(不包括边界 70 80)
{
语句 1;
语句 2;
……
语句 N;
}
【43.3 “&”和“&&”“|”和“||”的区别。
前面章节讲过运算符的“&”“|”它们发音也是“与”“或”跟本节讲的关系符“&&”“||”
的发音是同音,因此很容易让初学者混淆。区别如下:
运算符的“&”和“|”,是属于运算符,是强调数与数,变量与变量,个体与个体之间的运算,而
不是关系。它们之间的运算,是把一个数或一个变量转化成二进制后,进行二进制的 0 1 之间的与”
“或”运算。
关系符的“&&”和“||”,是属于关系符,是强调(条件判断)(条件判断)关系与关系,整体
与整体之间的关系判断,而不是运算。它们之间的关系,关键词是判断。
【43.4 “&&”和“||”的“短路”问题。
关系符“&&”“||”居然也有“短路”问题?大家不要惊异,这里所说的“短路”只是强调关系
符内部判断的顺序和取舍。“短路”这个词在这里只是业内已经习惯了的一种称谓,虽然我个人感觉
一点怪怪的不自然,但是我自己也想不出其它更好的词来描述这种关系,因此就跟业内已习惯的称谓
持一致。
“&&”的“短路,它内部判断的顺序和取舍是这个样子的:在两个以上的判断中,从左边到右边
依次逐个判断,先判断第 1 个(条件判断),再第 2 个(条件判断)...再第 N 个(条件判断),但是,
在此期间,只要发现有 1 个条件是不满足,就马上退出判断,不再继续判断后面的(条判断)因为
对于“与”的关系符,只要有 1 个条件判断是不满足(假),就可以马上裁定整体判断为假了,没必要
继续判断后面的(条件判断
“||”的“短路,它内部判断的顺序和取舍是这个样子的:在两个以上的判断中,从左边到右边
依次逐个判断,先判断第 1 个(条件判断),再第 2 个(条件判断)...再第 N 个(条件判断),但是,
在此期间,只要发现有 1 个条件是满足,就马上退出判断,不再继续判断后面的(条件判断,因为,
对于“或”的关系符,只要有 1 个条件判断是满足(真),就可以马上裁定整体判断为真了,没必要继
续判断后面的(条件判断)
上述文字中的“从左到右就是“顺序”,“马上退出”就是“取舍”这种关系之所以称谓为
路”,我猜测可能是把“&&”和“||”比喻成在电路的回路中,只要有个 1 个地方短路了,就可以马上
裁定这个回路是短路的,就不用再判断其它地方了
【43.5 例程练习和分析。
现在编写一个实验程序一共有 8 个给定的数,要统计其中数值从 70 80 之间的数有几个统计其中
取除了 70 80 之间以外的数有几个。
程序代码如下:
/*---C 语言学习区域的开始。-----------------------------------------------*/
unsigned char x1=90; //给定的第 1 个数
unsigned char x2=65; //给定的第 2 个数
unsigned char x3=85; //给定的第 3 个数
unsigned char x4=79; //给定的第 4 个数
unsigned char x5=95; //给定的第 5 个数
unsigned char x6=65; //给定的第 6 个数
unsigned char x7=75; //给定的第 7 个数
unsigned char x8=85; //给定的第 8 个数
unsigned char a=0; //统计从 70 80 的变量总数
unsigned char b=0; //统计除了 70 80 以外的变量总数
void main() //主函数
{
//第一部分:统计“从 70 80 间的数有多少个。
if(x1>=70&&x1<=80) //如果条件为真,则执行下面大括号里面的语句。
{
a++; //相当于 a=a+1,用来统计 70 80 的总数
}
if(x2>=70&&x2<=80) //如果条件为真,则执行下面大括号里面的语句。
{
a++; //相当于 a=a+1,用来统计 70 80 的总数
}
if(x3>=70&&x3<=80) //如果条件为真,则执行下面大括号里面的语句。
{
a++; //相当于 a=a+1,用来统计 70 80 的总数
}
if(x4>=70&&x4<=80) //如果条件为真,则执行下面大括号里面的语句。
{