目录
前言
C语言是一种结构化得程序设计语言,包括多种语句:表达式语句、函数调用语句、空语句、控制语句、复合语句等。
int main()
{
3+5;//表达式语句
printf("hehe\n");//函数调用语句
;//空语句
//此外还有控制语句、复合语句等
}
控制语句共有9种,可分为一下3类:
1.分支语句
if语句、switch语句;
2.循环语句
while语句、for语句、do while语句;
3.转向语句
goto语句、break语句、continue语句、return语句。
一、分支语句
1. if语句
1.1 语法结构
if(表达式) //判断表达式是否为真,在C语言中,0表示假,1表示真。
语句1;
else
语句2;
else
语句3;
例如,我们想要实现“年龄大于等于18时打印成年人,否则打印未成年”的功能。
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年人\n");
else
printf("未成年\n");
return 0;
}
但是,当我们想细分年龄时,例如年龄<18(未成年),18~30(青年),31~50(中年),51~70(中老年),71~99(老年),>99老寿星。程序语句表达如下:
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("未成年\n");
else
{
if (18 <= age && age <= 30)
printf("青年\n");
else
{
if (31 <= age && age <= 50)
printf("中年\n");
else
{
if (51 <= age && age <= 70)
printf("中老年\n");
else
{
if (71 <= age && age <= 99)
printf("老年\n");
else
printf("老寿星\n");
}
}
}
}
return 0;
}
但是这样的写法有点复杂,因此,我们可以采用if(...){...} else if(...){...}... else{...}语句进行简化。
1.2 if...else if语句
上述程序可简化为:
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("未成年\n");
else if (18 <= age && age <= 30)
printf("青年\n");
else if (31 <= age && age <= 50)
printf("中年\n");
else if (51 <= age && age <= 70)
printf("中老年\n");
else if (71 <= age && age <= 99)
printf("老年\n");
else
printf("老寿星\n");
return 0;
}
很明显,经过简化的程序变得更加工整简洁。我们知道,对于if...else语句,通俗的讲,就是如果if表达式行,就值执行if语句的内容,如果不行,就跳过if执行else中的内容。因此,我们可以对程序做出进一步简化:
int 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 <= 70)
printf("中老年\n");
else if (age <= 99)
printf("老年\n");
else
printf("老寿星\n");
return 0;
}
1.3 悬空else
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else//else与离的最近的if匹配,所以不执行if(a==1),程序不进入条件语句,因此不输出
printf("haha\n");
return 0;
}
尽管else和第一个if看似左对齐,但else总是与离得最近得if匹配。
2. switch语句
2.1 语法结构
switch (整型表达式)
{
case构成的多条语句项:
}
表示形式为:
case 整型常量表达式(可以是1 2 3 4 5 ...):
语句;
switch语句相当于多个if...else语句,⽤于判断条件有多个结果的情况。
例如,输入1,输出星期一;输入2,输出星期二,...,输入7,输出星期日。程序表示为:
int main()
{
int day = 0;
scanf("%d", &day);//仅仅是选择switch
switch (day)
{
case 1://case语句从哪里进入的入口,需要有跳出break语句,实现了switch语句中跳出分支的效果
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.case和整型常量表达式之间至少要有一个空格,常量表达式后面是冒号。
2.每⼀个case语句中的代码执⾏完成后,需要有跳出break语句,实现switch语句跳出分支的效果。
2.2 break
当程序进入switch语句,并找到case入口时,程序会从当前的case开始向下执行,直至遇到break后跳出分支语句。因此,如果一个case语句中没有break,那么程序在执行完这个case语句后会向下进入下一个case语句,直到遇到break或者执行完整个switch分支语句。以上述程序为例,当我们把break注释掉后,程序中输入1,会把星期一到星期七全部打印下来。
![]() | ![]() |
2.3 default
当所有case无法匹配时,想做一个处理时,需用default来提醒我们。当switch获取到的整型表达式无法与case后的整型变量表达式匹配时,就会执行default语句。
基于此,我们可对程序做进一步修改,当输入1~5时,打印工作日,当输入6~7时,打印休息日,当输入其他时,会出现提示,打印选择错误。
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
default:
printf("选择错误\n");
break;
}
return 0;
}