目录
C语言中语句分类
分支语句(选择结构)
一、if……else 语句
二、switch语句
总结
C语言中语句分类
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
C语言中的语句都是以 分号(;) 结束的。
- 表达式语句:
int a = 10;
int b = 20;
int c = 0;
int c = a + b; //表达式语句
- 空语句:
分号前面什么都不写就是一条空语句。
- 函数调用语句:
使用C语言提供的函数或调用自定义函数,都是函数调用语句。
- 控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。
可分成以下三类:
- 条件判断语句也叫分支语句:if语句、switch语句;
- 循环执行语句:do while语句、while语句、for语句;
- 转向语句:break语句、goto语句、continue语句、return语句。
分支语句(选择结构)
前面已经了解了C语言中的分支语句:
- if……else 语句
- switch 语句
前面已经了解了C语言中的分支语句:
- if……else 语句
- switch 语句
再详细的阐述一下分支语句
一、if……else 语句1、语法结构
- 单分支
if(表达式)
语句;
表达式为真,则执行语句,表达式为假,则不执行语句(什么也不输出)。
- 双分支
if(表达式)
语句1;
else
语句2;
表达式为真,则执行语句1,表达式为假,则执行语句2。
只执行其中的一条语句。
- 多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
- 表达式1为真,则执行语句1。
- 表达式1为假,表达式2为真,则执行语句2。
- 表达式1和表达式2都为假,则执行语句3。
三条语句只会执行其中的一条语句。
C语言中:0表示假,非0表示真
2、代码演示:
- 单分支:
#includeint main() { int age = 0; scanf("%d", &age); if (age >= 18) printf("成年n"); return 0; }
表达式为真:
表达式为假:
- 双分支:
#includeint main() { int age = 0; scanf("%d", &age); if (age >= 18) printf("成年n"); else printf("未成年n"); return 0; }
表达式为真:
表达式为假:
- 多分支:
#includeint 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 < 90) printf("老年n"); else printf("老寿星n"); return 0; }
运行结果:
多分支简化后的代码:
#includeint main() { int age = 0; scanf("%d", &age); if (age < 18) printf("少年n"); else if (age < 30) printf("青年n"); else if (age < 50) printf("壮年n"); else if (age < 90) printf("老年n"); else printf("老寿星n"); return 0; }
第一种写法可读性更好一些。
3.、悬空else
#includeint main() { int a = 0; int b = 2; if (a == 1) if (b == 2) printf("hehen"); else printf("hahan"); return 0; }
运行结果:
从运行结果可以看到,程序执行后什么都没有打印。
代码分析:
因为 int a = 0,所以表达式1(a==1)为假,程序不会执行 if( b == 2) 语句。但是else 是与 if( b == 2)匹配的。只有表达式1(a==1)为真时才会执行 if( b == 2) 语句,所以程序执行后什么也不输出。
else的匹配:else是和它离的最近的 if 匹配的。
补充:C语言中:
- = 是赋值运算符
- ==是等号运算符,判断值是否相等。
加上{}可以使这段代码更加清晰:
#includeint main() { int a = 0; int b = 2; if (a == 1) { if (b == 2) printf("hehen"); else printf("hahan"); } return 0; }
4、 if 语句书写形式对比
if(表达式) 表达式可以是常量也可以是变量
int age = 0;
scanf("%d", &age);
if (age)
{}
如果条件成立(表达式为真),要执行多条语句,应该使用代码块(使用{ }括起来)
#includeint main() { int age = 0; scanf("%d", &age); if (age >= 18) { printf("成年n"); printf("可以谈恋爱n"); } else { printf("未成年n"); } return 0; }
运行结果:
这段代码中 else 后面也可以不加大括号,建议不管 if 后面有几条语句都加上大括号,加上不会出错,不加有时候写代码容易出错。(看个人习惯)。
看下面的代码:
#includeint main() { int a=0; scanf("%d", &a); //代码1 if (a) { printf("hehen"); } printf("hahan"); //代码2 if (a) { printf("hehen"); } else { printf("hahan"); } return 0; }
代码1与代码2执行结果相同,a为0打印haha,a为非0打印hehe。
但是我们可以发现,代码2的可读性比代码1的更好一些。
5、易错点
- 易错点一
if(表达式) 表达式为:判断是否满足条件,容易写成数学中的形式。
#includeint main() { int age = 0; scanf("%d", &age); //第一种: if (age >= 18 && age < 40) { printf("1:呵呵n"); } //第二种: if (18 <= age < 40) { printf("2:哈哈n"); } return 0; }
表达式为真:
看到这可能有人就会认为这两段代码都是正确。但真的都是正确的吗?
再看一下表达式为假:
第二种写法语法上没有错误,但是逻辑上不满足要求。
18 <= age < 40 :先计算 18<=15(此时输入的age为15),结果为0(假);再计算0<40,结果为1(真),所以才会打印 2:哈哈。
- 易错点二
if(表达式) 表达式为:判断常量与变量值是否相等,容易将两个等号,写成一个等号。
#includeint main() { //代码1 int num = 10; if (num == 5) { printf("hehen"); } //代码2 int num = 10; if (5 == num) { printf("hehen"); } return 0; }
有时候写条件判断时容易写成下面这种:
#includeint main() { //代码1 int num = 10; if (num = 5) { printf("hehen"); } return 0; }
写成这样语法是正确的,但是所表达的含义就不同了。
代码分析:if (num = 5) 将5赋给num,所以表达式永远为真,打印 hehe。
这种写法不容易找到错在哪。
但是如果写成下面这种:
#includeint main() { //代码2 int num = 10; if (5 = num) { printf("hehen"); } return 0; }
代码执行结果:
代码2这种如果漏写了一个 = 编译器就会报错,很容易知道错在哪里。
写if(表达式),如果表达式是判断常量与变量值是否相等,建议写成 if(常量==变量)这种形式。 例 :if(5==num)
6、 了解了 if....else 语句,做一道题感受一下分支语句
判断一个数是奇数还是偶数。
#includeint main() { int num = 0; scanf("%d", &num); if (num % 2 == 1) { printf("%d是奇数n", num); } else { printf("%d是偶数n", num); } return 0; }
代码分析:
% 取模运算符。是计算两个整数相除后的余数。
一个整数除2,余数为0则是偶数,余数为1则是奇数。
运行结果:
二、switch语句
switch语句也是一种分支语句。 常常用于多分支的情况。
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
写成 if...else if ...else if 的形式太复杂,那就得有不一样的语法形式。
- switch语法结构:
switch(整型表达式)
{
语句项;
}
- 语句项:
case 整型常量表达式:
语句;
注:case 与整型常量表达式之间要有空格。
case 后面必须跟整型常量表达式,可以是整数,也可以是字符。
- switch语句中的 break
在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
switch中执行case语句:
- switch(表达式),表达式是几,switch就是几开始执行。
- 如果case语句后面没有break,则程序会一直执行,直到遇到break 或执行完case语句才会跳出switch语句。
(1)case后面跟整数:
#includeint main() { int day; scanf("%d", &day); switch (day) { case 1: printf("星期一n"); break; 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; } return 0; }
运行结果:
有时候我们的需求变了:
- 输入1-5,输出的是“weekday”
- 输入6-7,输出“weekend”
#includeint main() { int day; scanf("%d", &day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf("weekdayn"); break; case 6: case 7: printf("weekendn"); break; } return 0; }
运行结果:
- switch语句中的 default 子句
- 如果表达的值与所有的case后面的整型常量表达式的值都不匹配,结果就是所有的语句都被跳过。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
- 如果不想忽略不匹配所有标签的表达式的值,可以在switch语句列表中增加一条default子句, 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置。
- default子句虽然可以写在switch语句中任何位置,但一般是将它写在所有case语句的最后。
#includeint main() { int day; scanf("%d", &day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf("weekdayn"); break; case 6: case 7: printf("weekendn"); break; default : printf("输入错误,请输入1~7的数字n"); } return 0; }
运行结果:
写一个简单的计算器
(2)case后面跟字符:
#includeint main() { int num1=0, num2=0,sum=0; char ch; printf("请输入要计算的两个整数与运算符(+、-、*、/),输入时不要加空格n"); scanf("%d%c%d", &num1, &ch, &num2); switch (ch) { case '+':sum = num1 + num2; printf("%d+%d=%dn", num1, num2, sum); break; case '-':sum = num1 - num2; printf("%d-%d=%dn", num1, num2, sum); break; case '*':sum = num1 * num2; printf("%d*%d=%dn", num1, num2, sum); break; case '/':sum = num1 / num2; printf("%d/%d=%dn", num1, num2, sum); break; default:printf("输入错误,请按要求重新输入n"); break; } return 0; }
运行结果:
总结
再识C语言(一)主要详细的阐述了C语言中的选择结构(分支语句)。
再识C语言这个系列会继续学习C语言,将会更进一步的阐述C语言的知识。
再识C语言(一)主要详细的阐述了C语言中的选择结构(分支语句)。
再识C语言这个系列会继续学习C语言,将会更进一步的阐述C语言的知识。



