关系运算的C程序实现
看完你能说清六个关系运算符在C里如何运算、为何结果是0或1、以及==与=混用的陷阱
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
关系运算的C程序实现
看完你能说清六个关系运算符在C里如何运算、为何结果是0或1、以及==与=混用的陷阱
生活里的「关系比较」
体检时医生说「你比你爸高 3 厘米」,老师看成绩说「你和第一名差 2 分」——生活里我们天天在比较大小、比相等。C 程序里,这种比较就是关系运算。
「你比他高」的判断对应 C 里的 a > b,答案只有是或否
为什么程序需要比较
上节我们看到生活里满是「谁大谁小」的比较。程序也一样:水温够不够热?密码对不对?钱够不够扣?先比出真假,程序才知道接下来走哪条路。
先看灯判断能不能走(比较出真假),再决定停或行(走哪个分支)
关系表达式是什么
上一页我们看到程序需要比较大小才能做判断。那「比较」这件事在 C 语言里到底怎么表达?答案是用关系表达式——先看几个生活例子再拆解它的结构。
体温计的读数只有发烧与否的判断对应表达式的 1 或 0
六个关系运算符
六个符号长得像:= 与 ==、= 与 != 最易混。逐对对齐辨析,看清楚它们到底差在哪。
- < 小于:a < b,严格小于才成立
- <= 小于等于:含相等的情况
- 读法:问「a 是否不大于 b」
- == 等于:判断两边是否相等
- != 不等于:相等则结果为假
- 读法:问「a 与 b 的关系是否成立」
== 与 = 混淆辨析
== 是比较两个值,= 是存值进去。两者长得像,但意思完全不同,写错编译器常常不报错,是初学者头号陷阱。
- 作用:把右边的值存进左边的变量
- 表达式本身的值是被赋的那个值
- if (x = 5) 恒为真,还会悄悄改掉 x
- 作用:比较两边是否相等,不改任何值
- 表达式的值只有 0(假)或 1(真)
- if (x == 5) 才是「x 等于 5 吗」
真假在C里怎么表示
看关系表达式的值到底是什么:打印 1、0,再让非零值当条件用。
关系表达式只有两个值:成立得 1,不成立得 0;if 条件里非零都算真,0 才是假。
关系表达式求值示例
把六个关系表达式各打印一次,亲眼看到结果只有 1 或 0。
每个表达式直接放进 printf 的 %d 槽位:真打印 1,假打印 0,混合运算时先算 2+3 再比较 5>4。
优先级层级图
从上到下四层:谁的层级高,谁先被计算。逐层往下看。
混合表达式求值
两个经典混合表达式,看优先级如何决定求值顺序与结果。
== 优先级低于 >,故 a>b==c 先比大小再判相等;算术优先级最高,a+b 先算再比较。
结合性与连续比较
以 a<b<c 为例,逐层拆开C编译器到底怎么算它。
条件判断中的关系表达式
前页我们算出了关系表达式的值——只有 1 或 0。但算出来之后程序怎么办?答案就是 if 语句:它盯着这个真假值,据此决定接下来走哪条路。
值 1 像绿灯走 if 路,值 0 像红灯走 else 路
判断条件写法示例
一个及格判断程序:关系表达式的值直接当作 if 的判断条件。
if 不挑「类型」,只要一个数:非零成立、零不成立。关系表达式恰好产生 1 或 0,天然就是判断条件。
程序实例:比大小
一个完整可运行的程序:输入两个数,用关系表达式判断并输出较大者。
核心在第6行:a > b 是关系表达式,值为1或0,if 正是靠这个真假值选择走哪个分支。
实例执行过程拆解
跟着一段比大小程序,从输入走到输出,看清每一步的执行轨迹。
字符怎么比较
前页比的是数字,其实字母也能比:'a'<'b'为真。奥秘在于每个字符在内存里都有编号——ASCII码,比较的从来不是字形,而是这些编号的大小。
比字符先后就是比各自所在的页码
字符比较代码示例
用 char 与关系运算符判断大小写、数字:看字符范围比较的真实写法。
字符即整数:'A'~'Z'、'a'~'z'、'0'~'9' 的 ASCII 码各自连续,所以范围比较能判大小写与数字,且必须用 && 连接两个关系表达式。
自测:优先级与真假
表达式 3 > 2 > 1 在 C 语言中的求值结果是什么?
要点收束
- ✓比较的本质是判断,结果只有 0 和 1 两种
- ✓六个运算符中,== 与 = 的混淆是头号陷阱
- ✓关系运算符优先级低于算术、高于赋值
- ✓连续比较 a<b<c 不等于数学含义,需拆开写
- ✓字符比较底层走 ASCII 码,照样是数值比大小
课后思考
先自己想一会儿,再看参考答案——问题不怕想偏,怕不想。
参考答案想想赋值和比较的使用频率:赋值远比比较频繁。两者语义不同、都高频,分开写能让编译器区分意图,尽管代价是 a=0 与 a==0 这种经典笔误。
参考答案路径:字符在比较时会取其编码值参与运算。利用已学规则:同一编码体系里字母连续排列,大小写是两段不重叠的区间。可以打印 (int) 值验证猜测。
参考答案不能。结合性使它按 (0<=x)<=10 求值,左边是 0 或 1,永远成立,x 越界也检测不到。应写成 0<=x && x<=10。