目录
分支语句和循环语句
分支语句
- if
- switch
循环语句
- while
- for
- do while
goto语句
1. 什么是语句?
C
语句可分为以下五类:
1.
表达式语句
2.
函数调用语句
3.
控制语句
4.
复合语句
5.
空语句
控制语句
用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,
C
语 言有九种控制语句。
可分成以下三类:
1.
条件判断语句也叫分支语句:
if
语句、
switch
语句;
2.
循环执行语句:
do while
语句、
while
语句、
for
语句;
3.
转向语句:
break
语句、
goto
语句、
continue
语句、
return
语句。
2. 分支语句(选择结构)
如果你好好学习,校招时拿一个好
offer
,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
这就是选择!
2.1 if语句
那
if
语句的语法结构是怎么样的呢?
语法结构:
if
(
表达式
)
语句
;
if
(
表达式
)
语句
1
;
else
语句
2
;
//
多分支
if
(
表达式
1
)
语句
1
;
else if
(
表达式
2
)
语句
2
;
else
语句
3
;
演示代码:
#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"
);
}
}
解释一下:
如果表达式的结果为真,则语句执行。
在
C
语言中如何表示真假?
0
表示假,非
0
表示真。
左边这个程序是怎么算的呢?其实我们以输入10为例,10输入进去后,先是 18<=10 为假 然后程序变为 0<40 ,然后0<40为真变为1,恒成立程序,进入程序内部。所以不要这么写 ,要写成:
如果条件成立,要执行多条语句,怎应该使用代码块。
#include <stdio.h>
int
main
()
{
if
(
表达式
)
{
语句列表
1
;
}
else
{
语句列表
2
;
}
return
0
;
}
这里的一对
{ }
就是一个代码块。
2.1.1 悬空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
;
}
改正:
//
适当的使用
{}
可以使代码的逻辑更加清楚。
//
代码风格很重要
#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
匹配的。
2.1.2 if书写形式的对比
//
代码
1
if
(
condition
) {
return
x
;
}
return
y
;
//
代码
2
if
(
condition
)
{
return
x
;
}
else
{
return
y
;
}
//
代码
3
int
num
=
1
;
if
(
num
==
5
)
{
printf
(
"hehe\n"
);
}
//
代码
4
int
num
=
1
;
if
(
5
==
num
)
{
printf
(
"hehe\n"
);
}
代码
2
和代码
4
更好,逻辑更加清晰,不容易出错。
这样的结果是打印出了 hehe 违背初始的意愿,所以我们一般用更好一点的方式去写
像这样
这个时候如果写错了,编译器会报错的,更有利于我们发现问题。 这个写法适用于一个变量与一个常量相不相等的情况下(这将是一个很好的编程习惯)。
2.1.3 练习
1.
判断一个数是否为奇数
2.
输出
1-100
之间的奇数
2.2 switch语句
switch
语句也是一种分支语句。
常常用于多分支的情况。
比如:
输入
1
,输出星期一
输入
2
,输出星期二
输入
3
,输出星期三
输入
4
,输出星期四
输入
5
,输出星期五
输入
6
,输出星期六
输入
7
,输出星期日
那我没写成
if...else if ...else if
的形式太复杂,那我们就得有不一样的语法形式。
这就是
switch
语句。
switch
(
整型表达式
)
{
语句项;
}
而
语句项
是什么呢?
//
是一些
case
语句:
//
如下:
case
整形常量表达式
:
语句
;
2.2.1 在switch语句中的 break
在
switch
语句中,我们没办法直接实现分支,搭配
break
使用才能实现真正的分支。
比如:
#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
语句
的实际效果是把语句列表划分为不同的分支部分。
编程好习惯
在最后一个
case
语句的后面加上一条
break
语句。
(之所以这么写是可以避免出现在以前的最后一个
case
语句后面忘了添加
break
语句)。
2.2.2 default子句
如果表达的值与所有的
case
标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在
C
中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条
default
子句,把下面的标签
default
:
写在任何一个
case
标签可以出现的位置。
当
switch
表达式的值并不匹配所有
case
标签的值时,这个
default
子句后面的语句就会执行。
所以,每个
switch
语句中只能出现一条
default
子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个
case
标签一样执行
default
子句。
(default放在第一行也是可以的,只是习惯放在最后一行)
编程好习惯
在每个
switch
语句中都放一条
default
子句是个好习惯,甚至可以在后边再加一个
break
。
2.2.3 练习
#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
;
}
结果是:m=5,n=3
因为嵌套switch里面的break跳出循环时只能跳出里面的switch(即跳出case3),然后就执行case4.遇到break跳出外面的switch。
3. 循环语句
- while
- for
- do while
3.1 while循环
我们已经掌握了,
if
语句:
if
(
条件
)
语句
;
当条件满足的情况下,
if
语句后的语句执行,否则不执行。
但是这个语句只会执行一次。
由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢?
C
语言中给我们引入了:
while
语句,可以实现循环。
//while
语法结构
while
(
表达式
)
循环语句
;
while
语句执行的流程:
比如我们实现:
在屏幕上打印1-10的数字。
#include <stdio.h>
int
main
()
{
int
i
=
1
;
while
(
i
<=
10
)
{
printf
(
"%d "
,
i
);
i
=
i
+
1
;
}
return
0
;
}
上面的代码已经帮我了解了
while
语句的基本语法,那我们再了解一下:
3.1.1 while语句中的break和continue
break
介绍
//break
代码实例
#include <stdio.h>
int
main
()
{
int
i
=
1
;
while
(
i
<=
10
)
{
if
(
i
==
5
)
break
;
printf
(
"%d "
,
i
);
i
=
i
+
1
;
}
return
0
;
}
总结:
break在while循环中的作用:
其实在循环中只要遇到
break
,就停止后期的所有的循环,直接终止循环。
所以:
while
中的
break
是用于
永久
终止循环的。
continue
介绍
//continue
代码实例
1
#include <stdio.h>
int
main
()
{
int
i
=
1
;
while
(
i
<=
10
)
{
if
(
i
==
5
)
continue
;
printf
(
"%d "
,
i
);
i
=
i
+
1
;
}
return
0
;
}
这里代码输出的结果是什么?
总结:
continue
在
while
循环中的作用就是:
continue
是用于终止本次循环的,也就是本次循环中
continue
后边的代码不会再执行,
而是直接跳转到
while
语句的判断部分。进行下一次循环的入口判断。
好啦!!!
由于时间原因,今天就先到这里啦!
下一篇我们接着讲哈!
如果感觉对你有用,就来个点赞加关注吧!
谢谢大家!!!