数据类型运算符表达式1.ppt_第1页
数据类型运算符表达式1.ppt_第2页
数据类型运算符表达式1.ppt_第3页
数据类型运算符表达式1.ppt_第4页
数据类型运算符表达式1.ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

第二章基本数据类型 运算符与表达式 主要内容 2 1C语言的数据类型2 2变量赋初值2 3各类数值型数据之间的混合运算2 4C语言的运算符与表达式2 5运算符的优先级和结合性 2 1C语言数据类型 2 1 1C语言的数据类型简介著名计算机科学家沃思提出 程序 数据结构 算法 所以 存放数据的方式直接反映了一种语言的数据表达能力 数据的存储方式又称之为 数据类型 举一个例子 以考生各科成绩及总分排队问题为列 成绩的存放 以数组形式 排队方法 算法 2 1 1C语言的数据类型简介 数据有常量 变量之分 均为其中一种类型 本章先学习基本类型 C数据类型丰富 分为 2 1 1C语言的数据类型简介 2 1 2常量与变量 1标识符 可用来命名变量 及作为常量名 函数名 数组名 类型名 文件名等的有效字符序列 命名规则 1 由字母 数字 下划线组成且由字母或下划线开头 且一个程序内不得有重复名 如 sum sum student name price等 2 区分大小写 习惯上 变量名 函数名等用小写字母表示 常量名用大写字母表示 以增加可读性 3 标识符不能是关键字 另 需注意标识符长度 视不同系统而定 设允许8个字符 则 student name student number为同一名字 2常量和符号常量 常量 程序运行过程中不能被改变的量 一般的数据显式写法均表示常量 如程序中 20 整型常量15 8 实型常量 a 字符常量 2常量 一般用大写字母是宏定义预处理命令 不是C语句直接常量 整型常量 用数字表示 不带小数点实型常量 用小数点的数表示字符常量字符串常量 如 definePRICE30 定义 程序运行时其值不能改变的量 即常数 分类 符号常量 用标识符代表常量定义格式 define符号常量常量 例符号常量举例 ch2 1 c definePRICE30main intnum total num 10 total num PRICE printf total d total 运行结果 total 300 整型常量 整常数 三种形式 十进制整数 由数字0 9和正负号表示 如123 456 0八进制整数 由数字0开头 后跟数字0 7表示 如0123 011十六进制整数 由0 x开头 后跟0 9 a f A F表示 如0 x123 0Xff 例12与12L 例30000为int型65536为longint型 整型常量的类型根据其值所在范围确定其数据类型在整常量后加字母l或L 认为它是longint型常量在C程序中 只有十进制数可以是负数 而八进制和十六进制数只能是正数 问题 0123 100 x123 100Xff 10 实型常量 实数或浮点数 表示形式 十进制数形式 必须有小数点 如0 123 123 123 0 0 0 123 指数形式 e或E之前必须有数字 指数必须为整数 如12 3e3 123E2 1 23e4 e 5 1 2E 3 5 实型常量的类型默认double型在实型常量后加字母f或F 认为它是float型在实型常量后加字母l或L 认为它是longdouble型 例 definePRICE30main intnum total num 10 total num PRICE printf total d total 还可用一个符号表示一个常量 符号常量 符号常量 一般用大写 以区分变量 再如 3 1415629 definePAI3 1415629 definePRICE30 符号常量必须在使用前定义 采用预处理命令define 注意 用预处理命令定义符号常量不是语句 最后不写分号 为什么使用符号常量 提高程序可读性2 提高程序可维护性 3变量 程序执行中可以改变的量称为变量 变量包括变量名和变量值 变量名 用标识符命名 对应一定数量的内存存贮单元 其单元数视变量类型而定 C语言中 变量须先定义 后使用如 intstudent student 30 则若写成student 30 则未定义 编译时出错 一旦变量被定义 即可在编译时为其分配相应数量的单元 其类型便确定 则可检查其运算的合法性 如 a b表示a整除以b的余 则a b必须为整型量 变量中存放的只能是数据 且只能是一个数据 操作 赋值 可以对同一个变量多次赋值 但变量的值是最后一次存放的数据 2 1 3整型数据 1整型常量 整型常量 整型常数 C语言提供了三种形式 十进制如 256 308 120等 八进制以数字0开头表示的整数 无符号 例 0235 0146等 0235 2 82 3 8 5 157100146 1 82 4 8 6 10210 十六进制以 0 x 开头的整型数如 0 x16 0 x28 分类 分为四种 基本型 短整型 长整型 无符号型 2 短整型 类型说明符为 shortint或short 3 长整型 类型说明符为 long或longint 1 基本型 类型说明符为 int 2整型变量 4 无符号型 不存放符号 为不带符号数 又分为 上述各种类型所占内存单元数及取值范围视不同机器而不同 详见教材 1 无符号基本型 类型说明符为unsignedint或unsigned 2 无符号短整型 类型说明符为unsignedshort 3 无符号长整型 类型说明符为unsignedlong 定义方法整型变量分别以下列方式定义 2 短整型shortint或shorta b c 3 长整型longint或longa b c 1 基本整型 inta b c 4 无符号型unsigneda b c unsignedshorta b c unsignedlonga b c 例 main inta b c d 指定a b c d为整型变量 unsigndu 指定u为无符号整型变量 a 12 b 24 u 10 c a u d b u printf a u d b u d n c d 由此看到 不同类型的整型数据可进行算术运算 但有一定规则 详见 2 3 运行结果为a u 22 b u 14 关于整型常量程序中出现的整型常数 系统按以下规则分配变量 内存单元 或赋值给相应变量 2 若超越 而在 2147483648 2147483647之间 则可赋给longint变量 1 当常数 量 在 32768 32767之间 则可赋给int longint变量 4 一个非负整数 32768则可赋给unsignedint 5 一个常数后加 l 或 L 表示长整数 如123l 主要用于函数调用时形 实参数传递 3 若int shortint长度相同 则二者皆可赋值 2 1 4实型数据 1实型常量 有两种表示形式 1 十进制形式如 0 126 523 64等 2 指数形式对于较大或较小的数 可用指数形式0 00001261 26E 512600001 26E 6或1 26E6 E e 均可 分为单精度型与双精度型 分别为floatx y z 单精度 doublea b c 双精度 一般地 单精度占4字节内存单元 双精度占8字节内存单元 2实型变量 注意 不同机器对实型变量的有效数字长度的限制如 pc机 单精度一般为7位 双精度15位 单精度数值 10 38 1038双精度数值 10 308 10308 于是 floata a 123456 789则实际赋值a 123456 7 2 1 5字符型数据和字符串常量 用一对单引号括起来的单个字符 如 a A 二者不一样 此外 以 开头后接一个字符或n个字符代表了一种特殊字符常量 转义字符 如 n 换行 r 回车 1字符型常量 其它如下表 字符形式 n t b r f ddd xhh 功能 换行 横向跳格 即跳到下一个输出区 退格 回车 走纸换页 反斜杠字符 单引号 撇号 字符 1到3位8进制数所代表的字符 1到2位16进制数所代表的字符 双引号 撇号 字符 注意 表示ASCII码字符 三位八进制 如 101 表示字母A 又 x 十六进制ASCII字符 x41 表示字母A 其定义方式为 charc1 c2 c1 A c2 B 字符变量只占一个字节单元 2字符变量 用来存放一个字符的变量 一个字符存入一个字符变量 其对应单元存放的是其ASCII码 即ASCII码的二进制形式 由此 字符变量中的数据是一整型数据 输出时既可输出字符 亦可输出整数 且字符变量可作整数运算 3字符数据在内存中的存储方式和使用方法 例1 main charc1 c2 c1 97 c2 98 printf c c c1 c2 运行结果ab 看如下几个例子 例2 main charc1 c2 c1 a c2 b c1 c1 32 c2 c2 32 printf c c c1 c2 运行结果AB 例3 main inti charc i a c 97 printf c d n c c printf c d n i i 运行结果 a 97a 97 用双引号括起来的字符串 例 GoodMorning 注意 A 与 A 是不等同的 字符串存放时 在最后加上结束标志 0 空字符 于是 GoodMorning 在 4字符串常量 GoodMorning 0 A A 0 但 A A 注意 1 字符串长度 实际字符个数 1 但最后 0不输出 printf GoodMorning 此处不写 0 自动加上 2 单个字符的字符串不能赋给字符变量 例 charc c a 是错误的 2 2变量赋初值 C语言允许定义变量时赋予初值 定义变量时赋初值实际上是在运行时执行一个赋初值语句 inta 6 相当于 inta a 6 不能将同初值的变量赋初值时写成 inta b c 6 只能写成 inta 6 b 6 c 6 也可对某个变量赋初值 inta b c 6 变量赋初值的一般形式为 类型说明符变量1 值1 变量2 值2 如 inti 6 floatx 8 35 charc 6 2 4算术运算符与算术表达式 运算符 运算的符号表示 C语言有丰富的运算功能 先简述之 2 4 1C语言的运算符简介 1 算术运算符 等 3 逻辑运算符 2 关系运算符 4 强制类型转换运算符 类型 9 位运算符 5 赋值运算符 7 条件运算符 8 逗号运算符 6 自增自减运算符 12 分量运算符 13 下标运算符 14 其它运算符如函数的调用 10 求字节数运算符sizeof 11 指针运算符 2 4 2算术运算符和算术表达式 1基本算术运算符 加法正值3 6 3 减法负值6 4 5 乘法3 8 除法8 5 取模 求余 7 4的值为3 注 两个整型数据相除 结果为整数 商向下取整 5 3 1 若除数和被除数中有一个float型 则结果为double型 取模运算实际上是求余运算 其两个操作数必须是整数 结果与 符号左边的操作数相同 2算术表达式及算术运算符的优先级与结合性 运算对象 常量 变量 函数等 优先级 结合性 同一优先级 自左向右 为左结合性 反之为右结合性 例 a b c 1 5 a d e 当类型不同的数据进行运算时 按 2 3介绍的方法进行类型转换 算术表达式 用算术运算符和括号将运算对象连接起来 且符合C语法规则的式子 3 各类数值型数据之间的混合运算 C语言允许双精度 单精度 整型及字符数据之间混合运算10 a 1 5 8765 1234 b 是允许的 但有一个规则 先转换成同一类型 再计算 2 4 3强制类型转换符 利用强制类型转换运算符将一个算术表达式转换为所需类型 一般形式 类型名 表达式 例如 double a将a转换为double int x y 将x y转换为int float 5 3 将5 3转换为float 注 1 括号不能省略 如 intx会理解为变量intx 2 转换后的类型数据由系统分配一个中间变量存放 而原变量类型不变 floatx 又如 int x y 若省略 int x y会变成将x转成整型 int x 则x本身仍为实型 而 int x由一个中间变量存放x的整数部分 例 main floatx inti x 3 6 i int x printf x f i d x i 则 x 3 600000 i 3 总结以上类型转换 有二种 1 强制 另 强制类型转换运算优先于算术运算符 2 系统自动 如 若x为float 则x 3不合法 但可用 int x 3来解决 附录III介绍了优先级 2 4 4赋值运算符 赋值表达式 2 整型数据赋给实型变量 数值不变 但按实数形式存放 1 将实型数据 无论单 双精度 赋给整型变量时 舍弃小数 赋值时 两边类型若不一致 则按以下规则转换 符号 为赋值运算符 1 赋值运算符 4 将int longint 进行符号扩展 即 符号扩展 低16位 long的低16位 5 longint int则高16位截断 3 字符型数据赋给整型变量时 2 字符 带符号整型变量 则字符高位扩展 1 字符 无符号整型变量 则存入低8位 高8位补零 6 将unsignedint型 longint高位补0 原值传送 但数据大小不能超出取值范围 如 unsignedinta 65535 intb b a 则越界 而位数相同部分赋值unsignedint intunsignedlong longunsignedshort short 7 非unsigned型 长度相同的unsigned型数据 原样传送 包括符号位 一般形式 2 赋值表达式 例 x 10为一赋值表达式其中又可以是一个赋值表达式 例 x y 10 相当于y 10 x y由于赋值号为右结合性 于是 可省略 即为 x y 10 由赋值运算符 将一个变量和一个表达式连接起来的式子称为赋值表达式 2 4 4自增自减运算符 负号运算符 设有inti 3 自增1 自减1 则 i i 都会使i变为4 但有区别 i 先使i值加1 再使用i值 i 先使用i值 再使i值加1 j i j 4 i 4 i i 1 j i j i j 3 i 4 j i i i 1 1 自增自减运算符 同理 i i 均使i值 1 但 又如 printf i d n i 结果 i 3 若 printf i d n i 结果 i 4 i 先使i值减1 再使用i值 i 先使用i值 再使i值减1 i 3 几点注意 和 运算法只能用于变量 不得用于常量和表达式 的结合性为从右至左 而一般算术运算符为从左至右 如 如5 a b 均为不合法 i 和 为同一优先级 i 相当于 i 若i 3 则结果为 3 i为4 主要用于循环变量自增或自减 要慎用 运算符 有关表达式使用中的问题说明 则 先对i进行3次自加 为6 然后三个i相加为18 而i为6 如 表达式 i i i i 3 一般认为 从左至右 3 4 5 12 i 6 但TurboC MSC都是先取三个原值相加 i i i 9i 6 如果表达式数为 k i i i 在表达式中 有的运算符为一个字符 有的为两个字符 在函数调用时 如 一般地 自左至右尽可能多地将若干字符组成一个运算符 例 i j 究竟理解为 i j还是i j printf d d i i 若i 3 若参数计算从左至右 则输出3 3 若从右至左 则输出4 3 上述问题看似复杂 最好上机实践 2 负号运算符 负号运算符 是单目运算符 任何操作数前放置负号运算符相当于 1乘以该操作数 2 4 6逗号运算符和逗号表达式 逗号运算符一般形式 表达式1 表达式2 其计算规则 先计算表达式1 再计算表达式2 最后值为表达式2的值 例 a 3 5 a 4则 先计算3 5 a 15 a 4 60 结果为60 又如 a 3 5 a 4 a 5 扩展形式 表达式1 表达2 表达式n 结果为20 作为逗号表达式的值 a 5 a即20 a 3 5 15 a a 4 60 此时a值仍未变 结果为表达式n的值 注意 x a 3 6 3 赋值表达式 x 18 x a 3 6 a逗号表达式 x 3 逗号表达式主要用于某些语句中需一次计算多个表达式值的情况 如在循环语句中 函数调用中的实参之间虽然用的是逗号间隔 但不是逗号表达式 如 printf d d d a b c 1 位运算符C语言中共有六种位运算符 按位与 按位或 按位异或 按位求反 按位右移 其中 求反 是单目运算符 且为右结合性 其他都是双目运算符 且为左结合性 位运算对象只能是整型 int 或者字符型 char 数据 2 4 7位运算符 位运算表达式 按位逻辑运算符运算符 按位与 按位或 按位异或 按位求反 运算规则 0 0 00 1 01 0 0

温馨提示

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

评论

0/150

提交评论