1. 语句
1.1 什么是语句
C语言中,由一个分号( ;)隔开的即为一条语句。
( 一行里只有 ;的语句,我们称其为 "空语句" )
这些都是语句:
int main() { printf("hello world!\n"); // 语句; 3 + 5; // 语句; ; // 空语句; }
1.2 真与假
定义: 0为假,非0即为真(比如:1是真,0是假,2+2也是真)
2. 分支语句
2.1 if 语句
2.2 代码块
如果条件成立,需要执行多条语句,应该使用代码块,一对大括号,就是一个代码块。
建议:无论是一行语句还是多行语句,建议都加上大括号。
单 if 语句演示:
#include<stdio.h> int main() { int age = 0; scanf("%d", &age); if (age >= 18) { printf("成年\n"); } return 0; }
if...else 演示:
#include<stdio.h> int main() { int age = 0; scanf("%d", &age); if (age >= 18) { printf("成年\n"); } else { printf("未成年\n"); } return 0; }
多分支演示:
#include<stdio.h> int main() { int age = 0; scanf("%d", &age); if (age < 18) { printf("少年\n"); } else if (age >= 18 && age < 30) { printf("青年\n"); } else if (age >= 30 && age < 50) { printf("中年\n"); } else if (age >= 50 && age < 120) { printf("老年\n"); } else { printf("请输入正确的年龄\n"); } return 0; }
不加大括号的隐患:悬空 else
如果我们想让a不等于1时打印abc,下列代码会打印 abc 吗?
#include<stdio.h> int main() { int a = 0; int b = 2; if (a == 1) if (b == 2) printf("123\n"); else printf("abc\n"); return 0; }
运行结果:(什么都没打印出来)
解析:因为没有大括号,else 与离它最近的一个if相结合( 即内部 if ),
所以即使 else 与外部 if 相对应,也没用。(这还是编译器帮我们对齐的结果,不然更难看出来)
订正:加上大括号之后,可以使代码的逻辑更加清楚!
#include<stdio.h> int main() { int a = 0; int b = 2; if (a == 1) { if (b == 2) { printf("123\n"); } } else { printf("abc\n"); } return 0; }
运行结果: abc
2.3. 代码风格
代码一:可读性不好,但是节省空间
代码二:可读性强
在写代码时我们应该在保证程序可读性的前提下,节省空间,所以尽量用代码二
小技巧风格习惯:
代码三:我们希望 num等于5时hello 才被打印出来,但是事实上下面他也打印出来了;
#include<stdio.h> int main() { int num = 0; if (num = 5) { printf("hello\n"); // = 赋值 == 判断相等; } return 0; }
解析:为什么会这样呢?因为在 if 语句中 num = 5 相当于重新赋值了。
为了防止把一个等号写成两个等号,发生这样的BUG,我们可以这么写:
#include<stdio.h> int main() { int num = 0; if (5 = num) { printf("hello\n"); // = 赋值 == 判断相等; } return 0; }
这样写,如果不小心写成了 "=",运行都运行不了,可以让自己很容易地发现问题。
这是种好的代码风格,未来如果涉及到常量和变量相比较,比较相等与否,
目前不妨把变量放在双等号的右边,常量放在左边,以防不小心少打一个 "=" ,导致程序出错。
2.4关于 return 0和return 1
一般来说return 0 代表程序正常退出,return 1代表程序异常退出!
使用return 语句可以返回一个变量内的值或一个指针,也可用return0,表示返回为空。
return 代表调到函数外,
return 0代表函数正常终止
return 1代表函数非正常终止
return 关键字的作用是返回程序流程的控制权!
其副作用是返回一个值。
例如int main(){}则必须返回一个值
return 0代表函数正常终止
ruturn 1代表函数非正常终止
被调函数 return 1只是给主调函数一个标志,说明他的执行过程遇到异常情况。
然后就返回主调函数来处理,继续执行。
想上面我们希望 num等于5时hello 才被打印出来:
#include<stdio.h> int test(a) { if (5 != a) { return 1; } printf("hehe\n"); return 0; } int main() { test(5); return 0; }
2.5switch 语句
介绍:switch 语句是一种多分支语句,常常用于多分支的情况。一个标准 switch 语句的组成:
① case 语句项:后面接常量表达式(类型只能是整型和枚举类型)。
② break 语句:用来跳出 switch 语句,实际效果是把语句列表划分为不同的部分。
③ default 子句:默认执行的语句,当所有 case 都无法与 switch 的值相匹配时执行。
注意事项:
1. case 和 default 后面记得加 :(冒号),而不是分号。
2. 在 switch 语句中可以出现if语句。
3. switch 后面必须是整型常量表达式。
4. 每个 switch 语句后面只能有一个 default。
5. 不一定非要加 default,也可以不加。
建议:
1. 在最后一个 case 语句的后面也加上一条 break 语句,以防未来增添语句项时遗漏。
2. 建议在每个 switch 中都加入 default 子句,甚至在后边再加一个 break 都不过分。
switch 用法演示:用户输入一个数字x,返回星期(eg. 1 >>> 星期一)
#include<stdio.h> int main() { int day = 0; scanf("%d", &day); switch (day) { case 1: printf("星期一\n"); break; // 跳出switch case 2: printf("星期二\n"); break; case 3: printf("星期三\n"); break; case 4: printf("星期四\n"); break; case 5: printf("星期五\n"); break; case 6: printf("星期六\n"); break; case 7: printf("星期日\n"); break; default: // 默认执行的语句; printf("输入错误\n"); break;// 这里可以不加break,但是加上是个好习惯; } return 0; }
多 case 同一个结果情况演示:输入1-5,输出 工作日;输入6-7,输出休息日;
#include<stdio.h> int main() { int day = 0; scanf("%d", &day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf("工作日\n"); break; case 6: case 7: printf("休息日\n"); break; // 末尾加上break是个好习惯; default: printf("输入错误\n"); break; // 这里可以不加break,但是加上是个好习惯; } return 0; }
下列代码输出值是多少?
#include<stdio.h> int main() { int n = 1; int m = 2; switch (n) { case 1: m++; case 2: n++; case 3: switch (n) { case 1: n++; case 2: m++; n++; break; } case 4: m++; break; default: break; } printf("m = %d, n = %d\n", m, n); return 0; }
解析:
#include<stdio.h> int main() { int n = 1; int m = 2; switch (n) //进入case1 且无break,继续下面的case { case 1: m++; //m = 3 case 2: n++; //n = 2 case 3: switch (n) //进入case2 且无break,继续下面的case { case 1: n++; case 2: m++; //m = 4 n++; //n = 3 break; } case 4: m++; //m = 5 break; default: break; } printf("m = %d, n = %d\n", m, n); //5,3 return 0; }
C语言初阶①(分支语句和循环语句)知识点(下):https://developer.aliyun.com/article/1512961