C语言的分支与循环

目录

什么是语句?

分支语句(选择结构)

if语句

1.语法形式

2.悬空else

switch语句

1.语法形式

2.switch语句的另类表达

3.switch语句的嵌套使用

循环语句(循环结构)

while循环

1.语法形式

2.while循环的break和continue 

3.判断输入循环

for循环

1.语法结构

2.for循环的break和continue

3.for语句的循环控制变量

3.for循环的另类写法

do while循环

1.语法结构

2.do while循环的break和continue

goto语句


C语言是结构化的程序设计语言

他有顺序结构,选择结构,循环结构三种结构类型

而分支与循环是属于选择结构与循环结构

分支语句:

  • if语句
  • switch语句

循环语句:

  • while语句
  • for语句
  • do while语句

goto语句


什么是语句?

C语句可分为以下五类

1. 表达式语句             2. 函数调用语句

3. 控制语句                 4. 复合语句

5. 空语句

这里后面介绍的是控制语句

控制语句 用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成


分支语句(选择结构)

if语句

1.语法形式

//单分支if语句
if(表达式)
    语句 1;    //若表达式成立,则执行语句 1
else
    语句 2;    //否则执行语句 2

//多分支if语句
if(表达式 1)
    语句 1;    //若表达式 1成立,则执行语句 1
else if(表达式 2)
    语句 2;    //若表达式 2成立,则执行语句 2
...        
...            //此处省略若干个语句
else
    语句 n;    //若以上都不满足条件,则执行语句 n

需要注意的是,if判断是根据0/1来判断,1为真,0为假,根据括号内的判断返回值来决定是否执行所属的语句

提示:当存在多条语句时,需要加上{ },否则会报错

if(表达式)
{
    语句 1;
    语句 2;
    ...
    语句 n;
}

2.悬空else

下面看一条代码:

int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)    //第一个if
        if(b == 2)    //第二个if
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

这串代码什么都不输出

由于没有控制代码块的缩进以及使用{ }来控制,此处的else让大部分人在一开始看到时不知道其所对应的if是哪个

但是一般认为,else在没有{ }控制的情况下,会自动与其最靠近的if匹配,也就是与第二个if匹配

所以在日常写代码的时候,排版非常重要,我们需要养成一个好的代码排版习惯


switch语句

1.语法形式

switch(整型表达式)    //先判断switch内的是什么表达式
{
    case 整形常量表达式:    //根据switch内的表达式来跳转到对于的case
    语句;
    case 整形常量表达式:
    语句;
    ...
    ...
    default:    //若没有对于的case,则执行default后的语句
    语句;
}

 下面是最常见的switch使用例子:

int main()
{
    int a = 3;
    int b = 1
    switch(a - b)
    {
        case 1:
        printf("1");
        break;
        case 2:
        printf("2");
        break;
        default:
        printf("error");
        break;
    }
    return 0;
}

 由于a - b 的返回值为2,则switch(a - b) = switch(2),打印2

case决定了语句从哪里进入,break决定了语句从哪里退出

最后一个 case 语句的后面加上一条 break语句(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)


2.switch语句的另类表达

要求:输入1,2,3,4,5,打印weekday

           输入6,7,打印weekend

int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
   }
    return 0;
}

从这里可以看出,case后并非强制要求有语句,从这里也可以了解到,switch语句的执行顺序


3.switch语句的嵌套使用

switch语句也支持嵌套使用

下面是例子:

int main()
{
    int n = 1;
    int m = 2;
    switch (n)
   {
    case 1:
            m++;
    case 2:
            n++;
    case 3:
            switch (n)
           {
             case 1:
                    n++;
             case 2:
                    m++;
                    n++;
                    break;
           }
    case 4:
            m++;
            break;
    default:
            break;
   }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}

执行输出m = 5,n = 3


循环语句(循环结构)

while循环

1.语法形式

while(表达式)
 循环语句;

 此处的括号也是通过表达式的返回值时0/1判断是否执行循环语句


