分支与循环

目录

一、分支

1.if语句

1.1 if

1.2 else

1.3 嵌套if

1.4 悬空else问题

2.switch语句

2.1 语法形式

2.2 switch中的break

2.3 switch语句中的default

二、 循环

1.while循环

1.1 语法结构

1.2 while的实现形式

2.do-while循环

3.for循环

3.1for循环的语法形式

3.2 for循环的执行流程

3.3 for循环和while循环对比

C语言是一个结构化的程序设计语言,这里的结构是指的顺序结构、循环结构、选择结构,C语言是能够实现这些结构的。

一、分支

1.if语句

1.1 if

(1)语法形式

if(表达式)
{
    语句
}
  • 表达式既可以是数字、变量,又可以是含有操作符的表达式。
  • 当只有一条语句时,可以不用{};但是,当有多条语句时,需要用{}将语句给括起来。给语句加上{}是一个好的编程习惯。

(2)执行流程

        当表达式成立(为真)时,语句就执行;当表达式为假,则语句不执行。C语言中0为假,非0表示真。

在该示例中,由于a不等于b,表达式为假,因此第一个if语句并未被执行;第二个if的表达式为真,

语句被执行,屏幕输出hehe。

1.2 else

else表示其他的、另外的意思,常和if连用,构成if....else语句。其语法形式如下:

if(表达式)
{
    语句
}
else
{
    语句
}

当if的表达式为假时,编译器会跳过if中的语句,转而执行else中的语句。

如图所示,当输入值为奇数时,程序跳过if语句,执行else语句;当输入值为偶数时,程序执行if语句。

1.3 嵌套if

在if...else语句中,else可以与另一个if结合,构成多重判断。

#include<stdio.h>

int main()
{
    int score = 0;
    scanf("%d", &score);
    if (score < 60)
    {
        printf("不及格,准备补考\n");
    }
    else if (score < 90)//这里的if相当于嵌套在了else语句中,形成了嵌套结构
    {
        printf("合格\n");
    }
    else
    {
        printf("优秀\n");
    }
    return 0;
}

在该代码行中,第二个if和前面的else构成了嵌套,形成了嵌套结构。

1.4 悬空else问题

#include<stdio.h>

int main()
{
    int a = 0;
    int b = 5;
    if(a == 1)
       if(b == 1) 
           printf("haha\n");
    else
        printf("hehe\n");
    return 0;
}

在该代码中,编译器会输出hehe。因为在有多个if和else的情况下,else总是会和离他最近的if相匹配。

在写代码时要有一个良好的代码风格,在写分支、循环语句时,要用{}将相应的代码块括起来。如:

#include<stdio.h>

int main()
{
    int a = 0;
    int b = 5;
    if(a == 1)
    {
       if(b == 1) 
        {
           printf("haha\n");
        }
        else
        {
            printf("hehe\n");
        }
    }
    return 0;
}

这样将会让其他人更好的理解你编写的代码的意思。

2.switch语句

2.1 语法形式

switch(expression){
    case value 1:
        statement
    case value 2:
        statement
     default:
        statement
}
  • expression必须是整形表达式
  • case后面的值必须是整型常量表达式
  • 可以在statement后面加上break,在执行完该语句后跳出;如需继续执行下面语句可以不用加break

编译器会根据表达式不同的值,执行case的分支,如果找不到对应的值,就执行default分支。

2.2 switch中的break

break会使得编译器执行完相应case中的语句后跳出switch语句,如果case语句后面没有添加break的话,那么代码就会一直往下执行,直到遇见下一个break或者将switch语句执行完。因此,在switch中添加break是非常重要的,它是分支实现的关键。

如图便是没有正确使用break的结果。

2.3 switch语句中的default

在我们使用switch语句时,有时会遇到输入值与case后面的值无法匹配的问题,此时就需要switch语句中的default来处理。

就如该图所示一样,当输入值无法与case后面的指向匹配时,编译器就会执行default子句,在屏幕上输出提示内容。

注:在switch语句中,case和default语句是没有顺序要求的,只要顺序满足实际需求即可。通常,我们习惯性的吧defualt放在最后。

二、 循环

C语言提供了3种循环结构:while循环、do-while循环、for循环。

1.while循环

1.1 语法结构

while语句和if语句的语法结构非常类似

if(表达式)
{
    语句;
}

while(表达式)
{
    语句;
}

只有当表达式为真的时候后面的语句才会被执行。

1.2 while的实现形式

编译器执行判断表达式--->表达式值不为0(若表达式值为0)----->执行循环语句,并进行下一次判断(循环结束)

#include<stdio.h>

int main()
{
    int a = 0;
    while(scanf("%d",&a)!=EOF)
    {
     printf("%d",a);
    }
    return 0;
}

如图,该代码实现了循环输入和输出,当输入值不是EOF是,程序就读取用户的输入值并输出。当用户输入值是EOF时,程序就停止运行,循环结束。

注:EOF全称是end of the file,他的返回值是-1

2.do-while循环

do-while循环和while循环相似,唯一的区别就是while循环是先判断表达式,do-while循环是先执行语句,然后在判断表达式。

do-while循环的语法结构

do
{
    语句
}while();

3.for循环

for循环是所有循环中使用最多的一种循环

3.1for循环的语法形式

for(exp1;exp2;exp3)
{
    语句;
}
  • exp1用于初始化变量
  • exp2用于循环结束的条件判断
  • exp3用于与循环变量的调整

3.2 for循环的执行流程

       ⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。

整个循环中表达式1只被执行一次,剩下就是表达式2、表达式3、循环语句在循环

#include<stdio.h>

int main()
{
    int i = 0;
    for(i=1; i<11; i++)
    {
        printf("%d\n",i);
    }
}

运行结果:

3.3 for循环和while循环对比

     for 和 while 在实现循环的过程中都有初始化判断调整这三个部分,但是 for 循环的三个部
分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形式上 for 循环要更优⼀些。

4.continue与break

1.continue

countinue主要在循环之中使用,不能在分支中使用

continue的作用

continue 的作⽤是跳过本次循环中 continue 后边的代码,在 for 循环和 while 循环中有
所差异的。

(1)while循环中的continue

在while循环中,continue语句会跳过后面的语句,直接执行while语句中的条件表达式,然后决定是否该进行下一次循环。

(2)for循环中的continue

在for循环中,continue语句会跳过后面的代码,直接来到for循环的调整部分,然后再判断是该执行下一次循环 。

 

 2.beak

break可以在循环和switch语句中使用

break的作用

break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
⾏。

由以上两个图可知:不论是在while循环还是for循环中,当程序遇到break语句后就会停下来,跳出循环 ,继续往后执行。

  • 51
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值