C语言程序设计教程第2章北京邮电大学出版社.ppt

上传人:max****ui 文档编号:6333707 上传时间:2020-02-23 格式:PPT 页数:47 大小:339KB
返回 下载 相关 举报
C语言程序设计教程第2章北京邮电大学出版社.ppt_第1页
第1页 / 共47页
C语言程序设计教程第2章北京邮电大学出版社.ppt_第2页
第2页 / 共47页
C语言程序设计教程第2章北京邮电大学出版社.ppt_第3页
第3页 / 共47页
点击查看更多>>
资源描述
第2章C语言的基本数据类型与表达式2 1常量和变量2 2C语言的基本数据类型2 3数据类型转换2 4运算符与表达式 C语言程序设计教程 2 C语言的数据类型 第2章C语言的基本数据类型与表达式 C语言提供的数据结构 是以数据类型形式出现的 具体分类如下 1 基本类型分为整型 实型 又称浮点型 字符型和枚举型四种 2 构造类型分为数组类型 结构类型和共用类型三种 3 指针类型 在第9章中介绍 4 空类型C语言中的数据 有常量和变量之分 它们分别属于上述这些类型 3 本章将介绍基本类型中的整型 实型和字符型三种数据 4 一 常量与符号常量 常量是指在程序运行中 其数值不能被改变的量 常量又可分为直接常量和符号常量 第2章C语言的基本数据类型与表达式 2 1常量与变量 常量的类型 可通过书写形式来判别 5 120 100 0 0120 072 0 xFFFF 0 x1e 0X28AF 0XED4 120L 200L 长整型常量3 14 3 1 5 12E 6 099 12f 0 xg 48EA 019 5 1e 08 实型常量只能用十进制形式表示2 1E10 2 E 6 6 4E 4 8 E9 changsha ab 第2章C语言的基本数据类型与表达式 1 直接常量 是在程序中直接引用的数据 请判断这些常量正确与否 6 2 符号常量是用标识符来表示一个数据 在程序不能给它赋值 定义形式 define标识符常量数据例如 definePI3 14159在程序预处理时 凡是出现标识符PI的地方都将用数据3 14159来替换 如 2 2 3 PI就等价于2 2 3 3 14159 二 变量1 变量的概念在程序运行过程中 其值可以被改变的量称为变量 2 变量的两个要素 第2章C语言的基本数据类型与表达式 7 1 变量名 每个变量都必须有一个名字 变量名 变量命名遵循标识符命名规则 2 变量值 在程序运行过程中 变量值存储在内存中 在程序中 通过变量名来引用变量的值 3 标识符命名规则 1 有效字符 只能由字母 数字和下划线组成 且以字母或下划线开头 2 有效长度 随系统而异 但至少前8个字符有效 如果超长 则超长部分被舍弃 例如 由于student name和student number的前8个字符相同 有的系统认为这两个变量 是一回事而不加区别 在TCV2 0中 变量名 标识符 的有效长度为1 32个字符 缺省值为32 8 3 C语言的关键字不能用作变量名 注意 C语言对英文字母的大小敏感 即同一字母的大小写 被认为是两个不同的字符 习惯上 变量名和函数名中的英文字母用小写 以增加可读性 思考题 在C语言中 变量名total与变量名TOTAL ToTaL tOtAl等是同一个变量吗 标识符命名的良好习惯 见名知意 所谓 见名知意 是指 通过变量名就知道变量值的含义 通常应选择能表示数据含义的英文单词 或缩写 作变量名 或汉语拼音字头作变量名 例如 name xm 姓名 sex xb 性别 age nl 年龄 salary gz 工资 9 4 变量的定义与初始化在 语言中要求对所有用到的变量 必须先定义 后使用 且称在定义变量的同时进行赋初值的操作为变量初始化 2 变量初始化在说明变量的同时给变量一个初始值 inta 5 b 3 inta b c 3 inta b c a b c 3 例如 10 main intx y z w 定义x y z w为整型变量 unsignedintk 定义k为无符号整型变量 x 10 y 20 k 30 z x k w y k printf x k d y k d n z w 第2章C语言的基本数据类型与表达式 例2 1 程序运行结果为 x k 40 y k 10 11 5 变量的作用域 C语言程序是由函数组成的 且有且只能有一个main函数 变量定义可以出现在函数内 亦可出现在函数外或者是函数的参数中 按照变量定义语句出现的位置 可以分为 局部变量 在函数内定义 只在该函数中才能使用 全局变量 在函数外定义 从它被定义的位置起 在之后的所有函数中有效 形式参数 定义为函数的参数 只在该函数中才能使用 第2章C语言的基本数据类型与表达式 12 变量的特点 变量是指以标识符为名字 其值可以改变的量 变量代表计算机内存中的某一存储空间 该存储空间中存放的数据就是变量的值 在同一程序块中 变量不能被重复定义 使用变量时必须 先定义 后使用 13 1 整型常量表示方法 1 十进制形式 与数学上的整数表示相同 例如 12 100 0 2 八进制形式 在数码前加数字0 例如 012 1 81 2 80 10 十进制 3 十六进制形式 在数码前加0X 数字0和字母X 例如 0 x12 1 161 2 160 18 十进制 八进制的数码范围为0 7 018 十六进制的数码除了数字0 9外 还使用英文字母a f 或A F 表示10 15 如 0 x1e 注意 2 2C语言的基本数据类型一 整型数据 第2章C语言的基本数据类型与表达式 14 2 整型变量分类 根据数据所占的二进制位数分为 int short long 同样存储长度的数据又分unsigned signed 故可组合出六种类型 3 整型变量值域 由机器中数据的存储长度决定 如TurboC中 有short 2字节 int 2字节 long 4字节 关键字所占位数取值范围short16 32768 32767unsignedshort160 65535int16 32768 32767unsigned160 65535long32 2147483648 2147483647unsignedlong320 4294967295 第2章C语言的基本数据类型与表达式 15 4 数据在内存中的形式 以二进制的形式存放 以补码表示 数据在内存中是以二进制的形式存放的 如定义inti 12 根据在C编译系统一个整型变量所占的字节数为2 变量i在内存中的实际存放情况如图2 1所示 图2 1整型变量i在内存中的存放示意图实际上 数值是以补码表示的 正数的补码 与原码相同负数的补码 负数 取绝对值 二进制 按位取反 再加1 补码 16 3的原码按位取反加1得 3的补码由此可知 在整数的16位中 最左边的一位为符号位 为0 表示数值为正 为1 表示数值为负 例如 求 3在内存中的存放形式 17 5 整型数据的溢出 不同的整型数据有不同的取值范围 在程序运行过程中 如果出现数值超出整型数据的允许值范围 就会出现 溢出 例如 一个int型的变量的最大值为 215 1 32767 如果再加1 则产生溢出 其结果为 215 32768 32767 32768 18 1 实型常量表示方法 1 十进制小数形式 由数字和小数点组成 例如 3 4 4 3 2 指数形式 十进制小数 e 或E 十进制数整数 例如 12 5e 6表示12 5 10 6 小数点不能单独出现 0 0 e或E的两边必须有数 且其后面必须为整数 如 6E0 2 e5 2 实型变量分类 关键字字节数取值范围精度 位 float43 4 10 38 3 4 10387double81 7 10 308 1 7 1030815 注意 第2章C语言的基本数据类型与表达式 二 实型数据 19 3 实型数据的舍入误差 voidmain floata 1234567 896 floatb 1234567 848 printf a f nb f n a b voidmain doublea 1234567 896 doubleb 1234567 848 printf a f nb f n a b 结果 a 1234567 875000b 1234567 875000 结果 a 1234567 896000b 1234567 848000 20 为什么会出现这种情况 是由于实型数据是用有限的存储单元进行存储的 因而能提供的有效数字有限 在有效数字以外的数字将被舍弃 对于float型变量 只能保证前7位数字是准确的 后面的数字是无意义的 而采用double型变量后 其精度大幅度提高 能保证前15位有效数字是准确的 另外 同样因为有效数字的位数问题 在程序中应避免用一个很大的数加上或减去一个很小的数 否则会丢失小的数 21 1 字符常量 1 用单引号括起来的一个字符 如 A 1 等 2 用单引号括起来的由反斜杠 引导的转义字符 转义是指在源程序中碰到这种字符组合时 反斜杠的意义已经发生转变 变成控制代码和具有某些特殊用途的单个字符 例如 n 已不再代表英文小写字母n 而转义成了 换行符 字符形式功能 n换行 t横向跳格 b退格 r回车 反斜杠字符 单引号字符 ddd8进制数表示的ASCII码对应的字符 xhh16进制数表示的ASCII码对应的字符 第2章C语言的基本数据类型与表达式 四 字符类型 22 例如 字符A的ASCII码为 65D 十进制 41H 十六进制 101Q 八进制 字符A可以表示为 A x41 101 2 分类 char和unsignedchar 3 值域 每个字符型数据在内存中占一个字节 包括ASCII字符表中的所有字符 可显示字符和非显示字符 4 变量值的存储字符数据在内存中的存储形式 以二进制的ASCII码形式存储 字符数据在内存中存储的是字符的ASCII码 一个无符号整数 其形式与整数的存储形式一样 所以 语言允许字符型数据与整型数据之间通用 第2章C语言的基本数据类型与表达式 23 1 一个字符型数据 既可以字符形式输出 也可以整数形式输出 案例2 1 字符变量的字符形式输出和整数形式输出 程序功能 用字符形式和整数形式输出字符变量 main charch1 ch2 ch1 a ch2 b printf ch1 c ch2 c n ch1 ch2 printf ch1 d ch2 d n ch1 ch2 程序运行结果 ch1 a ch2 bch1 97 ch2 98 24 2 允许对字符数据进行算术运算 此时就是对它们的ASCII码值进行算术运算 案例2 2 字符数据的算术运算 程序功能 字符数据的算术运算 main charch1 ch2 ch1 a ch2 B 字母的大小写转换 printf ch1 c ch2 c n ch1 32 ch2 32 用字符形式输出一个大于256的数值 printf ch1 200 d n ch1 200 printf ch1 200 c n ch1 200 printf ch1 256 d n ch1 256 printf ch1 256 c n ch1 256 程序运行结果 ch1 A ch2 bch1 200 297ch1 200 ch1 256 353ch1 256 a 25 4 字符串 是用一对双引号括起来的字符序列 如 SHANGHAI AbcdeFGHijk Howareyou 字符串中字符的个数称为字符串长度 长度为0的字符串 即一个字符都没有的字符串 称为空串 表示为 一对紧连的双引号 例如 Howdoyoudo Goodmorning 等 都是字符串常量 其长度分别为14和13 空格也是一个字符 如果反斜杠和双引号作为字符串中的有效字符 则必须使用转义字符 例如 1 C msdos v6 22 C msdos v6 22 2 Isay Goodbye Isay Goodbye 注意 a 与 a 的区别 26 字符串的存储 C语言规定在存储字符串常量时 由系统在字符串的末尾自动加一个 0 作为字符串的结束标志 注意 在源程序中书写字符串常量时 不必加结束字符 0 否则画蛇添足 如果有一个字符串为 CHINA 则它在内存中的实际存储如下所示 所以最后一个字符 0 是系统自动加上的 它占用 字节而非 字节内存空间 综上所述 字符常量 A 与字符串常量 A 是两回事 1 定界符不同 字符常量使用单引号 而字符串常量使用双引号 2 长度不同 字符常量的长度固定为1 而字符串常量的长度 可以是0 也可以是某个整数 3 存储要求不同 字符常量存储的是字符的ASCII码值 而字符串常量 除了要存储有效的字符外 还要存储一个结束标志 0 27 C语言允许整型 实型 字符型数据进行混合运算 有3种转换方式 自动转换 赋值转换和强制转换 一 类型自动转换如果一个运算符两侧的操作数的数据类型不同 则系统按 先转换 后运算 的原则 首先将数据自动转换成同一类型 然后在同一类型数据间进行运算 转换规则如图所示 注意 箭头方向只表示数据类型由低向高转换 不要理解为int型先转换成unsigned型 再转换成long型 最后转换成double型 第2章C语言的基本数据类型与表达式 2 3数据类型转换 1 横向向左的箭头 表示必须的转换 char和short型必须转换成int型 float型必须转换成double型 2 纵向向上的箭头 表示不同类型的转换方向 28 intx 2 floaty 1 6 charc A 则 c x y c x y65 int 2 int 1 6 double 68 2 double 二 赋值转换 在赋值时将赋值符右边值的类型转换成与其左边变量类型一致的类型 有下列几种情况 1 实型整型 字符型 去掉小数部分 例如 charc 68 5 printf c c 第2章C语言的基本数据类型与表达式 29 2 整型 字符型 实型 补足有效位 3 对char int short long unsigned型数据 赋值符右边数据 a位 赋值符左边的变量 b位 若a b原样照赋 a b截断高a b位 送低b位 有符号数据有符号变量 符号扩展 其他情况 高b a位全补0 符号扩展 符号位为0 剩余的高位补0 符号位为1 剩余的高位补1 a b floatf 23 23 00000f 7位 doublef A 23 0000000000000f 15位 第2章C语言的基本数据类型与表达式 30 三 强制类型转换 数据类型强制转换的一般格式为 要转换成的数据类型 被转换的表达式 当被转换的表达式是一个简单表达式时 外面的一对圆括号可以缺省 例如 double a 等价于 double a 将变量a的值转换成double型 int x y 将x y的结果转换成int型 例如 inta 2 b 5 floatx 4 4 则有 表达式结果b a2 float b a2 5 float b a 2 0 int x a x4 4 int x a x 强制转换类型得到的是一个所需类型的中间量 原表达式类型并不发生变化 例如 double a只是将变量a的值转换成一个double型的中间量 其数据类型并未转换成double型 第2章C语言的基本数据类型与表达式 31 一 C语言的运算符简介按操作功能运算符大致可分为算术运算符 关系运算符 逻辑运算符 按位运算符以及其它运算符如赋值运算符 条件运算符 逗号运算符等 表达式是由操作数和运算符组成的序列 第2章C语言的基本数据类型与表达式 2 4运算符与表达式 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 逗号运算符 指针运算符 和 求字节数运算符sizeof强制类型转换运算符分量运算符 下标运算符 32 1 运算符的优先级与结合性优先级别 它决定了运算符的运算顺序 即优先级高的运算符先运算 优先级低的运算符后运算 结合规则 规定了连续几个具有相同优先级运算符的运算顺序 即优先级相同的由结合规则来决定运算顺序 自左至右的结合方向 称为左结合性 反之 称为右结合性 结合性是 语言的独有概念 除单目运算符 赋值运算符和条件运算符是右结合性外 其它运算符都是左结合性 2 表达式求值1 按运算符的优先级高低次序执行 例如 先乘除后加减 2 如果在一个运算对象 或称操作数 两侧的运算符的优先级相同 则按 语言规定的结合方向 结合性 进行 33 例如 算术运算符的结合方向是 自左至右 即 在执行 a b c 时 变量b先与减号结合 执行 a b 然后再执行加c的运算 C中所有运算符分为15级 由上至下序号从1逐次递增到15 而优先级递减 列在同一优先级别栏内的所有运算符具有相同的优先级 其运算顺序由 结合规则 决定 其优先级可方便地记忆为 单目高于双目 双目高于三目 三目高于赋值 双目运算中的10个优先级的先后顺序可记忆为 算术运算符高于移位运算符 移位运算符高于关系运算符 关系运算符高于位逻辑运算符 不包括单目位逻辑运算符 位逻辑运算符高于逻辑运算符 如图3 5所示 34 1级 算术运算符 2级 高于 单目运算符 1个优先级 移位运算符 1级 共有10个优先级 双目运算符关系运算符 2级 三目运算符 1个优先级 位逻辑运算符 3级 赋值运算符 1个优先级 逻辑运算符 2级 逗号运算符 1个优先级 图3 5运算符优先的简洁记忆图 35 二 算术运算符和算术表达式1 五种基本算术运算符 减法 取负 求余数 1 关于除法运算 C语言规定 两个整数相除 其商为整数 小数部分被舍弃 例如 5 2 2 但5 0 2 2 5 2 关于求余数运算 要求两侧的操作数均为整型数据 否则出错 例如 5 3的值为2 5 3的值为 2 5 3 的值为2 5 3 的值为 2 12 3 3 若a能被b整除 则有 a b 0 第2章C语言的基本数据类型与表达式 36 2 表达式和算术表达式 1 表达式的概念 用运算符和括号将运算对象 常量 变量和函数等 连接起来的 符合 语言语法规则的式子 2 算术表达式的概念 表达式中的运算符都是算术运算符 3 优先级 4 结合性 从左至右 5 表达式的值 数值型 int long unsigned double 例如 已知 floata 2 0 intb 6 c 3 求解 a b c 1 5 a fabs 5 第2章C语言的基本数据类型与表达式 37 floata 2 0 intb 6 c 3 a b c 1 5 a fabs 5 12 0 3 5 4 0 1 5 2 5 97 int 99 5 5 104 5 double 第2章C语言的基本数据类型与表达式 38 3 自增与自减运算符 自增运算使单个变量的值增 自减运算使单个变量的值减 用法与运算规则 1 前置运算 运算符放在变量之前 i i 先使变量的值增 或减 然后再以变化后的值参与其它运算 即先增减 后运算 2 后置运算 运算符放在变量之后 i i 变量先参与其它运算 然后再使变量的值增 或减 即先运算 后增减 例如 等价于i i 1 j i i 所以i的值为4 j的值为3 i j i 所以i的值为4 j的值为4 1 i i 2 i 3 j i 3 i 3 j i 第2章C语言的基本数据类型与表达式 39 结合性 自右至左 如 i 2 j i 等价于 j i 即 j i i 与 是同优先级所以i的值为3 j的值为 2 第2章C语言的基本数据类型与表达式 注意 或 自增与自减运算符的使用 如 设i 3 k i i i k 如 设i 3 j 4 k i j k 40 案例2 4 自增 自减运算符的用法与运算规则示例 程序功能 自增 自减运算符的用法与运算规则示例 main intx 6 y printf x d n x 输出x的初值 y x 前置运算 printf y x x d y d n x y y x 后置运算 printf y x x d y d n x y 程序运行结果 x 6y x x 7 y 7y x x 6 y 7 41 思考题 如果将案例 y x 语句中的前置运算改为后置 y x y x 语句中的后置运算改为前置 y x 程序运行结果会如何 说明 1 自增 自减运算 常用于循环语句中 使循环控制变量加 或减 以及指针变量中 使指针指向下 或上 一个地址 2 自增 自减运算符 不能用于常量和表达式 例如 5 a b 等都是非法的 3 在表达式中 连续使同一变量进行自增或自减运算时 很容易出错 所以最好避免这种用法 42 1 赋值运算符赋值符号 就是赋值运算符 它的作用是将一个表达式的值赋给一个变量 赋值运算符的一般形式为 变量 赋值表达式 优先级 算术 关系 和 赋值 结合性 自右至左 例如 1 x y 12 4y值为12 x值为3 表达式的值为3 2 x y 12 4y值为3 x值为3 表达式的值为3 3 x y 12 4 y值为3 x值为3 表达式的值为3 4 x y 12 4 如果表达式值的类型 与被赋值变量的类型不一致 但都是数值型或字符型时 系统自动地将表达式的值转换成被赋值变量的数据类型 然后再赋值给变量 第2章C语言的基本数据类型与表达式 三 赋值运算符和赋值表达式 43 2 复合赋值运算复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的 复合赋值运算的一般格式为 表达式1op 表达式2它等价于 表达式1 表达式1op 表达式2 当表达式为简单表达式时 表达式外的一对圆括号才可缺省 否则可能出错 例如 x 3 等价于x x 3 y x 6 等价于y y x 6 而不是y y x 6 设a 12 计算表达式a a a 12和a a a 12的值C语言规定的10种复合赋值运算符如下 复合算术运算符 5个 复合位运算符 5个 44 3 赋值表达式由赋值运算符或复合赋值运算符 将一个变量和一个表达式连接起来的表达式 称为赋值表达式 1 一般格式变量 复合 赋值运算符表达式 2 赋值表达式的值任何一个表达式都有一个值 赋值表达式也不例外 被赋值变量的值 就是赋值表达式的值 例如 a 5 这个赋值表达式 变量a的值 就是它的值 注意 复合运算符是一个运算符 但功能上 是两个运算符功能的组合 45 1 逗号运算符 形式 逗号表达式1 逗号表达式2 逗号表达式n 求解过程 自左至右 依次计算各表达式的值 表达式n 的值即为整个逗号表达式的值 例如 逗号表达式 a 3 5 a 4 a 5 的值 20 先求解a 3 5 得a 15 再求a 4 60 最后求解a 5 20 所以逗号表达式的值 20 优先级 最低 结合性 自左至右 表达式的值 最后一个表达式的值 第2章C语言的基本数据类型与表达式 四 其它运算符 46 例如 aby表达式y a 4 b 5 a b 4549y a 4 b 5 a b 4599y a 4 b 5 a b 4559y a 4 b 5 a b 55510注意 C语言常用逗号作为分隔符 例如 inta 3 b 4 c 5 printf d d d a b c printf d d d a a b c c 结果为3 5 5 第2章C语言的基本数据类型与表达式 47 形式有两种 sizeof变量名sizeof 类型名 结果为整型数 inta floatx printf d d sizeofa sizeofx printf d d sizeof int sizeof float 以上两个printf语句结果均为2 4 例如 第2章C语言的基本数据类型与表达式 3 求字节运算符 sizeof 作用 求得变量或某种数据类型所需的字节数
展开阅读全文
相关资源
相关搜索

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


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

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


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