2.while循环的break和continue 

特别的是,在while循环语句内,break与continue会经常使用,下面来了解一下使用方法

//break 代码实例

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

从上面这个代码可以知道:

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环

所以:while中的break是用于永久终止循环的

//continue 代码实例

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

从上面这个代码可以知道:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行

而是直接跳转到while语句的判断部分,进行下一次循环的入口判断


3.判断输入循环

有时候我们在做题的时候,往往会判断是否有输入元素,若没有输入,则结束执行

我们可以通过while循环来实现此要求

在此之前,需要了解一下scanf函数的返回值

#include <stdio.h>
int main()
{
 int ch = 0;
 while ((scanf("%d", &ch)) != EOF)
       printf("%d\n", ch);
    return 0;
}

 通过以上代码,就可以实现输入一个数,执行一次while循环体语句,当不输入时,结束程序


for循环

1.语法结构

for(表达式1;表达式2;表达式3)
{
 循环语句;
}

在for循环中

表达式1:表达式1为初始化部分,用于初始化循环变量的。

表达式2:表达式2为条件判断部分,用于判断循环时候终止。

表达式3:表达式3为调整部分,用于循环条件的调整。

 由于for循环是日后使用次数非常多的一种循环,下面举个例子来加深使用印象

使用for循环 在屏幕上打印1-10的数字

int main()
{
 int i = 0;
 //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
 for(i=1; i<=10; i++)
 {
 printf("%d ", i);
 }
 return 0;
}

循环变量为1,当1小于或等于10时,执行循环体语句

打印变量i的值,然后令i自增1

由于每次循环执行完之后,都会令i自增1,i会一直改变

所以当循环执行10次以后,i在第11次循环执行前为11

11大于10,不满足循环条件,跳出循环

 值得一提的是,for循环的表达式1,也就是初始化循环变量,我们还可以这样操作

for(int i = 0; i < n; i++)

2.for循环的break和continue

在for循环中,也可以使用break和continue

//代码1

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

//代码2

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

3.for语句的循环控制变量

有时候写代码时可能不小心修改了循环变量,导致循环失控(死循环)

int main()
{
    for(int i = 0; i <= 100; i++)
    {
        ...
        i = 0;    //再循环体内修改了循环变量
    }
    return 0;
}

所以建议:

1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制

2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}

3.for循环的另类写法

int main()
{
 for(;;)
 {
     printf("666\n");
 }
for循环的初始化循环变量,判断条件和调整部分是可以 省略的
int i = 0;
int j = 0;
    for(i=0; i<10; i++)
   {
        for(j=0; j<10; j++)
       {
             printf("666\n");
       }
   }

 for循环是可以嵌套使用

 int i = 0;
 int j = 0;
for(; i<10; i++)
   {
         for(; j<10; j++)
       {
             printf("666\n");
       }
   }

 只要在外部事先进行了循环变量的声明与初始化,for循环内的初始化循环变量可以省略

int x, y;
for (x = 0, y = 0; x<2 && y<5; ++x, y++)
   {
        printf("666\n");
   }
return 0;
}

 for循环的控制变量是可以存在多个


do while循环

1.语法结构

do
 循环语句;
while(表达式);

特点:循环至少执行一次

int main()
{
 int i = 1;
 do
 {
     printf("%d ", i);
     i=i+1;
 }while(i<=10);
 return 0;
}

2.do while循环的break和continue

int main()
{
 int i = 1;
 do
 {
     if(5 == i)
     break;    //这下面的语句不会执行
     printf("%d ", i);
     i=i+1;
 }while(i<=10);
 return 0;
}

goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号

从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程

例如:一次跳出两层或多层循环,多层循环这种情况使用break是达不到目的的,它只能从最内层循环退出到上一层的循环

使用方法案例:

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)    // 处理错误情况

goto跳转到后面跟随的地方,如上例,遇到错误后,跳跃到error处执行if(disaster)这条代码


  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值