大家对c语言的分支语句和循环语句足够了解吗?让我们来探讨一下
分支语句:
1、if 2、switch
循环语句:
1、while 2、for 3、do while
目录
一、分支语句
1、 if语句
2、 switch语句
二 、循环语句
1、 while语句
2、for循环
3、 do...while
语法结构:
第一种:if(表达式)
语句;
第二种:if(表达式)
语句1;
else
语句2;
第三种:if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
上面的语法结构中,其实每个语句可以用大括号括起来,原因是如果if或者else后面要执行的可能不止一句,用大括号将所以要执行的语句括起来,这样就可以完美的执行代码,当然了,如果要执行的语句只有一条,那么可以如同语法结构那样不加大括号。
代码1:
#include
int main()
{
int age = 10;
if (age < 18) //如果表达式为真,执行if后面的语句
printf("未成年\n");
else //如果表达式为假,执行else后面的语句
printf("成年\n");
return 0;
}
代码2:
#include
int main()
{
int age = 20;
if (age < 18)
printf("未成年\n");
else if (age >= 18 && age < 28)
printf("青年\n");
else if (age >= 50 && age < 50)
printf("壮年\n");
else
printf("老年\n");
return 0;
}
顺便说一下,c语言的逻辑只有两种,真和假,非0就为真,0就为假。上面的操作符&&,它叫逻辑与,特点是一真即真,同假才假,如上面年龄20,20>=18??,确实是,所以为真,一真即真,所以整个表达式为真。(后面我会出一期C语言操作符的文章)
代码3:
我们发现,如果分支语句太多,用if...else if...else if.....的形式太复杂了,这时候用switch语句就会更加简单。
switch语法结构:
switch(整型表达式)
{
case 整型常量表达式:
语句;
.......
}
代码1:
#include
int main()
{
int day = 0;
scanf("%d", &day);
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;
}
为什么每个case的后面加上break,是因为在执行对应的case语句后,就跳出switch分支语句,如果没有加上break,那么程序会继续执行后面的case语句,只要再次遇见break语句为止,才跳出switch分支语句。
代码2:
#include
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
如果几个case对应的结果都是一样的,如上代码所示,那么这个时候就不用每个case都加上要执行的语句,只需要在对应结果相同的最后一个case后面加上要执行的语句即可。
代码3:
#include
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
最后的defalut,其实是可以省略的,只不过如果当我们输入的数字在switch分支语句中,没有找到对应case的时候,可以打印一个输入错误作为提醒,当然了break不能少。
而且这个default语句可以放在分支语句中的任意位置,这个不影响代码的运行。
不管是if语句还是switch语句,当条件满足的情况下,都只能执行一次。
但是很多时候我们知道同一件事情需要完成很多次,这个时候就要用到循环语句,首先介绍while语句。
while的语法结构:
while(表达式)
{
循环语句;
}表达式为真,则执行循环语句,循环一次后,第二次判断表达式的真假情况,直到循环到表达式为假的时候,就不再执行循环语句,这时候跳出循环。
用流程图表示如下:
先说一下双目操作符==和!=
==的意思是判断操作符左边和右边是否相等,相等就为真,不相等就为假。
!=的意思是判断操作符左边和右边是否不相等,不相等就为真,相等就为假。
break和continue后面和代码一起说更容易理解。
代码2:
#include
int main()
{
int i = 0;
while (i <= 10)
{
if (i == 5)
break;
printf("%d ", i);
i++;
}
return 0;
}
while循环语句中如果执行了break语句,那么就是会中止循环,这时候就跳出了循环。
如上代码所示,当循环到 i 等于5的时候,就会执行if后的break语句,所以代码运行的结果如上。
总结:break在while循环中的作用:
其实在循环中只要遇见break,就停止后期的所有循环,直到终止循环。所以:while中的break是只用于永久终止循环的。
代码3:
总结:continue在while循环中的作用:
其实在循环中只要遇到continue,也就是本次循环中的continue后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。
对于循环语句来说,用的最多的是for循环,再就是while循环,用的最少的是do for
for语法结构
for(表达式1;表达式2;表达式3)
{
循环语句;
}
表达式1为初始化部分,用于初始化循环变量的。表达式2为条件判断部分,用于判断循环时候终止。表达式3为调整部分,用于循环条件的调整。注意:表达式之间用的分号 ;相隔。
for的循环流程图
可以发现,在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改不够集中和方便。所以,for循环的风格更好,for循环的使用频率也是最高的。
break和continue在for循环中
我们发现在for循环中也可以出现break和continue,他们的意义和while循环中是一样的,但是还是有些差异。
代码1:
#include
int main()
{
int i = 0;
//初始化 判断 调整
for(i=1;i<=10;i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
break在for和while循环的作用都是中止语句,跳出循环
通过for的循环流程图可知,一般进入for循环,先初始化,然后判断,判断为真,进入循环语句,然后进行调整,接着再进行判断......,直到判断出现为假,就跳出循环。
但是如果出现了break语句,并且执行了,那么和while循环一样,直接中止,并跳出循环。
代码2:
对比这两段代码的运行结果就知道continue在for和while循环中有些差异。
continue在for和while循环中都是起到跳过本次循环后的代码语句。
在for循环中,当循环执行到表达式 i == 5 为真的时候,执行if后的continue语句,就会直接跳过后面的printf语句,所以不会打印5,然后就回到调整语句 i ++,这时i = 6,然后表达式 i ==5为假,就不会执行if后的continue语句,又开始执行printf语句,直到循环到判断语句i <=10为假,就跳出循环,所以代码结果是 1 2 3 4 6 7 8 9。
而在whlie语句中,我们在上面说了,会跳过在while循环中continue后的所有语句,所有运行结果可以看到 0 1 2 3 4,但是程序后一直死循环执行,直到程序奔溃。
代码3:
#include
int main()
{
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 3; j++)
{
printf("好");
}
}
}
如代码运行结果所示,会打印出9个好。
do...while循环用的最少,但是它也有自己的优点,那么就是循环语句至少会被执行一次。
因为用for和while循环,首先就是要进行判断语句,如果为假,那么循环语句一次都运行不了。而do...while不一样,它将判断语句放在了while的后面,所以循环语句至少可以被执行一次。
do...while的语法结构
do
{
循环语句;
}while(表达式);
do...while的循环流程图
代码1:
#include
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
} while (i < 10);
return 0;
}
可以看出,首先运行一次循环语句,然后进行判断语句,循环到直到判断语句为假。
代码2:
#include
int main()
{
int i = 1;
do
{
if (i == 5)
continue;
printf("%d ", i);
i++;
} while (i < 10);
return 0;
}
编译打印的结果是
1 2 3 4 (但是后面代码会一 直循环,只是不再打印)
当打印了1 234后,这是i=5,然后来到if的判断语句,i== 5为真,执行continue,所以在do后面接的循环语句printf和i+ +语句不再执行,然后来到whlie里的判断语句, i<=10为真,继续来到do后的语句,此时i=5,因为一直在循环里,同理,就一直以i=5循环。