C语言——分支结构程序设计

分支结构程序设计(选择结构)

定义:根据条件是否成立,选择相应的操作

条件判断:根据某个条件成立与否,决定是否执行指定的任务。

选择结构中的常见形式:

if(关系表达式)

 {       语句1;

else

        语句2;

}

关系表达式:

含有关系运算符的表达式(>,<,>=,<=,!=,==)

                                          优先级  优先级

注:算数运算符优先级高于关系运算符

逻辑表达式:

含有逻辑运算符的表达式(&&,||,!),往往是用来构建复杂的复合条件。

逻辑运算符是构成复杂的复合条件的运算符。

eg:if(year % 100 == 0 && year % 4 !=0)

// 这种既含有关系表达式,又含有逻辑表达式的条件叫做复合条件

逻辑型常量只有两种:值非0表示“真”,值为0表示“假”。

注意:

逻辑表达式中各种运算符的优先级顺序如下:

   !(逻辑非) → 算术运算符→ 关系运算符→ && 与 || → 赋值运算符(=)

选择结构的形式

单分支

语法

if(关系表达式)

{        语句1;

}

说明

条件表达式成立,执行语句1,否则跳过该分支结果

双分支

语法:

if(关系表达式)

{        语句1;

else

        语句2;

}

说明:

条件表达式成立,执行语句1,否则执行语句2,双分支不管条件是否成立都会执行

三目运算符

语法:表达式1 ? 表达式2 : 表达式3;

说明:?:条件运算符,主要可以简化双分支为同一变量赋值的操作。

求值过程:

先计算表达式1的值,非0,则将表达式2的结果作为条件运算符的最终结果;否则将表达式3的结果作为条件运算符的最终结果。

条件表达式(三目运算符)中的运算符优先级

逻辑非(!) > 算数运算符 ( +-*/% ) > 关系运算符 (> < >= <= != ==) > 逻辑运算符 (&& ||)> 赋值运算符(= +=)

if语句

if语句的3种形式

1.if  (表达式)  语句

流程图:

2.if  (表达式)  语句1 else 语句2

流程图:

3.多分支

语法:

if  (表达式1)  语句1

else if  (表达式2)  语句2

          ……

else  if  (表达式n)  语句n

else  语句n+1

这种结构又称为if…else if结构

流程图:

举例:

#include
int main()
{
// 需求:编一程序,要求输入一个x值,输出y值6
// 方式1:嵌套的if..
int x,y;
printf("请输入一个整数:\n");
scanf("%d",&x);
// 条件判断
if(x 0)
{
y = -1;
}
else
{
// x >= 0
if(x == 0)
{
y = 0;
}
else
{
y = 1;
}
}
printf("方式1:x=%d,y=%d\n",x,y);
// 方式2:多分支if..else if....else..35
 // 条件判断
if(x 0)
{
y = -1;
}
else if(x == 0)
{
y = 0;
}
else
{
y = 1;
}
printf("方式2:x=%d,y=%d\n",x,y);
}

总结:

如果只需要一个判断结果,使用单分支

如果需要两个判断结果,且只能有两个判断结果,使用双分支

如果需要判断N个结果中的某几个,或者所有,使用多分支

if语句的嵌套

定义:

一个if语句中又包含着另一个或多个if语句,称为if语句的嵌套。

流程图

语法:

if ()

        if ()语句1

        else    语句2

else

        if ()语句3

        else    语句4

注意:

else总是与它前面最近的未配对的if 配对使用。

可通过增加花括号{}来确定配对关系。                

switch语句

语法:

switch (表达式)

    {  

        case  常量表达式1:  

                语句1;

                break;

        case  常量表达式2:  

                语句2;

                break;

         …     ...

        case  常量表达式n:  

                语句n;

                break;

         default:  

                语句n+1;

                (break;)

      }

流程图:

说明:

switch后括号内的表达式可是任何类型的表达式;

若表达式的值与某个常量表达式的值相等时,执行此case后面的语句;若没有相等的值时,执行default后面的语句;

每个case后面的常量表达式的值都必须不相同,否则出现矛盾;

各个case 和default出现的次序不影响执行结果;

case后面的语句中如果没有break语句,则执行完本case后的语句会接着执行下面的case ;

多个case可共用一组语句。

注意:

1.表达式一般写一个变量,变量的值是一个确定的常量。

2.当遇到break或者switch语句的右大括号时,switch语句结束。

3.表达式中的数据类型:charshortint,long,longlong,不能是浮点型。

   表达式和常量的数据类型要一致(支持隐式转换),比较是否相同。

switch语句的case穿透:

1. case穿透:当case后的break被省略;就会直接执行它后面紧跟的case中的语句(不会判断表达式是否和它后面的case常量是否相同),这样的现象称之为case穿透。

2. default语句一般放在所有case之后,表明所有的case都不成立时,执行default中的语句;default语句可以放在switch语句{}内的任意位置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值