c语言—分支语句和循环语句详解

什么是语句

c语言中由一个分号;所隔开的就是一条语句。例如:

printf("hello World!");
int i = 0;

分支语句

一、if语句

1.语法结构
  • 单分支
if (表达式)
{
        语句;
}
  • 双分支
if (表达式)
{
        语句1;
}
else
{
        语句2;
}
  • 多分支
if (表达式1)
{
        语句1;
}
else if (表达式2)
{
        语句2;
}
else
{
        语句3;
}

注意
虽然可以直接在if语句的条件判断后直接加语句,但是如果直接加语句,一个if语句默认只有后一个语句为条件为真时的执行语句。所以说就算只跟有一个语句,也建议语句写在大括号中,作为一个好的习惯。这样做可以让内容更直观,还不容易出错,提高了代码的可读性

2.悬空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;
}

输出结果为:

因为else总是与最近的if匹配,而最外层的if条件不满足,所以无输出结果。

建议写法为:

#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;
}

二、switch语句

1.语法结构

当if语句实现分支太麻烦时,我们就可以用switch语句。语法结构为:

switch (表达式) {//这里的表达式一般为整型结果的常量表达式或者枚举类型
case 表达式:
        语句体1;
        break;
case 表达式:
        语句体2;
        break;
        ......
default:
        语句体n + 1;
        break;
}
  • break语句的实际效果是把语句列表划分为不同的部分。

例如:

#include <stdio.h>
int main()
{
   int day = 1;
   switch(day)
  {
       case 1:
       case 2:
       case 3:
       case 4:
       case 5:
           printf("weekday\n");
           break;//以上语句会按顺序依次执行,直到碰到break结束。
       case 6:
       case 7:
           printf("weekend\n");
           break;
  }
   return 0;
  }

输出结果是:

weekday

2.default语句
  • 可以写在任何一个case标签可以出现的位置。
  • 当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。
  • 所以,每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。

编程好习惯

  • 在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

循环语句

循环的三要素:

  1. 条件初始化
  2. 条件判定
  3. 条件更新

一、while循环

1.语法结构
while (表达式)
{
        循环语句;
}
2.break在while循环中的作用
  • while中的break是用于永久终止循环的。

例如:

#include <stdio.h>
int main()
{
        int i = 1;
        while (i <= 10)
        {
               if (i == 5)
                       break;
               printf("%d ", i);
               i = i + 1;
        }
        return 0;
}

输出结果为:

1 2 3 4

3.continue在while循环中的作用
  • continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接
    跳转到while语句的判断部分。进行下一次循环的入口判断。

例如:

#include <stdio.h>
int main()
{
        int i = 1;
        while (i <= 10)
        {
               i = i + 1;
               if (i == 5)
                       continue;
               printf("%d ", i);
        }
        return 0;
}

输出结果为:

1 2 3 4 6 7 8 9 10

二、for循环

1.语法结构
for (表达式1;表达式2;表达式3)
{
        循环语句;
}
//表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断
//循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。
2.while循环与for循环比较
#include <stdio.h>
int main()
{
        int i = 0;
        //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
        for (i = 1; i <= 10; i++)
        {
               printf("hehe\n ");
        }
        
         //实现相同的功能,使用while
        i = 1;//初始化部分
        while (i <= 10)//判断部分
        {
               printf("hehe\n");
               i = i + 1;//调整部分
        }
        return 0;
}
  • 可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离
    较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹。 for循环使用的频率也最高。
3.break和continue在for循环中

在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。 但是还是
有些差异:

  • continue执行后会先跳到条件更新处,再进行条件判断。
  • 这样好处就是可能不会因为continue跳过条件更新而造成死循环!!!

例如:

#include <stdio.h>
int main()
{
        int i = 1;
        while (i <= 10)
        {
               if (i == 5)
                       continue;
               printf("%d ", i);
               i = i + 1;
               //i  == 5时,一直返回条件判断,无法进行条件更新,而条件判断又满足,故会造成死循环
        }
        return 0;
}

运行结果:

会造成死循环

三、do…while循环

1.语法结构
do
{
        循环语句;
}
while (表达式);

例如:

#include <stdio.h>
int main()
{
        int i = 10;
        do
        {
               printf("%d\n", i);
        } while (i < 10);
        return 0;
}

输出结果:

10

2.do语句的特点
  • 循环至少执行一次!
  • 在最后的地方有个
3.do while循环中的break和continue

continue执行后continue之后的语句不再执行(类似while循环),直接进行下一次while处的判断。
使用不当也是会造成死循环
例如:

#include <stdio.h>
int main()
{
        int i = 10;
        do
        {
               if (5 == i)
                       continue;
               printf("%d\n", i);
               i -= 1;
        } while (i > 1);
        return 0;
}

如果有任何需要改正的或者建议,欢迎留言。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bruin_du

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值