C程序设计(第三版)谭浩强.ppt

上传人:max****ui 文档编号:8314450 上传时间:2020-03-28 格式:PPT 页数:431 大小:1.20MB
返回 下载 相关 举报
C程序设计(第三版)谭浩强.ppt_第1页
第1页 / 共431页
C程序设计(第三版)谭浩强.ppt_第2页
第2页 / 共431页
C程序设计(第三版)谭浩强.ppt_第3页
第3页 / 共431页
点击查看更多>>
资源描述
C程序设计设计 授课教师 刘东 第一章C语言概述 本章要点 第一节 C语言出现的历史背景 阅读 第二节 C语言的特点 了解 第三节 简单的C程序介绍 理解 第四节 C程序的上机步骤 掌握 第一章C语言概述 考试内容一 C语言的结构1 程序的构成 MAIN函数和其他函数 2 头文件 数据说明 函数的开始和结束标志 3 源程序的书写格式 4 C语言的风格 分析 这部分考试形式主要是选择题 一般会出1 2个题 都是基本概念 注意程序的书写格式 第一节 C语言出现的历史背景 一 语言的发展第一阶段 机器语言第二阶段 汇编语言第三阶段 面向过程的高级语言有人把C称为 高级语言中的低级语言 或 中级语言 意为兼有高级和低级语言的特点 二 C语言的发展ALGOL60 CPL BCPL B C C语言是国际上广泛流行的计算机高级语言 既可用来写系统软件 也可用来写应用软件 C语言是在B语言的基础上发展起来的 它的根源可以追溯到ALGOL60 1960年出现的ALGOL60是一种面向问题的高级语言 它离硬件比较远 不宜用来编写系统程序 1963年英国的剑桥大学推出了CPL语言 CPL语言在ALGOL60的基础上接近硬件一些 但规模比较大 难以实现 1967年英国剑桥大学的MatinRichards对CPL语言做了简化 推出了BCPL语言 1970年美国贝尔实验室的KenThompson以BCPL语言为基础 又做了进一步简化 设计出了很简单的而且很接近硬件的B语言 取BCPL的第一个字母 并用B语言写了第一个UNIX操作系统但B语言过于简单 功能有限 1972年至1973年间 贝尔实验室的D M Ritchie在B语言的基础上设计出了C语言 取BCPL的第二个字母 C语言既保持了BCPL和B语言的优点 精练 接近硬件 又克服了它们的缺点 过于简单 数据无类型等 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的 1973年 K Thompson和D M Ritchie两人合作把UNIX的90 以上用C改写 即UNIX第5版 第二节C语言的特点 一 C语言是一种结构化 模块化的语言二 C语言具有丰富的运算符及数据结构三 C语言区分大小写 1 小写字母作为基本书写形式2 符号常数等宏定义的参数名采用大写四 C语言源程序书写灵活五 C语言生成的目标代码质量高六 C语言编写的程序可移植性好 比汇编语言 第三节简单的C程序介绍 一 几个基本函数1 main 2 printf 格式控制 输出列表 3 scanf 格式控制 输入地址列表 二 程序举例例1 main printf Iamastudent n 总结 1 本程序的作用是输出一行信息2 每一个C程序都必须有一个main函数 3 C程序的函数体由一对花括号括起来4 C程序的每一行叫做一个语句行5 每一语句后必须有一分号6 n 是换行符7 本程序的输出通过一个C的库函数printf 实现 例2 main 求两数之和 intvalue1 value2 sum 定义变量 value1 50 value2 25 sum value1 value2 printf Thesumof dand dis d n value1 value2 sum 总结 1 该程序完成的功能是求两个给定数的和 并输出值 2 之间的是注释部分 不影响程序的执行3 C语言中使用变量必须先定义 后使用4 后面的是格式字符串 指定输入输出的格式 例3 main floataverage floata b c ave scanf f f f 总结 1 本程序包括两个函数 主调函数和被调函数 2 scanf 为输入函数3 为取地址运算符4 return 函数为返回语句 将被调函数计算出来的值带回主调函数 二 C语言源程序的构成1 C语言是一种函数语言 每个程序至少包含一个函数 main 2 C语言的源程序总是从main函数开始执行的3 C语言的语句以分号作为分隔符 分号不可少 1 C语言的一行可以写几条语句 每条语句以分号分隔 2 C语言的一条语句可以写多行 以分号作为结束标志4 C语言的输入输出靠函数实现5 每条C语句可以为其加注释 6 一个C函数的一般形式为 函数类型 函数名 函数形参 形参类型定义 数据定义部分函数执行部分 函数的说明部分 首部 如 intmax intx inty 或intmax x y intx y 如 limit 第四节C程序的上机步骤 C语言的源程序必须在某个编译器 编辑环境TurboC2 0 下 才能被翻译为机器所能执行的目标代码 一 上机过程 图1 1 1 编辑 输入源程序 校正拼写及语法错误2 编译 翻译源程序为目标代码 obj 3 链接 将各个模块连接到一起 形成可执行程序文件 exe 4 执行 执行程序 二 上机步骤1 在DOS环境下 进入TC子目录 键入命令TC如 C cdtcC TC tc2 在编辑窗口中 输入源程序 并进行检查3 用ALT C激活Compile菜单 选择 CompiletoOBJ 4 用ALT C激活Compile菜单 选择 LinktoEXE 5 用ALT R激活RUN菜单 选择Run命令6 用ALT R激活RUN菜单 选择Userscreen命令 注 1 可用F9功能键一次性进行编译和连接CTRL F9执行程序ALT F5查看运行结果2 可用F10激活RUN菜单 选择RUN命令3 若在编译或链接过程中出现错误 可用F10激活菜单 用光标键移到Edit菜单 继续进行编辑修改4 若要使用以前的旧文件 可使用ALT F 打开file菜单 选择Load命令 调出所需文件 5 若当前源程序已操作完毕 需要输入下一个程序时 应使用ALT F打开文件菜单 选择NEW命令 生成一个新文件 第二章算法 本章要点 1 了解什么是算法 为什么要使用算法 2 了解几种简单常见的算法3 了解算法的基本性质4 掌握算法的表示方法 重点掌握流程图 5 了解结构化程序设计的基本方法 阅读 第一节算法的概念 一 程序 算法 数据结构 程序1 算法 为解决一个问题而采取的方法和步骤 2 数据 程序操作对象算法 数据结构 程序设计方法 语言工具和环境 程序二 程序设计的全过程 分析问题 划分模块 建立模型 选择数据结构和算法 描述算法 例如画出流程图 编程序 上机调试程序 分析运行结果 整理结果 写出程序说明书等文档 三 说明1 对同一问题 有不同的算法 算法有优劣之分2 计算机算法分为数值算法和非数值算法 第二节算法举例1 有两盘磁带 A录英语 B录音乐 把它们交换过来 解 第一步 先将A磁带中的英语转录到C磁带上第二步 再将B磁带中的音乐转录到A磁带上第三步 最后交C磁带中的英语转录到B磁带上 2 把三个任意数按大小顺序排列 解 该问题的思路是把大数放在a中 把次大的数放在b中 把小数放在c中 再把这个思路进一步细化 即有下面算法 第一步 输入a b c三个数第二步 将a和b比较 较大者放在a中 小者放在b中第三步 将a和c比较 较大者放在a中 小者放在c中第四步 将b和c比较 较大者放在b中 小者放在c中第五步 输出排列好的a b c三个数 3 求5 解题思路 设两个变量 一个代表被乘数 一个代表乘数 将每一次乘积放在被乘数中 算法设计 S1 使P 1S2 使i 2S3 使P I 乘积仍放在P变量中 表示为p I pS4 使i的值加1 即i 1 iS5 如果i不大于5 返回重新执行步骤S3及其后的S4 S5 否则算法结束 4 有50个学生 要求将他们之中成绩在80分以上者打印出来 用n表示学生学号 n1代表第一个学生学号 ni代表第i个学生的学号 用g代表学生成绩 gi代表第i个学生成绩 算法可表示如下 S1 i 1 S2 如果gi 80 则打印ni和gi 否则不打印S3 i i 1 S4 如果i 50 返回S2 继续执行 否则 算法结束 5 判定2000 2500年中的每一年是否闰年 将结果输出闰年的条件是 1 能被4整除 但不能被100整除的年份都是闰年 2 能被100整除 又能被400整除的年份是闰年 不符合这两个条件的年份都不是闰年 算法如下 设y为被检测的年份S1 y 2000S2 若y不能被4整除 则输出y 不是闰年 然后转到S6S3 若y能被4整除 不能被100整除 则输出y 是闰年 然后转到S6S4 若y能被100整除 又能被400整除 则输出y 是闰年 否则输出y 不是闰年 然后转到S6S5 输出y 不是闰年 S6 y y 1S7 当y2500 算法停止 6 求1 1 2 1 3 1 33 1 99 1 100 算法如下 S1 sign 1S2 sum 1S3 deno 2S4 sign 1 signS5 term sign 1 deno S6 sum sum termS7 deno deno 1S8 若deno 100 返回执行S4 否则算法结束 7 对于一个大于或等于3的正整数 判断它是不是一个素数 判断一个正整数n是否为素数的方法 将n作为被除数 将2到n的平方根各个整数轮流作为除数 如果都不能整除 则n为素数 算法 S1 输入n的值S2 i 2 i作为除数 S3 n被i除 得余数rS4 如果r 0 表示n能被i整除 则打印n 不是素数 算法结束 否则执行S5S5 i i 1S6 如果i sqrt n 返回S3 否则打印n 是素数 然后结束 三 算法设计1 判断一个数能否被3和5整除2 求两个正整数m和n的最大公约数 第三节算法的性质 1 有穷性 步骤有限 范围合理2 确定性 算法含义确定 无歧义3 有零个或多个输入4 有一个或多个输出5 有效性 算法中的每一步都能有效执行 并得到确定结果 第四节算法的表示 一 用自然语言表述二 用流程图表示三 用N S流程图表示四 用伪代码表示五 用计算机语言表示 如 求三个数的最大值 1 自然语言描述法先将两个数a和b进行比较 找出其最大者 然后再把它和第三个数c进行比较 如果它比第三个数大 则它就是最大数 否则第三个数c就是最大数 2 伪码表示法ifa bthen把a交给maxelse把b交给maxifmax cthen输出最大值maxelse输出最大值c 3 N S图表示法 4 流程图表示法 流程线 连接点 注释框 流程图表示法常用图例 Y Y N N 5 计算机语言描述main inta b c max scanf d d d 第三章数据类型 运算符与表达式 本章要点 本章内容全部要求掌握 1 常量与变量2 整型 实型 字符型数据3 变量赋初值的几种方法4 不同类型的数值型数据的混合运算5 算术运算符和算术表达式6 赋值运算符和赋值表达式7 逗号运算符和逗号表达式 考试内容二 数据类型及其运算1 C的数据类型 基本类型 构造类型 指针类型 空类型 及其定义方法 2 C运算符的种类 运算优先级和结合性 3 不同类型数据间的转换与运算 4 C表达式类型 赋值表达式 算术表达式 关系表达式 逻辑表达式 条件表达式 逗号表达式 和求值规则 分析 这部分考试形式主要是选择题 一般会出4 5个选择题和2 3个填空题 变量主要搞清楚全局变量 extern 和局部变量 在一个函数中或在一个模块中 运算符要注意是 左结合 或 右结合 3种逻辑运算符 逻辑非 逻辑与 和 逻辑或 位运算 和 的运算 另外 条件表达式和逗号表达式也是常考题型 第一节C的数据类型 C语言提供的数据结构是以数据类型出现的 如下 C语言数据有常量和变量之分 它们都属于以上数据类型 一 常量 在程序运行过程中 值不变的量 1 直接常量 即常数 如1 2 3 5 a 可以分为实型 整型 字符型 其特点是从字面上即可判定它们是某一类型的常量 也称 字面常量 2 符号常量 在一个程序中指定用一个符号代表一个常量 符号常量用 define命令定义 符号常量一经定义其值在其作用域内不能改变 习惯上用大写 如在程序的开头有如下定义 definePI3 1415926则在整个程序中可用 PI 代替3 1415926进行运算 第二节常量与变量 例 符号常量的使用 definePI3 1415926 defineR2 0main doublear doubler cir doubler printf area f ar R printf tcircum f cir R doublear doubler return PI r r doublecir doubler return 2 0 PI r 同是常量 符号常量比一般常量在程序设计中有何优势 definePRICE30main intnum t num 10 t num PRICE printf total d t 1 含义清楚 2 一改全改 二 变量 在程序运行的过程中 值可以改变的量 标识符 某种对象的名字或标记 1 变量名 变量名只能由字母 数字和下划线组成 且第一个字符必须为字母和下划线 如下是合法的变量名 sum i student name 1 2 3 above DAY如下是不合法的变量名 M D john 123 33 3d64 a b注意 1 大写字母和小写字母被认为是两种不同的字符 2 标识符的长度为8位 超过8位只有前8位有效 TurboC则允许32个字符 3 尽量做到见名知意 如 SUM和sum为两个不同的变量 student name和student number为两个相同的变量 3 变量值 变量定义后 为其分配存储空间 存放的是变量的值 inta a 56 2 变量定义 变量声明的一般形式 如 intsum i 4 变量的使用 先定义 后使用 原因 1 保证变量正确使用 未被定义的变量不能使用 2 不同类型的变量占用的内存空间不同 3 不同类型的变量对应取值的范围不同 4 不同类型的变量对应不同的一组操作 如 定义变量 student 如果在使用时 误写为 stdent 不能使用 整数占两个字节 实数占四个字节 字符占一个字节 整数范围为 32768 32767之间 实数为10 38 1038 字符为0 255 整数有 求余 运算 实型数据没有 第三节整型数据 一 整型常量 有三种表示形式1 十进制数形式 1 98 3452 八进制数形式 以0开头的数字 01 0767 81 6 80 62 103 十六进制数形式 以0 x开头的数字 0 x3F 0 x7657 162 6 161 5 160二 整型变量 1 存储形式 数值以补码形式表示 占两个字节见教材P41图3 2 3 3所示 位 字节 字及字长 数据存储的组织形式 存储单元地址 0000H0001H0002HFFFFH 存储单元 字节 存储体 存储体结构图 2 整型变量的分类1 有符号基本整型 以 signed int表示 占两个字节 表示范围 32768 327672 无符号基本整型 以unsignedint表示 表示范围0 655353 有符号短整型 以 signed short int 表示 一般也占2个字节 要求不长于int型 表示范围 32768 32767 4 无符号短整型 以unsignedshort int 表示 表示范围0 655355 有符号长整型 以 signed long int 表示 一般占4个字节 要求不小于int型 表示范围 231 231 1 6 无符号长整型 以unsignedlong int 表示表示范围 0 232 1 3 整型变量的定义 1 在程序中引用一个变量 实际上是对指定的存储空间的引用 因此必须先开辟存储空间才能引用它 即在引用变量之前必须先定义变量的类型 在编译时就会根据指定的类型为其分配一定的存储空间 并决定数据的存储方式和允许操作的方式2 变量的定义一般在函数的开头部分 也可以在其它位置 但定义的位置影响变量的作用范围 例1 inta bunsignedshortc d longe f 例2 main inta b c d unsignedintu a 12 b 24 u 10 c a u d b u printf a u d b u d c d 运行结果 a u 22 b u 14 不同种类的整型数据可以进行算术运算 4 整型数据的溢出 例 main inta b a 32767 b a 1 printf d d a b 32767 32768 例 main inta b a 32768 b a 1 printf d d a b 32768 32767 整型常量的类型 整型常量赋值给整型变量时的注意事项1 如果一个整型常量在 32768 32767之间 可以赋给int型和变量longint型变量 2 如果一个整型常量在 231 231 1之间 可以赋给longint型变量3 常量中没有无符号型 但非负常量可以赋给无符号变量如 intunsignedint123unsignedint65330longintlongint 第四节实型数据 一 实型常量 实数又称为浮点数 有两种表示形式1 十进制小数形式 由数字和小数点组成 必须有小数点 如 89 0 456 0 456 0 0 2 指数形式 即科学计数法 如 45e2相当于45 102 34e 5相当于34 10 5 字母e E 前必须有数字 字母e后必须是整数 规范化的指数形式 小数点左边有且只有1位非0的数字 3 46e 53 46e 5二 存储方式 以指数方式存储 P46图3 7 小数位数越多 精度越高 指数部分越多 数据范围愈大 三 实型变量类型 分为三种类型1 单精度型 float 一般占4个字节 有效数位为6 7位2 双精度型 double 一般占8个字节 有效数位为15 16位3 长双精度型 longdouble 占16字节 有效数位为18 19位 实型常量不分单 双精度 可任意赋值 但有效数位不同 四 实型数据的舍入误差 系统存储实型数据时 由于数位有限 有效数位以外的数字将被舍去 产生误差 例 main floata b a 123456 789e5 b a 20 printf f f a b 12345678848 000000 注 应避免将一个很大的数与一个很小的数直接相加减 五 实型常量的类型1 C编译系统将实型常量作为双精度处理 提高运算精度 2 一个实型常量可以赋给一个float型 double型 longdouble型 系统会根据具体类型保留相应有效数位 例 1 f 2 45678 4523 652 floata a 111111 111 printf a f a f f 第五节字符型数据 一 字符型常量 用一对单引号括起来的一个字符 说明 单引号不是字符常量的一部分 只是一种界定符 单引号内不能是单撇号 或反斜杠 如果反斜杠或单引号本身作为字符常量 必须使用转义字符 分为两种 1 普通字符 如 1 a A 2 转义字符 也称控制字符 说明 用反斜杠开头后面跟一个字母代表一个控制字符 代表字符反斜杠 代表撇号字符 反斜杠后面的字符失去原来的含义 例3 转义字符的使用 P49 main printf abc tde rf tg n printf h ti b bjk 由此例 输出结果在打印机和显示器可能不同 但实际在计算机系统内部是一致的 例1 打印人民币符号 main printf Y b n 例2 用转义字符输出可打印字符和不可打印字符main printf x4F x4B x21 n printf 012 printf x15 xAB n 程序运行结果如下 二 字符变量 用来存放字符常量 说明 一个字符变量占一个字节 一个字符变量只能存放一个字符 字符变量的定义用char 三 字符数据在内存中的存储形式及其使用方法1 字符常量与整型常量存储时都以ASCII码形式存放 2 字符常量可以赋值给整型变量 反之亦可 3 字符常量可以以整型常量形式输出 反之亦可 4 字符常量可表示0 255之间的数值 5 有些系统将字符变量的最高位作为符号位 则取值范围为 128 127 对于ASCII码为0 127的整数 用 d格式输出时 为正数 如果ASCII码超过127的字符 用 d格式输出时 为负数 如 127 10 01111111 2 128 10 10000000 2 6 字符型可以定义为unsignedchar型 就可以不输出负数了 charc a c 例1 intc 97 c 高8位 低8位 例2 向字符变量赋以整数和向整型变量赋以字符常量 main charc1 c2 定义两个字符型变量 inta b 定义两个整型变量 c1 97 c2 98 分别给两个变量赋整型常量的值 a a b b 分别给两个变量赋字符型常量的值 printf c c n c1 c2 以字符格式输出两个字符型数据 printf c c n a b 以字符格式输出两个整型数据 printf d d n c1 c2 以十进制格式输出两个字符型数据 printf d d n a b 以十进制格式输出两个整数型数据 输出结果 abab97989798 例3 大小字母的转换main charc1 c2 定义两个字符型变量 c1 a c2 b 赋字符型常量 c1 c1 32 c2 c2 32 分别减去32 printf c c n c1 c2 输出两个字符型数据 printf d d n c1 c2 输出两个整数型数据 输出结果 AB6566 四 字符串常量 1 概念 由一对双撇号括起来的零个或多个字符序列如 hello programming A 等 2 说明 双撇号是界定符 不属于字符串内容 表示一个空字符串 在内存中占一个字节 0 A 表示一个字符串 A 表示一个字符思考 在内存中占几个字节 3 字符串常量与字符常量的区别 一个字符常量可以赋值给一个字符变量 而字符串不可以 二者界定符不同 二者的存储方式不同 存储字符串时 在其末尾加一个 0 作为结束标志 但不输出 即存储字符串时 所需字节数比字符串长度多一个 A A 0 的含义是 空操作 不产生任何作用 只起标志作用 无字符串变量 但可用字符型数组进行存储 A 例 printf Iamastudent charc a charc a charc CHINA 例 main printf d sizeof I mastudent 一 赋值 向变量所代表的存储单元传送数据的操作 用 表示二 赋值的一般形式 变量 表达式三 可以先定义变量 后赋值 也可以在定义变量时直接赋值四 对几个变量同时赋值 1 inta b c 5 2 inta 3 b 3 c 3 inta b c a b c 3 inta b c 3 3 inta a 3 4 inta b c c 5 第六节变量赋初值 第七节各类型数值数据间的混合运算 一 转换原因 不同类型之间进行运算 必须先转换为同一类型二 转换的类型 实型 整型 字符型三 转换规则 1 按 向高看齐 的原则 将 较低 的类型进行提升2 所有char或short型全部自动转换为int型3 float转换成double型图形注解 纵向箭头表示转换方向横向箭头表示必然转换 P54例子 低 高 例 i为int f为float d为double e为long 下试的运算顺序 10 a i f d e 第八节算术运算符和算术表达式 C运算符分类1 算术运算符 2 关系运算符 5 赋值运算符 6 条件运算符 7 逗号运算符 8 指针运算符 9 求字节数运算符 sizeof10 强制类型转换运算符 类型名 11 分量运算符 12 下标运算符 13 其它 函数运算符 一 算术运算符和算术表达式1 基本的算术运算符 模运算符 求余运算符 要求运算两侧为整型数据 例 7 3 1 5 2 1 5 2 2 2 算术表达式和算术运算的优先级与结合性 1 算术表达式 用算术运算符和括号将运算对象连接起来的符合C语法规则的式子 运算对象 常量 变量 函数 2 算术运算符的优先级 3 算术运算符的结合性 自左至右 计算表达式值时 先按运算符优先级高低进行计算 如果优先级相同 则按结合方向计算 3 强制类型转换符 如果运算符两侧的数据类型不同 先要进行类型转换 使具有同一类型 1 系统自动转换 5 8 7 2 强制类型转换 8 2 5 8 int 2 5 强制类型转换的规则 1 一般形式 类型名 表达式 如 int a float x y double 4 3 2 注意 表达式应用括号括起来 强制类型转换时 得到一个所需类型的中间变量 原来变量的类型并未发生变化 例 int x y 将x转换成整型数据后与y相加 int x y 将x y的值转换成整型 int x与int x int x 例 已知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 4 自增 自减算术运算符i i 1 i 1 用i i来表示i i 1 i 1用i i来表示 i i 为后缀形式 先引用后增 减 值 i i为前缀形式 先增 减 值后引用 例 inti 3 i y i 结果 y 2 i 2 inti 3 i y i 结果 y 2 i 2 inti 3 y i 结果 y 3 i 2 inti 3 y i 自增 自减运算只能用于变量 不能用于常量或表达式如 a 合法 而5 或 x y 不合法 自增 自减运算的结合方向是 自右至左 如 a 相当于 a 问 如果a的值为3 输出结果为多少 例 设a的值为3 求以下表达式的值1 a a a 2 a a a 例 设a的值为3 b的值为4 求下面表达式的值a b 考虑 a ba b 结论 尽可能多地自左而右将若干个字符组合 表达式1的值为9 表达式2的值为18 例 程序功能 自增 自减运算符的用法与运算规则示例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 例 inti 3 printf d d i i 此问题涉及不同的计算机系统对函数求值方向不同 如果自左向右求值 则输出3和3 如果自右向左求值 则输出4和3 5 正 负号运算符1 一元运算符 2 结合方向是自右向左的3 优先级和自增 自减相同 高于 运算符4 相当于一次算术运算 例 a b a b a 0 a 第九节赋值运算符和赋值表达式 1 赋值运算符 将赋值号右边的常量或表达式的值赋给赋值号左边的变量 2 类型转换 1 实型数据赋给整型变量时 截取整数部分 如 inti i 3 7 3 2 整型数据赋给实型变量时 以浮点数形式存储 如 floati i 12 12 000000 3 将double型数据赋给float型变量 截取前7位有效数据 但不能溢出 4 将float型数据赋给double型变量 数值不变 有效数位扩展 5 字符型数据赋给整型变量时 将字符型数据放入整型数据低八位中 TurboC将字符型数据默认为有符号型 6 将整形数据赋给字符型变量时 将其低八位放入字符变量其余部分截断 例 inti 289 charc a c i printf c d c c 33 7 将unsigned型数据赋给占相同字节的整型变量 原样存入 高位补0 但不能出现溢出 例 unsignedinta 65535 intb b a printf b d b b 1例 unsigneda intb 1 a b printf a u a a 65535 8 将unsigned型数据赋给长度相同的unsigned型变量 原样照赋 总结 按存储单元中的存储形式直接传送 3 复合的赋值运算符 复合赋值运算的一般格式为 变量双目运算符 表达式 复合赋值运算符它等价于 变量 变量双目运算符 表达式 类型 复合算术运算符 5个 复合位运算符 5个 含义 例 a 3a a 3a 3a a 3a 3a a 3a 3a a 3a ba a ba b 3a a b 3 4 赋值表达式 一般形式 说明 1 一般形式中的也可以是一个赋值表达式如a b c 5相当于a b c 5 a 5 c 6 a b 4 c 6 a b 10 c 2 2 赋值表达式也可以包含复合的赋值运算符inta 8 a a a a a a 64a a a 64 a a 8 64 a aa a a 48 112 3 赋值表达可以出现在其它语句中如printf d a b 56 第十节逗号运算符和逗号表达式 一 一般形式 表达式1 表达式2 表达式n二 求解过程 按顺序求解 三 表达式的值 最后一个表达式的值四 优先级 最低五 不是所有的逗号都是逗号运算符 例 1 a 5 4 6 a 2 a 5 4 6 a a 2 3 b a 4 a 5 4 b a 4 5 aprintf d d a b printf d d d a b c b c 答案 1 54 2 7 3 b 20 4 20 思考1 假设所有变量均为整型 则表达式 a 2 b 5 a b a b 的值为 9 思考2 已知 A 的ASCII码的十进制表示为65 下面程序的输出是什么 main charc1 B c2 y printf d d n c1 c2 67 120 第四章顺序程序设计 本章要点 第一节 C语句概述 了解 第二节 程序的三种基本结构 理解 第三节 赋值语句 掌握 第四节 数据输出 掌握 第五节 数据输入 掌握 顺序程序设计数据的输入与输出 输入输出函数的调用 分析 数据的输入与输出和函数的调用 因为这些都是很基础的事情 第一节 语句概述 语句分类 控制语句 函数调用 由一次函数调用加一个分号构成一个语句 表达式语句 由一个表达式加一个分号构成一个语句 空语句 无任何动作 可作为转向点 复合语句 由 括起来的语句 分程序 条件语句if else 循环语句for while do while 转向语句goto中止循环语句continuebreak多分支选择语句switch返回语句return 例 1 if x y z x elsez y 2 printf Iamastudent 3 a 6a 6 4 5 a a 3 b a printf a db d a b 注 每一个语句都有一个分号 复合语句的花括号外面无分号 函数调用可以是库函数 也可以是用户自定义函数 第二节程序的三种基本结构 程序的三种结构即 顺序结构 选择结构 循环结构 先执行 操作后执行 操作 例 a 3 b 4 c a b printf c d c 一 顺序结构 该结构中的操作按书写顺序进行 二 选择结构 根据给定的条件进行判断 根据判断的结果在两条分支路径中选取其中的一条执行 可派生出多分支选择结构 if else switch 三 循环结构 根据给定条件是否满足决定是否继续执行循环体中的操作 1 直到型循环 先执行 操作 再判断 是否为假 若P为假 再执行 如此反复直到 为真为止 do while 2 当型循环 当 条件成立时 反复执行 操作 直到 为假时才停止循环 for while 第三节赋值语句 第四节数据输入输出的概念及在C语言中的实现 1 所谓输入输出是相对计算机主体而言 2 C语言不提供输入输出语句 通过函数实现 如printf scanf putchar getchar puts gets 3 在使用C输入输出函数时 要用预编译命令 include stdio h 包含进来 第五节字符数据的输入输出 一 putchar函数 单个字符输出函数 向终端输出一个字符 例1 功能 说明putchar 函数的格式和使用方法 include stdio h 编译预处理命令 文件包含 main charch1 N ch2 E ch3 W putchar ch1 putchar ch2 putchar ch3 输出 putchar n putchar ch1 putchar n 输出ch1的值 并换行 putchar E putchar n 输出字符 E 并换行 putchar ch3 putchar n 说明 1 putchar 函数的格式 putchar c 其中c可以是一个字符型或整型的变量或常量 也可以是一个转义字符 n 或 例2 2 putchar 函数的作用 向终端输出一个字符 1 putchar 函数只能用于单个字符的输出 且一次只能输出一个字符 另外 从功能角度来看 printf 函数完全可以代替putchar 函数 2 在程序中使用putchar 函数 务必牢记 在程序 或文件 的开头加上编译预处理命令 也称包含命令 即 include stdio h 或 include表示要使用的函数 包含在标准输入输出 stdio 头文件 h 中 例2 includemain intch1 97 charch2 a putchar 97 整型的常量 putchar ch1 整型的变量 putchar a 字符型的常量 putchar ch2 字符型的变量 putchar也可以输出转义字符 putchar 101 putchar putchar n 二 getchar函数 单个字符输入函数 1 一般形式 getchar 从系统隐含的输入设备 如键盘 接收一个字符 2 接收的字符可以赋给整型变量 字符变量 也可不赋值作为表达式的一部分 如 putchar getchar 或printf c getchar 3 使用前 需要包含下面头文件 include stdio h include stdio h main charch1 ch2 ch3 ch1 getchar ch2 getchar ch3 getchar if ch1 a 例 输入三个字母 如果其中有小写字母就转换成大写字母输出 一 printf函数 格式输出函数 向终端输出若干个任意类型的数据 与putchar的区别 putchar只能输出一个字符 而printf可以输出多个任意数据类型 一般格式 printf 格式控制 输出表列 格式控制 用双引号括起来的字符串 包括两部分 格式说明 由 和格式字符组成 作用是将输出的数据转换为指定的格式输出 普通字符 需原样输出的字符 输出表列 是需要输出的一些数据 也可以是表达式 第六节格式输入与输出 格式字符 不同类型的数据用不同的格式字符 d格式符 用来输出十进制整数 使用格式如下 d 按整型数据的实际长度输出 md m为指定输出整数的数位宽度 如果数据的位数小于m 则左端补以空格 若大于m 则按实际位数输出 ld 输出长整型数据 也可指定字段宽度 mld 一个int型数据可以以 d和 ld格式输出 例 若输出longa 1234567的语句 printf ld a 例 类型转换字符d的使用 main intnum1 123 longnum2 123456 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 程序运行结果如下 num1 123 num1 123 num1 123 num1 123num2 123456 num2 123456 num2 123456 格式符 以八进制形式输出整数 可指定宽度 无负数对于长整型数据 也可指定 lo格式输出 x格式符 以十六进制形式输出整数 可指定宽度 无负数形式 对于长整型数据 可以指定以 lx格式输出inta 1 printf d x o a a a 输出为 1 ffff 177777 u格式符 输出无符号数 以十进制形式输出有符号的int型数据也可以用 u的格式输出unsigned型数据也可以 d o x的格式输出 例 main unsignedinta 65535 intb 2 printf a d o x u n a a a a printf b d o x u n b b b b a 1 177777 ffff 65535b 2 177776 fffe 65534 C格式符 用来输出一个字符 只占一列宽度 也可指定宽度 例 类型转换字符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码 转换成相应的字符输出 S格式符 用来输出一个字符串 s 输出一个字符串 ms 输出的字符占m列 如果字符串本身长度大于m则按原样输出 若串长小于m 则左补空格 ms 如果串长小于m 则在m列范围内 字符串向右靠齐 右补空格 m ns 输出占m列 但只取字符串中左端n个字符 这n个字符输出在m列的右侧 左补空格 m ns m n含义同上 n个字符输出在m列范围的左侧 如果大于m 则m自动取n值 即保证n个字符正常输出 例 类型转换字符s的使用 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注意 系统输出字符和字符串时 不输出单引号和双引号 f格式符 用来以小数形式输出实数 单 双精度 f 不指定字段宽度 由系统自动指定 使整数部分全部输出并输出 位小数 m nf 指定输出的数据占m列 其中有n位小数 如果数值长度小于m 则左端补空格 m nf 基本同上 只是输出时向左靠齐 右端补空格 例 类型转换字符f的使用 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 例 1 printf 5d 5d a b a 24b 165 2 printf d 8o a a a 1 3 printf 3s 7 2s 4s 5 3s n CHINA CHINA CHINA CHINA 4 printf f 10f 10 2f 2f 10 2f n f f f f f 5 printf e 10e 10 2e 2e 10 2e f f f f f f 123 456 注意 1 在 后面的第一个字符作为格式字符 其余作为修饰字符或普通字符 2 输出 时用 来完成 3 实数输出时有误差 4 实数输出时 一般输出6位小数 5 指数格式输出时 一般占13列 6 除X E G外 其余格式字符不能大写 7 printf 可以输出常量 变量和表达式的值 但格式控制中的格式说明符 必须按从左到右的顺序 与输出项表中的每个数据一一对应 否则出错 例如 printf str s f d i f n Internet 1 0 2 0 3 5 CHINA 是错误的 二 scanf函数 格式输入函数 1 一般形式 scanf 格式控制 地址列表 scanf d d f 2 格式说明 d 用来输入十进制整数 o 用来输入八进制整数 x 用来输入十六进制整数 c 用来输入单个字符 s 用来输入字符串 f 用来输入实数 以小数形式输出 e 用来输入实数 以指数形式输出 l 用来输入长整型数据 h 用来输入短整型数据 表示本输入项在读入后不赋给相应的变量 说明 1 在scanf函数中 对于无符号型数据 以 u d o x格式输入 2 可以指定输入数据所占列数 系统自动截取 3 后的 说明符 用来表示跳过它相应的数据 4 输入数据时不能规定精度 如scanf 7 2f 另外 scanf 函数中 格式字符串内的转义字符 如 n 系统并不把它当转义字符来解释 从而产生一个控制操作 而是将其视为普通字符 所以也要原样输入 例如 scanf num1 d num2 d n 假设给num1输入12 给num2输入36 正确的输入操作为 num1 12 num2 36 n 例 1 scanf d d d 输入 A B C 第六节程序举例 例1 输入三角形的三边长 求三角形面积 include math h main floata b c s area scanf f f f 例2 从键盘输入一个小写字母 要求改用大写字母输出 include stdio h 为使用求平方根函数sqrt 包含math hmain charc1 c2 printf Inputalowercaseletter c1 getchar printf c d n c1 c1 putchar c1 printf d n c1 c2 c1 32 printf c d n c2 c2 程序运行情况如下 Inputalowercaseletter a a 97A 65 例3 求方程ax2 bx c 0的实数根 a b c由键盘输入 假设a 0且b2 4ac 0 功能 设计一个顺序结构程序 求方程的根 include math h 为使用求平方根函数sqrt 包含math h头文件 main floata b c disc x1 x2 printf Inputa b c scanf f f f 在顺序结构程序中 一般包括以下几个部分 1 程序开头的编译预处理命令 在程序中要使用标准函数 又称库函数 除printf 和scanf 外 其它的都必须使用编译预处理命令 将相应的头文件包含进来 2 顺序结构程序的函数体中 是完成具体功能的各个语句和运算 主要包括 1 变量类型的说明 2 提供数据语句 3 运算部分 4 输出部分 良好的源程序书写风格 顺序程序段左对齐 顺序程序段中的所有语句 包括说明语句 一律与本顺序程序段的首行左对齐 Return 第五章逻辑运算和判断选取控制 本章要点 第一节关系运算符和关系表达式 掌握 第二节逻辑运算符和逻辑表达式 掌握 第三节if语句 掌握 第四节switch语句 掌握 第五节程序举例 实验 选择结构程序设计1 用IF语句实现选择结构 2 用SWITCH语句实现多分支选择结构 选择结构的嵌套 分析 这部分主要讲解了选择结构程序设计 一般会出2 3个选择题和2 3个填空题 单支和多支选择的区别和作用 这部分知识会与后面的循环语句结合使用 第一节关系运算符和关系表达式 一 关系运算符及其优先次序 关系运算符 大于 大于等于 等于 不等于 优先级相同 高 优先级相同 低 优先级 二 关系表达式 用关系运算符将两个表达式连接起来的式子 1 关系表达式的值 真 1 或 假 0 2 用关系表达式表达x在 a b 区间内 x a x b3 表达式求解时 按自左向右的方向 4 关系表达式的值是整数 所以可以将其看成整型表达式运算 5 字符型数据可以作为整型数据参加运算和比较6 判断两个实数是否相等时 不能用 而应用两数相减小于一个指定的很小的数 例 1 a b x 1 y 23 inti 1 j 7 aa i j 4 0 4 1 0 3 0 3 0 1 05 a b 相当于 a b c d z 1 a 2 fabs 1 0 3 0 3 0 1 0 1e 5 97 98 思考 设a 3 b 2 c 1则a b a b c b cb c的值是 第二节逻辑运算符和逻辑表达式 一 逻辑运算符 1 逻辑与 and 2 逻辑或 or 3 逻辑非 not 二 逻辑运算规则 1 a b 当且仅当a b同时为真 则值为真2 a b 当且仅当a b同时为假 则值为假3 a 若a为真 则值为假 三 逻辑运算符的优先级 非 与 或 高 低 非 算术运算符 关系运算符 和 赋值运算符 高 低 四 逻辑表达式 1 逻辑表达式的值 真 1 假 0 2 逻辑表达式的结合方向 与 为二元运算符 自左向右 为一元运算符 自右向左 3 逻辑表达式两侧的数据可以是任何类型数据 字符 实型等 系统只以0或1来判别 如 c d 4 在 表达式中 若 的一端为0 则不必计算另一端 该表达式的值肯定为0 记为0 a 0 5 在 表达式中 若一端为1 则不必计算另一端 该表达式的值肯定为1 记为1 a 1 6 有关表达式 0 a a1 a a1 a 10 a 0a a 10 a 0a a aa a a a b a b a b a b a a 注 1 如果在一个表达式中不同位置上出现数值 应区分哪些是作为数值运算或关系运算的对象 哪些作为逻辑运算的对象 例 5 3 8 4 0 2 在逻辑表达式的求解中 并不是所有的逻辑运算符都被执行 只是必须执行下一个逻辑运算符才能求出表达式的解时 才执行该运算符 例 1 a b c2 a b c图5 3图5 4 例 判别某一年是否为闰年 闰年的条件是符合下面二者之一 1 能被4整除 但不能被100整除 2 能被4整除 又能被400整除 判别闰年表达式 year 4 0 year 100 0 year 400 0 判别非闰年表达式 year 4 0 year 100 0 year 400 0 第三节if语句 一 if语句的三种形式 1 if 表达式 语句2 if 表达式 语句1else语句23 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式n 1 语句n 1else语句n 二 说明 1 if语句后面的表达式 一般为逻辑表达式或关系表达式 但也可是任意的类型 2 每一个else前面有一个分号 整个语句结束处有一个分号 3 else不能作为单独的语句使用 必须和if配对使用 4 在if和else语句后面可以有一条或多条语句 如果是多条语句 应该用 括起来成为一个复合语句 花括号外面不必再加分号 5 if语句中又包含一个或多个if语句 从最内层开始 else总是与它上面最近的未曾配对的if配对 6 为避免使用 最好使if和else数目相同 也可用 来确定 1 if x y z x 2 if x y z x elsez y if z printf c z if 0 01 printf c z 3 if a b c 作业 1 输入四个整数 输出最大数 先写出算法 再写出程序上机作业 1 给出一百分制成绩 要求输出成绩等级 A B C D E 90分以上为 A 80 89分为 B 70 79分为 C 60 69分为 D 60分以下为 E 2 有一函数 写一程序 输入x 输出y的值 y x x 10 例 比较两个实数的大小 main floata b t printf a b scanf f f if语句的嵌套 if if 语句1else语句2elseif 语句3else语句4 例 有一函数 y 编一程序 输入一个x值 输出y值 1 x0 程序1 main intx y scanf d 程序2 if x 0 if x 0 y 1 elsey 0 elsey 1 程序3 y 1 if x 0 if x 0 y 1 elsey 0 程序4 y 0 if x 0 if x 0 y 1 elsey 1 三 条
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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