程序设计基础 ——C语言第2章 数制和基本数据类型_第1页
程序设计基础 ——C语言第2章 数制和基本数据类型_第2页
程序设计基础 ——C语言第2章 数制和基本数据类型_第3页
程序设计基础 ——C语言第2章 数制和基本数据类型_第4页
程序设计基础 ——C语言第2章 数制和基本数据类型_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

程序设计基础 1 第 2章 数制和基本数据类型 2 计算机按 指令 工作, 指令 一般表现为 程序 。 程序 是为执行某项任务而编写的有序指令序列 。 程序 =数据 +算法 据 类型。 算法 是解决问题的具体方法和步骤。 主要内容 3 整数数制 数据类型 常量 变量 整数数制 八进制数 整数数制 十六进制数 二进制数 十进制数 4 十进制数 5 以 十进制 或 基数为 10的方式表示。 十进制数由 0到 9这 10个数字来构造。 例如,数 4261,可以看作是: (4 1000)+(2 100)+(6 10)+(1 1)=4261 也等同于: (4 103)+ (2 102)+(6 101)+(1 100)=4261 二进制数 6 计算机内部采用 二进制 的方式来表示数。 二进制数 仅由 0和 1两个数字组成,这种表示形式也称作为 基数为 2的表示方式。 例如, 左侧 的 二进制数 等价于 右侧 的 十进制数 。 102=210 1002=410 10000101001012=426110 二进制数 7 ( 1)二进制数向十进制数的转换 二进制数 1000010100101的位置编号标记如下: 1 0 0 0 0 1 0 1 0 0 1 0 1 (二进制数) 12 11 10 9 8 7 6 5 4 3 2 1 0 (位置编号) 上面的二进制数,转换表达式是: 1000101001012= (1212)+ (0211) + (0210)+ (029)+ (028)+ (127) + (026) + (125) + (024) + (023) + (122)+ (021)+ (120) =426110 二进制数 8 ( 2)二进制 补码表示 正 整数 和 负整数 在计算机中 均以 二进制补码 的形式存储。 任意给定一个十进制数 x,它的 二进制补码 表示按如下方法获得: 如果 数 ,仅仅将 进制数 。 如果 数 ,按如下步骤进行: :写出 对值 的二进制数。 :对这个二进制数的每位 取反 。 :对取反后的数 加 1。 二进制数 9 ( 2)二进制 补码表示 例如, 2位 二进制补码 表示可以按照下面的步骤得到: 00000000000000000000000000000010 ( 11111111111111111111111111111101 (二进制取反) +1 (加 1) 11111111111111111111111111111110 ( 二进制数 10 ( 2)二进制 补码表示 如果已知 一个负数的二进制补码 表示,那么可以得到其等价的 十进制数 ,步骤如下: : 列出 该 负数的 二进制补码 。 :对这个二进制 补码按 位 取反 。 :对取反后的数 加 1。 结果 : 此 负数 的 绝对值 。 二进制数 11 ( 2)二进制 补码表示 例如,下面通过 进制补码 获得 对值 : 11111111111111111111111111111110 ( 00000000000000000000000000000001 (二进制取反) +1 (加 1) 00000000000000000000000000000010 ( 【 提问 】 8位的二进制补码 1111 1111,其等价的十进制数是? 【 答案 】 二进制数 12 ( 2)二进制 补码表示 利用二进制补码表示, 减法运算 可以转换为 加法运算 。 例如,减法表达式 2加法来完成: 00000000000000000000000000000010 ( 2的二进制表示) 11111111111111111111111111111110 ( 00000000000000000000000000000000 ( 2+( 在加法过程中,当 最高有效位 相加时,若产生进位则 丢弃 该进位,最高为结果为 0。 二进制数 13 ( 2)二进制 补码表示 8位 的 二进制数 能表示的 最大正值 和 最小负值 是多少? 进制数, 最大正值 :符号位为 0,其余位均为 1,即 2 最小负值 :符号位为 1,其余位均为 0,即 例如,若 , 求 最大 正值 和 最小负值 ? 最大正值 : 0 111 1111 28 127) 最小 负值 : 1 000 0000 八进制数 14 八进制表示的 基数是 8。 八 进制使用 0到 7这 8个数字来表示数。 例如 : (4261)10 (10245)8 在 0开头 的数表示是 八进制 形式的数。 例如 : 010245:即 八进制数 10245。 等价于 八进制数 15 ( 1)八进制数向十进制数的转换 例如, 八进制数 102458可以按如下方式转化为等价的十进制数: 102458=(184)+ (083)+ (282)+ (481)+ (580) =426110 八进制数 16 ( 2)二进制数向八进制数的转换 二进制数向八进制数的转换需要对二进制数进行划分,既 从右至左 , 每三位一组 。 然后 每组 转换成对应的 十进制值 ,这个值正是等价的八进制数的一位数字。将这些转换的值按组顺序组合就得到其对应的八进制表示。 例如,由 00010000101001012转换为 102458的过程: 001 000 010 100 101 (二进制表示) 1 0 2 4 5 (八进制表示) 八进制数 17 ( 3)八进制数向二进制数的转换 将每个八进制数字作为十进制数,然后分别表示成对应的 3位二进制数 。 例如, 102458转换成它的二进制形式的过程: 1 0 2 4 5 (八进制表示) 001 000 010 100 101 (二进制表示) 十六进制数 18 十六进制 是基数为 16的数制系统。 这个系统有 16个 数字,范围从 0到 15,用来表示数。因为没有单个数字可以表示值 10到 15,所以在十六进制中采用字母 表示这部分值。 例如: (4261)10 (106 在 前缀“ 0x”或者“ 0X”来说明其后的数是 十六进制数 形式。 例如 : 0 十六进制数 10 等价于 十六进制数 19 ( 1)十六进制数向十进制数的转换 十六进制数 10 101163)+ (0162)+ (10161)+ (5160) =426110 请注意,在上式中用数值 10替换了 字母 A。 十六进制数 20 ( 2)二进制数向十六进制数的转换 对二进制数 从右至左 进行 每四位一组 的划分。 然后,每个这样的四位组分别转换成等价的 十六进制 表示。将这些转化的值按组顺序组合就得到了其对应的十六进制表示。转换过程: 0001 0000 1010 0101 (二进制表示) 1 0 A 5 (十六进制表示) 十六进制数 21 ( 3)十六进制数向二进制数的转换 将十六进制数的每个数字看做是一个十进制数,然后将它们分别转换成对应的 4位 二进制表示。转换过程如下: 1 0 A 5 (十六进制表示) 0001 0000 1010 0101 1000010100101 (二进制表示) 十六进制数 22 ( 4)十六进制数向八进制数的转换 将一个 十六进制 的数转换成 八进制数 的最好办法是: : 十六进制 数向 二进制数 的转换 。 : 二进制数 向 八进制数 的转换。 例如, 0换过程如下: 1 0 A 5 (十六进制表示) 0001 0000 1010 0101 1000010100101 (二进制表示) 001 000 010 100 101 (二进制表示) 1 0 2 4 5 (八进制表示) ( 5)八进制数向十六进制数的转换 : 八进制数 转换成 二进制 数 。 : 二进制数 再 转换成 十六进制数 。 例如: 1 0 2 4 5 (八进制表示) 001 000 010 100 101 1000010100101 (二进制表示) 0001 0000 1010 0101 (二进制表示) 1 0 A 5 (十六进制表示) 十六进制数 23 24 25 关键 字 : 又称 保留字 ,是 定含义 的一些单词 。 用户只能按预先 规定的含义 来使用它们, 不能 擅自改变其含义。 录 A。 26 if do 附录 A 粗体显示 : 由 90标准 新增的 。 斜体显示 : 由 增的。 27 标识符 (1)系统预定义标识符 (2)用户自定义标识符 28 标识符 (1)系统预定义标识符 由 系统预先定义好 的 符号 ,如 与 关键字不同 的是:系统预定义标识符允许用户赋予新的含义 ,但 不提倡的。 29 (2)用户自定义标识符 命名规则如下: 由 英文字母 、 数字 和 下划线 组成,且必须以 英文字母 或 下划线 开头 。 例如: _ 不允许 使用 关键字 作为标识符的名字,同时标识符名也不应该与库函数名重名。 例如: 在 识符可以是任意长度的,然而,并非所有的字符都是有意义的。 标识符命名应以直观且易于拼读为宜,即做到“ 见名知意 ”,最好使用英文单词及其组合,这样便于记忆和阅读。 例如: 30 (2)用户自定义标识符 命名规则如下: 命名规则应尽量与所采用的 操作系统 或 开发工具 的风格保持一致 。 标识符通常采用“ 大小写 ”混排方式,如 : 标识符通常采用“ 小写加下划线 ”的方式,如 : 不要 将两类风格 混 在一起使用。 标识符区分大小写。 例如 : 不同的标识符。 【 提问 】 请指出下列标识符错误的原因? 88998 31 有 34种(详见 附录 B)。 (1)算术运算符 : + - * / % (2)关系运算符 : = = = (5)增 1和减 1运算符 : + 6)条件运算符 : ?: (7)强制类型转换运算符 : (类型名 ) (8)指针和地址运算符 : * & (9)计算字节数运算符 : 10)下标运算符 : (11)结构体成员运算符 : - (12)位运算符 : | & (13)逗号运算符 : , 32 分隔符 空格 回车 /换行 逗号 例如, 逗号 起分隔作用。 a,b,c; % d%d%dn”, a,b,c); 33 “ ”和“ ” 标识 函数体 或者一个 语句块 。 “ /*”和“ */” 程序 注释 所需的定界符。 34 数据 变量 常量 例如 : 字符串常量 : “ 整型常量 : 0 常量 与 变量 的区别: 常量 的值保持 不变 变量 的值可以 改变 35 数据类型 类型修饰符 为什么引入数据类型 36 为什么引入数据类型 人要区分男女, 数据 要区分 类型 。 个 数据 都属于一个确定的、具体的 数据类型 。 不同 类型的 数据 : 取值范围 不同 占用 内存 的空间大小 不同 参与的 运算种类 不同 37 数 据 类 型基 本 类 型构 造 类 型指 针 类 型空 类 型 ( v o i d )整 型实 型 ( 浮 点 型 )字 符 型 ( c h a r )枚 举 类 型 ( e n u m )数 组 类 型结 构 体 类 型 ( s t r u c t )共 用 体 类 型 ( u n i o n )单 精 度 实 型 ( f l o a t )双 精 度 实 型 ( d o u b l e )基 本 整 型 ( i n t )长 整 型 ( l o n g )短 整 型 ( s h o r t )无 符 号 整 型 ( u n s i g n e d )据类型 分类 38 类型修饰符 除 基本类型 之前都可以加各种 修饰符 。 基本类型 前加类型 修饰符 的目的: 对类型进行声明更加准确 。 修饰基本类型的修饰符有如下 4种 : ( 1) 有符号 ”,可以修饰 认的 例如: 2) 无符号 ”,可以修饰 例如: , 3) 长型 ”,可以修饰 例如: 4) 短型 ”,可以修饰 例如: 9 类型修饰符 当 类型修饰符 被单独使用(即将其修饰的基本类型省略)时,则系统 默认 其为 等效于 效于 等效于 等效于 0 无符号数 : 最高位为 数据位 。 有符号数 : 最高位为 符号位 。 符号位为 0,该数为 正 。 符号位为 1,该数为 负 。 例如,假设 2个字节,即 16个二进制位, 则32767在内存中的存储形式为: 如果该数被声明 将其 最高位 置为 1后,该数变成了 65535。 【 思考 】 如果该数被声明为 即 16位均为 1, 则 该数被解释为 什么? 有符号 和 无符号 整数的区别 1 1 1 11 11 11 11 11 10 1最 高 位41 0 0 0 10 00 00 00 00 01 0符 号 位 - 1 的 原 码1 1 1 01 11 11 11 11 11 1符 号 位 - 1 的 反 码1 1 1 11 11 11 11 11 11 1符 号 位 - 1 的 反 码 加 1 后 的 结 果1 1 1 11 11 11 11 11 11 1符 号 位 - 1 的 补 码【 思考 】 如果该数被声明为 即 16位均为 1, 则 该数被解释为 什么? 有符号 和 无符号 整数的区别 42 假设 2个字节 有符号 整数,最高位为 符号位 , 最小值 ( 1000 0000 0000 0000) 2,即 最大值 ( 0111 1111 1111 1111) 2,即 32767( 215 无符号 整数,最高位为 数据位 , 最小值 ( 0000 0000 0000 0000) 2,即 0 最大值 ( 1111 1111 1111 1111) 2,即 65535( 216 有符号 和 无符号 整数的区别 43 【 思考 】 为什么 +0和 假设 2个字节 +0 原码 0000 0000 0000 0000 补码 0000 0000 0000 0000 原码 1000 0000 0000 0000 反码 1111 1111 1111 1111 补码 0000 0000 0000 0000(其中舍掉了最高位的进位) +0和 有符号 和 无符号 正数的区别 44 常量 常量 是一种在程序中保持固定 类型 和固定 值 的数据。 45 整型常量 的 三种表示形式 : 十进制 八进制 十六进制 十进制 举例 45, 0, +887 八进制 举例 044, 086 十六进制 举例 0 0 合法 非法 合法 非法 合法 非法 整型常量 的表示形式 46 长整型常量 由常量值后跟 L或 1024L 无符号整型常量 由常量值后跟 U或 458u 458U 无符号长整型常量 由常量值后跟 48 非法(原因: 小于 0) 整型常量 的类型确定 47 实型 常量 的两 种表示形式 : 十进制小数形式 指数形式 十进制小数 形式 由 数字 和 小数点 组成 必须有小数点 整数部分为 0时可以省略 例如: 120. 实型常量 的表示形式 等价于: 价于: 8 指数 形式 绝对值很大或很小的数 可 写成指数形式,更显得直观、方便 。 0 0 以字母 来代表以 10为底的指数。 的左边是 数值 部分,可以表示成 整数 或者 小数 形式,不能省略 。 的右边是 指数 部分,必须是 整数 形式。 60, 型常量 的表示形式 合法 非法 49 实型常量 的类型包括: 双精度实型 单精度实型 长双精度实型 所有的 实型常量 均视为 常量值后跟 来表示 常量值后跟 L或 实型常量 的类型确定 50 字符常量 : 用一对 单引号 括起来的一个字符 。 例如: x , 3 , ? 字符常量中的单引号仅起定界作用,并不表示字符本身。 在 个字符占一个字节 , 字符是按其对应的存储的。 每个字符都有一个等价的 整型值 与其相对应。详细对应关系见 附录 C。 共定义了 128个字符,可分为 : ( 1) 控制字符 : 31、 127共计 33个字符。 ( 2) 可显示字符 : 2126共计 95个字符。 常量 51 【注意】 ( 1)注意 字符数字 ( 0 9)和 数字 ( 0 9)的含义和在计算机中的存储方式是截然不同的。 ( 2) 字符常量 可以像整数一样在程序中参与相关的运算。例如: a 8 常量 执行结果 : 975 执行结果 : 568 【 提问 1】 大写字母 Aa 【 提问 2】 数字字符 09对应的 52 【 提问 】 回车符,换行符如何用字符常量表示? 常量 转义字符 。 转义字符 表示 制字符 和特定功能 的字符。 转义字符 是以 反斜杠 开头的字符序列,使用时同样要括在一对 单引号 内。 回车符 r 换行符 n 常用的转义字符 见表 2 53 字符 含义 十进制 0 (空字符)通常用作字符串结束标志 0 a (警报字符)响铃报警 7 b (退格字符)移动到当前行的前一个位置 8 t (水平制表字符)移动到当前行的下一个水平制表位置 9 n (换行字符)换行 10 v (垂直制表字符)移动到下一个垂直制表位置 11 f (换页字符)移动到下一个逻辑页的初始位置 12 r (回车字符)移动到当前行的初始位置 13 (双引号字符)产生双引号字符 ” 34 (单引号字符)产生单引号字符 39 ? (问号字符)产生问号字符? 63 (反斜杠字符)产生反斜杠字符 92 3位八进制 根据计算确定 2位十六进制 根据计算确定 常用的转义字符 表 54 【 程序 2转义字符的应用举例 # ); /*反斜杠字符 */ ); /*单引号字符 */ ); /*双引号字符 */ n); n); /*退格字符 */ n); /*水平制表字符 */ ; 程序运行后输出: 5 转义字符 1 3位八进制数。 转义字符 1 2位十六进制数。 【 注意 】 转义字符中只能使用小写字母 。 每个转义字符只能看作一个字符。 转义字符: 141 转换为十进制数: 1*82+4*81+1*80=97 对应的字符: a 结论: 141 等价于 a 转义字符: 转换为十进制数: 6*161+1*160=97 对应的字符: a 结论: 等价于 a 56 字符串常量 : 用一对双引号括起来的一串字符。 例如: C A 每一个字符串常量的末尾自动添加一个“ 字符串结束标志 空操作符 0(即 的字符) ” 。 【注意】 ( 1) A与 A是不同的。 ( 2) 和 是不同的。 字符常量 A占用 1个字节的存储空间。 字符串常量 A占用 2个字节的存储空间。 字符串常量 占用 1个字节的存储空间。 字符常量 则是非法的用法。 字符串常量 “, 占用 6个字节的存储空间。 57 常量 符号常量 :也 称为 宏常量 ,用一个 标识符 来代表的常量。 符号常量在使用前必须先用编译预处理命令 “ #行定义。 符号常量定义的一般格式为: 作用是 : 凡在源程序中发现该 符号常量名 时,都用其后指定的 字符串 来 替换 。 符号常量名 与 字符串 之间可以有 多个空白字符 。 例如: 作用是 : 把源程序中在该命令之后出现的所有 符号常量 #符号常量名 字符串 #8 【 程序 2利用符号常量来输出价格信息 #30 # dn, ; 程序运行后输出: 0 【 注意 】 为这里的 是符号常量名。 替换 59 常量 【注意】 ( 1)为了与源程序中的变量名有所区别, 符号常量名 一般使用 大写英文字母 表示。 ( 2)符号常量 定义的几种常见错误 # ( 3)定义符号常量名时应考虑 “ 见名知意 ” 。 使用符号常量的 好处 是:在需要改变一个符号常量值时能做到 “ 一改全改 ” 。 符号常量名后面添加了“ =” 符号常量定义末尾添加了“ ;” 60 编程处理实际问题时,存在一些变量,它们的取值被限定在一个 有限 的范围内。 例如 : 性别 的变量只有“ 男 ”和“ 女 ”两种取值 。 月份 的变量只有 12个不同的取值。 把这些量定义为字符型、整型或其它类型都不是很合理,为此 枚举类型 。 枚举类型用关键字 如: 为什么引入枚举类型? 如何定义枚举类型? 大括号内的 标识符 均为 整型常量 ,称为 枚举常量 。 第 1个标识符的值为 0,第 2个 标识符的值为 1,以后依次 递增 1。 61 变量 变量 是指在程序执行过程中其值可以改变的量。 变量 在内存中占据一定的 存储单元 。 存储单元 所占的内存空间大小随变量 类型 的不同而不同。 变量 62 变量必须遵循“ 先定义,后使用 ”的原则。 变量定义语句的形式如下: 类型 变量名 1,变量名 2,变量名 n; 方括号 内的内容是 可选项 。 可以同时声明 多个 相同类型的变量,它们之间用 逗号 分隔。 定义 定义 定义 定义 定义 定义 变量 始化 变量 在内存中占据一定的 存储单元 , 存储单元 中存放变量的 值 。 对变量赋初值 , 其形式如下: 类型 变量名 1=常量 1,变量名 2=常量 2,变量名 n=常量 n; ; M; 同时声明多个相同类型的变量并初始化,它们之间用 逗号 分隔。 0.5, 通过 赋值 的方法将数据值赋值给变量或 改变 变量的值。 定义 值为 0 定义 值为 M 改变量 变量 注意】 ( 1)相同类型变量可以定义在一行,也可以定义在多行。 例如: 等价于: ( 2) 类型 和 变量名 之间至少要加一个 空格 。 ( 3)变量的定义同时可以为变量赋初值。例如: 也可改写为两条语句: ( 4)对多个相同类型的变量赋同一个初值,不能写成如此形式: 错误原因: 变量 b和 a,b,c; a; b; c; ; ; a=b=c=3; 65 用 量 。 能在程序中改变其值。例如: 使用 #号常量 或 优点: 代替源程序中多次出现的数字或字符串,可以提高程序的可读性和可维护性。 #号常量 和 区别在于: 符号常量没有数据类型。编译器对对符号常量则只进行字符串替换,不进行类型检查,字符串替换时极易产生意想不到的错误。 66 67 有三种 整型变量 : ( 1) 基本整型 : 2) 短整型 : 3)

温馨提示

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

评论

0/150

提交评论