




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章数据类型 运算符与表达式 本章重点 难点 1 自加 自减运算2 类型转换3 复合的赋值运算符 第三章数据类型 运算符与表达式 3 1基本概念1 C语言程序的组成特点一个C源程序由函数构成 其中至少包含一个主函数 main函数 C程序总是由main函数开始执行 分号 是C语言的一部分 C程序书写格式自由 一行内可以写多条语句 且语句中的空格和回车符均可忽略不计 程序的注释部分应括在 之间 和 之间不允许留有空格 注释都分允许出现在程序中的任何位置上 2 标识符 C语言的标识将可分为以下三类 一 关键字C语言共有32个关用字 每个关键字在C程序中都代表着某一固定含意 所有关键字都要用小写英文字母表示 且这些关键字都不允许作为用户标识将使用 C语言中的关键字可见书 二 预定义标识符这些标识符在C而言中都具有特定含意 如C语言提供的库函数的名字和预编译处理命令 C语言语法允许用户把这类标识用作其它用途 但这将使这些预定义标识符失去系统规定的原意 鉴于目前各种计算机系统的C语言已经把这类标识符作为统一的库函数名或预编译处理中的专用命令名使用 因此为了避免误解 建议用户不要把这些预定义标识符作它用或将它们重新定义 2 标识符 三 用户标识符用户可以根据需要对C程序中用到的变量 符号常量 自己的函数或文件指针进行命名 形成用户标识符 这类标识符的构成规则如下 由英文字母 数字 下划线组成 且第一个字符不能是数字 必须是字母或下划线 如 sum average class student nameM D 123 33 3D64 a bERROR 大 小写英文字母的含意不同 标识符中所允许包含的字符个数随不同的C编译系统而有所不同 通常可以识别前面6个字符 用户取名时 应当尽量遵循 简洁明了 和 见名知意 的原则 注意 大写字母和小写字母被认为是两个不同的字符 因此 sum和SUM是两个不同的变量名 习惯上 变量名用小写字母表示 以增加可读性 3 C语言的数据类型 3 2常量 Constant 常量的概念 在程序中不能改变的量称为常量 常量的类型由数据的外部表现形式确定 常量区分为不同的类型 如 等为整型常量 4 6 1 23等为实型常量 a d 为字符常量 一般从其字面形式即可判别 也可以用一个标识符代表一个常量 definePI3 1415926main test1 c floats r l constfloatPI 3 1415926 r 10 l 2 PI r s PI r r printf l fs f n l s printf PI f n PI 2 符号常量概念 用一个标识符代表一个常量 例 definePRICE30main test2 c intnum total num 10 total num PRICE printf total d total 3 3变量 Variable 变量的概念 变量是在程序中可以改变的量 变量具有三个特征 变量有名 用标识符命名 变量有类型 在程序中可以改变 变量对应于内存中某一地址下的几个单元 变量名作为程序引用变量的标志 变量的类型确定了变量在内存中所占单元的数量及其表示的方式 变量的地址可以通过 运算获得 内存 inta a变量的引用标志 a对应a的地址 整型变量占两个内存单元 变量必须先说明后使用 说明的目的是确定变量的名字和类型 3 4整型数据 整型常量的表示 整型常量根据表示的范围可以有长整型和一般整型 还可以表示为十进制 八进制 十六进制 其中八进制 十六进制不能有符号 一般整型的表示进制表示举例范围字节数十进制2304 32768 327672八进制044000 01777772十六进制0 xaa000 x0000 0 xffff2 长整型的表示进制表示举例范围字节数十进制 21234l 231 231 14八进制04400l0 017777777774十六进制0 xaa00l0 x0000 0 xffffffff4 3 4整型数据 整型变量的分类 有符号整型变量说明 说明符所占字节数范围int2 32768 32767short int 2 32768 32767long int 4 2147483648 2147483647 无符号整型变量说明 说明符所占字节数范围unsigned20 65535unsignedshort20 65535unsignedlong40 4294967295 unsignedd e f 3 4整型数据 整型变量的定义 C规定在程序中所有用到的变量都必须在程序中指定其类型 即 定义 例如 inta b 指定变量a b为整型 unsignedshortc d 指定变量c d为无符号短整型 1onge f 指定变量e f为长整型 对变量的定义 一般是放在一个函数的开头部分 也可以放在程序中间 但作用域只限于某一分程序 这将在后面介绍 3 4整型数据 整型变量的定义 举例 test3 c main inta b c d 指定a b c d为整型变量 unsignedu 指定 为无符号整型变量 a 12 b 24 u 10 c a u d b u printf c dd d c d 不同种类的整型数据可以进行算术运算 1 浮点型常量的表示 只有十进制表示 浮点型常量有两种表示方式 小数表示方法 指数表示方法 不区分单 双精度 小数表示方式规则 一个小数点 符号和至少一位数字 2 01 0 11113 15 指数表示方式规则 规则 ne m表示n 10 m n小数部分 整型常量或小数形式表示的实型常量 指数部分 三位整数 n决定精度 一般精度为7位 m决定范围 范围10 38到10 38 当超过范围时称为 溢出 小于10 38称为下溢 当0处理 大于10 38 称为上溢 系统出错 123 456表示为0 123456E 3 10000000表示为 1e 70 0000123表示为0 123e 4 3 5实型数据 2 实型变量 C实型变量分为单精度 float型 和双精度 double型 两类 对每一个实型变量都应在使用前加以定义 如 floatx 一般 一个float型数据在内存中占4个字节 32位 doublez 一个double型数据占8个字节 单精度实数提供7位有效数字 双精度实数提供 16位有效数字 数值的范围随机器系统而异 单精度实数的数值范围约为10 38 1038 双精度实数范围约为10 308 10308 应当说明 实型常量不分float型和double型 一个实型常量可以赋给一个float型或double型变量 根据变量的类型截取实型常量中相应的有效位数字 3 5实型数据 说明符所占字节数范围精度float410 38 10 387位double810 306 10 30616位 2 实型变量 例 main test4 c floats s 111111 11 printf nfloat f s 3 5实型数据 main test5 c doubles s 111111 11 printf ndouble f s 3 实型数据的舍入问题 3 5实型数据 浮点型变量包含精度和范围两个概念 超过精度位数后的位数值不确定 floata a 1 1111111111 超过范围溢出 Overflow floata b c a 1 234e 20b 2 345e 21c a b 当运算结果大于10 38称为上溢 系统出错 当运算结果小于10 38称为下溢 当0处理 超出精度部分 不准确 超出1038 溢出 3 6字符型数据 1 字符常量的表示 表示ASCII字符集中的一个字符 字符有一个整型值 即该字符的ASCII码值 表示方法 a 撇号定界的一个字符 值为 97 2 字符串常量的表示 双引号 定界的字符序列 系统会在最后一个字符后加NULL ASCII码值为0 标志字符串的结束 如 HEFEI hello a 和 a 的区别 内部 a 97 a 97NULL 3 6字符型数据 3 转义字符 转义字符是C语言表示字符的特殊方法 用来表示ASCII字符集中的控制字符 以及系统占用字符如 表示方法 字符 八进制 十六进制整数 小于256 b表示回退一格字母 n表示换到下一行头 r表示回车到本行头 t表示TAB 占8列 表示 表示 符号 表示 表示 0表示NULL 八进制十六进制数 x41 101代表 A printf 007 响铃printf 语文 n数学 n 例 141 141abc t 统计该字符串的长度 4 转义字符举例 main test7 c printf abc tde rf tg n printf h ti b bjk 运行结果 f gdeh j k 3 6字符型数据 5 字符变量 一个字符占一个字节 字符型变量用来存放字符常量 注意只能放一个字符 不要以为在一个字符变量中可以放一个字符串 包括若干字符 字符变量的定义形式如下 charc1 c2 它表示c1和c2为字符型变量 各可以放一个字符 因此可以用下面语句对c1 c2赋值 c1 a c2 b 一般以一个字节来存放一个字符 或者说一个字符变量在内存中占一个字节 3 6字符型数据 说明符所占字节数范围char1 128 127unsignedchar10 255 6 字符数据在内存中的存储形式及其使用方法 将一个字符常量放到一个字符变量中 实际上并不是把该字符本身放到内存单元中去 而是将该字符的相应的ASCII代码放到存储单元中 例如字符 a 的ASCII代码为97 b 为98 实际上是以二进制形式存放的 3 6字符型数据 main charc1 c2 c1 97 c2 98 printf c c c1 c2 运行结果 ab 6 字符数据在内存中的存储形式及其使用方法 c1 c2被指定为字符变量 但在第3行中 将整数97和98分别赋给c1和c2 它的作用相当于以下两个赋值语句 c1 a c2 b 因为 a 和 b 的ASCII码为97和98 也可以理解为将97和98两个整数直接存放到cl和c2的内存单元中 字符数据以ASCII码存储 它的存储形式与整数的存储形式相类似 C语言使字符型数据和整型数据之间可以通用 一个字符数据既可以以字符形式输出 也可以以整数形式输出 以字符形式输出时 需要先将存储单元中的ASCII码转换成相应字符 然后输出 以整数形式输出时 直接将ASCII码作为整数输出 也可以对字符数据进行算术运算 此时相当于对它们的ASCII码进行算术运算 3 6字符型数据 6 字符数据在内存中的存储形式及其使用方法 字符数据与整型数据可以互相赋值 如 inti charc i a c 97 是合法的 如果将i的值输出得到97 输出c可得字符 a 字符数据可以以字符形式输出 也可以用整数形式输出 例如在上面语句之后执行语句 printf c d n c c printf c d n i i printf c d n i 32 i 32 3 6字符型数据 输出的结果是什么 7 字符串常量 字符常量是由一对单引号括起来的单个字符 C语言除了允许使用字符常量外 还允许使用字符串常量 字符串常量是一对双引号括起来的字符序列 如 Howdoyoudo CHINA 123 45 都是字符串常量 可以输出一个字符串 如printf Howdoyoudo charc c a right c a error c CHINA 也是错误的 不能把一个字符串赋给一个字符变量 3 6字符型数据 a 和 a 究竟有什么区别 7 字符串常量 C规定 在每一个字符串的结尾加一个 字符串结束标志 以便系统据此判断字符串是否结束 c规定以字符 0 作为字符串结束标志 0 是一个ASCII码为0的字符 从ASCII代码表中可以看到ASCII码为0的字符是 空操作字符 即它不引起任何控制动作 也不是一个可显示的字符 如果有一个字符串 CHINA 实际上在内存中是 3 6字符型数据 它的长度6个字符 最后一个字符为 0 但在输出时不输出 例如 printf Howdoyoudo 输出时一个一个字符输出 直到遇到最后的 0 字符 就知道字符串结束 停止输出 0 字符是系统自动加上的 3 7变量赋初值 程序中常需要对一些变量预先设置初值 C规定 可以在定义变量时同时使变量初始化 如 inta 3 指定a为整型变量 初值为3floatf 3 56 指定f为实型变量 初值为3 56charc a 指定c为字符变量 初值为 a 也可以使被定义的变量的一部分赋初值 如 inta b c 5表示a b c为整型变量 只有c初始化 值为5 如果对几个变量赋以同一个初值 不能写成 inta b c 3 ERROR 而应写成 inta 3 b 3 c 3 RIGHT 3 7变量赋初值 初始化不是在编译阶段完成的 只有在后面介绍的静态存储变量和外部变量的初始化是在编译阶段完成的 而是在程序运行时执行本函数时赋以初值的 相当于有一个赋值语句 例如inta 3 相当于 inta 指定a为整型变量a 3 赋值语句 将3赋予a 又如inta b c 5 相当于 inta b c 指定a b c为整型变量 c 5 将5赋给c 3 8各类数值型数据间的混合运算 整型 单精度型 双精度型数据可以混合运算 前已述及 字符型数据可以与整型通用 因此 整型 实型 包括单 双精度 字符型数据间可以混合运算 例如10 a 1 5 8765 1234 b 是合法的 在进行运算时 不同类型的数据要先转换成同一类型 然后进行运算 转换的规则按下图所示 double float long unsigned int char short 3 8各类数值型数据间的混合运算 图中横向向左的箭头表示必定的转换 如字符数据必定先转换为整数 short型转为int型 float型数据在运算时一律转换成双精度型 以提高运算精度 即使是两个float型数据在加化成double型 然后再相加 纵向的箭头表示当运算对象为不同类型时转换的方向 例如int型与doub1e型数据进行运算 先将int型的数据转换成图double型 然后在两个同类型 double型 数据进行运算 结果为double型 注意箭头方向只表示数据类型级别的高低 由低向高转换 不要理解为int型先转成unsigned型 再转成1ong型 再转成double型 如果一个Int型数据与一个double型数据运算 是直接将int型转成double型 同理 一个int型与一个Long型数据运算 先将int型转换成1ong型 3 8各类数值型数据间的混合运算 换言之 如果有一个数据是float型或double型 则另一数据要先转为double型 结果为double型 如果二个数据中最高级别为1ong型 则另一数据先转为1ong型 结果为1ong型 其它依此类推 举例说明 假设已指定i为整型变量 f为float变量 d为double型变量 e为1ong型 有下面式子 10十 a i f d e运算次序为 进行10 a 的运算 先将 a 转换成整数97 运算结果为107 进行i f的运算 先将i与f都转成double型 运算结果为dOuble型 整数107与i f的积相加 先将整数107转换成双精度数 小数点后加若干个0 即107 000 00 结果为double型 将变量e化成double型 d e结果为double型 将10十 a i f的结果与 d e结果为double型 上述的类型转换是由系统自动进行的 3 9算术运算符和算术表达式 3 9 1C运算符简介C的运算符有以下几类 1 算术运算符 2 关系运算符 5 赋值运算符 及其扩展赋值运算符 6 条件运算符 7 逗号运算符 8 指针运算符 和 3 9算术运算符和算术表达式 3 9 1C运算符简介C的运算符有以下几类 9 求字节数运算符 sizeof 10 强制类型转换运算符 类型 11 分量运算符 12 下标运算符 13 其它 如函数调用运算符 3 9算术运算符和算术表达式 程序重要的一点是对数据按照算法进行处理 运算 C语言的运算功能强大 数据通过运算符连接的式子称为表达式 表达式根据运算对象及运算关系得到一个值 分类介绍如下 变量赋值运算 格式 V expression 将expression的值赋给变量V inta 2 说明赋值 编译时赋值 intb b 3 2 说明后赋值 执行时赋值 说明 是赋值号 动词 赋值运算的左值只能是变量 a a 2 iCount iCount 10 a 2 12 Error 赋值号两边类型应该一致 如不一致 以变量类型转换 inta 2 5 2 a 这里a的值等于2 3 9算术运算符和算术表达式 1 基本的算术运算 功能 完成各种类型数据的加 减 乘 除及求余数运算 双目算术运算 两个运算对象参加的运算 只能对整型或字符型数据运算 余数符号与被除数相同 12 5 2 12 5 向零取整 5 3 1 3 9算术运算符和算术表达式 2 算术表达式和运算符的优先级与结合级 附录III 表达式 数据通过运算符连接的式子 C算术表达式 用算术运算符和括号将运算对象 也称操作数 连接起来的 符合C语言语法规则的式子 如 a b c 1 5 a 求表达式的值时 先按运算符的优先级别高到低的次序执行 a b c x y c算术运算符的结合方向为 自左至右 a b c 如果参加运算的两个数中有一个数为实数 则结果是double型 因为所有实数都按double型进行运算 如果一个运算符的两侧的数据类型不同 则会按右边所述 先自动进行类型转换 使二者具有同一种类型 然后进行运算 double float long unsigned int char short 3 9算术运算符和算术表达式 3 强制类型转换运算符将一个表达式转换成所需类型 double a 将a转换成double类型 int x y 将调x y的值转换成整型 float 5 3 将5 3的值转换成float型 其一般形式为 类型名 表达式 注意 表达式应该用括号括起来 如果写成 int x y 只将x转换成整型 然后与y相加 需要说明的是在强制类型转换时 得到一个所需类型的中间变量 原来变量的类型未发生变化 例如 int x 不要写成int x 如果x原指定为float型 进行强制类型运算后得到一个int型的中间变量 它的值等于x的整数部分 而x的类型不变 仍为float型 3 9算术运算符和算术表达式 3 强制类型转换运算符将一个表达式转换成所需类型 main test8 c floatx x 3 6 i int x printf x f i d x i 结论 两种类型转换 一种是系统自动进行类型转换一种是强制类型转换当自动类型转换不能实现目的时 可以用强制类型转换 如 运算符要求其两侧均为整型量 若x为float型 则 x 3 不合法 必须用 int x 3 强制类型转换运算优先于 运算 因此先进行 int x的运算 得到一个整型的中间变量 然后再对3求模 此外 在函数调用时 有时为了使实参与形参类型一致 可以用强制类型转换运算符得到一个所需类型的参数 3 9算术运算符和算术表达式 4 类型转换小结 运算对象的类型相同 运算结果取运算对象相同的类型 inta floatb b 2 3 0 b0 0 a 5 0 2 0 2 5 a0 运算对象的类型不同 先将低等类型转换为高等类型后再进行运算 运算结果取高等类型 等级原则如下 char int long double float 2 16 0 15 0 double float double 运算时可以实行类型的强制转换 格式如下 type expression只对当前表达式起作用 float a int c float a 10 3 9算术运算符和算术表达式 4 自加 自减运算 单目运算 本章重点 难点 说明 运算对象只能是一个变量 不能对常量和表达式 前置是先运算 后引用 而后置则是先引用 后运算 2 Error inti x i 5 x i x i i i 1 i 5 x i i i 1 x i 结合方向 自右至左 3 9算术运算符和算术表达式 4 自加 自减运算 单目运算 自增 自减运算符的用法与运算规则示例 main A1 c 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 3 9算术运算符和算术表达式 5 有关表达式使用中的问题说明 C运算符和表达式使用灵活a 3 j a a a printf a d j d a j 结果为 a 6j 9如何理解 test9 c i j为 i j还是i j 呢 C编译系统在处理时尽可能多地 自左向右 将若干个字符组成一个运算符 i j i ji 3 printf d d i i test10 c 在多数系统中对函数参数的求值顺序是自右而左 故上面的结果为 4 3 3 10赋值运算符和赋值表达式 1 赋值运算符赋值符号 就是赋值运算符 它的作用是将一个数据赋给一个变量 如 a 3 的作用是执行一次赋值操作 或称赋值运算 把常量3赋给变量a 也可以将一个表达式的值赋给一个变量 2 类型转换 重点 难点 如果赋值运算符两侧的类型不一致 但都是数值型或字符型时 在赋值时要进行类型转换 1 将实型数据 包括单 双精度 赋给整型变量时 舍弃实数的小数部分 如i为整型变量 执行 i 3 56 的结果是使i的值为3 2 将整型数据赋给单 双精度变量时 数值下变 但以浮点数形式存储到变量中 如将23赋给float变量f 即f 23 先将23转换成23 000000 再存储在f中 如将23赋给double型变量d 即d 23 则将23补足有效位数字为23 00000000000000 然后以双精度浮点数形式存储到d中 3 10赋值运算符和赋值表达式 3 将一个double型数据赋给float变量时 截取其前面7位有效数字 存放到float变量的存储单元中 4 字符型数据赋给整型变量时 由于字符只占一个字节 而整型变量为2个字节 因此将字符数据 8位 放到整型变量低8位中 有两种情况 如果所用系统将字符处理为无符号的量或对unsignedchar型变量赋值 则将字符的8位放到整型变量低 位 高8位补零 例如 将字符 376 八进制 赋给int型变量I 如果所用系统将字符处理为带符号的量 若字符最高位为0 则整型变量高8位补0 若字符最高位为1 则高8位全补1 这称为 符号扩展 这样做的目的是使数值保持不变 如变量c 字符 376 以整数形式输出为一2 i的值也是一2 3 10赋值运算符和赋值表达式 5 将一个int short long型数据赋给char变量时 只将其低8位原封不动地送到char型变量中 例 IntI 289 charc c I 6 将带符号的整型数据 int型 赋给1ong型变量时 要进行符号扩展 如果int型数据为正值 符号位为0 则1ong型变量的高16位补0 如int型变量为负值 符号位为1 则1ong型变量的高16位补1 将整型数 int型 的16位送到1ong型低16位中 以保持数值不改变 反之 若将一个1ong型数据赋给一个int型变量 只将1ong型数据中低16位原封不动送到整型变量 即截断 I 289 C 33 Longb x6823 inta a b 3 10赋值运算符和赋值表达式 7 将unsignedint型数据赋给longint 不存在扩展问题 只需将高位补 即可 将一个unsignedint型数据赋给一个占字节数相同的整型变量 例如unsignedint int unsignedlong long unsignedshort short 将unsigned型变量的内容原样送到非unsigned型变量中 但如果数据范围超过相应整型的范围 则会出现数据错误 如 unsignedinta 65535 216 1 intb b a printf d b 将a整个送到b中 由于b是int型 第1位是符号位 成了负数 1的补码 运行结果为 1 3 10赋值运算符和赋值表达式 3 复合的赋值运算符 重点 难点 说明 运算对象的左值只能是一个变量 a 2 5 Error 运算的对象 必须是整性 思考 a 12 a a a a 3 10赋值运算符和赋值表达式 4 赋值表达式 赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子 结尾无分号 它的一般形式为 变量 赋值运算符 表达式 例如 a 5 这个赋值表达式的值为5 变量a的值也是5 赋值表达式中的 表达式 又可以是一个赋值表达式 如 a b 5 括弧内的 b 5 是一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行政效能评估指标构建试题及答案
- 2025年货物购销合同范本
- 行政管理服务优化途径与实践试题及答案
- 老年义诊政策解读
- 2025停车场租赁合同范本
- 行政管理视角下的试题及答案总结
- 2025建筑工程混凝土采购合同
- 行政管理实务中的法律意识试题及答案
- 2025年梅阁村莲花山地块及地上相关资产租赁合同
- 2025企业单位员工劳动合同模板「版」
- 2025年全国保密教育线上培训考试试题库及参考答案(完整版)及答案详解1套
- 西师大版小学五年级数学(下)期末测试题(带答案)
- 2025投资咨询合同范本
- Unit8SectionA1a2d课件人教版八年级英语下册
- 2025年北京市海淀区高三语文二模议论文《从知到智》范文
- 饭店员工劳务合同9篇
- 压敏电阻材料在织物上的印刷技术应用
- 2025民宿租赁合同标准范本
- 交通数据分析与决策支持试题及答案
- 《社区多元主体协同治理研究的国内外文献综述》6700字
- 2025年大学生人文知识竞赛题库及答案(完整版)
评论
0/150
提交评论