分支语句与循环语句
分支语句
- if
- switch
循环语句
- while
- for
- do while
goto语句
1.c语言语句
在c语言中可以将语句分为以下五类:
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
我们先来介绍控制语句。
控制语句用于控制程序的执行流程,用于实现程序的各种结构方式,它们一般都由特定的语句定义符组成,c语言有九种控制语句。
可以分为以下三大类别
- 条件判断语句:if语句、switch语句;
- 循环执行语句:do while语句、while语句、for语句。
- 转向语句:break语句、goto语句、continue语句、return语句。
2. 分支语句
2.1 if语句
if的语法结构如下:
if(表达式)
语句1;
else(表达式)
语句2;
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
实例代码演示:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(age < 18)
{
printf("未成年人\n");
}
}
#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("old");
}
}
在表达式中,如果结果为真,则语句执行。
在c语言中,0表示假,非0表示真。
注意:上次代码块中,else是和离它最近的if进行匹配。
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.2 switch语句
switch语句也是一种分支语句,常常用于多分支情况。
比如:
- 输入1,输出星期一
- 输入2,输出星期二
- 输入3,输出星期三
- 输入4,输出星期四
- 输入5,输出星期五
- 输入6,输出星期六
- 输入7,输出星期日
switch(整型表达式)
{
语句项;
}
那么其中的语句项。
case 整形常量表达式:
语句;
代码实例:
#include
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;
}
break语句的实际效果是将语句列表划分为不同的分支效果。
default语句
如果表达的值与所有的case标签的值都不匹配怎么办? 其实也没什么,结果就是所有的语句都被跳过而已。程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签 default:写在任何一个 case 标签可以出现的位置。
当 switch表达式的值并不匹配所有 case 标签的值时,这个所以,每个switch语句中只能出现一条default子句。 default子句后面的语句就会执行。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
3. 循环语句
- while
- for
- do while
代码实例:
#include <stdio.h>
//将数字由1到10进行打印。
int main()
{
int i=0;
while(i <= 10 )
{
printf("%d\n", i);
i=i++;
}
return 0;
}
3.1 while语句中的break和continue
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后边的代码不会执行,而是会直接跳转到while语句的判断部分,进行下一次的循环的入口判断。
3.2 for循环
我们还是以实际的案例引入:
//使用for循环在屏幕上打印数字1到10
#include <stdio.h>
int main()
{
int i = 0; //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
for(表示式1; 表达式2;表达式3)
循环语句;
上述表达式:
表达式1为初始部分,用于初始化循环变量。
表达式2为条件判断部分,用于判断循环时进行终止。
表达式3为调整部分,用于循环条件的调整。(注意不要让循环陷入死循环。)
3.3 do while()循环
do
循环语句;
while(表达式)
do while() 循环的特点:至少执行一次。
代码实例:
#include
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
3.4 练习
- 计算 n的阶乘。
- 计算 1!+2!+3!+……+10!
- 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
- 编写代码,演示多个字符从两端移动,向中间汇聚。
- 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。)
4. goto语句
C语言中提供了可以随意滥用的goto语句和标记跳转的标号。
从理论上goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
以下为一个关机程序,用到goto语句:
#include <stdio.h>
int main()
{
char input[10] = {0};
system("shutdown -s -t 60");
again:
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if(0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}