C语言基础---流程控制-->选择结构

 

C语言基础---流程控制-->选择结构

 

        我们知道,C语言是面向过程的语言,由函数构成。一般情况下,一个C语言可能有很多函数,可是,当程序运行的时候,在众多的函数中,从哪个开始呢?要是没有一个统一的规范,每个函数都争着要做最先开始执行,那不是乱套了吗?所幸的是,C语言规定,每个可运行的C程序都必须有且只有(“有且只有”的意思是必须有一个,并且只有一个)一个名为main的函数,由这个main函数作为程序的入口。(入口的意思就是,不管main函数身处何处,都以他马首是瞻,最先执行)。

        注:1>如果程序没有main函数,那就不具备执行能力,因为入口都没有。

               2>如果程序有多高main函数,完了,每个main函数都争着要先执行,那到底先执行哪个呢?(孔融让梨的故事没听过吗?)

        当开始执行main函数后,再顺序执行其余代码。例如:

#include <stdio.h>

 

int main()

{

   

    printf("Hello-CF\n");

    printf("Welcome to\n");

    printf("HeiMa\n");

   

    return 0;

}

打印结果为:

Hello-CF

Welcome to

HeiMa

 

        可是,你可能会问,面对千变万化的需求,不可能要求程序一条路走到黑。(就好比人生,我们经常感慨,到了人生的三叉路口了,该如何选择。)程序在执行的过程中也会遇到选择。比如:本人之前是学做j2ee开发,客户要想进入系统,必须在系统的登录界面输入正确的用户名密码,

--------------------------------------------------------------------------------------------------------插图(系统登录界面)

系统程序会进行验证(大致流程如下:先判断用户名、密码框是否为空,如果为空,提示“请输入xxx”;如果不为空,则进一步进行判断用户名、密码是否正确;如果不正确,则提示“xxx错误”,并停留在登录页面;如果都输入正确,则进入系统,登录成功。当然还有涉及权限一块,登录成功后,再进行身份的判断,显示相应的内容。)刚刚说的那么多个“如果”,就是程序的流程控制机构之一:选择结构。其次还有循环结构:当进入系统时,比如是学生管理系统,查看班级学生的信息记录显示在表格中。因为每个学生信息记录的属性都是一样的,因此用循环结构,控制循环次数(学生个数),就可以很方便的输出所有学生记录。试想一下,如果逐条显示记录,那估计都要疯了。如果记录有100条,输出100次?如果变了,是1000条,10000条?估计电脑都疯了。利用简单的循环结构,几行搞定。剩下的就是顺序结构了。

        

        小总结一下:C语言提供了3种流程机构,就这3种流程结构足以应付所有情况

        1>顺序结构:默认的顺序从上到下执行每条语句。

        2>选择结构:根据给出的条件判断执行哪一段代码(典型的白话文表达就是:如果...就...;如果...就...;否则就...)。

        3>循环结构:当给定的条件成立,就反复执行某段代码,只到条件不成立为止。

 

一、顺序机构:上面代码段就是按默认的顺序执行,没啥可说的。

 

二、选择结构:选择结构有两种实现方式:if语句、switch语句。

1.   选择结构-->if语句

    1>最简单的if语句:

    if ( 条件 )

    {

        语句1;

        语句2;

        ....

    }

   如果条件为真,则会执行if下面{}代码块里的语句;否则,就不执行。ps:if为关键字,不能以if为标识符命名

例如:

   int score=120;

   if (score>110)

   {

        printf("恭喜您通过了黑马的入学测试\n");

    }

    因此输出结果如下:

     恭喜您通过了黑马的入学测试

  如果将score赋值为90,则不会执行该语句。

 

ps:if条件后面的{}是可以省略的,省略之后,只有条件后面的第一条语句和if相关,例如:

   int score=120;

   if (score>110)  

        printf("恭喜您通过了黑马的入学测试\n");

     printf("再接再厉,小伙子\n");

此时输出结果如下:

    恭喜您通过了黑马的入学测试

  再接再厉,小伙子

将score赋值为90,程序输出结果为:

   再接再厉,小伙子

因为条件不成立,if后面的第一条语句 printf("恭喜您通过了黑马的入学测试\n");就不会执行,但是printf("再接再厉,小伙子\n");不受if影响,照样继续执行。但是代码是给人看的,为了方便大家交流,建议使用{},一目了然,看着舒服。

 

   2>if语句里面嵌套if语句:

    int score=426;

   if(score>425)

    {

        printf("恭喜您通过了CET-6"\n);

        if(score>525)

        {

                printf("分数非常优异"\n);

        }

    }

    此时输出结果如下:

    恭喜您通过了CET-6

    如果将score赋值为526,程序输出结果为:

    恭喜您通过了CET-6

    分数非常优异

 

    3>if和else一起使用(ps:if、else同为关键字,不能以if、else为标识符命名):

    if ( 条件 )

    {

        语句1;

    }    

    else

    {

        语句2;

    }

   如果条件为真,则执行语句1,否则执行语句2。总之:语句1与语句2一定有一个会被执行,并且只能执行一个。(语句1、语句2必须2选1执行)。

    例:

     int score=426;

   if(score>425)

    {

        printf("恭喜您通过了CET-6"\n);       

    }

    else

    {

         printf("请您明年再来"\n);    

    }

     此时输出结果如下:

    恭喜您通过了CET-6

    如果将score赋值423,则输出结果如下:

    请您明年再来

    ps:同样样可以省略{},如果条件成立,就执行if后面的第1条语句;如果条件不成立,就执行else后面的第1条语句(都只有第一条语句与之相关)。为了代码可读性,不建立省略{}。

 

    4>if、else稍微复杂的形式:

 if ( 条件1 )

