C语言基础笔记整理(4)

笔记整理自哈尔滨工业大学的MOOC课程:C语言程序设计精髓

第四章:分支控制 

选择结构(分支结构):根据给定的判定条件,判断结果,并根据判断的结果来控制程序的流程

关系运算符与关系表达式

C语言基础笔记整理(4)_第1张图片

关系运算符的优先级和结合性

  * 算术运算符 -> 关系运算符(算术运算符的优先级大于关系运算符的优先级)

         C语言基础笔记整理(4)_第2张图片

关系表达式的值是一个逻辑值:true 或者 false

C语言中没有布尔类型用1表示true,0表示false

注:

布尔类型(C99) 
       * _Bool是C99新增的布尔类型。它一个无符号整数类型,只能储存0
       (表示假)或1(表示真)。包含stdbool.c头文件后,可以用bool 表
         示_Bool 。ture表示1,false表示0,让代码与C++兼容

* 判断表达式的真假

      非0 即 true,0 即 false
 逻辑运算符与逻辑表达式

C语言基础笔记整理(4)_第3张图片

逻辑运算符的优先级和结合性

* (优先级)逻辑非 > 算术运算符 > 关系运算符 > 逻辑与 > 逻辑或

* (结合性)

                 逻辑非——右结合

                 逻辑与,逻辑或——左结合

表示a>b>c:a > b && b > c

逻辑运算符的短路特性

若表达式的值可由先计算的左操作数的值单独推导出来,那么将不再计算有操作数的值

   例:(a>=1)&&(b++==5)   若左边的表达式计算出来为false,则不再计算右边的表达式,即b++不会被执行,结果直接为false(0)

   短路特性的应用:

          使“除0”运算不会发生:(i != 0)&&(j / i >0) 

选择结构分为:单分支、双分支、多分支

单分支选择结构

       * 面临的选择是:要么执行一个操作,要么跳过它

       * if 语句

       C语言基础笔记整理(4)_第4张图片

双分支选择结构

       * 面临的选择是:在两个不同的操作中选择其中的一个来执行

       * if-else 语句

        C语言基础笔记整理(4)_第5张图片

多分支选择结构

       * 面临2种以上选择(需连续执行多个条件判断)时

       * 级联式 if 语句:else-if

         C语言基础笔记整理(4)_第6张图片

条件运算符和条件表达式

条件表达式:表达式1 ? 表达式2 : 表达式3(表达式1的值为true的话, 则表达式2的值为条件表达式的值;

                                                                       表达式1的值为false的话,则表达式3的值为条件表达式的值)

复合语句:将一组逻辑上相关的语句用花括号括起来构成的语句

                  复合语句在逻辑上被当作一条语句看待 

else语句总是和上面离它最近的 if 语句配对

开关语句(switch语句)

C语言基础笔记整理(4)_第7张图片

* switch语句中表达式的值一般为int,char

* case 后常量的类型应当与表达式值的类型一致

自动类型转换

*  赋值操作中,何时发生自动类型转换?

        * 左侧(目标侧)与右侧类型不一致

* 自动类型转换的规则

           变量 表达式;

         类型2 <= 类型1

* 在不同类型数据间赋值,是安全的吗?

          * 取值范围的类型=>取值范围的类型,通常是不安全

                    * 可能会发生数值溢出

任何类型都只能用有限的位数来存储数据,表数范围有限。
如果向变量赋的值超出了其类型的表数范围,则会发生数值溢出

整数的数值溢出

如果运算结果超出了long所能表示的数的上界,则进位将到达最前面的符号位(0 => 1(即首位变为负数))

上溢出

    * |一个数值运算结果| > |类型能表示的最大数|

    * 进位超过最高位而发生进位丢失

    * 或进位到达最高位而改变符号位

          例:a为无符号短整型的最大值

                C语言基础笔记整理(4)_第8张图片

%hu输出无符号短整数

* 无符号整数的运算时要注意是否发生数值溢出

* 对于无符号数,不能随意用a-b<0取代a

浮点数的数值溢出

C语言基础笔记整理(4)_第9张图片

补充:是靠近0的正下溢、负下溢会被系统处理成机器0

C语言基础笔记整理(4)_第10张图片

C语言基础笔记整理(4)_第11张图片

自动类型转换

* 在不同类型数据间赋值时,会发生自动类型转换

      * 取值范围的类型=>取值范围的类型,通常是不安全

            * 可能会产生数值溢出

            * 可能会产生数值精度损失

   C语言基础笔记整理(4)_第12张图片

C语言基础笔记整理(4)_第13张图片 

C语言基础笔记整理(4)_第14张图片

C语言基础笔记整理(4)_第15张图片 

有效数字:

从左边第一个非0的数字起,到精确到的位数为止,其间的所有数字

C语言基础笔记整理(4)_第16张图片

两个数量级相差很大的浮点数做加减运算时,数值小的数会受浮点数精度限制而被忽略

你可能感兴趣的:(C语言)