




已阅读5页,还剩164页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计 第2版 第一章 C语言概述 本章要点 程序设计语言的基本概念C程序的概貌在计算机上运行C程序的方法 主要内容 1 1计算机与程序 程序设计语言1 2 语言的出现和发展过程1 3简单的C语言程序1 4运行 程序的步骤和方法 1 1计算机与程序 程序设计语言 计算机 是由程序控制的计算工具 计算机指令 由0和1所组成的指挥计算机工作的代码 指令系统 指令的集合 机器语言 一个型号机器语言的指令集合 高级语言 接近于自然语言和数学语言 程序 控制计算机按照人们的愿望工作 编译系统 把用高级语言编写的程序翻译成机器语言程序 1 2 语言的出现和发展过程 C语言是国际上广泛流行的高级语言 C语言是在B语言的基础上发展起来的 B BCPL 语言是1970年由美国贝尔实验室设计的 并用于编写了第一个UNIX操作系统 在PDP7上实现 优点 精练 接近硬件 缺点 过于简单 数据无类型 1973年贝尔实验室的D M Ritchie在B语言的基础上设计出了C语言 对B取长补短 并用之改写了原来用汇编编写的UNIX 即UNIX第5版 但仅在贝尔实验室使用 1 2 语言的出现和发展过程 1975年UNIX第6版发布 C优点突出引起关注 1977年出现了 可移植C语言编译程序 推动了UNIX在各种机器上实现 C语言也得到推广 其发展相辅相成 1978年影响深远的名著 TheCProgrammingLanguage 由BrianW Kernighan和DennisM Ritchie合著 被称为标准C 之后 C语言先后移植到大 中 小 微型计算机上 已独立于UNIX和PDP 风靡世界 成为最广泛的几种计算机语言之一 1 2 语言的出现和发展过程 1983年 美国国家标准化协会 ANSI 根据C语言各种版本对C的发展和扩充 制定了新的标准ANSIC 比标准C有了很大的发展 1987年 ANSI公布了新标准 87ANSIC 1990年 国际标准化组织接受了87ANSIC为ISOC的标准 ISO9899 1990 1995年 ISO对C90作了一些修订 称为C95 1999年 ISO又对C语言标准进行修订 在基本保留原来的C语言特征的基础上 增加了一些面向对象的特征 命名为ISO IEC9899 1999 简称为C99 1 2 语言出现的历史背景 说明 目前的C语言编译系统大多数是以C89为基础进行开发的 而未实现C99建议的功能 并且厂商提供的不同版本的C编译系统所实现的语言功能和语法规则又略有差别 本课程基本上以C89为基础的 1 3简单的C语言程序 includevoidmain printf ThisisaCprogram n 文件包含 主函数 函数体开始 输出语句 函数体结束 说明 main 主函数名 void 函数类型每个C程序必须有一个主函数main 是函数开始和结束的标志 不可省每个C语句以分号结束使用标准库函数时应在程序开头一行写 include 说明 本程序的作用是输出一行信息 ThisisaCprogram 例1 2求两数之和 includevoidmain 求两数之和 inta b sum 声明 定义变量为整型 以下3行为C语句 a 123 b 456 sum a b printf sumis d n sum 说明 表示注释 注释只是给人看的 对编译和运行不起作用 所以可以用汉字或英文字符表示 可以出现在一行中的最右侧 也可以单独成为一行 说明 输出一行信息 sumis579 例1 3求两个整数中的大者 includevoidmain 主函数 intmax intx inty 对被调用函数max的声明 inta b c 定义变量a b c scanf d d 输出c的值 程序运行情况如下 8 5 输入8和5赋给a和b max 8 输出c的值 intmax intx inty intz if x y z x elsez y return z 说明 本程序包括main和被调用函数max两个函数 max函数的作用是将x和y中较大者的值赋给变量z return语句将z的值返回给主调函数main 1 3简单的C语言程序 C程序 1 C程序是由函数构成的 这使得程序容易实现模块化 2 一个函数由两部分组成 函数的首部 例1 3中的max函数首部intmax intx inty 函数体 花括号内的部分 若一个函数有多个花括号 则最外层的一对花括号为函数体的范围 函数体包括两部分 声明部分 inta b c 可缺省执行部分 由若干个语句组成 可缺省 1 3简单的C语言程序 注意 函数的声明部分和执行部分都可缺省 例如 voiddump 这是一个空函数 什么也不做 但是合法的函数 1 3简单的C语言程序 小结 3 C程序总是从main函数开始执行的 与main函数的位置无关 4 C程序书写格式自由 一行内可以写几个语句 一个语句可以分写在多行上 C程序没有行号 5 每个语句和数据声明的最后必须有一个分号 6 C语言本身没有输入输出语句 输入和输出的操作是由库函数scanf和printf等函数来完成的 C对输入输出实行 函数化 1 4运行 程序的步骤和方法 1 4 1运行 程序的步骤上机输入与编辑源程序对源程序进行编译与库函数连接运行目标程序 1 4运行 程序的步骤和方法 1 4 2上机运行 程序的方法目前使用的大多数C编译系统都是集成环境 IDE 的 可以用不同的编译系统对C程序进行操作常用的有TurboC2 0 TurboC 3 0 VisualC 等TurboC 3 0 是一个集成环境 它具有方便 直观和易用的界面 虽然它也是DOS环境下的集成环境 但是可以把启动TurboC 3 0集成环境的DOS执行文件tc exe生成快捷方式 也可以用鼠标操作 VisualC 也可以用VisualC 对C程序进行编译 TurboC 3 0的使用将TurboC 3 0编译程序装入磁盘某一目录下例如 放在C盘根目录下一级TC3 0子目录下 进入TurboC 3 0集成环境 在DOS环境下C TC3 0 tc 在Windows环境下找到可执行文件tc exe 执行该文件 主菜单 11个菜单项 FileEditSearchRunCompileDebugProjectOptionsWindowHelp 2 编辑源文件新建 单击 File 菜单下的 New 修改 选择 File Open 即单击 File 的下拉菜单中的 Open 项 修改已有的源程序 在编辑 EDIT 状态下光标表示当前进行编辑的位置 在此位置可以进行插入 删除或修改 直到自已满意为止 保存 在编辑 EDIT 状态下光标表示当前进行编辑的位置 在此位置可以进行插入 删除或修改 直到自已满意为止 3 对源程序进行编译选择 Compile 或 Alt F9 对源程序进行编译 c1 cpp源程序 出现1个错误 error 0个警告 warming 4 将目标程序进行连接 选择菜单 Compile Link 如果不出现错误 会得到一个后缀为 exe的可执行文件 5 执行程序 选菜单 Run Run 或按 Ctrl F9 键 6 退出TurboC 3 0环境选择 File Quit VisualC 6 0的使用VisualC 6 0是在Windows环境中工作的 进入VisualC 6 0集成环境在Windows双击图标 几个重要菜单项 File 文件 Edit 编辑 Project 项目 Build 构建 2 输入和编辑源程序新建一个源程序 选择 File 菜单下的 New 单击 OK 按钮后 即可进行输入和编辑源程序 保存之后源程序就以c1 1 c为文件名存放在D盘的cc目录下 在VC 主窗口的标题栏中显示出D cc c1 1 c 光标闪烁表示程序编辑窗口已激活 可以输入和编辑源程序了 别忘了保存 2 对源程序进行编译 编译是对单个文件进行的 源程序文件经编译后将生成目标文件 obj文件 供链接用 编译操作的方法为选择Build Compile菜单命令 也可使用快捷键 Ctrl F7 或直接点击编译按钮 编译按钮 为程序建立一个项目工作区 说明 编译时系统检查源程序中有无语法错误 并在主窗口下部的调试信息窗口输出错误 error 或警告 warming 信息 用户需要改正错误并重新编译 4 将目标程序进行连接 连接是将编译生成的目标程序与系统中的库函数连接 Link 生成可执行的 exe文件 链接操作的方法为选择Build Build菜单命令 也可使用快捷键 F7 或直接点击链接按钮 5 执行程序 选择Build Execute菜单命令或者快捷键 Ctrl F5 或直接点击运行按钮来运行程序 常用的工具按钮 6 查看结果程序执行后 系统将自动切换到输出结果的窗口 显示出运行结果如下 说明 按任何一键后 屏幕将自动切换到主窗口 7 关闭工作区如果已完成对一个程序的操作 不再对它进行其他的处理 需要关闭工作区 应当选择 File CloseWorkspace 关闭工作区 以结束对该程序的操作 第二章 数据的存储与运算 本章要点 数据的描述规则数据的操作规则 主要内容 2 1数据在计算机中是怎样存储的2 2整型数据的运算与分析2 3实型数据的运算与分析2 4字符型数据的运算2 5符号常量2 6算术运算符和算术表达式2 7C运算符和C表达式2 8提高部分 2 1数据在计算机中是怎样存储的 2 1 1数据在计算机中是以二进制形式存储的 计算机内部的信息都是用二进制来表示的 二进制数的特点是 逢二进一 每一位的值只有0和1两种可能 例如 十进制数10 用二进制表示是1010 它的含义是 每一个二进位代表不同的幂 最右边一位代表2的0次方 最右边第二位代表2的1次方 以此类推 显然一个很大的整数可能需要几十个 二进制位 来代表 2 1数据在计算机中是怎样存储的 2 1 2位 字节和地址 位 又称 比特 bit 每一个二极管元件称为一个 二进制位 是存储信息的最小单位 它的值是 1 或 0 字节 又称 拜特 byte 一般将8个 二进制位 组织成一组 称为 字节 地址 计算机的存储器包含许多存储单元 操作系统把所有存储单元以字节为单位编号 2 1数据在计算机中是怎样存储的 2 1 3不同类型数据的存储方式 整数的存储方式十进制整数先转换为二进制形式 例如 整数10以二进制形式表示是1010 直接把它存放在存储单元中 实数的存储形式实数采用指数形式存储 例如 123 456可以写成标准化指数形式0 123456 它包括前后两个部分 前面部分是数值部分 后面部分是指数部分 0 123456 数值部分指数部分 说明 标准化指数形式 其数值部分是一个小数 小数点前的数字是零 小数点后的第一位数字不是零 一个实数可以有多种指数表示形式 但只有一种属于标准化指数形式 2 1数据在计算机中是怎样存储的 3 字符的存储方式 字符包括字母 如A a X x 专用字符 如 等 计算机并不是将该字符本身存放到存储单元中 存储单元只能存储二进制信息 而是将字符的代码存储到相应的存储单元中 附录A是字符与代码的对照表 这是国际通过的ASCII代码 2 2整型数据的运算与分析 鸡兔同笼 在一个笼子里同时养着一些鸡和兔子 你想了解有多少只鸡和多少只兔 主人对你说 我只告诉你鸡和兔的总头数是16 总脚数是40 你能不能自己计算有多少只鸡和多少只兔 设 x 鸡数量y 兔数量 h 总头数f 总脚数有方程式 例题2 1 解题思路 x y h 1 2x 4y f 2 求x和y的公式 2 式 2x 1 式 2y f 2hy 2 2 1整型数据运算程序举例和分析 2 2整型数据的运算与分析 includevoidmain inth f x y 定义整型变量h f x y h 16 对整型变量h赋值 使h的值等于16 f 40 对整型变量f赋值 使h的值等于40 y f 2 h 2 对表达式 f 2 h 2进行运算 把结果赋给y x h y 对表达式h y进行运算 把结果赋给x printf d d n x y 输出鸡的个数和兔的个数 编写程序 说明 1 运行时显示 124 2 程序改进 printf d d n x y 3 再改进 printf cock d rabbit d n x y 2 2整型数据的运算与分析 1 常量在程序运行过程中 其值不能被改变的量称为常量常量区分为不同的类型 整型100 125 100 0实型3 14 0 125 3 789字符型 a b 2 字符串 a ab 1232 2 2 2整型常量和整型变量 2 2整型数据的运算与分析 2 变量变量代表内存中具有特定属性的一个存储单元 它用来存放数据 这就是变量的值 在程序运行期间 这些值是可以改变的 变量名实际上是一个以一个名字对应代表一个地址 在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址 从变量中取值 实际上是通过变量名找到相应的内存地址 从该存储单元中读取数据 2 2整型数据的运算与分析 3 整型常量整型常量即整常数 在 语言中 整常数可用以下三种形式表示 十进制整数 123 456 4 八进制整数 以0头的数是八进制数 如 0123表示八进制数123 等于十进制数83 011表示八进制数 11 即十进制数 9 十六进制整数 以0 x开头的数是16进制数 如 0 x123 代表16进制数123 等于十进制数291 0 x12等于十进制数10 2 2整型数据的运算与分析 4 整型变量整型数据在内存中的存放形式数据在内存中是以二进制形式存放的 如 inti 定义为整型变量 i 10 给i赋以整数10 2 2整型数据的运算与分析 注意 十进制数10的二进制形式为1010 TurboC2 0和TurboC 3 0为一个整型变量在内存中分配2个字节的存储单元 不同的编译系统为整型数据分配的字节数是不相同的 VC 6 0则分配4个字节 数值是以补码 complement 表示的 2 3实型数据的运算与分析 2 3 1实型数据的运算举例 例题2 2 分期付款的计算 张先生为购房 向银行贷款 贷款额为324500元 每月准备还3245元 月利率为0 8 求需要多少个月才能还清 解题思路 m log10 p log10 p d r log10 1 r d 贷款额 p 每月还款数 r 月利率 m 还清贷款所需月数 d 324500元 p 3245元 r 0 8 2 3实型数据的运算与分析 include 用输入输出函数时必须用 stdio h 头文件 include 用数学函数时必须用 math h 头文件 voidmain intd p 定义d和p为整型变量 floatr m 定义r和m为实型变量 d 324500 给整型变量d赋值 p 3245 给整型变量p赋值 r 0 008 给实型变量r赋值 m log10 p log10 p d r log10 1 r 通过公式求m的值 printf month f n m 输出m的值 printf total f n m p 计算并输出总的还款数 编写程序 说明 1 include是 包含头文件 的命令 调用系统提供的库函数 见附录E 2 C编译系统把所有实 float 型常量 如0 008 和log10函数的值都作为双精度数据来处理 在把它们赋给float型变量时可能会丧失一些精度 在编译时出现 警告 不属于致命性错误 可以将r和m改定义为double型 3 可以在定义变量时同时赋初值intd 32450 p 3250 doubler 0 008 4 运行结果 month 201 983404 total 655436 127930 2 3实型数据的运算与分析 2 3 2实型常量的表示形式 两种表示形式 小数指数 0 1233e 3 注意 字母e 或E 之前必须有数字 且e后面的指数必须为整数 1e3 1 8e 3 123e 6 1e 3e3 2 1e3 5 e3 e 2 3实型数据的运算与分析 标准化的指数形式 在字母e 或E 之前的小数部分中 小数点左边应有一位 且只能有一位 非零的数字 例如 123 456可以表示为 123 456e0 12 3456e1 1 23456e2 0 123456e3 0 0123456e4 0 00123456e其中的1 23456e3称为 规范化的指数形式 2 3实型数据的运算与分析 2 3 3实型变量 1 实型变量的分类浮点型变量分为单精度 float型 双精度 double型 和长双精度型 longdouble 三类形式 2 3实型数据的运算与分析 2 实型数据在内存中的存放形式一个浮点型数据一般在内存中占4个字节 32位 与整型数据的存储方式不同 浮点型数据是按照指数形式存储的 系统把一个浮点型数据分成小数部分和指数部分 分别存放 指数部分采用规范化的指数形式 例2 3实型数据的舍入误差 includevoidmain floata b a 123456 789e5 b a 20 printf f n b 说明 一个实型变量只能保证的有效数字是7位有效数字 后面的数字是无意义的 并不准确地表示该数 应当避免将一个很大的数和一个很小的数直接相加或相减 否则就会 丢失 小的数 运行结果 123456 789e5 2 3实型数据的运算与分析 3 把实数按双精度数处理C编译系统将浮点型常量作为双精度来处理 例如 f 2 45678 4523 65系统先把2 45678和4523 65作为双精度数进行相乘运算 得到的乘也是一个双精度数 最后取其前7位赋给浮点型变量f 如果在数的后面加字母f或F 如1 65f 654 87F 这样编译系统就会把它们按单精度 32位 处理 2 4字符型数据的运算 逐个输出英文字母C H I N A 然后按反序输出 即A N I H C 可以把5个字母分别放在5个变量中 第1次按正序输出这5个字母 第2次按反序输出这5个字母 C语言提供字符型变量 用来存放字符数据 例题2 4 解题思路 2 4 1字符数据运算的简单例子 2 4字符型数据的运算 includevoidmain chara C b H c I d N e A a b c d e定义为字符变量 printf c c c c c n a b c d e 顺序输出CHINA printf c c c c c n e d c b a 反序输出CHINA 编写程序 说明 1 第3行是定义字符变量a b c d e 字符要用单撇号括起来 一个字符变量放一个字母字符 2 第4 5行输出5个字母 输出字符所用的格式说明为 c 3 运行结果 CHINAANIHC 2 4字符型数据的运算 2 4 2字符常量和字符变量字符常量 1 用单引号包含的一个字符是字符型常量 2 只能包含一个字符 例 a A 1 abc a 2 4字符型数据的运算 有些以 开头的特殊字符称为转义字符 n换行 t横向跳格 r回车 反斜杠 dddddd表示1到3位八进制数字 xhhhh表示1到2位十六进制数字 2 4字符型数据的运算 2 字符变量字符型变量用来存放字符常量 注意只能放一个字符 字符变量的定义形式如下 charc1 c2 在本函数中可以用下面语句对c1 c2赋值 c1 a c2 b 一个字符变量在内存中占一个字节 2 4字符型数据的运算 3 字符数据与整型数据在一定条件下可以通用一个字符常量存放到一个字符变量中 实际上并不是把该字符的字型放到内存中去 而是将该字符的相应的ASCII代码放到存储单元中 这样使字符型数据和整型数据之间可以通用 注意 一个字符数据既可以以字符形式输出 也可以以整数形式输出 例2 5向字符变量赋以整数 includevoidmain charc1 c2 c1 97 c2 98 printf c c n c1 c2 printf d d n c1 c2 说明 在第 和第4行中 将整数97和98分别赋给c1和c2 它的作用相当于以下两个赋值语句 c1 c2 因为 a 和 b 的ASCII码为97和98 运行结果 9798 例2 6大小写字母的转换 includevoidmain charc1 c2 c1 a c2 b c1 c1 32 c2 c2 32 printf c c c1 c2 说明 程序的作用是将两个小写字母a和b转换成大写字母A和B 从 代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码大32 语言允许字符数据与整数直接进行算术运算 运行结果 2 4字符型数据的运算 说明 有些系统 如TurboC 将字符变量定义为signedchar型 其存储单元中的最高位作为符号位 它的取值范围是 128 127 如果在字符变量中存放一个ASCII码为0 127间的字符 由于字节中最高位为0 因此用 d输出字符变量时 输出的是一个正整数 如果在字符变量中存放一个ASCII码为128 255间的字符 由于在字节中最高位为1 用 d格式符输出时 就会得到一个负整数 2 4字符型数据的运算 2 4 3字符串常量字符串常量是一对双撇号括起来的字符序列 合法的字符串常量 Howdoyoudo CHINA a 123 45 可以输出一个字符串 如printf Howdoyoudo 2 4字符型数据的运算 是字符常量 是字符串常量 二者不同 如 假设 被指定为字符变量 charc c a a c CHINA 结论 不能把一个字符串常量赋给一个字符变量 规定 在每一个字符串常量的结尾加一个 字符串结束标志 以便系统据此判断字符串是否结束 规定以字符 作为字符串结束标志 如 如果有一个字符串常量 实际上在内存中是 它占内存单元不是 个字符 而是 个字符 最后一个字符为 但在输出时不输出 2 4字符型数据的运算 2 5符号常量 2 5 1为什么要用符号常量 例题2 7 已知圆的半径为r 求圆周长c 圆面积s 圆球体积v 解题思路 圆周长圆面积 有了以上公式就可以进行计算了 s c 2 2 5符号常量 includevoidmain doubler 3 67 c s v c 2 3 1415926 r s 3 1415926 r r v 4 3 3 1415926 r r r printf c f ns f nv f n c s v 编写程序 说明 运行结果 c 23 059290s 42 313797v 155 291633 2 5符号常量 说明 1 C语言规定 两个整型数据相除结果是整型 因此 4 3的值是整数1 而没有小数部分 可以改用实数 写成4 0 3 0 程序第6行改为v 4 0 3 0 3 1415926 r r r 再编译和运行 得到正确的v值 2 可调用pow函数 求r 其函数形式是pow r 3 函数值是double型 3 程序中多次出现常数3 1415926 降低程序的可读性 可用一个符号来代表一个常量 如可以用一个符号名PI来代表圆周率3 1415926 这样就不必在每处都重复写3 1415926 而用PI来代表 这个PI就叫符号常量 definePI3 1415926 2 5符号常量 2 5 2符号常量的性质和使用方法 define不是C语句 该行的末尾没有分号 它是一个 预编译命令 不要把符号常量与变量混淆 符号常量只是一个符号 不占存储单元 它只是简单地进行字符置换 如把字符PI置换为字符3 1415926 不论置换的字符是否有含义都进行置换 习惯上 符号常量名用大写 变量名用小写 以示区别 使用符号常量的好处 含义清楚在需要改变一个常量时能做到 一改全改 2 6算术运算符和算术表达式 2 6 1算术运算符 1 基本的算术运算符 加法运算符 或正值运算符 如 减法运算符 或负值运算符 如 乘法运算符 如 除法运算符 如 模运算符 或称求余运算符 两侧均应为整型数据 如 的值为 2 6算术运算符和算术表达式 2 运算符的优先级与结合性 语言规定了运算符的优先级在表达式求值时 先按运算符的优先级别高低次序执行 例如先乘除后加减 规定了各种运算符的结合方向 结合性 算术运算符的结合方向为 自左至右 即先左后右 2 6算术运算符和算术表达式 3 自增 自减运算符作用是使变量的值增 或减 如 在使用 之前 先使 的值加 减 在使用 之后 使 的值加 减 2 6算术运算符和算术表达式 i 与 i的区别 是先执行 后 再使用 的值 是先使用 的值后 再执行 例如 i的值先变成4 再赋给 j的值均为 先将i的值3赋给 的值为 然后 变为 2 6算术运算符和算术表达式 注意 1 自增运算符 自减运算符 只能用于变量 而不能用于常量或表达式 2 和 的结合方向是 自右至左 自增 减 运算符常用于循环语句中使循环变量自动加 也用于指针变量 使指针指向下一个地址 2 6算术运算符和算术表达式 2 6 1算术表达式用算术运算符和括号将运算对象 也称操作数 连接起来的 符合 语法规则的式子 称为 算术表达式 运算对象包括常量 变量 函数等 例如 5 a 是一个合法的表达式 2 6算术运算符和算术表达式 强制类型转换运算符 强制类型转换运算符的作用是 将一个表达式转换成所需类型一般形式 类型名 表达式 例如 double 将 转换成double类型 int x y 将x y的值转换成整型 float 5 3 将5 3的值转换成float型 例2 8强制类型转换 includevoid printf x f i d n x i 说明 有两种类型转换 一种是在运算时不必用户指定 系统自动进行的类型转换 如3 6 5 第二种是强制类型转换 当自动类型转换不能实现目的时 可以用强制类型转换 运行结果 x 3 600000 i 3 2 6算术运算符和算术表达式 各类数值型数据间的混合运算 混合运算 整型 包括int short long 浮点型 包括float double 可以混合运算 在进行运算时 不同类型的数据要先转换成同一类型 然后进行运算 说明 这种类型转换是由系统自动进行的 2 6算术运算符和算术表达式 有关表达式使用中的问题说明 ANSIC并没有具体规定表达式中的子表达式的求值顺序 允许各编译系统自己安排 例如 对表达式a f1 f2 并不是所有的编译系统都先调用f1 然后调用f2 在有的情况下结果可能不同 有时会出现一些令人容易搞混的问题 因此务必要小心谨慎 2 6算术运算符和算术表达式 语言中有的运算符为一个字符 有的运算符由两个字符组成 为避免误解 最好采取大家都能理解的写法 例如 不要写成i j的形式 而应写成 i j的形式 2 6算术运算符和算术表达式 在调用函数时 实参数的求值顺序 标准并无统一规定 例如 的初值为 如果有下面的函数调用 printf i 在有的系统中 从左至右求值 输出 在多数系统中对函数参数的求值顺序是自右而左 函数输出的是 以上这种写法不宜提倡 最好改写成j i printf d d j i 2 7C运算符和C表达式 2 7 1 运算符 的运算符有以下几类 1 算术运算符 2 关系运算符 3 逻辑运算符 4 位运算符 5 赋值运算符 及其扩展赋值运算符 6 条件运算符 7 逗号运算符 2 7C运算符和C表达式 8 指针运算符 和 9 求字节数运算符 10 强制类型转换运算符 类型 11 分量运算符 12 下标运算符 13 其他 如函数调用运算符 2 7C运算符和C表达式 2 7 2 表达式C语言有以下几类表达式 算术表达式 如2 6 7 3 5 sin 0 5 关系表达式 如x 0 y0 y 0 表示x 0与y 0同时成立 是逻辑运算符 代表 与 赋值表达式 如a 5 6逗号表达式 如a 3 y 4 z 8用逗号连接若干个表达式 顺序执行这些表达式 整个逗号表达式的值是最后一个表达式的值 今为8 详见本章提高部分 2 8提高部分 计算机不论对正数和负数都按 补码 形式存放到存储单元 对于正数来说 补码就是该数的 原码 该数的二进制形式 负数的补码不是它的原码 2 8 1求补码的方法 2 8提高部分 求一个负数的补码的方法是 取该数 不考虑数的符号 的二进制形式 它就是原码 对该原码逐位 取反 逐位把0变1 把1变0 得到其 反码 将得到的反码加1 2 8 1求补码的方法 求 10的补码步骤如下 1 10的原码是00001010 2 其反码是11110101 3 再加1 得补码11110110 注意 负数的补码形式的最高位都是1 从第1位就可以判断该数的正负 2 8提高部分 2 8 2整型常量的表示形式十进制整数 如 123 456 4 八进制整数 以0头的数是八进制数 如 0123表示八进制数123 等于十进制数83 011表示八进制数 11 即十进制数 9 十六进制整数 以0 x开头的数是16进制数 如 0 x123 代表16进制数123 等于十进制数291 0 x12等于十进制数 10 2 8 3整型变量的类型 整型变量的分类 共六种 有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型 signed int signed short int signed long int unsignedintunsignedshort int unsignedlong int 注意 括号表示其中的内容是可选的 2 8提高部分 2 8提高部分 整数类型的有关数据 类型类型说明符长度数的范围基本型int2字节 32768 32767短整型short2字节 215 215 1长整型long4字节 231 231 1无符号整型unsigned2字节0 65535无符号短整型unsignedshort2字节0 65535无符号长整型unsignedlong4字节0 232 1 2 8提高部分 例如 整数13在内存中实际存放的情况 2 8提高部分 整型变量的定义 规定在程序中所有用到的变量都必须在程序中定义 即 强制类型定义 例如 inta b 指定变量 为整型 unsignedshortc d 指定变量 为无符号短整型 longe f 指定变量 为长整型 2 8提高部分 整型变量的定义 规定在程序中所有用到的变量都必须在程序中定义 即 强制类型定义 例如 inta b 指定变量 为整型 unsignedshortc d 指定变量 为无符号短整型 longe f 指定变量 为长整型 2 8提高部分 2 8 4整型常量的类型 常量是有类型的 在赋值时匹配 按下面的规则处理 1 如果整常数的值在 32768 32767范围内 认为它是int型 分配2个字节 2 如果其值超过了上述范围 而在 2147483648 2147483647范围内 则认为它是长整型 分配4个字节 3 在一个整常量后面加一个字母l或L 则认为是longint型常量 4 一个整常量后面加一个字母u或U 认为是unsignedint型 2 8提高部分 2 8 5运算符的优先级与结合性 语言规定 运算符的优先级和结合性 在表达式求值时 按运算符的优先级别高低次序执行 语言还规定 各种运算符的结合方向 结合性 算术运算符的结合方向为 自左至右 在C语言中有些运算符的结合方向是 自左至右 如赋值语句 第三章 最简单的c程序设计 顺序程序设计 本章要点 算法的概念及表示方法结构化程序设计方法C语句顺序结构的程序设计语句及方法 主要内容 3 1算法概述3 2程序的三种基本结构3 3C语句综述3 4赋值表达式和赋值语句3 5数据输入输出的概念3 6字符数据的输入输出3 7简单的格式输入与输出3 8顺序结构程序设计举例 一个程序应包括两个方面的内容 对数据的描述 数据结构 datastructure 对操作的描述 算法 algorithm 著名计算机科学家沃思提出一个公式 数据结构 算法 程序 数据结构 算法 程序设计方法 语言工具 完整的程序设计应该是 3 1算法概述 广义地说 为解决一个问题而采取的方法和步骤 就称为 算法 方法1 1 2 3 4 一直加到100加99次方法2 100 1 99 2 98 49 51 50 100 49 100 50加51次 对同一个问题 可有不同的解题方法和步骤 例 求 3 1 1算法的概念 3 1 1算法的概念 为了有效地进行解题 不仅需要保证算法正确 还要考虑算法的质量 选择合适的算法 希望方法简单 运算步骤少 计算机算法可分为两大类别 数值运算算法 求数值解 例如求方程的根 求函数的定积分等 非数值运算 包括的面十分广泛 最常见的是用于事务管理领域 例如图书检索 人事管理 行车调度管理等 3 1 2怎样表示算法 算法的四种表示方法 用自然语言表示算法用流程图表示算法用N S流程图表示算法用伪代码表示算法 1 用自然语言表示算法 自然语言就是人们日常使用的语言 可以是汉语或英语或其它语言 用自然语言表示通俗易懂 但文字冗长 容易出现 歧义性 自然语言表示的含义往往不大严格 要根据上下文才能判断其正确含义 描述包含分支和循环的算法时也不很方便 因此 除了那些很简单的问题外 一般不用自然语言描述算法 2 用流程图表示算法 美国国家标准化协会ANSI AmericanNationalStandardInstitute 规定了一些常用的流程图符号 例将求5 的算法用流程图表示 如果需要将最后结果打印出来 可在菱形框的下面加一个输出框 例 判断一个数是否偶数 其算法用流程图表示 例 输出1到100的算法 用流程图表示 说明 流程图是表示算法的较好的工具 一个流程图包括以下几部分 1 表示相应操作的框 2 带箭头的流程线 3 框内外必要的文字说明 3 用N S流程图表示算法 1973年美国学者I Nassi和B Shneiderman提出了一种新的流程图形式 在这种流程图中 完全去掉了带箭头的流程线 全部算法写在一个矩形框内 在该框内还可以包含其它的从属于它的框 或者说 由一些基本的框组成一个大的框 这种流程图又称N S结构化流程图 N S流程图用以下的流程图符号 1 顺序结构 2 选择结构 3 循环结构 例 判断一个数是否偶数 其算法改用N S流程图表示 例 输出1到100的算法 改用N S流程图表示 N S图表示算法的优点 比文字描述直观 形象 易于理解 比传统流程图紧凑易画 尤其是它废除了流程线 整个算法结构是由各个基本结构按顺序组成的 N S流程图中的上下顺序就是执行时的顺序 用N S图表示的算法都是结构化的算法 因为它不可能出现流程无规律的跳转 而只能自上而下地顺序执行 4 用位代码表示算法 概念 伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法 特点 它如同一篇文章一样 自上而下地写下来 每一行 或几行 表示一个基本操作 它不用图形符号 因此书写方便 格式紧凑 也比较好懂 也便于向计算机语言算法 即程序 过渡 用处 适用于设计过程中需要反复修改时的流程描述 ifxispositivethen printx else print x也可以用汉字伪代码表示 若x为正打印x 否则 打印 x 也可以中英文混用 如 ifx为正 printx else print x 例 打印x的绝对值 的算法可以用伪代码表示为 3 2程序的三种基本结构 传统流程图的弊端传统流程图用流程线指出各框的执行顺序 对流程线的使用没有严格限制 因此 使用者可以毫不受限制地使流程随意地转向 使流程图变得毫无规律 阅读者要花很大精力去追踪流程 使人难以理解算法的逻辑 如图 传统流程图的流程可以是 这种如同乱麻一样的算法称为BS型算法 意为一碗面条 ABowlofSpaghetti 乱无头绪 缺点 难以阅读 修改 使算法的可靠性和可维护性难以保证 解决办法 必须限制箭头的滥用 即不允许无规律地使流程随意转向 只能顺序地进行下去 三种基本结构Bohra和Jacopini提出了以下三种基本结构 顺序结构 选择结构 循环结构用这三种基本结构作为表示一个良好算法的基本单元 三种基本结构的图示 顺序结构 选择结构 循环结构的图示 当型 While型 循环结构 直到型 Until型 循环 三种基本结构的共同特点 1 只有一个入口 2 只有一个出口 请注意 一个菱形判断框有两个出口 而一个选择结构只有一个出口 不要将菱形框的出口和选择结构的出口混淆 3 结构内的每一部分都有机会被执行到 4 结构内不存在 死循环 无终止的循环 图中没有一条从入口到出口的路径通过A框 不正确的流程表示 流程内的死循环 小结 由三种基本结构顺序组成的算法结构 可以解决任何复杂的问题 由基本结构所构成的算法属于 结构化 的算法 它不存在无规律的转向 只在本基本结构内才允许存在分支和向前或向后的跳转 扩展 只要具有上述四个特点的都可以作为基本结构 可以自己定义基本结构 并由这些基本结构组成结构化程序 此图符合基本结构的特点 结构化程序设计方法 一个结构化程序就是用高级语言表示的结构化算法 用三种基本结构组成的程序必然是结构化的程序 这种程序便于编写 便于阅读 便于修改和维护 结构化程序设计强调程序设计风格和程序结构的规范化 提倡清晰的结构 结构化程序设计方法的基本思路是 把一个复杂问题的求解过程分阶段进行 每个阶段处理的问题都控制在人们容易理解和处理的范围内 3 3C语句综述 C程序的结构 一个c程序可以有若干个源程序文件组成一个源文件可以有若干个函数和预处理命令以及全局变量声明部分组成一个函数有函数首部和函数体组成函数体由数据声明和执行语句组成C语句分为 1if else条件语句6break间断语句2for 循环语句7switch 开关语句3while 循环语句8goto转向语句4do while 循环语句9return返回语句5continue继续语句 1 控制语句 种 完成一定的控制功能 if else 条件语句 用来实现选择结构 switch 多分支选择语句 for 循环语句 用来实现循环结构 while 循环语句 用来实现循环结构 do while 循环语句 用来实现循环结构 continue 结束本次循环语句 break 中止执行switch或循环语句 return 从函数返回语句 goto 转向语句 基本不用 3 4赋值表达式和赋值语句 3 4 1赋值表达式 2 复合的赋值运算符 x x nx n 赋值运算符两侧出现相同的变量 赋值符号 就是赋值运算符 它的作用是将一个数据赋给一个变量 例如 a 100表示将100赋给变量a 1 赋值运算符 x x nx x nx x nx x nx x n x nx nx nx nx n 算术运算与赋值运算相结合 X与n均为整数 例 3 赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子称为 赋值表达式 变量赋值运算符表达式 例如 a 5b a 5 c 10 d 8 a b 10 c 2 b等于10 c等于2 a等于5 表达式值为5 3 4 2赋值过程中的类型转换 实型数据赋给整型变量 先对实数取整后赋予整型变量 例如 为整型变量 执行 i 3 56 后 的值为 2 将一个double型数据赋给float变量时 截取其前面7位有效数字存放到float变量中 注意数值范围不能溢出 例如 doubled 123 456789e100 f d f无法容纳如此大的数 出现溢出的错误 3 将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量只将其低字节原封不动地送到该变量 即发生截断 例如 把一个4字节的long型数据赋给一个2字节的short型变量 或将一个2字节的int型数据赋给1字节的char型变量 i 289 已定义i为整型变量 c a 已定义c为字符变量 c i 将占2字节的int型数据赋给char型变量 要避免进行这种发生失真的赋值 a 的ASCII值为97内存中存储形式 01100001 例 ASCII码字符 a A 1 存储为 97 65 49 00000001 01000001 在ASCII范围以内 整型数据与字符型数据可以通用 3 4 3赋值语句 若a的值等于100 则成绩为优秀 if a 100 赋值运算 if a 100 关系运算 条件中的赋值符号要适当使用 赋值语句由赋值表达式加分号组成 a b赋值表达式a b 赋值语句 例 3 4 4变量赋初值 inta 3 指定 为整型变量 初值为 doublef 3 56 指定 为双精度型变量 初值为 56 charc a 指定 为字符变量 初值为 a inta b c 5 对一部分变量赋初值 对几个变量赋予同一个初值 应写成 inta 3 b 3 c 3 以下写法错误 inta b c 3 3 5数据输入输出的概念 输入输出是以计算机主机为主体而言的输出 从计算机向外部输出设备输出数据输入 从输入设备向计算机输入数据 C语言本身不提供输入输出语句 输入和输出操作是由C函数库中的函数来实现的 例如 字符输入函数 getchar字符输出函数 putchar格式输入函数 scanf格式输出函数 printf字符串输入函数 gets字数穿输出函数 puts 在使用系统库函数时 要用预编译命令 include 将有关的 头文件 包括到用户源文件中 例如 在调用标准输入输出库函数时 文件开头应该有 include stdio h 或 include 头文件 3 6字符数据的输入输出 3 6 1字符输出函数一般形式 putchar c 函数作用 向终端输出一个字符 字符型变量整型变量 例3 1 输出单个字符 includevoidmain chara b c a B b O c Y putchar a putchar b putchar c putchar n 运行结果 BOY putchar a putchar n putchar b putchar n putchar c putchar n 运行结果 BOY 3 6 2字符输入函数一般形式 getchar 函数作用 从终端 或系统隐含指定的输入设备 输入一个字符 函数值 从输入设备得到的字符 例3 2输入多个字符 includevoidmain chara b c 定义字符变量a b c a getchar 从键盘输入一个字符 送给字符变量a b getchar 从键盘输入一个字符 送给字符变量b c getchar 从键盘输入一个字符 送给字符变量c putchar a 将变量a的值输出 putchar b 将变量a的值输出 putchar c 将变量a的值输出 putchar n 换行 运行结果 BOY 连续输入BOY后 确认后字符才送到内存 BOY 输出变量a b 的值 3 7简单的格式输入与输出 3 7 1格式输出函数printf函数作用 向终端 或系统隐含指定的输出设备 输出若干个任意类型的数据 一般格式 printf 格式控制 输出表列 d 以带符号的十进制形式输出整数 o 以八进制无符号形式输出整数 x 以十六进制无符号形式输出整数Tobecontinued 4 5格式输入与输出 u 以无符号十进制形式输出整数 c 以字符形式输出 只输出一个字符 s 输出字符串 f 以小数形式输出单 双精度数 隐含输出六位小数 e 以指数形式输出实数 g 选用 f或 e格式中输出宽
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国导染剂行业竞争力剖析与销售策略分析报告
- 2025至2030中国家庭医疗保健市场运营动态及发展潜力评估报告
- 2025至2030中国客户展示行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国女式衬衫行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国天然纤维复合材料行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国复合注射剂行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国地铁交通行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国在线化妆培训行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国固定式柴油发电机行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国喷灌悬臂行业发展趋势分析与未来投资战略咨询研究报告
- 2025年全国新高考II卷高考全国二卷真题英语试卷(真题+答案)
- 通信员工安全试题及答案
- 2025年洗纹身协议书
- 工会厂务公开课件
- 桃花源记的试题及答案
- 工厂计件奖罚管理制度
- 《老年人认知记忆训练》课件
- 经济法学-001-国开机考复习资料
- 一年级家长会课件2024-2025学年
- 沪教版八年级化学(下册)期末试卷及答案
- 2024年广东省中考生物+地理试卷(含答案)
评论
0/150
提交评论