目录
1.分支语句
分支语句又叫做条件判断语句,由if语句和switch语句构成
一.if语句
if语句的语法结构
if(表达式)//单分支
语句;
1.注意事项
()内部放表达式,判断的结果,为真,则执行,为假则跳过。在c语言中,非零即为真。
我们来看一道题:“if语句中,0为假,1为真。” ---> 答案是错误的。 1为真是没错,但是呢,它不全,以偏概全了。不能说除了1以外的数字就不是真的。
2.注意事项
if语句后面呢,只能跟一个语句,如果要多个语句,需要用{}。
多分支
第一类:
if(表达式) //满足条件进入if语句中
{
语句;
}
else //不满足条件进入else语句中
{
语句;
}
第二类:
if(表达式)
{
语句;
}
else if(表达式)
{
语句;
}
// .... (还可以继续用 else if)
else
{
语句;
}
要注意的是else if后面还需要增加表达式。
悬空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;
}
你认为结果是什么呢?可以思考下
答案呢
什么都没执行。
当我们用VS2019的时候,我们可以发现,else与离它最近的if对齐了。
这就是悬空else的匹配原则。
我们在回过来说上面的代码,如果按照它的代码,第一个if与else的对齐。本意上是想:如果 a==1的时候,进去判断b是否等于2,是则打印,不是则跳过,当a != 1 的时候,则打印 haha。
我们可以加上大括号来实现
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 常用于多分支
switch的语法结构
switch(整型表达式)
{
case 整形表达式:
语句;
case 整形表达式:
语句;
case 整形表达式:
语句;
case 整形表达式:
语句;
}
整形有 char ,int, long , short ,以及无符号的这些类型
我们来看个练习
用switch语句实现
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
那答案是否是这样呢?
int main()
{
int i = 0;
scanf("%d", &i);
switch (i)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期七\n");
}
return 0;
}
运行结果:
这并不是我们想要的。
switch(i) ,i 输入多少,相当于是我们从哪个入口(case 整形表达式)进入我们的switch语句中。按照顺序结构一行一行的执行下去。例如这里,我们输入 2 ,找到 case 2 这个入口,进去switch语句中,一步一步的走下去。
如果想要 输入2,输出结果只有星期二,我们就要用到 break。
在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
我们还需要想一个问题,如果输入的数字,不是1-7中的,我们是不是也需要处理一下。这时我们需要用到default。
default子句
default子句可以写在switch语句中的任意位置。
当switch中表达式的值,与case 标签(所对应的整形的值) 不匹配的时候,就会进入default子句。
一个switch语句中只能有一个default子句
那我们改一下代码看看结果如何:
int main()
{
int i = 0;
scanf("%d", &i);
switch (i)
{
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("输入错误,重新输入");
}
return 0;
}
小结:
分支语句有2类,if语句和switch语句
else的匹配原则:离else最近的if相匹配
if(表达式)
语句;
switch(整形表达式)
{
case 整形表达式:
语句;
break;
case 整形表达式:
语句;
break;
default :
语句;
}
2.3种循环语句
循环语句中,有三个关键的东西:1.循环变量 2.条件判断部分(用于循环的终止) 3.调整部分(调整循环变量使其达到循环终止的条件)
1.while()
while循环流程图:
语法结构
while(表达式) //表达式-->循环条件
{
循环语句; //循环语句中要有,循环变量调整的部分
} //循环变量,在进入while循环之前设置好
我们来看break和continue在循环中的作用
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};//定义一个数组
int n = 0; //循环变量
while (n <10) //循环判断条件
{
printf("%d",arr[n]);
if (n == 6)
break;
n++; //循环调整部分
}
return 0;
}
在看看continue
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};//定义一个数组
int n = 0; //循环变量
while (n <10)//循环判断条件
{
printf("%d",arr[n]);
if (n == 6)
continue;
n++;//循环调整部分
}
return 0;
}
我们来分析下:
break 在循环中的作用呢,是跳出循环。
continue在循环中的作用,是结束当前条件下的循环,continue下面的语句都不在执行,直接回到判断条件那,重新进入循环。
第二个代码,能不能不死循环呢,成功打印出1234568910呢,
肯定可以的,将我们循环调整部分,放到continue的上面就可以成功打印了。
需要将我们的 三要素进行调整一下。
小结
while循环中,条件判断的次数总比执行循环语句的次数多一次。
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。
break是直接结束循环。
2.for循环
语法结构
for(表达式1;表达式2;表达式3)
{
循环语句;
}
表达式1 --> 循环变量
表达式2 --> 条件判断部分
表达式3 --> 调整部分
for循环流程图
expr -- 表达式
这里的break和我们while循环中的break是一样的;
continue呢存在一点差异。
break:
continue:
在for循环中,使用continue不会遇到死循环,因为我们n++永远是在continue的上面,我们看流程图也是可以发现这一点的
for循环中的一些变形
int main()
{
//代码1
for(;;)
{
printf("hehe\n");
}
//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题。
//代码2
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("hehe\n");
}
}
//代码3
int i = 0;
int j = 0;
//如果省略掉初始化部分,这里打印多少个hehe?
for(; i<10; i++)
{
for(; j<10; j++)
{
printf("hehe\n");
}
}
//代码4-使用多余一个变量控制循环
int x, y;
for (x = 0, y = 0; x<2 && y<5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
大家可以尝试的去看看,我们只要增加一个变量 count 来计数就行了。
3.do-while 循环
语法结构
do
{
循环语句;
}while(表达式);
do-while流程图
do-while循环中,不管满不满足条件,都会执行一次。
在来看看break和continue在do-while循环中的作用
break:
和上面两种循环中一样,跳出循环。
continue:
和我们while循环中一样。我们要将循环调整部分放在continue的上面,我们才能不死循环。
改变后
同样将我们的循环三要素改变。
总结
回顾了分支语句和循环语句。
分支语句 2类,if语句,switch语句
if语句的单分支,多分支以及else的匹配原则。
switch语句与break和default连用
循环语句 3类
while(表达式), for(表达式1;表达式2;表达式3), do-while(表达式)
循环语句中break和continue在各自循环的作用。