1. 什么是语句?
C
语句可分为以下五类:
1. 表达式语句
2. 函数调用语句
3. 控制语句
4. 复合语句
5. 空语句
控制语句
用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,
C
语 言有九种控制语句。
可分成以下三类:
1. 条件判断语句也叫分支语句:if语句、
switch
语句;
2. 循环执行语句:
do while
语句、
while
语句、
for
语句;
3. 转向语句:
break
语句、
goto
语句、
continue
语句、
return
语句。
if语句
语法结构:
if(表达式)语句1;else语句2;//多分支if(表达式1)语句1;else if(表达式2)语句2;else语句3;
演示代码:
如果表达式的结果为真,则语句执行。
在C语言中如何表示真假? 0表示假,非0表示真。
#include <stdio.h>
//代码1
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("未成年\n");
}
}
//代码2
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("未成年\n");
}
else
{
printf("成年\n");
}
}
//代码3
#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<80)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}
}
悬空else
当我们写了这样一段代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
改正:
else的匹配:else是和它离的最近的if匹配的。
//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
switch语句
switch语句也是一种分支语句。 常常用于多分支的情况。
比如:
输入1
,输出星期一
输入2
,输出星期二
输入3
,输出星期三
输入4
,输出星期四
输入5
,输出星期五
输入6
,输出星期六
输入7
,输出星期日
那我没写成 if...else if ...else if
的形式太复杂,那我们就得有不一样的语法形式。 这就是switch
语句。
switch(整型表达式){语句项;}
#include <stdio.h>
int main()
{
int day = 0;
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. 输入
1-5
,输出的是
“weekday”;
2. 输入
6-7
,输出
“weekend”
所以我们的代码就应该这样实现了:
#include <stdio.h>
//switch代码演示
int main()
{
int day = 0;
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
return 0;
}
break语句 的实际效果是把语句列表划分为不同的分支部分。
default子句
如果表达的值与所有的case标签的值都不匹配怎么办? 其实也没什么,结构就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个
case
标签可以出现的位置。 当 switch
表达式的值并不匹配所有
case
标签的值时,这个
default
子句后面的语句就会执行。 所以,每个switch
语句中只能出现一条
default
子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个
case
标签一样执行
default
子句。
编程好习惯
在每个 switch
语句中都放一条
default
子句是个好习惯,甚至可以在后边再加一个
break
。推荐写在语句的最后.
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}