分支语句有
- if
- switch
循环语句有
- while
- for
- do while
在了解分支循环语句之前先说什么是语句,语句就是一段可执行的代码
c语言将语句分为了
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
分支和循环语句属于其中的控制语句,控制语句用于控制程序的执行流程
先是分支语句,分支语句就是选择,如果符合条件,则执行相应语句。
典型的代表就是if语句,下面是if语句的语法结构
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
在第一个if语句中如果表达式为真,则执行相应的语句,都不为真则执行else中的语句(在c语言中0为假,非0则为真)
如果条件成立时要执行多条语句则要使用代码块,即多条语句用大括号括起
if (表达式)
{
语句1;
语句2;
语句3;
}
其中的else会和离他最近的语句匹配,如下面这串代码所示
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("语句1\n");
else
printf("语句2\n");
按照我们的思路来,a并不等于1,执行else中的语句打印语句2,但是运行代码后并没有任何东西,是因为这串代码的缩进有歧义,修改成以后代码更好理解
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("语句1\n");
}
else
printf("语句2\n");
从这个示例中我们也能认识到规范书写代码的必要性
用if语句我们可以判断一个数是否是偶数,如果它能被2整除则是偶数
if(x % 2 == 0)
printf("x是偶数");
switch也是一种分支语句,一般用于多分支
例如:输入1,输出星期一,输入2,输出星期二,以此类推
在这种情况下使用if...else if...else来实现过于复杂,就可以使用switch来实现
下面时switch语句的语法结构
switch(整型表达式)
{
case 整型常量表达式:
语句;
case 整型常量表达式:
语句;
case 整型常量表达式:
语句;
default:
语句;
}
要注意的是switch语句并不能直接实现分支,需要搭配break来实现,例如下面这串代码
int day = 3;
switch (day)
{
case 1:
printf("星期一");
case 2:
printf("星期二");
case 3:
printf("星期三");
case 4:
printf("星期四");
case 5:
printf("星期五");
case 6:
printf("星期六");
case 7:
printf("星期天");
}
当我们运行代码是会输出星期四 星期五 星期六 星期天
我们需要用到break来让程序跳出switch语句,如下
int day = 3;
switch (day)
{
case 1:
printf("星期一 ");
break;
case 2:
printf("星期二 ");
break;
case 3:
printf("星期三 ");
break;
case 4:
printf("星期四 ");
break;
case 5:
printf("星期五 ");
break;
case 6:
printf("星期六 ");
break;
case 7:
printf("星期天 ");
break;
}
程序会像我们想要的那样输出星期三
若是我们想在输入1-5时输出工作日,输入6-7时输出周末呢,我们修改代码如下
int day = 3;
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
default:
printf("输入错误");
}
break语句就是将switch划分成不同的分支,代码判断switch后的整型表达式来决定分支的入口,再以break来作为分支的出口,而default语句则是在所有case语句都不满足时执行default后面的语句,它可以出现在switch语句的任何地方,但是只能出现一次。
在讲完分支语句后再来看看循环语句,在分支语句中如果我们满足if的条件则语句执行,反之则不执行,条件判断会进行一次,语句执行也只有一次,但是实际上我们有些事情需要反复做,这个时候就需要用到循环语句,下面时它的语法结构
while(表达式)
{
循环语句;
}
while首先判断表达式是否为真,为真则执行循环语句,再回头去判断,执行,直到表达式为假跳出循环,如下代码打印一到十
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
在while循环外对循环变量进行初始了,然后判断,执行,在最后对循环变量进行调整,让他朝着跳出循环的方向进行改变
那既然如此,我们能不能把变量的初始,判断和调整放在一起呢,那就是我们的for循环
for(表达式1;表达式2;表达式3)
{
循环语句;
}
for循环在表达式1中对变量进行初始化,在表达式2中判断变量,为真则执行循环语句,然后在表达式3中对变量进行调整
for循环的表达式1,2,3均可以省略,如果判断省略则恒为真,循环一直进行
我们用for循环来实现打印一到十
for (int i = 1; i <= 10; i=i+1)
{
printf("%d ", i);
}
要注意的是最好不要在循环体内修改循环变量,有可能会形成死循环
接下来是do...while循环,从字面意思上就是先执行do中的内容,然后再判断表达式是否为真,循环语句至少被执行一次。
do
{
循环语句;
}
while(表达式);
因为do...while循环的使用场景有限,这里不多赘述
我们在switch语句中提到过break,它在循环中同样适用,循环语句在遇到break时跳出循环,举个例子
int i = 0;
while (i < 10)
{
if (i > 5)
break;
printf("%d ", i);
i++;
}
for (i = 0; i < 10; i++)
{
if (i > 5)
break;
printf("%d ", i);
}
这两个循环都会打印0-5,他们在i>5时执行了break跳出了循环
而continue语句则会跳出循环,执行下一次循环,本次循环continue之后的代码不会被执行,我们对上述代码稍作调整具体看看它的作用
int i = 0;
while (i < 10)
{
printf("%d ", i);
i++;
if (i == 5)
continue;
}
for (i = 0; i < 10; i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
他们都会打印0-9除了5的数字,在while循环中我调换了if和i++的位置,如果把continue放在i++的前面i会在之后的每一次循环中都等于5,陷入死循环
到此简单分支与循环已经说完,如有错误请指正