




已阅读5页,还剩372页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章 语言概述 本章主要介绍c语言程序的结构和书写规则 以及turbocv2 0的基本操作 1 1c语言的发展简史和特点1 2 语言程序的结构与书写规则1 3c语言的语句和关键字1 4turbocv2 0的基本操作 return 1 1c语言的发展简史和特点 1 语言的诞生与发展 1 在c语言诞生以前 系统软件主要是用汇编语言编写的 由于汇编语言程序依赖于计算机硬件 其可读性和可移植性都很差 但一般的高级语言又难以实现对计算机硬件的直接操作 这正是汇编语言的优势 于是人们盼望有一种兼有汇编语言和高级语言特性的新语言 2 语言是贝尔实验室于70年代初研制出来的 后来又被多次改进 并出现了多种版本 80年代初 美国国家标准化协会 ansi 根据 语言问世以来各种版本对 语言的发展和扩充 制定了ansic标准 1989年再次做了修订 本书以ansic新标准来介绍 3 目前 在微机上广泛使用的 语言编译系统有microsoftc turboc borlandc等 虽然它们的基本部分都是相同的 但还是有一些差异 所以请大家注意自己所使用的 编译系统的特点和规定 参阅相应的手册 本书选定的上机环境是tcv2 0 dos操作系统 2 c语言的特点c语言同时具有汇编语言和高级语言的优势 1 语言简洁 紧凑 使用方便 灵活 2 运算符极其丰富 3 生成的目标代码质量高 程序执行效率高 4 可移植性好 较之汇编语言 5 可以直接操纵硬件 3 在c语言中 除实现顺序 选择和循环三种基本结构等的9条控制语句外 输入输出操作均由标准库函数 不是c语言的组成部分 来实现 所以学习c语言 不仅要学习这9条控制语句和各种运算符 而且要学习并掌握常用标准库函数的使用 return 1 2 语言程序的结构与书写规则 1 2 1 语言程序的总体结构一个完整的 语言程序 是由一个main 函数 又称主函数 和若干个其它函数结合而成的 或仅由一个main 函数构成 案例1 1 仅由main 函数构成的 语言程序 案例代码文件名 al1 1 c 功能 仅由main 函数构成的 语言程序示例 main printf thisisacprogram n 程序运行结果 thisisacprogram 程序演示 案例1 2 由main 函数和1个其它函数max 构成的 语言程序 案例代码文件名 al1 2 c 功能 由main 函数和1个其它函数max 构成的 语言程序示例 intmax intx inty return x y x y main intnum1 num2 printf inputthefirstintegernumber scanf d 程序运行情况 inputthefirstintegernumber 6 inputthesecondintegernumber 9 max 9 程序演示 案例1 3 改写 案例1 2 交换main 函数和max 函数的前后位置 源程序略 程序运行情况 inputthefirstintegernumber 6 inputthesecondintegernumber 9 max 91 函数是 语言程序的基本单位 main 函数的作用 相当于其它高级语言中的主程序 其它函数的作用 相当于子程序 2 c语言程序总是从main 函数开始执行 一个 语言程序 总是从main 函数开始执行 而不论其在程序中的位置 当主函数执行完毕时 亦即程序执行完毕 习惯上 将主函数main 放在最前头 1 2 2函数的一般结构任何函数 包括主函数main 都是由函数说明和函数体两部分组成 其一般结构如下 函数类型 函数名 函数参数表 函数说明部分 说明语句部分 执行语句部分 函数体部分 1 使用的语法符号约定 方括号表示可选 即可以指定 也可以缺省 省略号表示前面的项可以重复 多 含2 中选12 函数说明由函数类型 可缺省 函数名和函数参数表三部分组成 其中函数参数表的格式为 数据类型形参 数据类型形参2 例如 案例1 2 中的函数max 其函数说明各部分如图1 1所示 函数类型函数名函数参数表 intmax intx inty 图1 1函数说明部分结构图注意 在旧标准中 函数可以缺省参数表 3 函数体在函数说明部分的下面 大括号 必须配对使用 内的部分 函数体一般由说明语句和可执行语句两部分构成 1 说明语句部分说明语句部分由变量定义 自定义类型定义 自定义函数说明 外部变量说明等组成 2 可执行语句一般由若干条可执行语句构成 图1 2是 案例1 2 的main 函数体的示意图 主函数main main intnum1 num2 变量定义部分printf inputthefirstintegernumber scanf d 图1 2函数体结构示意图4 说明 1 函数体中的变量定义语句 必须在所有可执行语句之前 下面程序中变量定义语句 intmax 的位置是非法的 main intx y 变量定义语句 定义2个整型变量x y x 3 可执行的赋值语句 将3赋值给变量x y 6 可执行的赋值语句 将6赋值给变量y intmax 变量定义语句 出现在可执行的赋值语句 x 3 和 y 6 之后 非法 max x y x y printf max d n max 解决办法很简单 请读者自己思考 2 如果不需要 也可以缺省变量定义语句 1 2 3源程序书写格式1 所有语句都必须以分号 结束 函数的最后一个语句也不例外 2 程序行的书写格式自由 既允许1行内写几条语句 也允许1条语句分写在几行上 例如 案例1 2 的主函数main 也可改写成如下所示的格式 main intnum1 num2 printf inputthefirstintegernumber scanf d 如果某条语句很长 一般需要将其分写在几行上 3 允许使用注释 c语言的注释格式为 例如 在 案例1 1 和 案例1 2 中 以及本节其它部分给出的源程序中 凡是用 和 括起来的文字 都是注释 1 和 必须成对使用 且 和 以及 和 之间不能有空格 否则都出错 技巧 为避免遗漏必须配对使用的符号 例如注释符号 函数体的起止标识符 花括号 圆括号等等 在输入时 可连续输入这些起止标识符 然后再在其中进行插入来完成内容的编辑 在起止标识符嵌套时 以及相距较远时 这样做更有必要 2 注释的位置 可以单占1行 也可以跟在语句的后面 3 如果1行写不下 可另起1行继续写 4 注释中允许使用汉字 在非中文操作系统下 看到的是一串乱码 但不影响程序运行 return 1 3c语言的语句和关键字 1 3 1c语言的语句与其它高级语言一样 语言也是利用函数体中的可执行语句 向计算机系统发出操作命令 按照语句功能或构成的不同 可将 语言的语句分为五类 1 控制语句控制语句完成一定的控制功能 语言只有 条控制语句 又可细分为三种 1 选择结构控制语句if else switch 2 循环结构控制语句do while for while break continue 3 其它控制语句goto return2 函数调用语句函数调用语句由一次函数调用加一个分号 语句结束标志 构成 例如 printf thisisacfunctionstatement 3 表达式语句表达式语句由表达式后加一个分号构成 最典型的表达式语句是 在赋值表达式后加一个分号构成的赋值语句 例如 num 5 是一个赋值表达式 而 num 5 却是一个赋值语句 4 空语句空语句仅由一个分号构成 显然 空语句什么操作也不执行 例如 下面就是一个空语句 5 复合语句复合语句是由大括号括起来的一组 也可以是1条 语句构成 例如 main 复合语句 注意 右括号后不需要分号 复合语句的性质 1 在语法上和单一语句相同 即单一语句可以出现的地方 也可以使用复合语句 2 复合语句可以嵌套 即复合语句中也可出现复合语句 1 3 2关键字c语言的关键字共有32个 根据关键字的作用 可分其为数据类型关键字 控制语句关键字 存储类型关键字和其它关键字四类 1 数据类型关键字 12个 char double enum float int long short signed struct union unsigned void 2 控制语句关键字 12个 break case continue default do else for goto if return switch while 3 存储类型关键字 4个 auto extern register static 4 其它关键字 4个 const sizeof typedef volatile return 1 4turbocv2 0的基本操作 1 运行一个 语言程序的一般过程2 tc的启动 退出与命令菜单3 编辑并保存一个 语言源程序4 编译 连接 单个源程序文件5 运行与查看结果6 编辑下一个新的源程序 return 1 运行一个 语言程序的一般过程 urbo 是一个集源程序编辑 编译 连接 运行与调试于一体 用菜单驱动的集成软件环境 运行一个 语言程序的一般过程 1 启动tc 进入tc集成环境 2 编辑 或修改 源程序 3 编译 如果编译成功 则可进行下一步操作 否则 返回 2 修改源程序 再重新编译 直至编译成功 4 连接 如果连接成功 则可进行下一步操作 否则 根据系统的错误提示 进行相应修改 再重新连接 直至连接成功 5 运行 通过观察程序运行结果 验证程序的正确性 如果出现逻辑错误 则必须返回 2 修改源程序 再重新编译 连接和运行 直至程序正确 6 退出tc集成环境 结束本次程序运行 return 2 tc的启动 退出与命令菜单 1 启动turboc tc 画面演示 启动turboc后 其主菜单条横向排列在屏幕顶端 并被激活 其中file主项成为当前项 主菜单的下面 是edit 编辑 窗口和message 消息 窗口 两个窗口中 顶端横线为双线显示的 表示该窗口是活动窗口 编辑窗口的顶端为状态行 其中 line1col1 显示光标所在的行号和列号 即光标位置 insert 表示编辑状态处于 插入 当处于 改写 状态时 此处为空白 d noname c 显示当前正在编辑的文件名 显示为 noname c 时 表示用户尚未给文件命名 屏幕底端是7个功能键的说明 以及numlock键的状态 显示 num 时 表示处于 数字键 状态 空白 表示 控制键 状态 2 命令菜单的使用1 按下功能键f10 激活主菜单 如果主菜单已经被激活 则直接转下一步 2 用左 右方向键移动光带 定位于需要的主项上 然后再按回车键 打开其子菜单 纵向排列 3 用上 下方向键移动光带 定位于需要的子项上 回车即可 执行完选定的功能后 系统自动关闭菜单 注意 菜单激活后 又不使用 可再按f10 esc键关闭 返回原来状态 3 退出turboc退出tc有两种方法 1 菜单法 file quit 先选择file主项 再选择并执行quit子项 2 快捷键法 alt x 先按下alt键并保持 再按字母键 然后同时放开 return 3 编辑并保存一个 语言源程序 1 激活主菜单 选择并执行file load项 快捷键键 f3 2 在 loadfilename 窗口 输入源程序文件名 文件名的输入有两种方法 直接输入和选择输入 1 直接输入按照文件名的组成字符串 逐个字符输入即可 如果是已经存在的文件 系统就在编辑窗口显示该文件的内容 可供编辑 修改 如果是新文件 则给出一个空白编辑窗口 可供输入新的源程序 如果该文件不在当前目录下 则需要冠以路径名和 或 盘符 2 选择文件 仅适用于已经存在的源程序文件 空回车 打开当前目录下 后缀为 的所有文件的文件名窗口 用上 下 左 右方向键 将光带定位于所需的文件名上 按回车键 3 常用编辑操作在编辑源程序过程中 随时都可以按f2键 或file save 将当前编辑的文件存盘 然后继续编辑 这是一个良好的习惯 关于在线帮助 在任何窗口 或状态 下 按f1键激活活动窗口 或状态 的在线帮助 下一页 pagedown 返回上一页 pageup 关闭在线帮助 返回原窗口 或状态 esc 返回前一个在线帮助屏 alt f1 无论在线帮助是否被激活 返回在线帮助索引 f1 激活在线帮助后 再按f1 则返回在线帮助索引 以便查询其它类别在线帮助信息 查询库函数的在线帮助信息 f1 将光标移到需要查询函数名的首字符上 然后键入 f1 即可获得该库函数的在线帮助信息 注 为简化描述 用 代表 ctrl 键 fn就是ctrl fn 下同 return 4 编译 连接 单个源程序文件选择并执行compile makeexefile项 快捷键 f9 则tc将自动完成对当前正在编辑的源程序文件的编译 连接 并生成可执行文件 如果源程序有语法错误 系统将在屏幕中央的 compiling 编译 窗口底端提示 error pressanykey 错误 按任意键 此时 按空格键 屏幕下端的 message 消息 窗口被激活 显示出错 或警告 信息 光带停在第一条消息上 这时 edit 编辑 窗口中也有一条光带 它总是停在编译错误在源代码中的相应位置 注意 当用上 下键移动消息窗口中的光带时 编辑窗口中的光带也随之移动 始终跟踪源代码中的错误位置 return 5 运行与查看结果 1 运行当前正在编辑的源程序文件选择并执行run run项 快捷键 f9 程序运行结束后 仍返回到编辑窗口 当你认为自己的源程序不会有编译 连接错误时 也可直接运行 即跳过对源程序的编译 连接步骤 这时 tc将一次完成从编译 连接到运行的全过程 2 查看运行结果选择并执行run userscreen项 快捷键 alt f5 查看完毕后 按任一键返回编辑窗口 如果发现逻辑错误 则可在返回编辑窗口后 进行修改 然后再重新编译 连接 运行 直至正确为止 return 6 编辑下一个新的源程序选择并执行file new项即可 如果屏幕提示如下确认信息 noname cnotsaved save y n 如果需要保存当前正在编辑的源程序 则键入 进入下一步操作 否则 键入 不保存 跳转到 2 1 系统提示换名 noname c直接输入你给源程序文件起的名字即可 2 系统给出一个空白的编辑窗口 可以开始编辑下一个新的源程序 return 第2章数据类型 运算符与表达式 2 1程序设计概述2 2c语言的数据类型2 3常量和变量2 4整型数据2 5实型数据2 6字符型数据2 7算术运算与算术表达式2 8赋值运算与赋值表达式2 9c语言特有的运算和运算符 return 2 1程序设计概述 一个程序应包括对数据的描述和对数据处理的描述 1 对数据的描述 即数据结构 数据结构是计算机学科的核心课程之一 有许多专门著作论述 本课程就不再赘述 在c语言中 系统提供的数据结构 是以数据类型的形式出现的 2 对数据处理的描述 即计算机算法 算法是为解决一个问题而采取的方法和步骤 是程序的灵魂 为此 著名计算机科学家沃思 nikiklauswirth 提出一个公式 数据结构 算法 程序实际上 一个程序除了数据结构和算法外 还必须使用一种计算机语言 并采用结构化方法来表示 return 2 2c语言的数据类型 c语言提供的数据结构 是以数据类型形式出现的 具体分类如下 1 基本类型分为整型 实型 又称浮点型 字符型和枚举型四种 2 构造类型分为数组类型 结构类型和共用类型三种 3 指针类型 在第9章中介绍 4 空类型c语言中的数据 有常量和变量之分 它们分别属于上述这些类型 本章将介绍基本类型中的整型 实型和字符型三种数据 return 2 3常量和变量 2 3 1常量1 常量的概念在程序运行过程中 其值不能被改变的量称为常量 2 常量的分类 1 整型常量 2 实型常量 3 字符常量 4 符号常量 常量的类型 可通过书写形式来判别 2 3 2变量1 变量的概念在程序运行过程中 其值可以被改变的量称为变量 2 变量的两个要素 1 变量名 每个变量都必须有一个名字 变量名 变量命名遵循标识符命名规则 2 变量值 在程序运行过程中 变量值存储在内存中 在程序中 通过变量名来引用变量的值 标识符命名规则 1 有效字符 只能由字母 数字和下划线组成 且以字母或下划线开头 2 有效长度 随系统而异 但至少前 个字符有效 如果超长 则超长部分被舍弃 例如 由于student name和student number的前 个字符相同 有的系统认为这两个变量 是一回事而不加区别 在tcv2 0中 变量名 标识符 的有效长度为 个字符 缺省值为 3 c语言的关键字不能用作变量名 注意 c语言对英文字母的大小敏感 即同一字母的大小写 被认为是两个不同的字符 习惯上 变量名和函数名中的英文字母用小写 以增加可读性 思考题 在c语言中 变量名total与变量名total total total等是同一个变量吗 标识符命名的良好习惯 见名知意 所谓 见名知意 是指 通过变量名就知道变量值的含义 通常应选择能表示数据含义的英文单词 或缩写 作变量名 或汉语拼音字头作变量名 例如 name xm 姓名 sex xb 性别 age nl 年龄 salary gz 工资 4 变量的定义与初始化在 语言中 要求对所有用到的变量 必须先定义 后使用 且称在定义变量的同时进行赋初值的操作为变量初始化 1 变量定义的一般格式 存储类型 数据类型变量名 变量名2 例如 floatradius length area 2 变量初始化的一般格式 存储类型 数据类型变量名 初值 变量名2 初值2 例如 floatradius 2 5 length area return 2 4整型数据 2 4 1整型变量1 分类根据占用内存字节数的不同 整型变量又分为 类 1 基本整型 类型关键字为int 2 短整型 类型关键字为short int 3 长整型 类型关键字为long int 4 无符号整型 无符号型又分为无符号基本整型 unsigned int 无符号短整型 unsignedshort 和无符号长整型 unsignedlong 三种 只能用来存储无符号整数 2 占用内存字节数与值域上述各类型整型变量占用的内存字节数 随系统而异 在16位操作系统中 一般用 字节表示一个int型变量 且long型 字节 int型 字节 short型 字节 显然 不同类型的整型变量 其值域不同 占用内存字节数为n的 有符号 整型变量 其值域为 2n 8 1 2n 8 1 1 无符号整型变量的值域为 0 2n 8 1 例如 pc机中的一个int型变量 其值域为 22 8 1 22 8 1 1 即 32768 32767 一个unsigned型变量的值域为 0 22 8 1 即0 65535 2 4 2整型常量 三种表示形式整型常量即整常数 在 语言中可用三种形式表示 1 十进制 例如10 36 2 八进制 以数字 开头 例如012 3 十六进制 以数字 小写字母x开头 例如0 x36 分类 1 基本整型 在16位机中 用2字节存储 其数据范围与int型变量一样 2 长整型 在数值后面加 l l 对超出基本整型值域的整型常量 可使用长整型常量表示 其取值范围可达 例如 123l 315 等 类型匹配规则类型匹配规则为 一个整型常量 可以赋给能容纳下其值的整型变量 例如 其值在 的整型常量 可以赋给int型变量和longint型变量 其值在 的整型常量 就只能赋给longint型变量 注意 常量无unsigned型 但一个非负整型常量 只要它的值不超过相应变量的值域 即取值范围 也可以赋给unsigned型变量 return 2 5实型数据 2 5 1实型变量 语言的实型变量 分为两种 1 单精度型 类型关键字为float 一般占 字节 位 提供 位有效数字 2 双精度型 类型关键字为double 一般占 个字节 提供15 16位有效数字 2 5 2实型常量 表示形式实型常量即实数 在 语言中又称浮点数 其值有两种表达形式 1 十进制形式 例如3 14 9 8 2 指数形式 e e 例如3 0 5等 关于类型实型常量不分float型和double型 一个实型常量 可以赋给一个实型变量 float型或double型 return 2 6字符型数据 2 6 1字符常量1 字符常量的定义用一对单引号括起来的单个字符 称为字符常量 例如 a 等 2 转义字符 语言还允许使用一种特殊形式的字符常量 就是以反斜杠 开头的转义字符 注意 如果反斜杠或单引号本身作为字符常量 必须使用转义字符 案例2 1 用转义字符输出可打印字符和不可打印字符 案例代码文件名 al2 1 c 程序功能 用转义字符输出可打印字符和不可打印字符 main printf x4f x4b x21 n 等价于printf ok n printf x15 xab n 程序运行结果如下 程序演示 2 6 2字符变量字符变量的类型关键字为char 一般占用1字节内存单元 1 变量值的存储字符变量用来存储字符常量 将一个字符常量存储到一个字符变量中 实际上是将该字符的ascii码值 无符号整数 存储到内存单元中 例如 charch1 ch2 定义两个字符变量 ch1 ch2 ch1 a ch2 b 给字符变量赋值 2 特性字符数据在内存中存储的是字符的ascii码 一个无符号整数 其形式与整数的存储形式一样 如图2 4所示 所以 语言允许字符型数据与整型数据之间通用 1 一个字符型数据 既可以字符形式输出 也可以整数形式输出 案例2 2 字符变量的字符形式输出和整数形式输出 案例代码文件名 al2 2 c 程序功能 用字符形式和整数形式输出字符变量 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 程序演示 2 允许对字符数据进行算术运算 此时就是对它们的ascii码值进行算术运算 案例2 3 字符数据的算术运算 案例代码文件名 al2 3 c 程序功能 字符数据的算术运算 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 程序演示 思考题 用字符形式输出一个大于256的数值 会得到什么结果 2 6 3字符串常量1 字符串常量的概念和字符串长度字符串常量是用一对双引号括起来的若干字符序列 字符串中字符的个数称为字符串长度 长度为0的字符串 即一个字符都没有的字符串 称为空串 表示为 一对紧连的双引号 例如 howdoyoudo goodmorning 等 都是字符串常量 其长度分别为14和13 空格也是一个字符 如果反斜杠和双引号作为字符串中的有效字符 则必须使用转义字符 例如 1 c msdos v6 22 c msdos v6 22 2 isay goodbye isay goodbye 2 字符串的存储c语言规定 在存储字符串常量时 由系统在字符串的末尾自动加一个 0 作为字符串的结束标志 注意 在源程序中书写字符串常量时 不必加结束字符 0 否则画蛇添足 如果有一个字符串为 china 则它在内存中的实际存储如下所示 最后一个字符 0 是系统自动加上的 它占用 字节而非 字节内存空间 综上所述 字符常量 a 与字符串常量 a 是两回事 1 定界符不同 字符常量使用单引号 而字符串常量使用双引号 2 长度不同 字符常量的长度固定为1 而字符串常量的长度 可以是0 也可以是某个整数 3 存储要求不同 字符常量存储的是字符的ascii码值 而字符串常量 除了要存储有效的字符外 还要存储一个结束标志 0 return 2 7算术运算与算术表达式 在 语言中 除控制语句和输入输出函数外 其它所有基本操作都作为运算符处理 1 五种基本算术运算符 减法 取负 求余数 1 关于除法运算 c语言规定 两个整数相除 其商为整数 小数部分被舍弃 例如 5 2 2 2 关于求余数运算 要求两侧的操作数均为整型数据 否则出错 2 表达式和算术表达式 1 表达式的概念用运算符和括号将运算对象 常量 变量和函数等 连接起来的 符合 语言语法规则的式子 称为表达式 单个常量 变量或函数 可以看作是表达式的一种特例 将单个常量 变量或函数构成的表达式称为简单表达式 其它表达式称之为复杂表达式 2 算术表达式的概念表达式中的运算符都是算术运算符 例如 3 6 9 x y 2 1等 都是算术表达式 良好的源程序书写习惯 在表达式中 在双目运算符的左右两侧各加一个空格 可增强程序的可读性 请比较表达式 x y 2 1 与 x y 2 1 您认为哪个的可读性更好一些 3 运算符的优先级与结合性 1 语言规定了运算符的优先级和结合性 所谓结合性是指 当一个操作数两侧的运算符具有相同的优先级时 该操作数是先与左边的运算符结合 还是先与右边的运算符结合 自左至右的结合方向 称为左结合性 反之 称为右结合性 结合性是 语言的独有概念 除单目运算符 赋值运算符和条件运算符是右结合性外 其它运算符都是左结合性 2 表达式求值1 按运算符的优先级高低次序执行 例如 先乘除后加减 2 如果在一个运算对象 或称操作数 两侧的运算符的优先级相同 则按 语言规定的结合方向 结合性 进行 例如 算术运算符的结合方向是 自左至右 即 在执行 a b c 时 变量b先与减号结合 执行 a b 然后再执行加c的运算 4 数据类型转换 1 在 语言中 整型 实型和字符型数据间可以混合运算 因为字符数据与整型数据可以通用 如果一个运算符两侧的操作数的数据类型不同 则系统按 先转换 后运算 的原则 首先将数据自动转换成同一类型 然后在同一类型数据间进行运算 转换规则如图2 5所示 1 横向向左的箭头 表示必须的转换 char和short型必须转换成int型 float型必须转换成double型 2 纵向向上的箭头 表示不同类型的转换方向 例如 int型与double型数据进行混合运算 则先将int型数据转换成double型 然后在两个同类型的数据间进行运算 结果为double型 注意 箭头方向只表示数据类型由低向高转换 不要理解为int型先转换成unsigned型 再转换成long型 最后转换成double型 2 除自动转换外 语言也允许强制转换 数据类型强制转换的一般格式为 要转换成的数据类型 被转换的表达式 当被转换的表达式是一个简单表达式时 外面的一对圆括号可以缺省 例如 double a 等价于 double a 将变量a的值转换成double型 int x y 将x y的结果转换成int型 float 5 2 等价于 float 5 2 将5转换成实型 再除以2 2 5 float 5 2 将5整除2的结果 2 转换成实型 2 0 注意 强制转换类型得到的是一个所需类型的中间量 原表达式类型并不发生变化 例如 double a只是将变量a的值转换成一个double型的中间量 其数据类型并未转换成double型 return 2 8赋值运算与赋值表达式 1 赋值运算赋值符号 就是赋值运算符 它的作用是将一个表达式的值赋给一个变量 赋值运算符的一般形式为 变量 赋值表达式例如 x 5y float 5 2如果表达式值的类型 与被赋值变量的类型不一致 但都是数值型或字符型时 系统自动地将表达式的值转换成被赋值变量的数据类型 然后再赋值给变量 思考题 假设变量num的数据类型为float 其值为2 5 则执行 num int num 后 num的值等于多少 2 复合赋值运算复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的 复合赋值运算的一般格式为 变量双目运算符 表达式 复合赋值运算符它等价于 变量 变量双目运算符 表达式 当表达式为简单表达式时 表达式外的一对圆括号才可缺省 否则可能出错 例如 x 3 等价于x x 3 y x 6 等价于y y x 6 而不是y y x 6 c语言规定的10种复合赋值运算符如下 复合算术运算符 5个 复合位运算符 5个 3 赋值表达式由赋值运算符或复合赋值运算符 将一个变量和一个表达式连接起来的表达式 称为赋值表达式 1 一般格式变量 复合 赋值运算符表达式 2 赋值表达式的值任何一个表达式都有一个值 赋值表达式也不例外 被赋值变量的值 就是赋值表达式的值 例如 a 5 这个赋值表达式 变量a的值 就是它的值 return 2 9c语言特有的运算和运算符 2 9 1自增 自减 运算1 作用自增运算使单个变量的值增 自减运算使单个变量的值减 2 用法与运算规则自增 自减运算符都有两种用法 1 前置运算 运算符放在变量之前 变量 变量先使变量的值增 或减 然后再以变化后的值参与其它运算 即先增减 后运算 2 后置运算 运算符放在变量之后 变量 变量 变量先参与其它运算 然后再使变量的值增 或减 即先运算 后增减 案例2 4 自增 自减运算符的用法与运算规则示例 案例代码文件名 al2 4 c 程序功能 自增 自减运算符的用法与运算规则示例 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 程序演示 思考题 如果将案例 y x 语句中的前置运算改为后置 y x y x 语句中的后置运算改为前置 y x 程序运行结果会如何 3 说明 1 自增 自减运算 常用于循环语句中 使循环控制变量加 或减 以及指针变量中 使指针指向下 或上 一个地址 2 自增 自减运算符 不能用于常量和表达式 例如 5 a b 等都是非法的 3 在表达式中 连续使同一变量进行自增或自减运算时 很容易出错 所以最好避免这种用法 2 8 2逗号运算 及其表达式 语言提供一种用逗号运算符 连接起来的式子 称为逗号表达式 逗号运算符又称顺序求值运算符 1 一般形式表达式 表达式 表达式n2 求解过程自左至右 依次计算各表达式的值 表达式n 的值即为整个逗号表达式的值 例如 逗号表达式 a 3 5 a 4 的值 60 先求解a 3 5 得a 15 再求a 4 60 所以逗号表达式的值 60 又例如 逗号表达式 a 3 5 a 4 a 5 的值 20 先求解a 3 5 得a 15 再求a 4 60 最后求解a 5 20 所以逗号表达式的值 20 注意 并不是任何地方出现的逗号 都是逗号运算符 很多情况下 逗号仅用作分隔符 return 第3章顺序结构程序设计 为了让计算机处理各种数据 首先就应该把源数据输入到计算机中 计算机处理结束后 再将目标数据信息以人能够识别的方式输出 c语言中的输入输出操作 是由c语言编译系统提供的库函数来实现 3 1格式化输出 printf 函数3 2格式化输入 scanf 函数3 3单个字符输入输出 getchar 和putchar 函数3 4顺序结构程序设计良好的源程序书写风格 顺序程序段左对齐 return 3 1格式化输出 printf 函数 printf 函数的作用 向计算机系统默认的输出设备 一般指终端或显示器 输出一个或多个任意类型的数据 3 1 1printf 函数的一般格式 案例3 1 已知圆半径radius 1 5 求圆周长和圆面积 案例代码文件名 al3 1 c main floatradius length area pi 3 1415926 radius 1 5 length 2 pi radius 求圆周长 area pi radius radius 求圆面积 printf radius f n radius 输出圆半径 printf length 7 2f area 7 2f n length area 输出圆周长 面积 程序演示 程序运行结果如下 radius 1 500000length 9 42 area 7 07printf 函数的一般格式如下 printf 格式字符串 输出项表 1 格式字符串 格式字符串 也称 转换控制字符串 可以包含三种字符 1 格式指示符 格式指示符的一般形式如下 标志 宽度 精度 f n h l 类型 常用的标志字符如表3 1所示 常用的宽度指示符如表3 2所示 常用的精度指示符如表3 3所示 长度修饰符如表3 4所示 类型转换字符如表3 5所示 2 转义字符例如 案例3 1 中printf 函数中的 n 就是转义字符 输出时产生一个 换行 操作 3 普通字符 除格式指示符和转义字符之外的其它字符 格式字符串中的普通字符 原样输出 例如 案例3 1 中 printf radius f n radius 语句中的 radius printf length 7 2f area 7 2f n length area 语句中的 length area 等都是普通字符 2 输出项表输出项表是可选的 如果要输出的数据不止1个 相邻2个之间用逗号分开 下面的printf 函数都是合法的 1 printf iamastudent n 2 printf d 3 2 3 printf a fb 5d n a a 3 必须强调 格式字符串 中的格式指示符 必须与 输出项表 中 输出项的数据类型一致 否则会引起输出错误 3 1 2格式指示符输出不同类型的数据 要使用不同的类型转换字符 1 类型转换字符d 以带符号的十进制整数形式输出 案例3 2 类型转换字符d的使用 案例代码文件名 al3 2 c main intnum1 123 longnum2 123456 用3种不同格式 输出int型数据num1的值 printf num1 d num1 5d num1 5d num1 2d n num1 num1 num1 num1 用3种不同格式 输出long型数据num2的值 printf num2 ld num2 8ld num2 5ld n num2 num2 num2 printf num1 ld n num1 程序演示 程序运行结果如下 num1 123 num1 123 num1 123 num1 123num2 123456 num2 123456 num2 123456num1 16908411对于整数 还可用八进制 无符号形式 o 小写字母o 和十六进制 无符号形式 x 输出 对于unsigned型数据 也可用 u格式符 以十进制 无符号形式输出 所谓无符号形式是指 不论正数还是负数 系统一律当作无符号整数来输出 例如 printf d o x n 1 1 1 2 类型转换字符f 以小数形式 按系统默认的宽度 输出单精度和双精度实数 案例3 3 类型转换字符f的使用 案例代码文件名 al3 3 c main floatf 123 456 doubled1 d2 d1 1111111111111 111111111 d2 2222222222222 222222222 printf f 12f 12 2f 12 2f 2f n f f f f f printf d1 d2 f n d1 d2 程序演示 程序运行结果如下 123 456001 123 456001 123 46 123 46 123 46d1 d2 3333333333333 333010 本案例程序的输出结果中 数据123 456001和3333333333333 333010中的001和010都是无意义的 因为它们超出了有效数字的范围 对于实数 也可使用格式符 e 以标准指数形式输出 尾数中的整数部分大于等于1 小于10 小数点占一位 尾数中的小数部分占5位 指数部分占4位 如e 03 其中e占一位 指数符号占一位 指数占2位 共计11位 也可使用格式符 g 让系统根据数值的大小 自动选择 f或 e格式 且不输出无意义的零 3 类型转换字符c 输出一个字符 只占一列宽度 案例3 4 类型转换字符c的使用 案例代码文件名 al3 4 c main charc a inti 65 printf c c 5c d n c c c printf i d c i i 程序运行结果如下 c a a 65i 65 a 程序演示 需要强调的是 在c语言中 整数可以用字符形式输出 字符数据也可以用整数形式输出 将整数用字符形式输出时 系统首先求该数与256的余数 然后将余数作为ascii码 转换成相应的字符输出 4 类型转换字符s 输出一个字符串 案例3 5 类型转换字符s的使用 案例代码文件名 al3 10 c main printf s 5s 10s internet internet internet printf 10 5s 10 5s 4 5s n internet internet internet 程序演示 程序运行结果如下 internet internet internet inter inter inter注意 系统输出字符和字符串时 不输出单引号和双引号 3 1 3使用说明 1 printf 可以输出常量 变量和表达式的值 但格式控制中的格式说明符 必须按从左到右的顺序 与输出项表中的每个数据一一对应 否则出错 例如 printf str s f d i f n internet 1 0 2 0 3 5 china 是错误的 2 格式字符x e g可以用小写字母 也可以用大写字母 使用大写字母时 输出数据中包含的字母也大写 除了x e g格式字符外 其它格式字符必须用小写字母 例如 f不能写成 f 3 格式字符紧跟在 后面就作为格式字符 否则将作为普通字符使用 原样输出 例如 printf c c f f n c f 中的第一个c和f 都是普通字符 return 3 2格式化输入 scanf 函数 scanf 函数是用来从外部输入设备向计算机主机输入数据的 3 2 1scanf 函数的一般格式 案例3 6 已知圆柱体的底半径radius 1 5 高high 2 0 求其体积 案例代码文件名 al3 6 c main floatradius 1 5 high 2 0 pi 3 14159 vol vol pi radius radius high 求体积 printf vol 7 2f n vol 输出求出的体积 程序演示 案例3 7 已知圆柱体的底半径为radius 高为high 求其体积 案例代码文件名 al3 7 c 功能 说明函数scanf 的格式及作用 main floatradius high vol pi 3 1415926 printf pleaseinputradius 程序演示 程序运行结果如下 pleaseinputradius high 1 5 2 0 radius 1 50 high 2 00 vol 14 14 在程序中给计算机提供数据 可以用赋值语句 也可以用输入函数 在c语言中 可使用scanf 函数 通过键盘输入 给计算机同时提供多个 任意的数据 1 scanf 函数的一般格式scanf 格式字符串 输入项首地址表 1 格式字符串 格式字符串可以包含3种类型的字符 格式指示符 空白字符 空格 tab键和回车键 和非空白字符 又称普通字符 格式指示符与printf 函数的相似 空白字符作为相邻2个输入数据的缺省分隔符 非空白字符在输入有效数据时 必须原样一起输入 2 输入项首地址表 由若干个输入项首地址组成 相邻2个输入项首地址之间 用逗号分开 输入项首地址表中的地址 可以是变量的首地址 也可以是字符数组名或指针变量 变量首地址的表示方法 变量名其中 是地址运算符 例如 案例3 7 中的 radius 是指变量radius在内存中的首地址 2 scanf 函数的功能 从键盘上接收格式化输入 运行 案例3 7 的程序时 从键盘上输入2个实数 分别存入 radius high起始的存储单元中 即输入两个实数分别赋给radius和high 3 2 2格式指示符格式指示符的一般形式为 宽度 f n h l 类型字符1 类型字符类型字符如表3 6所示 例如 在 案例3 7 的scanf 函数语句中 格式字符串 f f 2 宽度n指定该项输入数据所占列数为n 换句话说 读取输入数据中相应的n位 但按需要的位数赋给相应的变量 多余部分被舍弃 例如 scanf 3c 3c 假设输入 abcdefg 则系统将读取的 abc 中的 a 赋给变量ch1 将读取的 def 中的 d 赋给变量ch2 所以printf 函数的输出结果为 ch1 a ch2 d 3 赋值抑制字符 表示本输入项对应的数据读入后 不赋给相应的变量 该变量由下一个格式指示符输入 例如 scanf 2d 2d 3d 假设输入 123456789 则系统将读取 12 并赋值给num1 读取 34 但舍弃掉 的作用 读取 567 并赋值给num2 所以 printf 函数的输出结果为 num1 12 num2 567 4 类型修饰符 f n h l 其含义与printf 中的一样 分别为远指针 近指针 短整型和长整型 3 2 3数据输入操作1 如果相邻2个格式指示符之间 不指定数据分隔符 如逗号 冒号等 则相应的2个输入数据之间 至少用一个空格分开 或者用tab键分开 或者输入1个数据后 按回车 然后再输入下1个数据 例如 scanf d d 假设给num1输入12 给num2输入36 则正确的输入操作为 12 36 或者 12 36 注 使用 符号表示按回车键操作 在输入数据操作中的作用是 通知系统输入操作结束 2 格式字符串 中出现的普通字符 包括转义字符形式的字符 务必原样输入 例如 scanf d d 假设给num1输入12 给num2输入36 正确的输入操作为 num1 12 num2 36 n 提高人机交互性建议 为改善人机交互性 同时简化输入操作 在设计输入操作时 一般先用printf 函数输出一个提示信息 再用scanf 函数进行数据输入 例如 将scanf num1 d num2 d n 3 输入数据时 遇到以下情况 系统认为该数据结束 1 遇到空格 或者回车键 或者tab键 2 遇到输入域宽度结束 例如 3d 只取3列 3 遇到非法输入 例如 在输入数值数据时 遇到字母等非数值符号 数值符号仅由数字字符0 9 小数点和正负号构成 4 使用格式说明符 c 输入单个字符时 空格
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业产业集群农业科技成果转化与推广策略报告
- 行政事业单位预算编制指南
- 建筑方案设计部门职责分工
- 2024-2025学年高中物理 第3章 磁场 习题课4 带电粒子在磁场或复合场中的运动说课稿 粤教版选修3-1
- 镁冶炼废弃物处理与再利用分析报告
- 海水养殖鲽鱼创新创业项目商业计划书
- 灌排泵站运行工三级安全教育(车间级)考核试卷及答案
- 摄影器材企业人才策略研究
- 橡胶带在户外广告牌固定材料中的耐风性能
- 木片玩具安全规范解读
- 2025年保密教育线上培训试题参考答案
- 装载机司机安全考试模拟试题(含答案)
- 安全生产法2025全文
- 中储粮薪酬管理办法
- 高空外墙清洗员安全教育培训手册
- 赖特-罗比住宅详细分析
- 资产评估机构采购方案投标文件(技术方案)
- 《老年上消化道出血急诊诊疗专家共识(2024)》解读
- 食品执行标准对照表
- 维修人员考核管理办法
- 销售商务礼仪培训课程
评论
0/150
提交评论