#t222. 判断数正负
判断数正负
判断数正负
题目描述
给定一个整数,判断其正负。
输入格式
一个整数 。
输出格式
如果, 输出 positive;
如果, 输出 zero;
如果, 输出 negative。
样例输入
1
样例输出
positive
提示
一、if 让程序「看情况做不同的事」
前面所有题都是从上到下一条道走到黑。从这道题开始,程序要会判断。看一个完整例子(判断是否成年):
int age = 20;
if (age >= 18) {
printf("adult\n");
} else {
printf("minor\n");
}
age 是 20,条件 age >= 18 成立,所以走第一个分支,输出 adult。如果 age 是 10,就跳过第一个分支、走 else,输出 minor。
if 的通用形状是:if (条件) { 成立时做什么 } else { 不成立时做什么 }。花括号里的内容可以有多条语句;只有一条时花括号可以省,但建议永远写,省了很容易出错。
二、条件怎么写
用比较运算符,两边各是一个值:
| 运算符 | 含义 | 例子 |
|---|---|---|
> |
大于 | n > 0 |
< |
小于 | n < 0 |
>= |
大于等于 | n >= 10 |
<= |
小于等于 | n <= 99 |
== |
等于 | n == 0 |
!= |
不等于 | n != 0 |
比较的结果是一个 bool(布尔值),只有 true(真)和 false(假)两种。
三、= 和 == 是两回事(最致命的错误)
n == 0是判断 n 等不等于 0,结果是 true 或 false;n = 0是赋值,把 0 存进 n,整个式子的值是 0(也就是假)。
写 if (n = 0) 编译器可能只给个警告,运行时条件永远为假,而且 n 被你改成了 0。判断相等永远写两个等号。
四、多分支:else if
int age = 20;
if (age < 12) {
printf("child\n");
} else if (age < 18) {
printf("teen\n");
} else {
printf("adult\n");
}
执行顺序:从上往下,第一个为真的分支执行,其余全部跳过。所以三个分支互斥,不会同时执行。
五、四个必踩的坑
| 写法 | 后果 |
|---|---|
if (n > 0); 后面多一个分号 |
if 空转,后面的代码无条件执行 |
if (n > 0) 后漏花括号,却写了两条语句 |
只有第一条受 if 控制 |
if (0 < n < 10) |
永远为真,要写 n > 0 && n < 10 |
| 用中文括号或中文分号 | 编译报错 |
六、自检
拿题目给的每个样例,自己在纸上走一遍:条件是真还是假?走哪个分支?输出应该是什么?再和程序输出对照。
- 三种情况互斥,按「>0、=0、<0」的顺序写 if-else 链即可。
- 判断相等时检查是不是写了两个等号。
自查:输出的是三个小写单词,照题面原样打;用 0 这个边界值单独测一次。