c语言程序设计谭浩强 ch2-基本数据类型和表达式.ppt

上传人:max****ui 文档编号:6334047 上传时间:2020-02-23 格式:PPT 页数:93 大小:1.22MB
返回 下载 相关 举报
c语言程序设计谭浩强 ch2-基本数据类型和表达式.ppt_第1页
第1页 / 共93页
c语言程序设计谭浩强 ch2-基本数据类型和表达式.ppt_第2页
第2页 / 共93页
c语言程序设计谭浩强 ch2-基本数据类型和表达式.ppt_第3页
第3页 / 共93页
点击查看更多>>
资源描述
第二章 基本数据类型和表达式 本章要点 数据的描述规则数据的操作规则 主要内容 2 1C的数据类型2 2常量与变量2 3整型数据2 4浮点型数据运行2 5字符型数据 主要内容 2 变量赋初值2 7各类数值型数据间的混合运算2 8算术运算符和算术表达式2 9赋值运算符和赋值表达式2 10逗号运算符和逗号表达式 2020 2 23 5 数值的表示方法 原码 反码和补码原码 最高位为符号位 其余各位为数值本身的绝对值反码 正数 反码与原码相同负数 符号位为1 其余位对原码取反补码 正数 原码 反码 补码相同负数 最高位为1 其余位为原码取反 再对整个数加1 2020 2 23 6 纯整数的补码最小可以表示到 2 n 这时在 2 n 中 符号位的1既表示符号 也表示数值2 n 若要一个负数变补码 其方法是符号位置1 其余各位0变1 1变0 然后在最末位上加1 负数补码转换成十进制数 最高位不动 其余位取反加1 例补码 11111001取反 10000110加1 10000111 7 2020 2 23 7 2 1C的数据类型 C语言提供了以下一些数据类型 数据类型 构造类型 指针类型 空类型 无值类型 void 数据类型决定 1 数据占内存字节数 2 数据取值范围 3 其上可进行的操作 2020 2 23 8 2 2常量与变量 2 2 1常量和符号常量在程序运行过程中 其值不能被改变的量称为常量常量区分为不同的类型 整型100 125 100 0实型3 14 0 125 3 789字符型 a b 2 字符串 a ab 1232 直接常量 2020 2 23 9 例2 1符号常量的使用 definePRICE30 includevoidmain intnum total num 10 total num PRICE printf total d n total 符号常量 用一个标识符代表一个常量 符号常量的值在其作用域内不能改变 也不能再被赋值 运行结果 total 300 说明 程序中用 define命令行定义PRICE代表常量30 此后凡在本文件中出现的PRICE都代表30 可以和常量一样进行运算 说明 如再用赋值语句给PRICE赋值是错的PRICE 40 错误 不能给符号常量赋值 2020 2 23 10 2 2常量与变量 2 2 2变量变量代表内存中具有特定属性的一个存储单元 它用来存放数据 这就是变量的值 在程序运行期间 这些值是可以改变的 变量名实际上是一个以一个名字对应代表一个地址 在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址 从变量中取值 实际上是通过变量名找到相应的内存地址 从该存储单元中读取数据 2020 2 23 11 2 2常量与变量 变量命名的规定 语言规定标识符只能由字母 数字和下划线三种字符组成 且第一个字符必须为字母或下划线 例 sum total month Student name lotus 1 2 BASIC li lingM D John 123 3D64 a b 2020 2 23 12 2 2常量与变量 注意 编译系统将大写字母和小写字母认为是两个不同的字符 建议变量名的长度最好不要超过8个字符 在选择变量名和其它标识符时 应注意做到 见名知意 即选有含意的英文单词 或其缩写 作标识符 要求对所有用到的变量作强制定义 也就是 先定义 后使用 2020 2 23 13 2 3整型数据 2 3 1整型常量的表示方法整型常量即整常数 在 语言中 整常数可用以下三种形式表示 1 十进制整数 如 123 456 4 2 八进制整数 以0开头的数是八进制数 如 0123表示八进制数123 等于十进制数83 011表示八进制数 11 即十进制数 9 2020 2 23 14 2 3整型数据 3 十六进制整数 以0 x开头的数是16进制数 如 0 x123 代表16进制数123 等于十进制数291 0 x12等于十进制数 10 2 3 2整型变量 1 整型数据在内存中的存放形式数据在内存中是以二进制形式存放的 如 inti 定义为整型变量 i 10 给i赋以整数10 2020 2 23 15 2 3整型数据 注意 十进制数10的二进制形式为1010 TurboC2 0和TurboC 3 0为一个整型变量在内存中分配2个字节的存储单元 不同的编译系统为整型数据分配的字节数是不相同的 VC 6 0则分配4个字节 数值是以补码 complement 表示的 2020 2 23 16 2 3整型数据 2 整型变量的分类 共六种 有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型 signed int signed short int signed long int unsignedintunsignedshort int unsignedlong int 注意 括号表示其中的内容是可选的 2020 2 23 17 2 3整型数据 整数类型的有关数据 类型类型说明符长度数的范围基本型int2字节 32768 32767短整型short2字节 215 215 1长整型long4字节 231 231 1无符号整型unsigned2字节0 65535无符号短整型unsignedshort2字节0 65535无符号长整型unsignedlong4字节0 232 1 2020 2 23 18 2 3整型数据 例如 整数13在内存中实际存放的情况 2020 2 23 19 2 3整型数据 3 整型变量的定义 规定在程序中所有用到的变量都必须在程序中定义 即 强制类型定义 例如 inta b 指定变量 为整型 unsignedshortc d 指定变量 为无符号短整型 longe f 指定变量 为长整型 2020 2 23 20 例2 2整型变量的定义与使用 includevoidmain inta b c d 指定 为整型变量 unsigned 指定 为无符号整型变量 12 24 10 printf 说明 可以看到不同种类的整型数据可以进行算术运算 运行结果 2020 2 23 21 例2 3整型数据的溢出 includevoidmain inta b a 32767 b a 1 printf d d n a b 说明 数值是以补码表示的 一个整型变量只能容纳 32768 32767范围内的数 无法表示大于32767或小于 32768的数 遇此情况就发生 溢出 运行结果 32767 32768 2020 2 23 22 在C中 用高位置1来表示负数 int型占两个字节共16位 32768的二进制是10000000 00000000 高位为1 系统会认为是负数 所以32768需要用长型表示 占四个字节 最高位就不是1了 00000000 00000000 10000000 00000000 32768在内存中的表示是10000000 00000000 过程是 先读入正值32768 10000000 00000000 再取反 01111111 11111111 再加1 10000000 00000000 2020 2 23 23 2020 2 23 24 2020 2 23 25 2 3整型数据 2 3 3整型常量的类型 1 一个整数 如果其值在 32768 32767范围内 认为它是int型 它可以赋值给int型和longint型变量 2 一个整数 如果其值超过了上述范围 而在 2147483637 2147483647范围内 则认为它是为长整型 可以将它赋值给一个longint型变量 2020 2 23 26 2 3整型数据 3 如果所用的C版本 如TurboC 分配给shortint与int型数据在内存中占据的长度相同 则它的表数范围与int型相同 因此一个int型的常量同时也是一个shortint型常量 可以赋给int型或shortint型变量 2020 2 23 27 2 3整型数据 4 一个整常量后面加一个字母u或U 认为是unsignedint型 如12345u 在内存中按unsignedint规定的方式存放 存储单元中最高位不作为符号位 而用来存储数据 如果写成 12345u 则先将 12345转换成其补码53191 然后按无符号数存储 2020 2 23 28 Unsignedint占2个字节 16位 12345 二进制 12345 二进制 补码 原 补 Unsigned 53191 2020 2 23 29 2 3整型数据 5 在一个整常量后面加一个字母l或L 则认为是longint型常量 例如 123l 432L 0L用于函数调用中 如果函数的形参为longint型 则要求实参也为longint型 2020 2 23 30 2 4浮点型数据 2 4 1浮点型常量的表示方法 两种表示形式 小数指数 0 1233e 3 注意 字母e 或E 之前必须有数字 且e后面的指数必须为整数 1e3 1 8e 3 123e 6 1e 3e3 2 1e3 5 e3 e 2020 2 23 31 2 4浮点型数据 规范化的指数形式 在字母e 或E 之前的小数部分中 小数点左边应有一位 且只能有一位 非零的数字 例如 123 456可以表示为 123 456e0 12 3456e1 1 23456e2 0 123456e3 0 0123456e4 0 00123456e其中的1 23456e2称为 规范化的指数形式 2020 2 23 32 2 4浮点型数据 2 4 2浮点型变量 1 浮点型数据在内存中的存放形式一个浮点型数据一般在内存中占4个字节 32位 与整型数据的存储方式不同 浮点型数据是按照指数形式存储的 系统把一个浮点型数据分成小数部分和指数部分 分别存放 指数部分采用规范化的指数形式 2020 2 23 33 2 4浮点型数据 2 浮点型变量的分类浮点型变量分为单精度 float型 双精度 double型 和长双精度型 longdouble 三类形式 2020 2 23 34 例2 4浮点型数据的舍入误差 includevoidmain floata b a 123456 789e5 b a 20 printf f n b 说明 一个浮点型变量只能保证的有效数字是7位有效数字 后面的数字是无意义的 并不准确地表示该数 应当避免将一个很大的数和一个很小的数直接相加或相减 否则就会 丢失 小的数 运行结果 123456 789e5 2020 2 23 35 2 4浮点型数据 2 4 3浮点型常量的类型C编译系统将浮点型常量作为双精度来处理 例如 f 2 45678 4523 65系统先把2 45678和4523 65作为双精度数 然后进行相乘的运算 得到的乘也是一个双精度数 最后取其前7位赋给浮点型变量f 如是在数的后面加字母f或F 如1 65f 654 87F 这样编译系统就会把它们按单精度 32位 处理 2020 2 23 36 2 5字符型数据 2 5 1字符常量 1 用单引号包含的一个字符是字符型常量 2 只能包含一个字符 例 a A 1 abc a 2020 2 23 37 2 5字符型数据 有些以 开头的特殊字符称为转义字符 n换行 t横向跳格 r回车 反斜杠 dddddd表示1到3位八进制数字 xhhhh表示1到2位十六进制数字 2020 2 23 38 例2 5转义字符的使用 打印机上的显示结果 fabcgdehjik 2020 2 23 39 2 5字符型数据 2 5 2字符变量字符型变量用来存放字符常量 注意只能放一个字符 字符变量的定义形式如下 charc1 c2 在本函数中可以用下面语句对c1 c2赋值 c1 a c2 b 一个字符变量在内存中占一个字节 2020 2 23 40 2 5字符型数据 2 5 3字符数据在内存中的存储形式及其使用方法一个字符常量存放到一个字符变量中 实际上并不是把该字符的字型放到内存中去 而是将该字符的相应的ASCII代码放到存储单元中 这样使字符型数据和整型数据之间可以通用 注意 一个字符数据既可以以字符形式输出 也可以以整数形式输出 2020 2 23 41 例2 6向字符变量赋以整数 includevoidmain charc1 c2 c1 97 c2 98 printf c c n c1 c2 printf d d n c1 c2 说明 在第 和第4行中 将整数97和98分别赋给c1和c2 它的作用相当于以下两个赋值语句 c1 c2 因为 a 和 b 的ASCII码为97和98 运行结果 9798 2020 2 23 42 例2 7大小写字母的转换 includevoidmain charc1 c2 c1 a c2 b c1 c1 32 c2 c2 32 printf c c c1 c2 说明 程序的作用是将两个小写字母a和b转换成大写字母A和B 从 代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码大32 语言允许字符数据与整数直接进行算术运算 运行结果 2020 2 23 43 2 5字符型数据 说明 有些系统 如TurboC 将字符变量定义为signedchar型 其存储单元中的最高位作为符号位 它的取值范围是 128 127 如果在字符变量中存放一个ASCII码为0 127间的字符 由于字节中最高位为0 因此用 d输出字符变量时 输出的是一个正整数 如果在字符变量中存放一个ASCII码为128 255间的字符 由于在字节中最高位为1 用 d格式符输出时 就会得到一个负整数 2020 2 23 44 2 5字符型数据 2 5 4字符串常量字符串常量是一对双撇号括起来的字符序列 合法的字符串常量 Howdoyoudo CHINA a 123 45 可以输出一个字符串 如printf Howdoyoudo 2020 2 23 45 2 5字符型数据 是字符常量 是字符串常量 二者不同 如 假设 被指定为字符变量 charc c a a c CHINA 结论 不能把一个字符串常量赋给一个字符变量 2020 2 23 46 规定 在每一个字符串常量的结尾加一个 字符串结束标志 以便系统据此判断字符串是否结束 规定以字符 作为字符串结束标志 如 如果有一个字符串常量 实际上在内存中是 它占内存单元不是 个字符 而是 个字符 最后一个字符为 但在输出时不输出 2 5字符型数据 2020 2 23 47 2 6变量赋初值 字符串常量 1 语言允许在定义变量的同时使变量初始化如 inta 3 指定 为整型变量 初值为 floatf 3 56 指定 为浮点型变量 初值为 56charc a 指定 为字符变量 初值为 a 2020 2 23 48 2 6变量赋初值 2 可以使被定义的变量的一部分赋初值 如 inta b c 5 表示指定 为整型变量 但只对 初始化 c的初值为 3 如果对几个变量赋以同一个初值 应写成 inta 3 b 3 c 3 表示 的初值都是 不能写成 inta b c 3 注意 初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的 相当于有一个赋值语句 2020 2 23 49 2 7各类数值型数据间的混合运算 混合运算 整型 包括int short long 浮点型 包括float double 可以混合运算 在进行运算时 不同类型的数据要先转换成同一类型 然后进行运算 说明 这种类型转换是由系统自动进行的 2020 2 23 50 2 8算术运算符和算术表达式 2 8 1 运算符简介 的运算符有以下几类 1 算术运算符 2 关系运算符 3 逻辑运算符 4 位运算符 5 赋值运算符 及其扩展赋值运算符 6 条件运算符 7 逗号运算符 8 指针运算符 和 9 求字节数运算符 10 强制类型转换运算符 类型 11 分量运算符 12 下标运算符 13 其他 如函数调用运算符 2020 2 23 51 2 8算术运算符和算术表达式 2 8 2算术运算符和算术表达式 1 基本的算术运算符 加法运算符 或正值运算符 如 减法运算符 或负值运算符 如 乘法运算符 如 除法运算符 如 模运算符 或称求余运算符 两侧均应为整型数据 如 的值为 2020 2 23 52 2 8算术运算符和算术表达式 2 算术表达式和运算符的优先级与结合性基本的算术运算符 用算术运算符和括号将运算对象 也称操作数 连接起来的 符合 语法规则的式子 称为 算术表达式 运算对象包括常量 变量 函数等 例如 5 a 是一个合法的表达式 2020 2 23 53 语言规定了运算符的优先级和结合性 在表达式求值时 先按运算符的优先级别高低次序执行 例如先乘除后加减 规定了各种运算符的结合方向 结合性 算术运算符的结合方向为 自左至右 即先左后右 2 8算术运算符和算术表达式 2020 2 23 54 2 8算术运算符和算术表达式 3 强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成所需类型 一般形式 类型名 表达式 例如 double 将 转换成double类型 int x y 将x y的值转换成整型 float 5 3 将5 3的值转换成float型 2020 2 23 55 例2 8强制类型转换 includevoid printf x f i d n x i 说明 有两种类型转换 一种是在运算时不必用户指定 系统自动进行的类型转换 如3 6 5 第二种是强制类型转换 当自动类型转换不能实现目的时 可以用强制类型转换 运行结果 x 3 600000 i 3 2020 2 23 56 2 8算术运算符和算术表达式 4 自增 自减运算符作用是使变量的值增 或减 如 在使用 之前 先使 的值加 减 在使用 之后 使 的值加 减 2020 2 23 57 2 8算术运算符和算术表达式 i 与 i的区别 是先执行 后 再使用 的值 是先使用 的值后 再执行 例如 i的值先变成4 再赋给 j的值均为 先将i的值3赋给 的值为 然后 变为 2020 2 23 58 2 8算术运算符和算术表达式 注意 1 自增运算符 自减运算符 只能用于变量 而不能用于常量或表达式 2 和 的结合方向是 自右至左 自增 减 运算符常用于循环语句中使循环变量自动加 也用于指针变量 使指针指向下一个地址 2020 2 23 59 2 8算术运算符和算术表达式 5 有关表达式使用中的问题说明 ANSIC并没有具体规定表达式中的子表达式的求值顺序 允许各编译系统自己安排 例如 对表达式a f1 f2 并不是所有的编译系统都先调用f1 然后调用f2 在有的情况下结果可能不同 有时会出现一些令人容易搞混的问题 因此务必要小心谨慎 2020 2 23 60 2 8算术运算符和算术表达式 语言中有的运算符为一个字符 有的运算符由两个字符组成 为避免误解 最好采取大家都能理解的写法 例如 不要写成i j的形式 而应写成 i j的形式 2020 2 23 61 2 8算术运算符和算术表达式 在调用函数时 实参数的求值顺序 标准并无统一规定 例如 的初值为 如果有下面的函数调用 printf i 在有的系统中 从左至右求值 输出 在多数系统中对函数参数的求值顺序是自右而左 函数输出的是 以上这种写法不宜提倡 最好改写成j i printf d d j i 不要写出别人看不懂的也不知道系统会怎样执行程序 2020 2 23 62 2 9赋值运算符和赋值表达式 1 赋值运算符赋值符号 就是赋值运算符 它的作用是将一个数据赋给一个变量 如 的作用是执行一次赋值操作 或称赋值运算 把常量 赋给变量 也可以将一个表达式的值赋给一个变量 2020 2 23 63 2 9赋值运算符和赋值表达式 2 类型转换如果赋值运算符两侧的类型不一致 但都是数值型或字符型时 在赋值时要进行类型转换 将浮点型数据 包括单 双精度 赋给整型变量时 舍弃浮点数的小数部分 如 为整型变量 执行 i 3 56 的结果是使 的值为 以整数形式存储在整型变量中 2020 2 23 64 2 9赋值运算符和赋值表达式 将整型数据赋给单 双精度变量时 数值不变 但以浮点数形式存储到变量中如 将23赋给float变量 即执行 23 先将23转换成23 00000 再存储在 中 将23赋给double型变量 即执行 23 系统将23补足有效位数字为23 00000000000000 然后以双精度浮点数形式存储到变量 中 2020 2 23 65 2 9赋值运算符和赋值表达式 将一个double型数据赋给float变量时 截取其前面7位有效数字 存放到float变量的存储单元 4个字节 中 但应注意数值范围不能溢出 如 floatf doubled 123 456789e100 f d 就出现溢出的错误 如果将一个float型数据赋给double变量时 数值不变 有效位数扩展到16位 在内存中以8个字节存储 2020 2 23 66 2 9赋值运算符和赋值表达式 字符型数据赋给整型变量时 由于字符只占1个字节 而整型变量为 个字节 因此将字符数据 个二进位 放到整型变量存储单元的低 位中 2020 2 23 67 第一种情况 低位对应 高位补零若所用系统将字符处理为无符号字符类型 或程序已将字符变量定义为unsignedchar型 则将字符的 位放到整型变量低 位 高 位补零 例如 将字符 376 赋给int型变量 第二种情况 符号扩展若所用系统 如TurboC 将字符处理为带符号 signedchar 时 若字符最高位为 则整型变量高 位补 若字符最高位为 则高 位全补 这称为 符号扩展 这样做的目的是使数值保持不变 如变量 字符 376 以整数形式输出为 的值也是 2020 2 23 68 2 9赋值运算符和赋值表达式 将一个int short long型数据赋给一个char型变量时 只将其低8位原封不动地送到char型变量 即截断 例如 inti 289 charc a c i c的值为33 如果用 c 输出c 将得到字符 的ASCII码为33 赋值情况 2020 2 23 69 2 9赋值运算符和赋值表达式 将带符号的整型数据 int型 赋给long型变量时 要进行符号扩展 将整型数的16位送到long型低16位中 如果int型数据为正值 符号位为 则long型变量的高16位补 如果int型变量为负值 符号位为 则long型变量的高16位补 以保持数值不改变 反之 若将一个long型数据赋给一个int型变量 只将long型数据中低16位原封不动地送到整型变量 即截断 2020 2 23 70 2 9赋值运算符和赋值表达式 例如 inta longb a b赋值如 如果 65536 则赋值后 值为 2020 2 23 71 2 9赋值运算符和赋值表达式 将unsignedint型数据赋给longint型变量时 不存在符号扩展问题 只需将高位补 即可 将一个unsigned类型数据赋给一个占字节数相同的非unsigned型整型变量 例如 unsignedint int unsignedlong long unsignedshort short 将unsigned型变量的内容原样送到非unsigned型变量中 但如果数据范围超过相应整型的范围 则会出现数据错误 2020 2 23 72 2 9赋值运算符和赋值表达式 例如 unsignedint 65535 intb 将 整个送到 中 由于 是int 第 位是符号位 因此b成了负数 根据补码知识可知 的值为 1 可以用printf d b 来验证 将非unsigned型数据赋给长度相同的unsigned型变量 也是原样照赋 符号位也作为数值一起传送 2020 2 23 73 例2 9有符号数据传送给无符号变量 includevoidmain unsigned int print n 说明 u 是输出无符号数时所用的格式符 如果 为正值 且在 32767之间 则赋值后数值不变 运行结果 2020 2 23 74 2 9赋值运算符和赋值表达式 3 复合的赋值运算符在赋值符 之前加上其他运算符 可以构成复合的运算符 例如 等价于 等价于 等价于 2020 2 23 75 2 9赋值运算符和赋值表达式 为便于记忆 可以这样理解 a b 其中a为变量 b为表达式 a b 将有下划线的 a 移到 右侧 a a b 在 左侧补上变量名a 注意 如果 是包含若干项的表达式 则相当于它有括号 如 x y 3 x y 3 x x y 3 不要错写成x x y 3 凡是二元 二目 运算符 都可以与赋值符一起组合成复合赋值符 语言规定可以使用 种复合赋值运算符 2020 2 23 76 2 9赋值运算符和赋值表达式 4 赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为 赋值表达式 一般形式为 例如 5 是一个赋值表达式 2020 2 23 77 2 9赋值运算符和赋值表达式 对赋值表达式求解的过程是 求赋值运算符右侧的 表达式 的值 赋给赋值运算符左侧的变量 例如 赋值表达式 3 5 的值为15 执行表达式后 变量a的值也是15 注意 一个表达式应该有一个值 2020 2 23 78 2 9赋值运算符和赋值表达式 左值 lvalue 赋值运算符左侧的标识符变量可以作为左值 而表达式就不能作为左值 如a b 赋值表达式可以 常变量也不能作为左值 右值 lvalue 出现在赋值运算符右侧的表达式左值也可以出现在赋值运算符右侧 因而左值都可以作为右值 2020 2 23 79 2 9赋值运算符和赋值表达式 赋值表达式中的 表达式 又可以是一个赋值表达式 例如 a b 5 分析 括弧内的 b 5 是一个赋值表达式 它的值等于5 执行表达式 a b 5 相当于执行 b 5 和 a b 两个赋值表达式 赋值运算符按照 自右而左 的结合顺序 因此 b 5 外面的括弧可以不要 即 a b 5 和 a b 5 等价 2020 2 23 80 2 9赋值运算符和赋值表达式 请分析下面的赋值表达式 a 3 5 4 3 分析 先执行括弧内的运算 将15赋给a 然后执行4 3的运算 得12 再把12赋给a 最后a的值为12 整个表达式的值为12 可以看到 a 3 5 出现在赋值运算符的左侧 因此赋值表达式 a 3 5 是左值 注意 在对赋值表达式 a 3 5 求解后 变量a得到值15执行 a 3 5 4 3时 实际上是将4 3的积12赋给变量a 而不是赋给3 5 不能写成 a 3 5 4 3 2020 2 23 81 2 9赋值运算符和赋值表达式 赋值表达式也可以包含复合的赋值运算符 如 a a a a a初值为12 分析 此赋值表达式的求解步骤如下 先进行 的运算 它相当于 a的值为 144 132 再进行 的运算 相当于 a 132 a的值为 132 132 264 2020 2 23 82 2 9赋值运算符和赋值表达式 将赋值表达式作为表达式的一种 使赋值操作不仅可以出现在赋值语句中 而且可以以表达式形式出现在其他语句 如输出语句 循环语句等 中 如 printf d a b 分析 如果b的值为3 则输出a的值 也是表达式a b的值 为3 在一个语句中完成了赋值和输出双重功能 2020 2 23 83 2 10逗号运算符和逗号表达式 逗号运算符 将两个表达式连接起来 又称为 顺序求值运算符 如 5 一般形式 表达式 表达式 求解过程 先求解表达式 再求解表达式 整个逗号表达式的值是表达式 的值 逗号表达式的值为14 2020 2 23 84 2 10逗号运算符和逗号表达式 例 逗号表达式 5 分析 赋值运算符的优先级别高于逗号运算符 因此应先求解 5 的值为 5 然后求解 得 整个逗号表达式的值为 一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式如 a 5先计算出 的值等于 再进行 的运算得60 但 值未变 仍为15 再进行 得 即整个表达式的值为 2020 2 23 85 2 10逗号运算符和逗号表达式 逗号表达式的一般形式可以扩展为表达式 表达式 表达式 表达式 它的值为表达式 的值 逗号运算符是所有运算符中级别最低的例 3 赋值表达式 将一个逗号表达式的值赋给 的值等于 逗号表达式 包括一个赋值表达式和一个算术表达式 的值为 整个逗号表达式的值为18 2020 2 23 86 2 10逗号运算符和逗号表达式 注意 并不是任何地方出现的逗号都是作为逗号运算符 例如函数参数也是用逗号来间隔的 如 printf d d d a b c 并不是一个逗号表达式 它是printf函数的3个参数 printf d d d a b c b c 是一个逗号表达式 它的值等于 的值 2020 2 23 87 2 11关系运算符和关系表达式 1 关系运算符及其优先次序 大于 大于或等于 等于 不等于 说明 关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符 2020 2 23 88 2 11关系运算符和关系表达式 2 关系表达式用关系运算符将两个表达式 可以是算术表达式或关系表达式 逻辑表达式 赋值表达式 字符表达式 接起来的式子 称关系表达式例 a b a b b c a 3 b 5 a b bb 的值为 真 表达式的值为1 C语言中没有专用的逻辑值 1代表真 0代表假 2020 2 23 89 2 12逻辑运算符和逻辑表达式 1 逻辑运算符及其优先次序 1 逻辑与 相当于其他语言中的AND 2 逻辑或 相当于其他语言中的OR 3 逻辑非 相当于其他语言中的NOT例 a b若a b为真 则a b为真 a b若a b之一为真 则a b为真 a若a为真 则 a为假 优先次序 非 逻辑运算符中的 和 低于关系运算符 高于算术运算符 2020 2 23 90 2 12逻辑运算符和逻辑表达式 2 逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式 逻辑表达式的值应该是一个逻辑量 真 或 假 例 设a 4 b 5 a的值为0a b的值为1a b的值为1 a b的值为14 0 2的值为1 逻辑运算结果 1代表真 0代表假运算对象 任何非零的数值被认作 真 2020 2 23 91 2 12逻辑运算符和逻辑表达式 例 5 3 8 4 0自左向右运算 1 0逻辑值为0 8 3逻辑值为0 4 1值为3 0逻辑值为1 5 3逻辑值为1 表达式值为0 2020 2 23 92 2 12逻辑运算符和逻辑表达式 在逻辑表达式的求解中 并不是所有的逻辑运算符都要被执行 1 a b c只有a为真时 才需要判断b的值 只有a和b都为真时 才需要判断c的值 2 a b c只要a为真 就不必判断b和c的值 只有a为假 才判断b a和b都为假才判断c 例 m a b n c d 当a 1 b 2 c 3 d 4 m和n的原值为1时 由于 a b 的值为0 因此m 0 而 n c d 不被执行 因此n的值不是0而仍保持原值1 2020 2 23 93 2 12逻辑运算符和逻辑表达式 答 year 4 0 year 100 0 year 400 0案值为真 1 是闰年 否则为非闰年
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!