1.什么是语句
C
语句可分为以下五类:
1.
表达式语句
2.
函数调用语句
3.
控制语句
4.
复合语句
5.
空语句
控制语句
用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,
C
语
言有九种控制语句。
可分成以下三类:
1.
条件判断语句也叫分支语句:
if
语句、
switch
语句;
2.
循环执行语句:
do while
语句、
while
语句、
for
语句;
3.
转向语句:
break
语句、
goto
语句、
continue
语句、
return
语句。
2.分支语句(选择语句)
分支语句有两种:if语句 switch语句
<1>if语句语法结构
-
if(表达式)
{
语句;
}
代码例子:
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(age>18)
{
printf("成年\n");
}
return 0;
}
2.
if(表达式)
{
语句1;
}
else
{
语句2;
}
先判断表达式是否成立,成立进行语句1,不
成立进行语句2.
3.多分支
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
.......
else if(表达式n-1)
{
语句n-1;
}
else
{
语句n
}
![](https://img-blog.csdnimg.cn/f56528408394431ba8d0fe35b62f014f.png)
总结:如果表达式的结果为真,则语句执行。
在C语言中如何表示真假?
0表示假,非0表示真。
if语句中,如果要执行多条语句要用一个代码块{}
4.悬空else
代码:
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
if(1==a)
if(2==b)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
预期:会输出hehe或haha
运行结果:
结果并没有输出hehe或haha
原因分析:首先,这样写代码会让人误以为第一个if与else配对,其实else与第二个if配对。所以,第二个if和else的内容都属于第一个if的内容。
代码改为:
int main()
{
int a = 0;
int b = 2;
if(1==a)
if(2==b)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
但是,改完的代码还是让人看的不是很懂,因该进一步修改
int main()
{
int a = 0;
int b = 2;
if(1==a)
{
if(2==b)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
总结:
else的匹配:else是和它离的最近的if匹配的。
适当的使用{}可以使代码的逻辑更加清楚。
代码风格很重要
3.switch语句:常用于多分支情况,可以嵌套
<1>在switch语句中可以出现:case,break,default.
<2>switch的语句结构
switch(
整型表达式)
{
case
整形常量表达式1
:
语句1;
break;
.........
case
整形常量表达式n
:
语句n;
break;
default :
语句n+1;
break;
}
注意:
整型表达式
整形常量表达式都必须为整型。
default ,break可以写,也可以不写
如果switch中没有break,代码从哪里进去,后面的代码也会执行
所以,我们要根据编程要求适当的运用break
代码改为
如果星期1到5为weekday,6到7为weekend
代码可以这样写
总结:break语句 的实际效果是把语句列表划分为不同的分支部分。
编程好习惯
在最后一个 case 语句的后面加上一条 break语句。
(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
循环语句
while
for
do while
goto语句
<1>while循环
语法结构:
while(表达式)
{
语句;
}
while语句的执行流程
while语句中的break和continue
<1>break
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。
<2>continue
continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判断
for
循环
语法形式:
for(表达式1;表达式2;表达式3)
{
循环语句;
}
表达式
1
表达式
1
为
初始化部分
,用于初始化循环变量的。
表达式
2
表达式
2
为
条件判断部分
,用于判断循环时候终止。
表达式
3
表达式
3
为
调整部分
,用于循环条件的调整
for循环的执行流程
break
和
continue
在
for
循环中用法与在while中相似
for
语句的循环控制变量
建议:
1.
不可在
for
循环体内修改循环变量,防止
for
循环失去控制。
2.
建议
for
语句的循环控制变量的取值采用
“
前闭后开区间
”
写法。
一些
for
循环的变种
<1>
for(; ;)
{
printf("11");
}
for的初始化,判断,调整三个部分都可以省略
. 中间的判断部分如果省略,意味着判断恒为真,就构成了死循环
不建议初学时省略,容易导致问
题
代码例子:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("hehe\n");
}
}
return 0;
}
运行结果:打印9个hehe
将两个循环的初始化部分省略
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for(;i<3;i++)
{
for(;j<3;j++)
{
printf("hehe\n");
}
}
return 0;
}
预期:打印9个hehe
运行结果:
这就是乱省略所造成的后果
<2>
使用多余一个变量控制循环
int
x
,
y
;
for
(
x
=
0
,
y
=
0
;
x
<
2
&&
y
<
5
;
++
x
,
y
++
)
{
printf
(
"hehe\n"
);
}
return
0
;
}
do...while()
循环
语法结果:
do
{
循环语句;
}while(表达式)};
执行流程:
do
语句的特点
循环至少执行一次,使用的场景有限,所以不是经常使用。
在while循环,for循环,do while()循环中break,continue的作用相似
goto
语句
C
语言中提供了可以随意滥用的
goto
语句和标记跳转的标号
。
从理论上
goto
语句是没有必要的,实践中没有
goto
语句也可以很容易的写出代码。
但是某些场合下
goto
语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过
程。
例如:一次跳出两层或多层循环。
多层循环这种情况使用
break
是达不到目的的。它只能从最内层循环退出到上一层的循环。
goto语句的格式:
goto+你所命名的名称 ;
你想跳转到哪里就在其前面加上 你所命名的名称:
例子:写一个关机程序
//shutdown windows提供的关机命令
//shutdown -s -t 60
system() - 库函数-执行系统命令
#include<stdio.h>
//关机程序
//shutdown windows提供的关机命令
//shutdown -s -t 60
system() - 库函数-执行系统命令
#include<stdlib.h>
#include<string.h>
int main()
{
char arr[20] = { 0 };
system("shutdown -s -t 60");
again:
printf("请输入我是猪,否则电脑将一分钟后关机!!!!");
scanf("%s", arr);
if (0 == strcmp(arr, "我是猪"))
//取消关机 strcmp 用来比较字符串是否相等
system("shutdown -a");
else
goto again;
return 0;
}