{

    语句1;

}

else if ( 条件2 )

{

    语句2;

}

else if ( 条件3 )

{

    语句3;

}

...

else

{

    其他语句;

}

以此类推,可以有无数个esle if,执行形式同上,在众多的{}中,必须执行一个{}里面的代码块语句,而且只会执行其中的一个{}代码块的语句。例:

    int score=90;

    if(score>=90&&score<=100)

    {

        printf("你的等级为A\n");

    }

    else if (score>=80&&score<89)

    {

         printf("你的等级为B\n");

    }

    else if (score>=70&&score<79 )

    {

         printf("你的等级为C\n");

    }

    else if (score>=60&&score<69 )

    {

         printf("你的等级为D\n");

    }

    else

    {

        printf("抱歉,您没有及格\n");

    }

 

注1:在写if语句时,if条件后面的小括号()后面没有分号;因为一个分号;也是一条语句,叫做空语句。例:

   int score=0;

   if (score>110);

    {

        printf("恭喜您通过了黑马的入学测试\n");

  }  

 

    程序结果如下:

  恭喜您通过了黑马的入学测试

    什么?0分也行?不科学啊。

    所以分号;一定要注意。一个分号;也是一条语句哦。

注2:

    int a=0;

    if(a=0)

    {

        printf("打开开关\n");   

    }

    else

    {

         printf("关闭开关\n");     

    }

    上面代码没有error,但是,没有error才是最大的error。因为这个error是隐藏的,那样才最可怕。因为你可能写的是判断一个int类型变量值是否0,想写 if(a==0),结果手误写作 if(a=0),为0就“打开开关”,否则就关闭开关。很明显,int类型变量a的值为0,理论上要“打开开关”,但是程序实际结果为:关闭开关

因为()里面的语句是将0赋值给a,所以条件为假,执行“关闭开关”。这不坑爹吗?如果这是航天飞机程序的某行代码,打开开关变为关闭开关,坑死一群人啊。所以一定要小心。if(a==0)最好写作if(0==a),如果手误写作if(0=a),直接报错,逼的你仔细检查。

建议:以后写判断条件语句,变量写后面。

 

 

2.   选择结构-->switch语句:

switch(整型表达式)

{

    case 数值1:

        语句1;

        break;

    case 数值2:

        语句2;

        break;

    ... ...

    case 数值n:

        语句n;

        break;

    default :

        语句n+1;

        break;

}

解释:

    当整型表达式的值等于“数值1”时,就会执行“语句1”,后面的break表示退出整个switch语句,也就是直接跳到{}后面的代码

 

    当整形表达式的值等于“数值2”时,就会执行“语句2”;后面的以此类推。如果在数值1~数值n中,没有一个值等于整型表达式的值,那么就        会执行default中的语句n+1。

 

    由于所有的case后面都有个break,因此执行完任意一个case中的语句后,都会直接退出switch语句

例:

int a=1;  

switch(a)

{

    case 1:

       printf("这是周一,工作日\n");

        break;

    case 2:

        printf("这是周二,工作日\n");

        break;

    case 3:

         printf("这是周三,工作日\n");

        break;

    case 4:

         printf("这是周四,工作日\n");

        break;

    case 5

         printf("这是周五,工作日\n");

        break;

    default :

         printf("这是周末,休息日\n");

        break;

}  

规定a的取值范围是[1,7]的整数。

程序运行结果为:

这是周一,工作日

 

如果程序改为:

int a=1;  

switch(a)

{

    case 1:

       printf("这是周一,工作日\n");

      

    case 2:

        printf("这是周二,工作日\n");

      

    case 3:

         printf("这是周三,工作日\n");

       

    case 4:

         printf("这是周四,工作日\n");

      

    case 5

         printf("这是周五,工作日\n");

     

    default :

         printf("这是周末,休息日\n");

        break;

}  

程序运行结果为:

这是周一,工作日

这是周二,工作日

这是周三,工作日

这是周四,工作日

这是周五,工作日

这是周末,休息日

 

注:

    break;语句的意思是退出整个switch语句,即跳出{},执行{}后面的语句。如果没有break;语句,则继续顺序执行case后面的语句,直到switch语句结束或者遇到break;语句,然后继续执行switch后面的语句。

 

 

使用场合:

同为选择结构,什么时候用if,什么时候用switch呢?

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/ithmPeak/p/4401394.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值