数据类型与表达式_第1页
数据类型与表达式_第2页
数据类型与表达式_第3页
数据类型与表达式_第4页
数据类型与表达式_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2 1C语言的数据类型2 2常量与变量2 3整型数据2 4实型数据2 5字符型数据2 6运算符和表达式2 7不同类型数据间的混合运算 第2章数据类型及表达式 2 2常量与变量 2 2 1常量和符号常量 1 常量 在C语言的程序中 其值不能被改变的量称为常量 注意 常量并不占用内存 2 符号常量 用一个标识符来代表一个常量 被称为符号常量 define标识符常量 定义 例2 1 符号常量的使用 definePI3 14main floatr s v r 10 s PI r r printf s f n s s 314 000000 作用 一改全改 2 2 2变量 在C语言的程序中 其值可以发生改变的量称为变量 1 变量定义 类型变量名 inti j num 说明i j num为整型变量 floata b sum 说明a b sum为实型变量 charc ch 说明c ch为字符型变量 2 注意事项 见名知意 先定义 后使用 习惯上 符号常量用 大写字母 表示 变量名用 小写字母 表示 2 3 1整型常量的表示方法 2 3整型数据 1 十进制常量 由0 9的数字组成 1234 56819 0 2 八进制常量 由0 7的数字组成 最高位必须用前导符0开头 01234 01502723 3 十六进制常量 由0 9的数字以及a f的字母 大写也可以 组成 最高位必须用前导符0 x 0X 开头 0 x1234 0X15ff0 x27a3 2 3 2整型变量 1 整型变量在内存中的存放形式 数据在内存中是以二进制补码的形式存放的 inti i 10 正数的补码就是它的本身 原码 10的二进制形式为 0000000000001010 inti i 10 10的原码是 将10的二进制形式中的最高位改为 1 即可 将 10的原码 除符号位外 其余各位按位取反 将 10的反码 最低位上加 1 2 整型变量的分类 基本型 以int表示 短整型 以shortint表示 或以short表示 长整型 以longint表示 或以long表示 无符号型 以unsigned表示 可与上述3种类型匹配而构成 无符号基本型 类型说明符为unsignedint或unsigned 无符号短整型 类型说明符为unsignedshort 与无符号基本型一样 无符号长整型 类型说明符为unsignedlongint或unsignedlong 例2 2 整型变量的定义与使用 main inta b longc unsignede a 1 b 523 c 623789 e 89 printf a d b d c ld e u n a b c e 运行结果如下 a 1 b 523 c 623789 e 89 3 整型变量的定义与使用 C语言规定程序中要的变量都必须先定义 才能使用 int变量名 如 inta 3 相当于inta a 3 inta b c 5 可以部分初始化 inta 3 b 3 c 3 不能inta b c 3 4 整型变量的初始化 程序中可以对一些变量预先设置初值 C允许在义变量的同时 给变量赋值 称为变量的初始化 例2 3 写出下面程序运行结果 main inta b a 32767 b a 1 printf a d b d n a b 运行结果如下 a 32767 b 32768 5 整型数据的溢出 2 4 1实型常量的表示方法实型也称为浮点型 实型常量也称为实数或者浮点数 实型常量不分单 双精度 都按双精度double型处理 其有效位数为15 16位 2 4实型数据 1 小数形式小数形式由数码0 9和小数点组成 当某浮点数整数部分或小数部分为0时 0可以省略 但小数点不可省略 例如 0 0 25 5 789 0 13 5 0 300 267 8230 123 等均为合法的实数 345 无小数点 a7 数码不可以是字母 等均为非法的浮点数 2 指数形式指数形式由尾数加阶码标志e或E以及阶码 只能为整数 可以带符号 组成 其一般形式为aEn a为尾数 n为阶码 其值为a 10n例如 2 1 105可以表示为2 1E5 3 7 10 2可以表示为3 7E 2 2 4 2实型变量1 实型数据在内存中的存放形式一个实型数据在一般的微型机中是占4个字节 实型数据不管是小数形式还是指数形式都是以指数形式存储 系统把一个实型数据分成小数部分和指数部分 分别存放 指数部分采用规范化的指数形式 2 实型变量分类实型变量分为单精度浮点型和双精度浮点型两类 单精度浮点型类型说明符为float 双精度浮点型类型说明符为double 浮点变量说明的格式为 float变量表列 或double变量表列 例如 floatx y 定义x y为单精度浮点型 doublea b c 定义a b c为双精度浮点型 floatx 1232 56789 定义x为单精度浮点型 并初始化值为1232 567 2 5 1字符常量单字符常量是用单引号括起来的一个字符 单字符常量可以有如下几种表示方法 1 直接形式直接形式即在单引号内直接书写字符 例如 a b 2 八进制形式八进制形式格式为 ddd 其中 ddd 表示1 3位八进制数 其值代表的是某字符的ASCII值 是转义字符 八进制形式可以表示所有的字符 例如 101 等于 A 007 响铃控制字符 343 表示ASCII值为227的字符 2 5字符型数据 3 十六进制形式十六进制形式格式为 xhh 其中 hh 表示1 2位十六进制数 其值代表的是某字符的ASCII值 是转义字符 x 是十六进制前缀 十六进制形式可以表示所有的字符 例如 x41 等于 A x07 响铃控制字符 xe3 表示ASCII值为227的字符 4 转义字符转义字符是一种特殊的字符常量 转义字符以反斜线 开头 后跟一个或几个字符 转义字符具有特定的含义 不同于字符原有的意义 故称 转义 字符 常用的转义字符 2 5 2字符变量字符型变量 char 用来存放字符常量 注意一个字符变量只能存放一个字符常量 字符变量的定义形式如下 charc1 c2 定义c1 c2为字符变量 在内存中个占一个字节 可以分别存放一个字符 下面是对c1 c2赋值 c1 a c2 b 实际上其内存中存放的是该字符的ASCII码 参见附录I 字符变量的初始化 如 charc1 a c2 b 2 5 3字符数据在内存中的存储形式及其使用方法将一个字符常量放到一个字符变量中 实际上是将该字符的ASCII代码以二进制形式放到存储单元中 ch1 a ch2 a 32 2 5 4字符串常量字符串常量是由一对双引号括起的字符序列 可以没有字符 也可以只有一个字符 例如 CHINA Howareyou 12 5 A nc 234 等都是合法的字符串常量 字符串 program 在内存存储的形式如图2 1所示 该字符串占用8个字节的存储空间 但其有效字符的个数却是7 最后一个字节存储字符串结束标志 0 图2 1字符串存储形式 字符串的有效字符的个数是第一个 0 前字符的个数的总和 有效字符的个数也称为字符串长度 例如 computer 长度为8 n 长度为1 abc n 345 0china 长度为5 而不是16 因为 0 后的字符是无意义的 n 是一个转义字符 345 是八进制表示的一个字符 长度为3 因为 与 分别为一个字符 2 6运算符和表达式 2 6 1C运算符与表达式简介运算符 运算是对数据进行加工的过程 描述各种不同运算的符号称为运算符 操作数 参加运算的数据称为运算对象或操作数 表达式 用运算符和括号将运算对象连接起来的符合C语言语法规则的式子称为C语言表达式 学习时注意运算符的优先级 结合性 左结合性或右结合性 操作数的个数 表达式结果 2 6 2算术运算符及算术表达式 1 算术运算符C语言提供了5个基本的算术运算符 加法运算符 减法运算符 负号运算符 乘法运算符 除法运算符 取余运算符或称模运算符运算符 的优先级相同 的优先级相同 的优先级高于 和 运算符 算术运算符都是左结合的运算符 2 算术表达式用算术运算符和括号运算符将运算对象连接起来的符合C语言规则的式子 称为算术表达式 算术表达式的计算符合运算符优先级和结合性的原则 计算表达式时的具体过程是 对表达式自左向右扫描运算对象 然后考察运算对象两侧的运算符 如果优先级不相同 则该运算对象和高优先级的运算符结合 当某运算符所需的运算对象全部都和该运算符结合后进行运算 运算后的结果就是下一个被处理的运算对象 否则继续扫描下一个运算对象 如果两侧的运算符优先级相同 则按照运算符的结合性原则去结合运算 如果运算符是左结合的 则和左侧的运算符结合 如果是右结合的 则和右侧的运算符结合 3自增自减运算符及自增自减表达式自增运算符 和自减运算符 都是单目运算符 运算对象可以位于运算符前面 也可以位于运算符后面 当运算符位于运算对象前面时 称为前缀运算符 如 i和 i 当运算符位于运算对象后面时 称为后缀运算符 如i 和i 自增自减运算符的功能是将运算对象加1或减1后 再将结果保存到运算对象中去 如i 等同于i i 1 自增自减运算符的运算对象只能是变量 当表达式中出现自增自减运算符时 表达式的求值过程如下 1 自增自减运算符是后缀运算符时 应先使用自增自减运算符的运算对象计算整个表达式的值 然后再计算自增自减 例2 4main inti 2 j 3 intk k i j 4 printf result k d i d j d n k i j 程序运行结果为 result k 9 i 3 j 4表达式k i j 4的运算可理解为 先运算表达式k i j 4 再计算i 和j 2 自增自减运算符是前缀运算符时 应先完成自增自减 然后使用运算后的结果计算整个表达式的值 例2 5main inti 2 j 3 intk k i j 4 printf result k d i d j d n k i j 运行结果应为多少 result k 11 i 3 j 4表达式k i j 4的运算可理解为 先运算 i和 j 再计算表达式k i j 4 程序运行结果为 3 当表达式中既含有后缀自增自减运算符 又含有前缀自增自减运算符时 应先计算所有的前缀自增自减运算 再计算整个表达式的值 最后计算所有的后缀自增自减运算 例2 6main inti 2 j 3 intk k i j 4 i j printf result k d i d j d n k i j 程序运行结果为 result k 18 i 4 j 5表达式k i j 4 i j 的运算可理解为 先运算 i和 j 再计算表达式k i j 4 i j 最后计算i 和j 注意 在运算的时候变量i j是变化的 但在某瞬间值是确定的 1 简单的赋值运算符和赋值表达式C语言的赋值运算符是 该运算符是双目运算符 它的优先级仅高于逗号运算符 是右结合性的 由赋值运算符构成的赋值表达式的格式为 变量 确定的值赋值表达式会得到两个值 一个是赋值运算符左侧变量的值 另一个是赋值表达式的值 表达式的值与变量的值是相同的 2 6 3赋值运算符和赋值表达式 下列表达式是合乎C语言表达式规则的表达式 a 123a 123 456c a A x a ca x a 4 c 算术表达式 x a b 3 合法的算术表达式 2 复合的赋值运算符和复合的赋值表达式在赋值运算符 前加上其他的运算符 可以构成复合的赋值运算符 如在 前加上 运算符就构成了 运算符 C语言提供了10种复合的赋值运算符 它们是 其中前5个是复合的算术赋值运算符 后5个是复合的位运算赋值运算符 复合的赋值运算符是双目运算符 优先级和赋值运算符相同 也是右结合性的 由复合的赋值运算符构成的赋值表达式的格式为 变量确定的值它等效于变量 变量确定的值例如 a 5等价于a a 5x y 7等价于x x y 7 r p等价于r r p 2 6 4逗号运算符和逗号表达式在 语言中逗号 也是一种运算符 称为逗号运算符 逗号运算符的优先级是最低的 其功能是把两个表达式连接起来组成一个表达式 称为逗号表达式 逗号表达式的一般形式为 表达式1 表达式2逗号表达式的求值过程是顺序求解表达式1 表达式2的值 并以表达式2的值作为整个逗号表达式的值 逗号表达式的扩展形式为 表达式1 表达式2 表达式n表达式n的值作为整个逗号表达式的值 例2 7main inta 2 b 4 c 6 x y y x a b b c printf y d x d y x 程序运行结果为 y 6 x 6本例中的y等于6 而逗号表达式的值y x a b b c 是10 2 6 5条件运算符和条件表达式条件运算符为 和 它是一个三目运算符 即有三个参与运算的量 由条件运算符组成条件表达式的一般形式为 表达式1 表达式2 表达式3其求值规则为 如果表达式1的值为真 则以表达式2的值作为条件表达式的值 否则以表达式2的值作为整个条件表达式的值 条件表达式通常用于赋值语句之中 例如条件语句 if a b max a elsemax b 可用条件表达式写为max a b a b 执行该语句的语义是 如a b为真 则把a赋予max 否则把b赋予max 使用条件表达式时 还应注意以下几点 1 条件运算符的运算优先级低于关系运算符和算术运算符 但高于赋值符 因此max a b a b可以去掉括号而写为max a b a b 2 条件运算符 和 是一对运算符 不能分开单独使用 3 条件运算符的结合方向是自右至左 例如 a b a c d c d应理解为a b a c d c d 这也就是条件表达式嵌套的情形 即其中的表达式c d c d又是一个条件表达式 2 6 6表达式小结判断表达式类型应根据表达式中出现的运算符的优先级来判定 如果某一运算符在整个表达式的运算过程中优先级是最低的 或者是最后运算的运算符 那么表达式的类型就是该运算符所从属的类型 例如 x a 3 b 3 是赋值表达式 x a 3 6 a是逗号表达式 x 8 y 9 6是关系表达式 k i 3 a是算术表达式 2 7不同类型数据间的混合运算 C语言规定不同类型的数据不能够直接进行运算 只有相同类型的数据才可以 但是在描述表达式时 参与运算的运算对象却可以是不同类型的数据 于是在表达式进行运算的时候存在类型的转换问题 C语言中有两种形式的类型转换 2 7 1类型的自动转换1 赋值表达式中的自动转换其转换的依据是将赋值运算符右侧的确定的值按照左侧变量定义的类型存储 即要把确定的值转换为变量定义的类型 为了方便描述 以下所有的示例都假定有如下的变量说明 inta longintb unsignedintc floatx charc1 1 浮点型数据赋给整型变量浮点型数据赋给整型变量转换的方法是舍去浮点型数据的小数部分 将整数部分赋给整型变量 2 整型数据赋给浮点型变量整型数据赋给浮点型变量转换的方法是数值保持不变 只是将整型数据以浮点型数据的存储形式存储到相应的浮点变量中 3 字符型数据赋给整型变量具体转换的方法是将字符型数据的ASCII码存储到整型变量的低字节中 整型变量的高字节的所有位存储的是低字节的 高位扩展 如果低字节的最高位为0 则高字节的所有位全部扩展为 如果低字节的最高位为1 则高字节的所有位全部扩展为 例如 c1 A a c1整型变量a的值为65 字符型数据c1和整型变量a的存储如图2 4所示 图2 4变量c1 a的存储 4 整型数据赋给字符型变量整型数据赋给字符型变量时的具体转换方法是将整型数据的低字节存储的内容存储到字符型变量中去 即 高位截断 例如 c1 254运算后c1的ASCII码值为254 字符型变量c1 整型常量254的存储如图2 6所示 图2 6变量c1 常量254的存储 5 int型数据赋给longint型变量int型数据赋给longint型变量时 具体转换的方法是将int型数据的值存储到longint变量的低字中 图2 8变量a b的存储 6 longint型数据赋给int型或unsignedint型变量具体转换的方法是将longint型数据的低字的内容存储到int型或unsignedint型变量中去 图2 10变量b a和c的存储 7 unsignedint型数据赋给longint型变量具体转换的方法是将unsignedint型数据的值存储到longint型变量的低字中 longint型变量的高字的所有位存储的是 8 相同长度的整型数据赋给

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论