分支与循环

文章目录


前言

本文章介绍循环分支,if,while,for,do while

一.什么是语句

c语句分为以下五类

1.表达式语句

2.函数调用语句

3.控制语句

4.复合语句

1.1首先讲解控制语句

  控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。可分成以下三类:
1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句。

1.选择结构

人生总是面临着选择,面临着分叉路。

例如填志愿,例如找男/女朋友,亦或者选择专业

这就是选择结构!

2.if语句 

2.1 if语法规则


int main()
{
    if()         //(判断)
{

}
    else()
{

}
    return 0;
}

多分支

int main()
{
    if()
{

}
    else if()
{

}
    else()
{

}
    return 0;
}


2.2 运行例子       

#include <stdio.h>
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("少年\n");
   }
    else if(age>=18 && age<30)
   {
        printf("青年\n");
   }
    else if(age>=30 && age<50)
   {
        printf("壮年\n");
    }
    return 0;
}

2.3悬空分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;
}

PS:该代码else语句只与最近的else匹配,也就是hehe。该代码结果 不打印

建议代码习惯:

1.适当的使用{}会让代码逻辑更加清晰

2.如果在if中不使用{}时,只对下面的第一条语句有用        

2.4 练习

判断奇数

输出1-100的奇数

include<stdio.h>


int main()
{
    int i=0;
    for(i=1;i<=100;i++)
{
    if(i%2==0)
{
    printf("偶数");
}
    if(i%2==1)
    printf("奇数为%d ",i);
}
    return 0;
}

3.switch语句

3.1语法结构

include<stdio.h>

int main()
{
    switch(表达式)
{
    case 1:
    //表达式
    case 2:

}
    return 0;
}

应用情景:当表达多分支情况时,if else较多较为麻烦时,使用switch语句

3.2 break语句

switch 语句中,我们没办法直接实现分支,搭配 break 使用才能实现真正的分支。

break打破(终止循环)

include<stdio.h>

int main()
{
    int a=1;
    int b=2;
    switch(a)
{
    case 1:
    printf("Good\n");    //注意若不使用break则循环会进入case2
    break;    
    case:2
    printf("Bad\n");    //良好的代码习惯是在每个case后加一个break
    break;
}
    return 0;
}

3.3 default语句

  如果表达的值与所有的case标签的值都不匹配怎么办? 其实也没什么,结构就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个 case 标签可以出现的位置。
  当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

3.4 练习

#include <stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
   {
    case 1:
            m++;        //m=3    n=1
    case 2:
            n++;        //由于没有break,会继续进行case2, m=3 n=2
    case 3:
            switch (n)
           {//switch允许嵌套使用
             case 1:
                    n++;
             case 2:            //由于n=2,直接进入case2.m=4 n=3
                    m++;
                    n++;
                    break;
           }
    case 4:        //m=5 n=3
            m++;
            break;
    default:
            break;
   }
    printf("m = %d, n = %d\n", m, n);        //m=5 n=3
    return 0;
}
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break

4.循环语句

4.1 while循环

4.1.1

当条件满足的情况下, if 语句后的语句执行,否则不执行。 但是这个语句只会执行一次。
由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢?
C 语言中给我们引入了: while 语句,可以实现循环。

比如在屏幕上打印1-10的数字

#include <stdio.h>
int main()
{
     int i = 1;
     while(i<=10)
 {
     printf("%d ", i);
     i = i+1;
 }
     return 0
}
上面的代码已经帮我了解了 while 语句的基本语法,那我们再了解一下:

3.1.2while中的break和continue

break介绍

#include <stdio.h>
int main()
{
     int i = 1;
     while(i<=10)
 {
     if(i == 5)                //当i=5时,进入if break后 直接出while循环
         break;
     printf("%d ", i);        //1,2,3,4
     i = i+1;
 }
     return 0;
}
其实在循环中只要遇到 break ,就停止后期的所有的循环,直接终止循环。
所以: while 中的 break 是用于 永久 终止循环的。
continue 介绍
#include <stdio.h>
int main()
{
     int i = 1;
     while(i<=10)
 {
     if(i == 5)
     continue;        //当i=5 进入if continue后 会回到while语句
     printf("%d ", i);
     i = i+1;
 }
     return 0;
}

所以结果打印 1,2,3,4

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

3.2 for循环

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

3.2.1 break和continue在for循环的应用

include<stdio.h>
int main()
{
     int i = 0;
     for(i=1; i<=10; i++)
 {
     if(i == 5)
     break;        //出for 循环
     printf("%d ",i);    //1,2,3,4
 }
     return 0;
}

在continue时

#include <stdio.h>
int main()
{
     int i = 0;
     for(i=1; i<=10; i++)
 {
     if(i == 5)
     continue;                //因为在for循环中,调整部分在前
     printf("%d ",i);        //1,2,3,4,6,7,8,9,10
  }
     return 0;
}

与while循环的对比中,可以发现有差异但是不大,大同小异

3.2.2 小练习

#include <stdio.h>
int main()
{
     int i = 0;
     int k = 0;
 for(i =0,k=0; k=0; i++,k++)        //在c语言中 0为假 非零为真 所以不循环
        k++;
     return 0;
}

4.1 do while循环

4.1.1语法结构

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

4.1.2 do语句的特点

至少“做”一次。循环会至少进行一次

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值