分支和循环

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构选择结构循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种 结构的组合。

我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构

一、if语句

我们可以先稍微了解一下if语句是怎么使用的:表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是 不是0,则语句执⾏。

我们用代码来看一下

大家可以看到,输入的值为1是大于零时,就会输出这一句"%d是一个正数\n"。当输入的值为-1时,第一个条件不成立,就不会执行。程序就结束了。

二、else语句

else语句主要是和if语句一起使用,在判断完第一个条件不成立后,就可以直接去执行另外一种情况了。

#include <stdio.h>

int main ()
{
    int num = 0 ;
    scanf ( "%d" , &num);
    if (num % 2 == 1 )
          printf ( "%d 是奇数 \n" , num);
    else
          printf ( "%d 是偶数 \n" , num);
    return 0 ;
}

看,在这里面判断完余数不等于1后,直接可以输出偶数了。

三、if语句和else语句嵌套使用

1.两种语句嵌套使用的形式

#include <stdio.h>

int main ()
{
     int num = 0 ;
     scanf ( "%d" , &num);
     if (num == 0 )
         printf ( " 输⼊的数字是 0\n" );
     else if (num > 0 ) // 这⾥的 if 相当于嵌套在 els 语句中,形成了嵌套结构
         printf ( " 输⼊的数字是正数 \n" );
    else
         printf ( " 输⼊的数字是负数 \n" );
    return 0 ;
}

这个代码的三个运行结果是

2.悬空else语句

如果有多个 if else ,可以记住这样⼀条规则, else 总是跟最接近的 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 ;
}

 这看起来必须会输出一个"hehe"或者"haha"吧,其实他什么都不会输出。

那就是因为else语句只会和最近的if语句相匹配。而这里最近的if应该是 if(b == 2),但是因为 if(a == 1)本来就为假,不会进入下一步判断。

四、switch语句

1.switch语句得用法

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。

对于if-else语句,switch语句更适合⽤于判断条件有多个结果的情况。

就对于上面一个对2求余的程序,就只有两种情况0和1.。但是如果是3或者更高的求余呢?那就有点多情况了,而switch语句就很好的解决了这个问题。

# include <stdio.h>
int main ()
{
    int n = 0 ;
    scanf ( "%d" , &n);
    switch (n% 3 )
    {
        case 0 :
            printf ( " 整除,余数为 0\n" );
            break ;
        case 1 :
            printf ( " 余数是 1\n" );
            break ;
        case 2 :
            printf ( " 余数是 2\n" );
            break ;
    }
    return 0 ;
}

2.break的用法

switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。

 而switch语句中,我们还可以利用这个break去进行一个操作。 就拿分别一周里面的工作日和休息日。

这样子一对比,很明显的看出这样写的代码更加简便。

3.switch语句中的default

这个default感觉就像if语句中的else语句。

就像这样子

4.switch语句中的case和default的顺序问题

switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?

其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实

际需求的就可以。

五、while循环

while 语句的语法结构和 if 语句⾮常相似。那我们就先从while和if的区别讲起吧。

1.if和while的对比

可以看到if语句就只输出了一句"hehe",而while语句输出了无穷句。那是因为while语句是一个循环语句,它需要有条件跳出循环。那让我们来了解一下while语句的基本原理吧!

2.while语句的工作原理

这就是while语句的基本工作原理。上面举例子的while语句就是因为没有条件能够让循环判断这个过程判断语句为假,然后结束。

那我们要怎么添加条件呢?

3.while语句怎么实现有限制的打印

看,在a的限制下,while循环只输出了10条语句就跳出循环了。

4.在循环中的break和continue

4.1break语句

所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。

那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。

但是break语句只能跳出一层循环。

int main()
{
    int i = 1;
    while (i <= 10)
    {
        if (i == 5)
            break;//当i等于5后,就执⾏break,循环就终⽌了
        printf("%d ", i);
        i = i + 1;
    }
    return 0;
}

 而这个代码的运行的结果是

打印了1,2,3,4后,当i等于5的时候,循环正 break 的地⽅终⽌,不再打印,不再循环。

4.2continue语句

continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏

下⼀次循环的判断。

int main()
{
    int i = 1;
    while (i <= 10)
    {
        if (i == 5)
           continue;//当i等于5后,就执⾏break,循环就终⽌了
        printf("%d ", i);
        i = i + 1;
    }
    return 0;
}

 他的结果依然是1 2 3 4 

但与上面的break语句不同的是这里陷入了死循环。因为continue语句,后面i=i+1这条语句一直被跳过,而我们的i也一直为4不能跳出循环。也造成了死循环。

 int main()
{
    int i = 1;
    while (i <= 10)
    {
        i = i + 1; 

        if (i == 5)
           continue;
        printf("%d ", i);
  
    }
    return 0;
}

把i=i+1调到前面去就可以解决这个问题。 

但这个最终输出的结果就会变成这样。

六、do-while循环

从语句上看我们就可以发现do-while语句和while语句的形式上非常接近。实际上他们就只有一个微小的差别就是do-while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式。表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。他无论如何都会先执行一次循环体。

我们看看具体的例子:

七、for循环

1.for循环的基本用法

我觉得for循环就像前面几种循环的集合。感觉上会更加简单一点。

for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:

它有三组表达式:

表达式1 ⽤于循环变量的初始化

表达式2 ⽤于循环结束条件的判断

表达式3 ⽤于循环变量的调整

2.for循环的工作原理

3.for循环中的break和continue

3.1break语句

其实和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需

要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。

#include<stdio.h>

int main()
{
    int i = 1;
    for (i = 1; i <= 10; i++)
    {
        if (i == 5)
            break;
        printf("%d ", i);
    }
    return 0;
}

 结果为

 

3.1continue语句

把以上的break换成continue后的结果是什么样的呢?

直接输出结果

就只是非常简单的跳过了5,输出了5以后的数字。

4.计算1~100之间3的倍数的数字之和

八、goto语句

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数

内跳转到设置好的标号处。

而且在多层循环的代码中,如果想快速跳出 使⽤ goto 就⾮常的⽅便了。

感谢大家的认真观看,麻烦大家指出我的不足,我会努力改进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值