分支循环语句
四、转向语句
一、什么是语句?
下面介绍的是控制语句:(分号隔开的就是一个语句)
控制语句用于控制程序的执行流程,以实现程序的各种结构方式C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。
- 条件判断语句也叫分支语句:if语句、switch语句;
- 循环执行语句:do while语句、while语句、for语句;
- 转向语句:break语句、goto语句、continue语句、return语句。
二、分支语句(选择结构)
1. if语句
if(表达式)//如果为单个语句,表达式为真(非0即为真)就执行下面的语句
语句;
if(表达式)
语句1;
else
语句2;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
特殊情况,悬空的else:
#include <stdio.h>//这里的输出结果不是hha,else是跟着离它最近的if语句
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>
//代码1
int main()
{
int age = 0;
scanf("%d", &age);//scanf是输入函数,前面要写占位符,后面要写取地址符&
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
{
printf("老寿星\n");
}
}
2. switch语句
switch语句也是一种分支语句,常常用于多分支的情况。
switch 语法结构:
switch(整型表达式)
{
语句项;
}
//语法项是什么?
//是一些case语句:
//如下:
case 整形常量表达式://注意是冒号不是分号
语句;
2-1在switch语句中的 break
在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
case是入口,break是出口,若无break,case就从上往下来执行
#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;
default;
printf("输入错误“);
break;
}
return 0;
2-2 default子句
是为了将超出自己设计范围的值来设计的,比如上面语句输入8,就会进入default子句中
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break.
三、循环语句
- while
- for
- do while
1.while循环
while语法结构:
while(表达式)
循环语句;
1-1语法实例(打印1-10的数字)
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;//i++
}
return 0;
}
1-2while语句中的break和continue
1-2-1break实例:
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}
break作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。所以:while中的break是用于永久终止循环的。
1-2-2continue实例:
#include <stdio.h>//结果为1234
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)//死循环
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}
1 2 3 4
continue作用:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
2.for循环
2-1for循环的语法
for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1为初始化部分,用于初始化循环变量的。
表达式2为条件判断部分,用于判断循环时候终止。
表达式3为调整部分,用于循环条件的调整。
例子打印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;
}
while循环查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。
2-2break和continue在for循环中
//代码1
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)//跳过5生成1234
{
if(i == 5)
break;
printf("%d ",i);
}
return 0;
}
//代码2
#include <stdio.h>//当i==5时就跳到i++生成1234678910
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;
printf("%d ",i);
}
return 0;
}
- 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
- 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
3.do while循环
循环至少执行一次,使用的场景有限,所以不是经常使用。
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i=i+1;
}while(i<=10);
return 0;
}
3-1 do while循环中的break和continue
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(5 == i)
break;
printf("%d ", i);
i=i+1;
}while(i<=10);
return 0;
}
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(5 == i)
continue;
printf("%d ", i);
i=i+1;
}while(i<=10);
return 0;
四、goto语句
最常见的用法就是终止程序在某些深度嵌套的结构的处理过过程
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
// 处理错误情况
关机程序:
#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;
}