程序设计语言初步

上传人:san****019 文档编号:22697238 上传时间:2021-05-30 格式:PPT 页数:115 大小:1.45MB
返回 下载 相关 举报
程序设计语言初步_第1页
第1页 / 共115页
程序设计语言初步_第2页
第2页 / 共115页
程序设计语言初步_第3页
第3页 / 共115页
点击查看更多>>
资源描述
1第 三 章 程 序 设 计 语 言 初 步 2程 序 设 计 语 言 : 用 于 书 写 计 算 机 程 序 的 语 言 , 用于 表 达 和 描 述 要 加 工 的 数 据 以 及 求 解 问 题 的 步骤 和 过 程 。 是 根 据 预 先 定 义 的 规 则 ( 语 法 ) 、由 一 个 有 限 字 母 表 上 的 字 符 构 成 的 字 符 串 的 总体 。程 序 设 计 语 言 的 基 本 成 分 : 数 据 成 分 。 用 以描 述 程 序 中 所 涉 及 的 数 据 。 运 算 成 分 。 用 以描 述 程 序 中 所 包 含 的 运 算 。 控 制 成 分 。 用 以表 达 程 序 中 的 控 制 构 造 。 传 输 成 分 。 用 以 表达 程 序 中 数 据 的 传 输 。 3 提 纲标 识 符 数 据 类 型变 量常 量输 入 和 输 出表 达 式语 句函 数 本 章 结 合 C语 言向 大 家 介 绍 结 构化 程 序 设 计 语 言的 基 本 概 念 数 据 成 分传 输 成 分运 算 成 分控 制 成 分 4 先 聊 点 C语 言u是 一 种 高 级 语 言u相 对 于 低 级 语 言 而 言 , 在 一 个 高 的 级 别 上 进 行 编 程u历 史 悠 久 , 战 勋 卓 著u诞 生 于 20世 纪 70年 代 初 , 成 熟 于 80年 代 ( C89) , 修 订 于 90年 代( C99) , 很 多 重 量 级 软 件 用 C编 写 u上 天 入 地 , 无 所 不 能u几 乎 没 有 不 能 用 C写 出 的 软 件 , 没 有 不 支 持 C的 系 统u很 多 流 行 语 言 、 新 生 语 言 都 借 鉴 了 C的 思 想 、 语 法uC+,Java,C#,PHP等 , 几 乎 都 是 用 C编 写u现 状 u嵌 入 式 领 域 和 系 统 级 编 程 占 主 流 , 桌 面 应 用 次 之 5 6数 据 总 线 控 制 路 线 输 入 设 备 输 出 设 备存 储 器中 央 处 理 器 ( CPU)运 算 部 件控 制 部 件 地 址 总 线 实 例 : 编 一 个 程 序 , 从 键 盘 读 入 两 个 整 数 ,要 求 在 屏 幕 上 输 出 相 乘 运 算 结 果 。处 理 步 骤 :1.控 制 部 件 发 命 令 从 键 盘 读取 数 据 并 存 储 到 内 存 储 器 中( 输 入 ) 。2.控 制 部 件 发 命 令 从 内 存 储器 中 取 出 这 两 个 数 置 入 运 算部 件 的 寄 存 器 中 , 让 运 算 器执 行 乘 法 运 算 , 运 算 结 果 写回 存 储 器 中 ( 处 理 ) 。 3.控 制 部 件 发 命 令 将 存 储 在内 存 储 器 中 的 结 果 输 出 到 显示 器 上 ( 输 出 ) 。需 要 考 虑 的 问 题 :1.输 入 : 如 何 从 键 盘 读 取 这 两 个 数 并 将 其 存 放到 内 存 中 ? 程 序 如 何 约 束 输 入 的 必 须 是 整 数 ?2.处 理 : 计 算 时 如 何 读 取 内 存 中 的 这 两 个 数 ?如 何 实 现 计 算 ? 计 算 结 果 如 何 写 回 内 存 ?3.输 出 : 如 何 将 内 存 中 的 计 算 结 果 输 出 到 显 示器 ? 7数 据 总 线 控 制 路 线 输 入 设 备 输 出 设 备存 储 器中 央 处 理 器 ( CPU)运 算 部 件控 制 部 件 内 存 中 数 据的 存 取 :变 量 、常 量 、数 据 类 型输 入 :输 入语 句 输 出 :输 出语 句 地 址 总 线 计 算 的 实 现 :运 算 符表 达 式语 句函 数 8标 识 符 是 由 程 序 员 定 义 的 单 词 , 用 来 给 程 序中 的 数 据 、 函 数 和 其 他 用 户 自 定 义 对 象 命 名。 程 序 设 计 语 言 本 身 会 定 义 一 些 专 用 名 称 , 称之 为 保 留 字 或 关 键 字 , 它 们 具 有 特 定 含 义 ,程 序 员 不 能 另 做 他 用 。 如 : C语 言 规 定 了 32个 关 键 字 。 3.1 标 识 符 9C语 言 规 定 的 32个 关 键 字 :auto double int struct break else long switch case enum register typedefchar extern return union const float short unsigned continue for signed void default goto sizeof volatiledo if static while 10 #include main() int number1; /*变 量 声 明 */ int number2; int result; printf(“ please input the two numbers:n” ); /*显 示 提 示 信 息 */ scanf(“ %d%d” , /*从 键 盘 读 取 2个 整 数 */ result = number1 * number2; /*赋 值 运 算 */ printf( “ the result is : %dn ” , result) ; /*输 出 结 果 */ return 0; 用 户 自 定 义标 识 符C语 言关 键 字 3.1 标 识 符 11u 不 同 的 程 序 设 计 语 言 标 识 符 格 式 可 能 不 同 。u C语 言 规 定 : 标 识 符 由 大 写 字 母 A到 Z、 小 写 字 母a到 z、 数 字 0到 9和 下 划 线 组 成 , 且 第 一 个 字 符 必须 是 字 母 或 下 划 线 , 随 后 的 字 符 必 须 是 字 母 、 数字 或 下 划 线 。 且 大 小 写 敏 感 , 如 age和 Age是 两 个不 同 的 标 识 符 。u PASCAL语 言 规 定 : 和 C语 言 类 似 , 只 是 要 求 第一 个 字 符 只 能 是 字 母 ( 比 C语 言 约 束 更 强 ) 。 3.1 标 识 符思 考 : 以 下 哪 些 是 合 法 的 C语 言 标 识 符age, _class_no , name1, name1 , 2name,#age 12数 据 是 计 算 机 处 理 的 对 象 。数 据 依 据 其 本 身 的 特 点 可 以 归 为 不 同 的 类 : 整 数、 小 数 、 字 符 、 字 符 串 等 。( 高 级 程 序 语 言 特 点 : 按 照 人 对 于 数 据 的 表 达 方 式 ) 程 序 设 计 语 言 应 该 具 备 区 分 各 种 类 型 数 据 的 能 力, 于 是 引 入 了 数 据 类 型 的 概 念 。数 据 类 型 包 括 两 层 含 义 : 定 义 了 一 系 列 的 值 (属 于该 类 型 的 数 据 能 够 取 值 的 范 围 ) 以 及 能 应 用 于 这些 值 上 的 一 系 列 操 作 ( 数 据 操 作 ) 。 3.2 数 据 类 型 13u 整 数 是 由 符 号 和 一 个 或 多 个 数 字 组 成 的 正 数 、0或 负 数 , 又 称 为 带 符 号 的 自 然 数 , 如 +12,-38。u 注 意 : 在 数 学 中 , 整 数 是 一 个 无 限 集 合 , 但 对于 计 算 机 来 说 , 只 能 表 示 它 的 一 个 有 限 子 集( 取 决 于 存 储 空 间 的 大 小 ) 。整 型 3.2 数 据 类 型程 序 设 计 语 言 一 般 包 含 四 种 标 准 数 据 类 型 :整 型 、 字 符 型 、 浮 点 型 和 布 尔 型 ( 补 充 ) 。 14 3.2 数 据 类 型 整 型整 型 数 据 占 用 的 内 存 单 元 数 :u C语 言 中 整 型 数 据 细 分 为 四 类 : short int、 int、long int和 long long int。 ( 和 教 材 不 同 )u C语 言 标 准 没 有 规 定 每 一 种 整 数 类 型 占 用 的 内存 空 间 大 小 ( 即 数 的 范 围 ) , 只 是 约 束 到 :short int和 int至 少 要 占 据 16位 ( 2字 节 ) , 而long数 据 至 少 要 有 32位 ( 4字 节 ) ; 且 数 据 长度 上 , short int=int=long int = long long int 。 u 每 一 种 整 数 类 型 占 用 的 内 存 字 节 数 由 编 译 器 根据 所 用 机 器 的 硬 件 情 况 来 决 定 。 15整 型 数 据 所 允 许 的 运 算 包 括 : 二 目 算 术 运 算 : +、 -、 *、 /、 ( 取 余 ) ; 注 意 : 两 个 整 数 进 行 二 目 运 算 后 结 果 还 是 整 数 如 : 125 / 10 = 12( 余 数 5被 舍 弃 ) , 125 % 10 = 5 单 目 算 术 运 算 : 取 负 值 等 ; 关 系 运 算 : , , =, = =(相 等 ) , !=( 不 相 等 )C语 言 中 关 系 运 算 结 果 为 1( 真 ) 或 0( 假 ) 3.2 数 据 类 型 整 型 16字 符 型u字 符 数 据 包 括 26*2个 字 母 ( 大 小 写 ) +10个 数字 +其 它 显 示 符 号 , 总 共 95种 ; 还 有 33种 控 制符 号 , 总 共 128种 符 号 ; u字 符 型 数 据 在 内 存 中 的 存 储 : 实 际 存 放 的 是 一个 整 数 值 。 多 数 计 算 机 系 统 采 用 ASCII( American Standard Code for Information Interchange) 标 准 编 码 模 式 来 对 字 符 进 行 编 码 。每 个 字 符 占 用 8位 内 存 ( 1个 字 节 ) ; 3.2 数 据 类 型 17 ASCII表L H 0000 0001 0010 0011 0100 0101 0110 01110000 NUL DLE SP 0 P p 0001 SOH DC1 ! 1 A Q a q 0010 STX DC2 “ 2 B R b r 0011 ETX DC3 # 3 C S c s 0100 EOT DC4 $ 4 D T d t 0101 ENQ NAK % 5 E U e u 0110 ACK SYN K k 1100 FF FS N n 1111 SI US / ? O _ o DEL2000H2002H2004H2003H2001H01000001存 储 空 间该 存 储 区存 放 字 符 A思 考 : 若 从 键 盘 上 输 入 字 符 存 储 到 内 存 , 字 符到 二 进 制 编 码 的 转 换 是 由 什 么 部 件 来 实 现 的 ? 18ASCII( A) =65 A的 ASCII值 是 65ASCII( a) =97 规 律 : 大 写 字 母 的 ASCII编 码 32 小 写 字 母 的ASCII编 码 3.2 数 据 类 型 字 符 型 19 3.2 数 据 类 型 字 符 型关 系 运 算 ( 按 照 ASCII大 小 ) :, , =, = =, !=例 如 : A a 结 果 为 真 , 因 为 A 的ASCII是 65 , a 的 ASCII是 97 , 6597字 符 型 所 允 许 的 运 算 包 括 ( 将 字 符 型 数 据 当 作 整 型 数 据对 待 ) :算 术 运 算 : ch2=ch1-32 (若 ch1值 为 b,则 ch2为 B) ch2=ch1-1 (若 ch1值 为 b,则 ch2为 a) ch2=ch1 1 (若 ch1值 为 b,则 ch2为 c) 20浮 点 型u 浮 点 型 是 带 小 数 部 分 的 数 字 类 型 , 如 3.14,1.575E5( 科 学 计 数 法 , 即 1.575* )。u抽 象 地 讲 , 浮 点 型 数 据 的 值 域 是 全 体 实 数 , 但 是 由于 计 算 机 表 示 方 面 的 原 因 , 计 算 机 只 能 表 示 它 的 一 个有 限 子 集 。u 同 样 由 于 计 算 机 表 示 方 面 的 原 因 , 实 数 在 计 算 机内 部 的 表 示 有 时 是 不 准 确 的 。 例 如 , 存 储 圆 周 率 时 ,只 能 表 示 成 近 似 的 值 。 3.2 数 据 类 型510 21 3.2 数 据 类 型u C语 言 支 持 三 种 不 同 长 度 的 浮 点 数 据 类 型 :float、 double和 long double。 其 中 float一 般 占32位 ( 字 节 ) ; double一 般 占 64位 ( 8字 节 ) , long double占 96位 ( 12字 节 ) 。u 三 者 区 别 : 越 后 面 的 类 型 运 算 精 度 越 高 , 值 域越 大 , 但 占 用 的 内 存 单 元 越 多 。 22浮 点 型 所 允 许 的 运 算 包 括 : 二 目 算 术 运 算 : +、 -、 *、 /;浮 点 型 数 据 进 行 二 目 运 算 结 果 还 是 浮 点 型 。 如 : 12.0/5.0=2.4 单 目 算 术 运 算 : 取 负 值 关 系 运 算 : , , =, = =, != 3.2 数 据 类 型 浮 点 型注 意 : 要 避 免 做 两 个 实 数 相 等 或 不 相 等 的 比 较 。 由 于 计 算机 表 示 方 面 的 近 似 性 , 会 使 得 本 来 应 该 相 等 的 两 个 数 不 等 。建 议 在 比 较 两 个 浮 点 数 X和 Y是 否 相 等 时 使 用 |X-Y|,其 中是 一 个 绝 对 值 较 小 的 正 浮 点 数 。 23 3.2 数 据 类 型 布 尔 型 ( 补 充 ) 布 尔 类 型 数 据 : 取 值 只 有 两 种 , 真 ( True) 或者 假 ( False) 。 允 许 的 运 算 包 括 : 与 、 或 、 非 。 绝 大 多 数 程 序 设 计 语 言 中 有 布 尔 类 型 这 种 数 据类 型 , 如 Pascal语 言 。 但 是 C语 言 没 有 定 义 这种 数 据 类 型 。布 尔 型 24标 准 类 型 是 原 子 的 、 不 可 再 分 的 。 程 序 员可 以 以 标 准 类 型 为 基 本 构 件 , 构 造 出 复 杂的 数 据 类 型 。 如 C语 言 有 : 结 构 、 数 组 、 联合 、 文 件 等 复 杂 数 据 类 型 ; PASCAL语 言 有: 结 构 、 数 组 、 集 合 、 文 件 等 复 杂 数 据 类型 。 3.2 数 据 类 型 复 杂 数 据 类 型 25 3.3 变 量 数 据 总 线 控 制 路 线 输 入 设 备 输 出 设 备存 储 器中 央 处 理 器 ( CPU)运 算 部 件控 制 部 件 输 入 数 据 、 中 间 运算 结 果 、 最 终 结 果 程 序 需 要 将 输 入数 据 、 中 间 运 算结 果 以 及 最 终 结果 暂 时 保 存 在 内存 单 元 中 。 地 址 总 线 程 序 如 何 实 现从 内 存 单 元 存取 数 据 ? 26 3.3 变 量 程 序 运 行 时 , 通 过 内 存 地 址 对 内 存 数 据 进 行 读写 ; 程 序 员 写 源 程 序 时 , 如 果 也 是 直 接 使 用 内 存 地址 来 读 写 内 存 数 据 , 会 很 麻 烦 ! 如 果 用 名 字 来 代 替 地 址 , 在 程 序 中 出 现 的 是 代表 内 存 空 间 的 名 字 , 让 编 译 器 来 跟 踪 数 据 实 际存 放 的 物 理 内 存 地 址 , 就 可 以 简 化 编 程 变量 ; 27变 量 用 来 代 表 内 存 存 储 空 间 , 该 存 储 空 间 用 来 存放 被 加 工 的 数 据 或 处 理 的 结 果 。 源 程 序 中 对 变 量的 操 作 ( 读 和 赋 值 ) 实 际 上 是 对 存 储 空 间 的 读 写操 作 。变 量 具 有 三 个 重 要 属 性 : 名 称 、 值 和 数 据 类 型 。2000H2002H2004H2005H2007H2006H2003H2001Hsexagescore内 存 用 sex代 表 地 址 为 2001H的 内 存 单元 , score代 表 地 址 为 2004H2007H的 一 片 内 存 空 间 。 用 变 量来 实 现 对 这 些 内 存 空 间 数 据 的 存取 。 3.3 变 量 28一 、 变 量 定 义 u 使 用 变 量 来 对 内 存 数 据 进 行 存 取 前 , 必 须 先 定 义变 量 , 目 的 是 建 立 变 量 和 存 储 空 间 的 对 应 关 系 。u 变 量 定 义 指 明 变 量 的 名 称 和 数 据 类 型 ( 变 量 代 表的 存 储 空 间 存 放 的 数 据 的 类 型 ) 。 变 量 的 名 称 要 遵循 标 识 符 命 名 原 则 , 虽 然 可 以 为 任 意 长 度 , 但 C编译 器 只 认 为 前 31个 字 符 有 效 。 变 量 类 型 可 以 告 诉 编译 器 留 出 适 量 的 用 于 保 存 数 据 的 内 存 。u 不 同 语 言 中 变 量 定 义 的 写 法 不 一 样 , C语 言 格 式 :数 据 类 型 变 量 名 1,变 量 名 2, ; 3.3 变 量思 考 : 变 量 定 义 时 要 指 明 哪 些 内 容 ?char sex;int age1,age2;float score;数 据 类 型 变 量 名分 号 必 须多 个 同 类 型 变量 用 逗 号 分 割 29注 意 , 变 量 定 义 仅 引 起 内 存 存 储空 间 分 配 , 但 此 时 变 量 中 存 储 的值 一 般 是 无 意 义 的 ( 特 殊 情 况 除外 ) !变 量 定 义 将 引 起 内 存 空 间 的 分 配 。 定 义 后 , 变 量 就用 来 代 表 内 存 中 的 一 片 存 储 单 元 ( 存 储 单 元 个 数 取决 于 变 量 类 型 ) 。 3.3 变 量2000H2002H2004H2005H 2007H2006H2003H2001Hsexagescore 存 储 空 间char sex;int age;float score; 30二 、 变 量 赋 值 3.3 变 量C语 言 示 例 : char sex; int age; float score;变 量 赋 值 : 把 一 个 值 写 入 变 量 代 表 的 存 储 空 间 。C语 言 变 量 赋 值 格 式 : 变 量 名 =表 达 式sex=F;age = 18; score= 89.5; 2000H2002H 2004H2005H2007H2006H2003H2001Hsexagescore 存 储 空 间ASCII( F )=77) 771889.5 变 量 的 值 31 3.3 变 量 变 量 使 用 特 点 先 定 义 , 后 使 用 。 int age; 定 义 一 个 变量 为 整 数 类 型 。 如 未 定 义 , 则 在 编 译 时 被 查出 , 认 为 非 法 。 变 量 未 被 赋 值 前 , 值 一 般 是 无 意 义 的 。 对 变 量 赋 值 过 程 是 “ 覆 盖 ” 过 程 , 用 新 值 去替 换 旧 值 。 读 取 变 量 代 表 的 存 储 空 间 数 据 ( 又 称 读 取 变量 的 值 ) : age=age+1; 读 取 变 量 的 值 时 , 该 变 量 保 持 不 变 。 32C语 言 允 许 变 量 在 定 义 时 进 行 初 始 化 。 初 始化 语 句 用 来 给 变 量 赋 初 始 值 。 (?)例 如 :char sex;int age = 16;float score; 3.3 变 量2000H2002H2004H 2005H2007H2006H2003H2001H16存 储 空 间sexagescore 33 3.3 变 量试 解 释 下 列 操 作 的 含 义 读 取 变 量 的 值 写 入 变 量 给 变 量 赋 值 修 改 变 量 的 值 34 #include main() int number1; /*变 量 声 明 */ int number2; int result; printf(“ please input the two numbers:n” ); /*显 示 提 示 信 息 */ scanf(“ %d%d” , /*从 键 盘 读 取 2个 整 数 */ result = number1 * number2; /*赋 值 运 算 */ printf( “ the result is : %dn ” , result) ; /*输 出 结 果 */ return 0; 3.3 变 量 35 3.3 变 量u 找 出 下 述 变 量 定 义 的 错 误 : float f; char A , B ; 36char sex;int age;float score;变 量 类 型 变 量 名总 结 :变 量 三 要 素 : 变 量 名 ( 存 储 空 间 ) 、 数 据 类 型 ( 存 储空 间 存 放 的 数 据 的 类 型 ) 、 变 量 值 ( 存 储 内 容 ) 3.3 变 量2000H2002H 2004H2005H2007H2006H2003H2001H701889.5存 储 空 间 变 量 的 值sexagescore 37一 、 文 字 常 量 文 字 常 量 是 指 在 程 序 中 未 被 命 名 的 值 。例 : circumference = 2 * ( length + width) ; 其 中 2就 是 一 个 文 字 常 量 , length和 width是 变 量三 类 常 量 : 文 字 常 量 、 命 名 常 量 、 符 号 常 量 3.4 常 量 38二 、 命 名 常 量和 变 量 类 似 , 命 名 常 量 也 是 内 存 存 储 空 间 的 名字 , 代 表 一 片 内 存 存 储 空 间 , 但 一 般 不 允 许 程序 去 改 变 该 存 储 空 间 中 的 数 据 。 C语 言 中 定 义 一 个 命 名 常 量 : main( ) const float pi = 3.14; 3.4 常 量2000H2002H 2004H2005H2007H2006H2003H2001H3.14存 储 空 间pi说 明 pi是 个 命名 常 量 ; 39 #include main() const float pi=3.14;/*常 量 定 义 */ float radius; /*变 量 定 义 */ float area; printf(“ please input the radius:n” ); /*显 示 提 示 信 息 */ scanf(“ %f” , /*从 键 盘 读 取 半 径 */ area = pi * radius * radius; /*赋 值 运 算 */ printf(“ the area is : %fn ” , area); /*输 出 结 果 */ system(“ pause” ); return 0; 40 符 号 常 量 是 仅 含 有 符 号 名 称 的 值 。C语 言 符 号 常 量 定 义 : #define 标 识 符 替 换 文 本 #define PI 3.14 area = PI* radius * radius; 编 译 时 , 预 处 理 程 序 能 够 将 所 有 出 现 该 符 号 名 称的 地 方 用 值 替 换 : area = 3.14 * radius * radius ; 使 用 符 号 常 量 的 好 处 : 使 程 序 易 读 性 好 、 容 易 维护 。 三 、 符 号 常 量 3.4 常 量 41 3.4 常 量#include #define PI 3.14 /常 量 定 义 , 注 意 结 束 处 无 分 号 , 在 主 函数 之 前main() float radius; /*变 量 定 义 */ float area; printf(“ please input the radius:n” ); /*显 示 提 示 信 息 */ scanf(“ %f” , /*从 键 盘 读 取 半 径 */ area = PI* radius * radius; /*赋 值 运 算 */ printf(“ the area is : %fn ” , area); /*输 出 结 果 */ system(“ pause” ); return 0; 42四 、 常 量 的 类 型和 变 量 一 样 , 常 量 也 有 类 型 。 大 多 数 程 序 设 计 语 言 使 用 整型 、 浮 点 型 、 字 符 型 和 字 符 串 型 常 量 。C语 言 中 四 种 常 量 :15 整 型 常 量15.4 浮 点 型 常 量 A 字 符 型 常 量 ( 用 单 引 号 括 起 字 符 )“ Hello” 字 符 串 型 常 量 ( 用 双 引 号 括 起 字 符 序 列 )文 字 常 量 和 符 号 常 量 的 值 体 现 了 常 量 的 类 型 3.4 常 量 43 如 果 整 型 常 量 以 0开 头 , C编 译 器 会 认 为 该 常 量是 八 进 制 数 。 如 040即 十 进 制 的 32。 如 果 整 型 常 量 以 0 x开 头 , C编 译 器 会 认 为 该 常量 是 十 六 进 制 数 。 如 0 xFF即 十 进 制 的 255。#include #define X 040#define Y 0XFFmain() printf(“ X=%d,Y=%d” , X,Y); system(pause); return 0; 3.4 常 量X=32,Y=255请 按 任 意 键 继 续 . . . 44 常 量 小 测 试 下 述 常 量 定 义 哪 些 是 错 误 的 ? 为 什 么 ?#define ratio =1/3 #define ratio 1/3;#define 1st_character $#define if 7 1. 不 能 有 号 ; 否 则 会 用=1/3替 换 ratio2. 不 能 有 语 句 结 束 符 ; 号3. 标 识 符 只 能 以 字 符 或 者下 划 线 开 头4. If是 C语 言 规 定 的 关 键字 , 有 特 定 含 义 , 用 户不 能 随 便 使 用5. 习 惯 上 , 常 量 名 一 般 采用 大 写 字 母 。 45数 据 总 线 控 制 路 线 输 入 设 备 输 出 设 备存 储 器中 央 处 理 器 ( CPU)运 算 部 件控 制 部 件 地 址 总 线 3.5 输 入 和 输 出 ( I/O)一 个 真 正 有 用 的 程序 一 般 会 从 输 入 设备 接 收 数 据 、 并 将运 算 结 果 输 出 到 输出 设 备 中 。为 了 实 现 和 输 入 输 出设 备 的 通 信 , 程 序 必须 要 有 输 入 和 输 出 语句 。 一 个 既 无 输 入 又无 输 出 的 程 序 是 没 有用 的 。 46输 入 和 输 出 语 句 最 基 本 的 功 能 在 于 从 外 界 环 境 将值 读 入 一 个 变 量 , 或 者 将 一 个 值 写 出 到 外 界 环境 中 。 3.5 输 入 和 输 出 ( I/O) 47一 、 输 入 通 过 输 入 语 句 或 者 预 先 定 义 的 函 数 可 以 从 外 界 接 收 值 。C语 言 输 入 函 数 举 例 : scanf(格 式 控 制 串 , 输 入 项 地 址 表 );格 式 控 制 串 : 含 有 各 种 以 百 分 号 开 头 的 格 式 控 制 符 。输 入 项 地 址 表 : 有 逗 号 分 隔 开 的 若 干 输 入 表 项 组 成 , 每 一 个表 项 是 一 个 变 量 的 地 址 。scanf函 数 的 作 用 : 从 标 准 输 入 设 备 ( 键 盘 ) 上 读 取 一 系 列 数据 , 按 格 式 控 制 串 的 要 求 进 行 转 换 并 送 到 输 入 项 地 址 表 所 列的 逐 变 量 中 。 3.5 输 入 和 输 出 ( I/O) 48 scanf(“ %d” ,u当 程 序 执 行 该 语 句 时 , 等 待 用 户 从 键 盘 输 入 数 据 并转 换 成 一 个 整 数 , 存 储 到 变 量 number1中 。u d: 转 换 说 明 符 ( conversion specifier) , 用 于 告诉 程 序 键 入 的 数 据 要 转 换 成 一 个 整 数 ;u 若 希 望 ch得 到 字 符 值 2 , age得 到 整 型 值 0, sex得 到字 符 值 M , height得 到 浮 点 值 1.65, 则 函 数 调 用 为 : scanf(“ %c%d%c%f” , 50用 scanf语 句 从 键 盘 同 时 读 入 年 龄 和 性 别 :scanf(“%d %c”,scanf(“%d,%c”, 3.5 输 入 和 输 出 ( I/O)10 S10, S格 式 控 制 串 中 除 了 转 换 说 明 符 , 还 可 以 包 含 其 他 字 符 。从 键 盘 输 入 的 内 容 要 和 格 式 控 制 串 匹 配 。 如 果 在 格 式控 制 串 中 除 了 转 换 说 明 符 以 外 还 有 其 它 字 符 , 则 在 输入 数 据 时 应 输 入 与 这 些 字 符 相 同 的 字 符 。 如 : 空 格scanf(“age=%d, sex=%c”,age=10, sex=S 51二 、 输 出 通 过 语 句 或 者 预 先 定 义 的 函 数 可 以 将 值 输 出 到 外 界 。C输 出 函 数 举 例 :功 能 : 将 字 符 串 显 示 在 标 准 输 出 设 备 ( 一 般 为 显 示器 ) 上 。 程 序 员 可 以 将 常 量 、 变 量 、 表 达 式 、 函 数调 用 作 为 待 输 出 字 符 串 的 一 部 分 。格 式 控 制 串 : 包 含 了 某 些 要 直 接 显 示 的 字 符 , 也 包含 一 些 转 换 说 明 符 。输 出 项 表 : 可 以 是 常 量 、 变 量 、 表 达 式 、 函 数 调 用 。 3.5 输 入 和 输 出 ( I/O) 52如 : printf( ”Your age is : %d”,age) ;注 意 , 在 输 出 时 转 换 说 明 符 %d不 输 出 , 而 是 被 变 量age的 值 代 替 。 假 设 变 量 age的 值 是 18, 则 显 示 器 上将 输 出 字 符 串 “ Your age is : 18” 注 意 : 此 处 变 量 age前 面 没 有 输 出 将 是 怎 样 ? 53 3.5 输 入 和 输 出 ( I/O)可 以 用 printf语 句 输 出 常 量 、 变 量 、 表 达 式 、 函数 调 用 的 值 :printf(“ the agerage score is %d” ,SCORE);/输 出 常 量printf(“ your age is %d” ,age); /输 出 变 量printf(“ the value of (2+3)10 is:%dn” ,(2+3)10);/输 出表 达 式 的 值 ( ? )printf(“ the size of int is :%d” ,sizeof(int); /输 出 函 数 返回 值 54若 想 同 时 输 出 年 龄 和 性 别 , 则 语 句 可 写 为 :printf( “ Your age is : %d, your sex is : %c”,age,sex) ;显 示 器 上 将 输 出 字 符 串 “ Your age is : 18, your sex is : F” 3.5 输 入 和 输 出 ( I/O)输 入 输 出 后 面 会 再 详 细 讲 解 , 有 兴 趣 的 同 学 可 参 见 C程序 设 计 教 程 的 9.3和 9.11。 55 找 出 以 下 程 序 的 错 误1. include2. main()3. 4. ( 未 定 义 变 量 )5. printf(“ input i and jn” );6. scanf(“ i=%d” , 7. scanf(“ %d” ,8. printf(“ i=%d, j=%d” ,i, j);/输 出 2个 变 量 的 值9. return 0;10. 1. 变 量 i和 j未 定 义 就 使 用 ;2. scanf(“ i=%d” ,3. printf(“ i=%d, j=%d” , i, j); 56 修 正 后 的 程 序 includemain() int i,j;/变 量 定 义 printf(“ input i and jn” ); /输 入 提 示 scanf(“ i=%d” , /键 盘 输 入 变 量 i的 值 scanf(%d, printf(“ i=%d, j=%d” ,i,j);/输 出 2个 变 量 的 值 system(pause); return 0; 运 行 结 果 :input i and ji=1020i=10, j=20请 按 任 意 键 继 续 . . . 57#include main() int number1; /*存 放 整 数 1*/ int number2; /*存 放 整 数 2*/ int result; /*存 放 结 果 */ printf(“ please input the two numbers:n” ); /*显 示 提 示 信 息 */ scanf(“ %d %d” , /*读 取 整 数 */ result = number1 * number2; /*赋 值 运 算 */ printf( “ the result is : %dn ” , result) ; /*输 出 结 果 */ return 0; 2000H2004Hresult 2002H2005H2007H2006H2003H2001H存 储 空 间number1number210 20please input the two numbers:the result s : 200 1020200 任 务 描 述 : 输 入 两 个 整 数 ,求 两 数 之 积 并 输 出 。 /*/:注 释 main( ) 函 数 变 量 定 义 部 分 操 作 部 分编 译 后 , 源 程 序 中 出现 number1、 number2和 result的 地 方 将 会 用内 存 相 对 地 址 ( 非 真正 物 理 地 址 ) 替 换 。思 考 : 何 时 、 在 哪 里得 到 真 正 的 物 理 地 址 ?编 译 程 序 怎 么 处 理 变量 ? 操 作 系 统 怎 么 分配 内 存 ? 如 何 得 到 物理 地 址 ? 深 入 学 习 : 编 译 原 理 操作 系 统 计 算 机组 成 原 理 假 设 操 作 系 统 已 经 分 配 如 下 内存 空 间 用 于 存 放 操 作 数 和 结 果程 序 运 行 过 程 演 示 58 输 入 输 出 练 习 : 定 义 三 个 变 量 , 分 别 是 整 型 、浮 点 型 、 字 符 型 。 要 求 从 键 盘 输 入 三 个 值 存 放到 这 三 个 变 量 里 , 并 且 输 出 这 三 个 变 量 。 #includemain() int i; float f; char c; scanf(“ %d,%f,%c” , printf(“ the result is:n” ); printf(“ i=%d,f=%f,c=%c” ,i, f, c); system(“ pause” ); return 0; 59 #includemain() int i; float f; char c; printf(input i,fn); scanf(%d,%f, printf(input cn); scanf(“%c”, (空 格 是 一 个 字 符 值 ? ) printf(the result is:n); printf(i=%d,f=%f,c=%c,i,f,c); system(pause); return 0; 请 同 学 们 观 察 本 程 序 的 输 出 是 什 么 ?input i,f10,3.14input cthe result is: i=10,f=3.140000,c=请 按 任 意 键 继 续 . . .程 序 并 没 有 给 用 户 输 入 字符 数 据 的 机 会 。 为 什 么 ? 【 链 接 】 60 解 决 方 法 : 用 getchar函 数 来 读 取 回 车 符main() int i; float f; char c; printf(input i,fn); scanf(%d,%f, getchar(); /*将 存 于 缓 冲 区 的 回 车 符 读 入 */ printf(input cn); scanf(%c, printf(the result is:结 果 是 n); printf(i=%d,f=%f,c=%c,i,f,c); system(pause); ( 为 什 么 此 程 序 没 有 return 0?) input i,f10,3.14input cythe result is: i=10,f=3.140000,c=y请 按 任 意 键 继 续 . . .结 果 正 确 !此 外 , 还 可 以 用 fflush函 数来 清 空 键 盘 缓 冲 区 。 见 实验 讲 义 附 录 1的 第 16个 错 误( 第 130页 ) , 要 求 自 学 。 61u 表 达 式 是 由 运 算 符 、 操 作 数 和 括 号 组 成 的 、 计 算 求 值的 基 本 单 位 。u 操 作 数 可 以 是 : 常 量 、 变 量 、 函 数 调 用 和 表 达 式 ;u 表 达 式 举 例 :u 2 表 达 式 无 运 算 符 , 操 作 数 为 常 量u i 表 达 式 无 运 算 符 , 操 作 数 为 变 量u sizeof(int) 表 达 式 无 运 算 符 , 操 作 数 为 函 数 调 用u 2 + i 操 作 数 为 常 量 和 变 量u i * sizeof(int) 操 作 数 为 变 量 和 函 数 调 用u 2+ i * sizeof(int) 加 法 运 算 的 第 2个 操 作 数 仍 为表 达 式 3.6 表 达 式 62 3.6 表 达 式u 典 型 的 几 类 运 算 符 和 表 达 式 :算 术 运 算 符 和 算 术 表 达 式 ; 关 系 运 算 符 和 关 系 表 达 式 ;逻 辑 运 算 符 和 逻 辑 表 达 式 ;赋 值 运 算 符 和 赋 值 表 达 式 ; 63 3.6 表 达 式一 、 算 术 运 算 符 和 算 术 表 达 式算 术 运 算 符 : 、 、 、 /、 (取 余 ) 等 ;算 术 表 达 式 : 由 算 术 运 算 符 、 操 作 数 和 括 号 构 成 的表 达 式 。 如 : ( 2 + 8.2 / 3) * 4 , 10 4( 余 数 为 2)+ (加 ) -( 减 )*( 乘 ) /( 除 , 取 商 )%( 取 模 ) + (自 加 , 加 1)-( 自 减 , 减 1) 64 3.6 表 达 式 算 术 表 达 式(b*b-4*a*c)/(2*a)2aac4b2要 注 意 编 程 序 式 , 程 序 中 对 算 术 表 达 式 的 书 写 和平 时 的 书 写 方 式 可 能 是 不 一 样 的 :在 程 序 中 要 写 成 65 在 C语 言 中 , 算 术 运 算 的 操 作 数 可 以 是 整 数 、 字符 或 者 浮 点 数 。 如 果 表 达 式 中 的 操 作 数 全 是 字 符或 者 整 数 , 则 表 达 式 的 值 为 整 数 ; 如 果 操 作 数 至少 有 一 个 是 浮 点 数 , 则 表 达 式 的 值 为 浮 点 数 。 3.6 表 达 式 算 术 表 达 式求 以 下 表 达 式 的 值 :1) 102/202) 102%203) 1/24) 1.0/25) x= A +32( x是整 型 变 量 )求 以 下 表 达 式 的 值 :) =5) =2) =0 值 为 整 数) =0.5 值 为 浮 点 数) x 97 提 示 : 字 符 数 据 总 是先 转 换 成 整 型 数 据 ,再 参 与 运 算 的 。 66 3.6 表 达 式 算 术 表 达 式 C语 言 中 , 整 型 、 字 符 型 、 浮 点 型 数 据 可 以 进行 混 合 运 算 . 如 : 5+1.0+A=71.000000混 合 运 算 涉 及 到 数 据 类 型 的 转 换 , 具 体 将 在 以后 介 绍 。 自 加 运 算 符 +和 自 加 运 算 符 -是 C语 言 特 有 的运 算 符 , 将 在 以 后 介 绍 。 67 3.6 表 达 式二 、 关 系 运 算 符 和 关 系 表 达 式 关 系 运 算 符 : 用 于 比 较 两 个 数 据 的 大 小 关 系 。 关 系 表 达 式 : 用 关 系 运 算 符 将 两 个 表 达 式 连 接 起来 构 成 的 表 达 式 , 如 (2 3)10 ; 运 算 结 果 是 逻辑 “ 真 ” 或 者 “ 假 ” 。 在 C语 言 中 , 若 运 算 结 果 是 逻 辑 “ 真 ” , 则 关 系表 达 式 的 值 为 1; 若 为 逻 辑 “ 假 ” , 则 值 为 0。 (小 于 ) ( 大 于 ) =( 大 于 等 于 ) ( 等 于 ) ! ( 不 等 于 ) 68 3.6 表 达 式 关 系 表 达 式思 考 : 以 下 语 句 的 输 出 结 果 是 什 么 ?printf(the value of (2+3)10 is:%dn,(2+3)10);printf(the value of (2+3)=10 is:%dn,(2+3)=10);the value of (2+3)10 is:1the value of (2+3)=10 is:0 69 3.6 表 达 式三 、 逻 辑 运 算 符 和 逻 辑 表 达 式逻 辑 运 算 符 : 与 、 或 、 非 printf(“ a=%d,b=%d,c=%dn,a,b,c); f=(ab) printf(“ f=(ab) printf(f=(ab)|(bc),f为 %dn,f); printf(!(ab) is: %dn,!(ab); printf(! a is: %dn,! a); system(pause); return 0; 输 出 结 果 ?a=1,b=2,c=4f=(ab)/* A 、 a 、 S 的 ASCII分 别 是 65, 97, 83*/ printf(%c , %dn,ch1,ch1); printf(%c , %dn,ch2,ch2); printf(%c, %dn, ch1+32, ch1+32); printf(%dn, ch1 a ( 一 个 表 达 式 语 句 , 但 无 意 义 )i = i + 10 * j;( 赋 值 表 达 式 语 句 ) printf(“age=%d” ,age);( 表 达 式 语 句 , 表 达 式 为 函 数调 用 ) 3.7 语 句 80如 果 表 达 式 涉 及 到 赋 值 ( 存 在 赋 值 运 算 符 或 运 算符 +或 -, 如 i = i + 10 * j; ) , 则 将 计 算 得 到 的值 保 存 到 变 量 中 。如 果 不 涉 及 赋 值 ( 如 语 句 ij;) , 则 值 将 被 丢 弃 . 3.7 语 句 81二 、 复 合 语 句 复 合 语 句 是 包 含 零 个 或 多 个 语 句 的 代 码 单 元 , 使 得一 组 语 句 成 为 一 个 整 体 , 也 被 称 为 块 。在 C语 言 中 , 复 合 语 句 由 一 个 左 大 括 号 、 可 选 语句 段 、 一 个 右 大 括 号 组 成 。 如 : i = 1;j = 2 * i; 3.7 语 句 82三 、 选 择 语 句 3.7 语 句u 在 写 程 序 时 , 有 时 往 往 需 要 测 试 某 一 个 条 件 是 否 成 立 , 然 后 根 据 测 试 结 果 来 控 制 程 序 后 续 执行 路 径 。 此 时 要 用 到 选 择 语 句 。u C语 言 中 选 择 语 句 有 : 1) if-else 语 句 2) switch语 句 (以 后 再 讲 ) 831) if-else 实 现 双 路 选 择 if (表 达 式 ) 语 句 1else 语 句 2b) C语 句a) 流 程 图表 达 式 语 句 1 语 句 2真 ( 非 0) 假 ( 为 0) 3.7 语 句 84 3.7 语 句1. if-else语 句 中 的 “ 表 达 式 ” 必 须 用 “ (” 和 “ )”括 起 来 ; 表 达 式 可 以 是 任 一 种 表 达 式 , 关 系 表达 式 和 逻 辑 表 达 式 较 常 见 ; 表 达 式 的 值 为 非 零时 , 为 “ 真 ” , 否 则 为 “ 假 ” 。2. 语 句 可 以 是 任 何 语 句 : 表 达 式 语 句 、 复 合 语 句 、选 择 语 句 和 循 环 语 句 。3. else子 句 是 if语 句 的 一 部 分 , 必 须 与 if配 对 使 用 ,不 能 单 独 使 用 。4. 可 以 没 有 else子 句 ( 但 必 须 有 if子 句 ) , 即 :if(表 达 式 ) 语 句 85 例 3.3 输 入 一 个 整 数 , 判 别 它 是 否 能 被 3整 除 。若 能 被 3整 除 , 输 出 YES; 若 不 能 被 3整 除 , 输 出NO。#include这 是 条 件 语 句 中 典 型 的 程 序 设 计 !main( ) int n; /*变 量 n用 于 存 放 输 入 的 整 数 */ printf(“ input n: ” ); /*输 入 提 示 */ scanf(“ %d” , /*输 入 整 数 到 变 量 n中 */ if (n%3 = = 0) /*判 断 n能 否 被 3整 除 */ printf(“ n=%d YESn” ,n);/*若 n能 被 3整 除 , 则 输 出 “ YES” */ else printf(“ n=%d NOn” ,n); /*若 n不 能 被 3整 除 , 则 输 出 “ NO” */ system(“ pause” ); return 0; input n: 20n
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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