已阅读5页,还剩480页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 计算机程序设计基础 C语言 2 1 课堂要求很严格 2 多听 适时做笔记 3 上课不能讲闲话 4 课后认真完成作业 实验报告 5 有问题 及时与老师联系 教学要求 3 选用教材与参考书 主教科书顾治华 陈天煌等 C语言程序设计 机械工业出版社2007 2参考教材顾治华 陈天煌等 C语言程序设计实验指导 机械工业出版社2007 2参考书谭浩强 C语言程序设计 清华大学出版社 4 课程内容 第一章C语言程序设计概述第二章算法及算法设计简介第三章数据描述与基本操作第四章选择结构程序设计第五章循环结构程序设计第六章数组与指针第七章函数与模块化程序设计方法 5 第一章 语言程序设计概述 6 1 1程序设计的概念1 2 语言的产生及发展1 3简单 程序介绍1 4C程序的上机步骤1 5C语言的基本语法和基本结构1 6本章要点小结 7 1 1程序设计的概念 1 1 1程序设计语言1 1 2程序设计的概念 8 计算机 计算机是用来延伸人的能力的工具 需要人来驾驭我们的职责是让非计算机专业的人更容易驾驭它完成这一目标的主要手段之一就是 编程 Programming 9 计算机基本工作过程 整个过程的执行者是硬件 但硬件是受软件控制的编程 就是编写软件 使硬件按照人的意图工作 10 计算机基本工作过程 源程序和输入数据 输出结果 取出数据 存入数据 操作命令 存取命令 取出程序指令 输入输出命令 计算结果 CPU 冯 诺依曼机 结构 大脑 眼 耳 口 11 软件的形成 软件 Software 的形成程序员 Programmer 编写程序源代码 SourceCode 编译器 Compiler 把源代码转换为可被计算机理解的机器代码 MachineCode 并把机器代码以可执行文件 ExecutableFile 的形式保存在磁盘上 12 机器语言 汇编语言 高级语言 面向过程 面向对象 CPU指令系统 由0 1序列构成的指令码组成如 10000000加10010000减 用助记符号描述的指令系统如ADDA B 程序设计是数据被加工的过程 客观世界可以分类 对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系 程序设计关键是定义类 并由类派生对象 1 1 1程序设计语言 13 程序设计语言的故事 计算机为什么用二进制呢 为什么不用我们日常熟悉的十进制呢 二进制在在电器元件中容易实现计算机进行二进制运算比进行十进制运算要简单得多 14 程序设计语言的故事 机器语言编写的1 1程序汇编语言 AssembleLanguage 编写的1 1程序 MOVAX 1ADDAX 1 15 程序设计语言的故事 BASIC语言编写的1 1程序C语言编写的1 1程序 PRINT1 1 includemain printf d n 1 1 16 Ada ALGOL60 ALGOL68 Pascal Modula 2 CPL BCPL B C C Java LISP PROLOG COBOL FORTRAN77 FORTRAN PL 1 Simula67 Smalltalk80 BASIC ANSI BASIC QBASIC VB FORTRAN90 17 1 1 2程序设计的概念 程序设计就是用计算机语言来编写程序的过程 什么是程序 著名计算机科学家沃思提出有名的公式 算法 数据结构 程序 18 算法即问题的求解过程 计算机的工作步骤 数据结构即对参与运算的数据怎样进行合理的组织 安排 以提高程序运行的效率和求解的精确性 程序的两大要素 数据结构 算法 19 1 2C语言的产生和发展 1 2 1C语言的产生1 2 2C语言的发展1 2 3C语言的特点 20 1 2 1C语言的产生 一切从一个叫 SpaceTravel 的电子游戏开始的 KenThompson为了让他的游戏能在PDP 7上运行 用汇编语言给PDP 7写了一个操作系统 UNIX汇编太不好用了 Thompson需要高级语言试验了一些高级语言 包括Fortran 都不理想他在BCPL基础上 自己设计了一个B语言UNIX开始发展 B也不够用了DennisRitchie加入 把B改造成C 开始用C重写UNIX 21 1 2 2C语言的发展 C语言发展过程产生过程时间 1972 1973地点 美国贝尔实验室目的 UNIX操作系统设计人 Ken Thompson和Dennis M RitchieC标准标准C K R合著 TheCProgrammingLanguage ANSIC 1983年87ANSIC 1987年1990年国际标准的ANSIC 22 Ritchie和Thompson在开发UNIX 23 接受美国国家技术勋章 24 C语言的祖师爷DennisM Ritchie 25 Ritchie漫画像 26 C语言本身既有一般高级语言的特点 又由低级语言 汇编语言 的特点 C语言是一种结构化的程序设计语言 它具有实现顺序 分支 循环三种基本结构化控制的语句 C语言简洁 紧凑 使用方便灵活 只有32个保留字 9种控制语句 书写形式自由 数据类型丰富 有整型 实型 字符型 数组型 指针型 结构体型 共用体型和枚举型等 1 2 3C语言的特点 27 5 运算功能强 有32种运算符 包括了算术运算 关系运算 逻辑运算 位运算 指针运算等 6 目标代码质量高 运行速度快 7 可移植性强 8 语法限制不太严格 程序设计自由度大 1 2 3C语言的特点 28 C语言是编译型语言 一种编译语言对应一种编译器按照该语言的语法编写程序源代码 把自己的思想融入到代码中编译器读入源代码 把程序员的意图转换成可执行程序 供他人使用 29 C语言与计算机系统层次关系 30 1 3简单C程序介绍 31 C程序格式和结构特点 第一个程序Hello World example1 1ThefirstCProgram includemain printf Hello World 输出 Hello World 32 example1 2calculatethesumofaandb include Thisisthemainprogram main inta b sum a 10 b 24 sum add a b printf sum d n sum Thisfunctioncalculatesthesumofxandy intadd intx inty intz z x y return z 运行结果 sum 34 33 格式特点习惯用小写字母 大小写敏感不使用行号 无程序行概念可使用空行和空格常用锯齿形书写格式 main main inti j sum sum 0 for i 1 i 10 i for j 1 j 10 j sum i j printf d n sum 优秀程序员的素质之一 使用TAB缩进 对齐有足够的注释有合适的空行 34 结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main 程序执行从main开始 在main中结束 其它函数通过嵌套调用得以执行 程序语句C程序由语句组成用 作为语句终止符注释 为注释 不能嵌套不产生编译代码 例 Thisisthemain ofexample1 1 编译预处理命令 函数首部 包括函数名 函数类型 函数参数名 参数类型 函数体 声明部分 执行部分 35 1 4C程序的上机步骤 36 程序代码的录入 生成源程序 c 语法分析查错 翻译生成目标程序 obj 与其它目标程序或库链接装配 生成可执行程序 exe 开始 编辑 编译 有错 执行 连接 结果正确 结束 可执行目标程序f exe 源程序f c 目标程序f obj 库函数和其他目标程序 Yes No Yes No 37 1 5C语言的基本语法和结构 1 5 1C语言的基本语法1 5 2C语言的基本结构 38 1 5 1C语言的基本语法 标识符关键字运算符分隔符常量注释符字符集 39 标识符 常量 变量 语句标号以及自定义函数的名称只能是字母 数字和下划线组成的字符串 第一个字符必须是字母或下划线标准C不限制标识符长度 但一般不超过8字符标识符大小写有区别标识符名最好能 顾名思义 40 32个关键字 由系统定义 不能重作其它定义 autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile 41 9种控制语句 if else switch case for while do while continuebreakgotoreturn 42 34种运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 及其扩展条件运算符 逗号运算符 指针运算符 求字节数 sizeof强制类型转换 类型 分量运算符 下标运算符 其它 43 1 5 2C语言的基本结构 1 顺序结构 A B a b 44 2 选择结构 或称分支结构 此结构中必包含一个判断框 根据给定的条件P是否成立而选择执行A框或B框 a b B A p 不成立 成立 45 3 循环结构 它又称为重复结构 即反复执行某一部分的操作 又两类循环结构 a 当型 while型 循环结构 b 直到型 Until型 循环结构 46 1 6本章要点小结 程序设计的概念C语言的产生及发展C语言的特点C程序的介绍和上机步骤C语言的基本语法和结构 47 本章课堂练习 1 以下说法中正确的是 A C语言程序总是从第一个函数开始执行B 在C语言程序中 要调用的函数必须在main 函数中定义C C语言程序总是从main 函数开始执行D C语言程序中的main 函数必须放在程序的开始部分 48 解答 C解释 C语言程序总是从main 函数开始执行 而不论其在程序中的位置 当主函数执行完毕时 亦即程序执行完毕 除main函数外 其它函数都是在执行main函数时被调用执行的 在C语言中 函数不允许嵌套定义 习惯上 将主函数main 放在最前头 但并不是必须的 49 2 以下叙述不正确的是A 一个C源程序可由一个或多个函数组成B 一个C源程序必须包含一个main函数C C程序的基本组成单位是函数D 在C程序中 注释说明只能位于一条语句的后面 50 解答 D解释 凡是用 和 括起来的文字 都是注释 其出现的位置可以任意 51 3 下列标识符中 合法的变量名有 A a bB 888C A1D 3x56 52 解答 C解释 变量名只能由字母 数字和下划线三种字符所组成 且第一个字符必须为字母或下划线 C语言的关键字不能用作变量名 另外 C语言对英文字母的大小写敏感 即同一字母的大小写 被认为是两个不同的字符 习惯上 变量名和函数名中的英文字母用小写 以增加可读性 第二章程序的灵魂 算法 一个程序主要包括以下两方面的信息 1 对数据的描述 在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式这就是数据结构 datastructure 2 对操作的描述 即要求计算机进行操作的步骤也就是算法 algorithm 数据是操作的对象操作的目的是对数据进行加工处理 以得到期望的结果著名计算机科学家沃思 NikiklausWirth 提出一个公式 算法 数据结构 程序 一个程序除了算法和数据结构这主要要素外 还应当采用结构化程序设计方法进行程序设计 并且用某一种计算机语言表示算法 数据结构 程序设计方法和语言工具是一个程序设计人员应具备的知识算法 数据结构 程序设计方法 语言工具和环境 程序 算法是解决 做什么 和 怎么做 的问题程序中的操作语句 是算法的体现不了解算法就谈不上程序设计 2 1算法的概念2 2算法的特性2 3算法的表示2 4结构化程序设计方法 2 1算法的概念 广义地说 为解决一个问题而采取的方法和步骤 就称为 算法 对同一个问题 可以有不同的解题方法和步骤为了有效地进行解题 不仅需要保证算法正确 还要考虑算法的质量 选择合适的算法 计算机算法可分为两大类别 数值运算算法非数值运算算法数值运算的目的是求数值解非数值运算包括的面十分广泛 最常见的是用于事务管理领域 2 1算法的概念 可以用最原始的方法进行 步骤1 先求1 2 得到结果2 步骤2 将步骤1得到的乘积2再乘以3 得到结果6 步骤3 将6再乘以4 得24 步骤4 将24再乘以5 得120 这就是最后的结果 例2 1求1 2 3 4 5 100 太繁琐 例2 1求1 2 3 4 5 简单算法的举例概念 改进的算法 设变量p为被乘数变量i为乘数用循环算法求结果 求1 2 3 4 5 简单算法的举例概念 S1 使p 1 或写成1 pS2 使i 2 或写成2 iS3 使p与i相乘 乘积仍放在变量p中 可表示为 p i pS4 使i的值加1 即i 1 iS5 如果i不大于5 返回重新执行S3 否则 算法结束最后得到p的值就是5 的值 若是100 求什么 简单算法的举例概念 例2 2有50个学生 要求将成绩在80 90分的学生的学号和成绩输出 用ni代表第i个学生学号 gi表示第i个学生成绩S1 1 iS2 如果90 gi 80 则输出ni和gi 否则不输出S3 i 1 iS4 如果i 50 返回到步骤S2 继续执行 否则 算法结束 2 1算法的概念2 2算法的特性2 3算法的表示2 4结构化程序设计方法 一个有效算法应该具有以下特点 1 有穷性 一个算法应包含有限的操作步骤 而不能是无限的 2 确定性 算法中的每一个步骤都应当是确定的 而不应当是含糊的 模棱两可的 2 2算法的特性 一个有效算法应该具有以下特点 3 有零个或多个输入 所谓输入是指在执行算法时需要从外界取得必要的信息 4 有一个或多个输出 算法的目的是为了求解 解 就是输出 没有输出的算法是没有意义的 5 有效性 算法中的每一个步骤都应当能有效地执行 并得到确定的结果 2 2算法的特性 对于一般最终用户来说 他们并不需要在处理每一个问题时都要自己设计算法和编写程序可以使用别人已设计好的现成算法和程序只需根据已知算法的要求给予必要的输入 就能得到输出的结果 输入3个数 黑箱子 3个数中最大数 求3个数的最大数 2 2算法的特性 2 1算法的概念2 2算法的特性2 3算法的表示2 4结构化程序设计方法 常用的方法有 自然语言传统流程图结构化流程图伪代码 2 3算法的表示 自然语言表示法 2 1节例子介绍的算法是用自然语言表示的用自然语言表示通俗易懂 但文字冗长 容易出现歧义性用自然语言描述包含分支和循环的算法 不很方便除了很简单的问题外 一般不用自然语言 传统的程序流程图 用一些图形符号形象直观的表述算法 上表给出了ANSI规定的程序流程图符号 流程图是用一些图框来表示各种操作用图形表示算法 直观形象 易于理解 x 0 Y N 一个入口 两个出口 传统的程序流程图 位置不够 防止交叉 传统的程序流程图 例2 4将例2 1的算法用流程图表示 求1 2 3 4 5如果需要将最后结果输出 1 t 输出t i 5 开始 2 i t i t i 1 i 结束 N Y 通过以上几个例子可以看出流程图是表示算法的较好的工具一个流程图包括以下几部分 1 表示相应操作的框 2 带箭头的流程线 3 框内外必要的文字说明流程线不要忘记画箭头 否则难以判定各框的执行次序 传统的程序流程图 特点 绘制简单 描述直观 之前广泛使用 缺点 程序流程图不易表示算法或程序的层次结构 用箭头表示的控制流可能引起随意的转移控制 可能诱使人们过早地考虑局部程序的控制结构而忽视全局的程序结构 不易表示数据结构和程序模块之间的关系 传统的程序流程图 N S图表示法 1973年美国学者I Nassi和B Shneiderman提出了一种新的流程图形式 在这种流程图中 完全去掉了带箭头的流程线 全部算法写在一个矩形框内 在该框内还可以包含其他的从属于它的框 这种流程图又称N S结构化流程图 N和S是两位美国学者的英文姓名的第一个字母 这种流程图适于结构化程序设计 因此很受欢迎 N S流程图用以下的流程图符号 顺序结构 选择结构 循环结构 当型 循环结构 直到型 N S图表示法 用伪码表示算法 伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法 它不用图形符号 因此书写方便 格式紧凑 也比较好懂 便于向计算机语言算法 即程序 过渡 BEGIN 算法开始 1 iWhileii 1 iWhilei 80andgii END 算法结束 前例用伪代码表示算法如下 用计算机语言表示算法 要完成一项工作 包括设计算法和实现算法两个部分 设计算法的目的是为了实现算法 不仅要考虑如何设计一个算法 也要考虑如何实现一个算法 用C语言程序实现前例如下 include 打印出50名同学中成绩在80 90分者 main inti g 50 n 50 for i 0 i 80 fc1 c 2 1算法的概念2 2算法的特性2 3算法的表示2 4结构化程序设计方法 2 4结构化程序设计方法简介 荷兰学者E W dijkctra提出了结构化程序设计 structuredprogramming 的理论 成为70年代中期至90年代初的程序设计主流 结构化程序设计方法提出了一些大家都要遵循的原则 这些原则归纳为32个字 自顶向下 逐步细化 模块设计 结构编码 清晰第一 效率第二 书写规范 缩进格式 顺序 分支和循环三种基本结构的共同特点 1 只有一个入口 2 只有一个出口 3 结构内的每一部分都有机会被执行到 也就是说 对每一个框来说 都有从入口到出口的路径通过它 4 结构内不存在 死循环 无终止的循环 结构化程序 所谓结构化程序 就是仅仅使用顺序 选择 循环等三种基本结构所构造的程序 结构化程序设计方法 结构化程序设计方法的基本思想是 把一个复杂问题的求解过程分阶段进行 每个阶段的问题都控制在人们容易理解和处理的范围内 2 4本章要点小结 算法的概念算法的特性算法的表示结构化程序设计方法 89 第三章数据描述与基本操作 90 3 1基本数据类型3 2运算符和表达式3 3输入输出操作 91 3 1基本数据类型 3 1 1C语言的数据类型3 1 2常量和变量3 1 3数据类型转换 92 3 1 1C语言的数据类型 一 什么是数据类型 二 C语言的数据类型有哪些 93 一 什么是数据类型 数据结构 算法 程序 C语言中以 数据类型 形式存在 对数据的描述 对操作的描述 94 数据类型 基本类型 整型 有符号 无符号 字符型实型 浮点型 枚举类型 构造类型 数组类型结构体类型共用体类型 指针类型 空类型 单精度型双精度型 在程序中对用到的所有数据都必须指定其数据类型 不同类型的数据 所占内存的字节数不同 对应的操作也不相同 二 C的数据类型 95 整型数据 1 整型数据的分类最基本的整型类型基本整型 int型 占2个或4个字节 32位编译系统 短整型 shortint VC 6 0中占2个字节长整型 longint VC 6 0中占4个字节双长整型 longlongint C99新增的 64位占8个字节 VC 6 0中定义为 int64 96 2 整型变量的符号属性整型变量的值的范围包括负数到正数可以将变量定义为 无符号 类型扩充的整形类型 有符号基本整型 signed int 无符号基本整型unsignedint 有符号短整型 signed short int 无符号短整型unsignedshort int 有符号长整型 signed long int 无符号长整型unsignedlong int 整型数据 97 字符型数据 字符是按其代码 整数 形式存储的C99把字符型数据作为整数类型的一种字符型数据在使用上有自己的特点 98 1 字符与字符代码大多数系统采用ASCII字符集字母 A Z a z数字 0 9专门符号 29个 等空格符 空格 水平制表符 t 换行 n 等不能显示的字符 空 null 字符 以 0 表示 鸣铃 以 a 表示 退格 以 b 表示 回车 以 r 表示 等 字符型数据 99 字符 1 和整数1是不同的概念 字符 1 只是代表一个形状为 1 的符号 在需要时按原样输出 在内存中以ASCII码形式存储 占1个字节整数1是以整数存储方式 二进制补码方式 存储的 占2个或4个字节 字符型数据 100 2 字符变量用类型符char定义字符变量charc 系统把 的ASCII代码63赋给变量cprintf d c n c c 输出结果是 63 字符型数据 101 浮点型数据 浮点型数据是用来表示具有小数点的实数float型 单精度浮点型 编译系统为float型变量分配4个字节数值以规范化的二进制数指数形式存放 102 浮点型数据是用来表示具有小数点的实数float型 单精度浮点型 double型 双精度浮点型 编译系统为double型变量分配8个字节15位有效数字 浮点型数据 103 几种基本数据类型 整型 字符型 实型 有 无 说明 数据类型所占字节数随编译器不同而不同 上表以VC 6 0为例 104 举例 数据溢出 Overflow 的危害 一台安装了Windows 95 98的机器 如果连续运行49 7天 可能死机原因 Windows自启动时刻起 有一个计数器 记录系统已经运行了多少毫秒 这个计数器个unsignedlongunsignedlong的最大值 4294967295一天有24 60 60 1000 86400000毫秒4294967295 86400000 49 71026961805 当49 7天的时候 此计数器会溢出 引起死机 105 一 常量 二 变量 3 1 2常量与变量 106 预备知识 bit Byte Word bit 位Byte 字节1B 8bWord 字1W 2BKilobyte KB 1KB 1 024BMegabyte MB 1MB 1 024KB Gigabyte GB 1GB 1 024MB Terabyte TB 1TB 1 024GB 107 一个字节有多大 可以表示数字0 255保存一个字符 英文字母 数字 符号 ASCII编码两个字节保存一个汉字 108 预备知识 二进制 世界上有 10 2种人 1种人懂二进制 1种人不懂二进制一个位有多大 只能是 0 或者 1 这叫二进制二进制诠释了计算机的哲学种类众多的复杂事物都是由若干种简单事物构成 109 1 常量 在程序运行过程中 其值不能被改变的量整型常量 如1000 12345 0 345实型常量十进制小数形式 如0 34 56 790 0指数形式 如12 34e3 代表12 34 103 字符常量 如 转义字符 如 n 字符串常量 如 boy 符号常量 definePI3 1416 3 1 2常量与变量 110 字符与字符串的区别有哪些 定界符不同 字符常量使用单引号 而字符串常量使用双引号 长度不同 字符常量的长度固定为1 而字符串常量的长度 可以是0 也可以是某个整数 存储要求不同 字符常量存储的是字符的ASCII码值 而字符串常量 除了要存储有效的字符外 还要存储一个结束标志 0 111 2 变量 在程序运行期间 变量的值是可以改变的变量必须先定义 后使用定义变量时指定该变量的名字和类型变量名和变量值是两个不同的概念变量名实际上是以一个名字代表的一个存储地址从变量中取值 实际上是通过变量名找到相应的内存地址 从该存储单元中读取数据 3 1 2常量与变量 112 方式 1 定义变量的同时赋初值 也叫变量初始化 格式 数据类型变量名 初值 变量名2 初值2 2 通过一个赋值语句给变量赋初值 格式 变量名 初值 变量赋初值 出现在函数体的声明部分 出现在函数体的执行部分 inta b 3 inta b b 3 113 1 程序中用到的变量必须 先定义 declare 后使用 2 C语言的关键字不能用作变量名 3 C语言对英文字母的大小写敏感 即同一字母的大小写 被认为是两个不同的字符 4 定义变量时 给几个变量赋相同的初值 应写成 inta 3 b 3 c 3 不能写成 inta b c 3 5 给变量赋值时 正常情况下应给变量赋相同类型的数据 若给变量赋与其类型不同的数据时 需进行类型转换 关于变量以及变量赋初值的几点说明 114 变量 举例 includevoidmain intstudent age intif adrress 1 floatscore 90 stadent 2 Age 20 7 printf d d d f if student age score 本程序中有几处错误 undeclaredidentifier 115 变量使用要注意长度 不要对变量所占的内存空间字节数想当然用sizeof获得变量或者数据类型的长度程序在TurboC2 0和VisualC 6 0下的运行结果不同 注意 includevoidmain printf DatatypeNumberofbytes n printf n printf char d n sizeof char printf int d n sizeof int printf shortint d n sizeof short printf longint d n sizeof long printf float d n sizeof float printf double d n sizeof double 116 3 1 3数据类型转换 一 隐式转换 自动转换 二 显式转换 强制转换 117 一 隐式转换 自动转换 转换发生条件 运算转换 不同类型数据混合运算时赋值转换 把一个值赋给与其类型不同的变量时输出转换 输出时转换成指定的输出格式函数调用转换 实参与形参类型不一致时转换 先转换 后运算 118 隐式转换 自动转换 同种数据类型的运算结果 还是该类型不同种数据类型的运算结果 是两种类型中取值范围更大的那种longdouble double float long int short char把数据赋值给另外一种类型变量也会发生自动类型转换从小到大 顺利转换从大到小 可能丢失信息 好的编译器会发出警告 见教材28页 119 隐式转换 自动转换 不同类型数据间的混合运算 运算的两个数中有一个数为float或double型 结果是double型 系统将float型数据都先转换为double型 然后进行运算 2 如果int型与float或double型数据进行运算 先把int型和float型数据转换为double型 然后进行运算 结果是double型 3 字符型数据与整型数据进行运算 就是把字符的ASCII代码与整型数据进行运算 120 inti floatf doubled longe i 2 f 2 5 d 3 9 e 3 10 a i f d e 107 5 0 1 3 112 0 110 7 int double double double double 思考 根据已知变量定义及赋值语句 计算以下表达式的值 并说明每一步所得结果的数据类型 121 二 显式转换 强制转换 一般形式 要转换成的数据类型 被转换的表达式 注 当被转换的表达式是一个简单表达式时 外面的一对圆括号可以缺省 举例 floatx y x 2 3 y 4 5 int x y 6 int int x y 6 5 double 说明 强制转换得到的是所需类型的中间变量 原变量或表达式的类型不变 122 includevoidmain floatx inti x 3 6 i int x printf x f i d x i 思考 以下程序的输出结果是什么 x 3 600000 i 3 程序运行结果 结论 较高类型向较低类型转换时可能发生精度损失问题 123 举例 已知三角形的边长a b c 求三角形周长的一半 includevoidmain floata b c s a 3 b 4 c 5 s 1 2 a b c printf s 8 2f s s 0 00 程序运行结果 s 6 00 程序运行结果 改为 1 0 2 1 2 0 或 float 1 2 1 float 2 124 C运算符简介算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达式关系运算符和表达式逻辑运算符和表达式条件运算符与表达式 3 2运算符与表达式 125 详见254页 C运算符简介 126 运算符必须有运算对象 分为3类 运算对象是一个的 则称为单目运算运算对象是两个的 则称为双目运算运算对象是三个的 则称为三目运算 C运算符简介 127 基本算术运算符 说明 例 5 3 1 5 3 1 模运算符或求余运算符 算术表达式 用算术运算符和括号将运算对象 也称操作数 连接起来的 符合C语法规则的式子 优先级和结合性 先乘除 后加减 有括号先算括号 自左至右 常量 变量 函数等 说明 两个整数相除的结果为整数 舍去小数部分 当商为负数时 多采用 向零取整 的方法 求余运算的两侧均应为整数5 3 2 例 a b c 1 5 a 算术运算符和算术表达式 如果一个运算符两侧的数据类型不同 先自动进行类型转换 使二者具有同一类型 然后进行运算 128 格式 前置 i i 在使用i之前 使i的值加 减 1 后置 i i 在使用i之后 使i的值加 减 1 自增 自减运算符 作用 自增运算符 使单个变量的值增1 自减运算符 使单个变量的值减1 例 i 3 A j i j i j i i i 1 i i 1 j i A j 4i 4j 3i 4j 3 和 结合方向是 自右至左 129 1 自增 自减运算是 语言特有的 常用于循环语句中 使循环控制变量加 或减 以及指针变量中 使指针指向下 或上 一个地址 2 自增 自减运算符 不能用于常量和表达式 例如 5 a b 等都是非法的 3 和 的结合方向为自右至左 P30 4 如果对一个变量的自增 自减运算 单独构成语句 而不是作为表达式的一部分时 前置和后置运算效果一样 都是使变量自加 如i 和 i 是一样的 都是使i加 5 在表达式中 连续使用同一变量进行自增或自减运算时 很容易出错 所以最好避免这种用法 说明 130 赋值运算符 简单赋值运算符 复合赋值运算符 简单赋值运算符的一般形式为 变量 表达式它的作用是将一个表达式的值赋给一个变量 复合赋值运算的一般格式为 变量双目运算符 表达式 复合赋值运算符它等价于 变量 变量双目运算符 表达式 只有当表达式简化为一个变量或一个常数时 两边的括号可以省略 赋值运算符和赋值表达式 131 赋值表达式 格式 赋值表达式的值 被赋变量的值 类型转换 转换条件 当赋值运算符两侧的数据类型不一致时转换原则 转换为被赋值变量的类型 132 注意 将取值范围小的类型转为取值范围大的类型是安全的反之是不安全的如果大类型的值在小类型能容纳的范围之内 则平安无事但是 浮点数转为整数 会丢失小数部分 非四舍五入反之 转换后的结果必然是错误的 具体结果与机器和实现方式有关 避免如此使用 例1 floata intb a 1 2 b a 3 b b 3 例2 a b 5 a 7 b 8 a b a 5 b 5a 15 b 8 自右而左的结合性 133 算术自反赋值运算符 1 运算规则 对象数 名称 运算符 运算规则 运算对象 运算结果 结合性 双目 加赋值 减赋值 乘赋值 除赋值 模赋值 a b相当于a a b a b相当于a a b a b相当于a a b a b相当于a a b a b相当于a a b 数值型 数值型 自右向左 整型 整型 134 逗号运算符 逗号表达式 表达式1 表达式2 表达式n 说明 1 逗号表达式的求解过程为自左至右 依次计算各表达式的值 最后一个表达式的值即为整个逗号表达式的值 2 逗号运算符的优先级最低 3 使用逗号表达式的目的通常是想分别得到各个表达式的值 而并非一定要得到整个表达式的值 4 常用于for循环语句中 除此以外很少使用 逗号运算符和逗号表达式 135 例1 a 3a 3 5 a 4 a a 12 例2 a 3a 3 5 a 4 a a 15表达式的值为60 136 关系运算符及其优先次序 关系运算符 用来对两个数值进行比较的比较运算符 语言提供 种关系运算符 小于 小于或等于 大于 大于或等于 等于 不等于 优先级相同 高 优先级相同 低 137 关系 算术 赋值运算符的优先级 关系运算符及其优先次序 138 c a b等效于c a b a b c等效于 a b ca bc等效于a b c 关系运算符及其优先次序 139 关系表达式 关系表达式用关系运算符将两个数值或数值表达式连接起来的式子关系表达式的值是一个逻辑值 即 真 或 假 在C的逻辑运算中 以 代表 真 以 代表 假 140 关系运算注意 例若a 0 b 0 5 x 0 3 则a x b的值为 0 例5 2 7 8在C中是允许的 值为 0 例 a 0结果为 A 100结果为 1 0 141 关系运算注意 例注意区分 与 inta 0 b 1 if a b printf aequaltob elseprintf anotequaltob 例应避免对实数作相等或不等的判断如1 0 3 0 3 0 1 0结果为 0 142 逻辑运算符及其优先次序 3种逻辑运算符 逻辑与 逻辑或 逻辑非 和 是双目 元 运算符 是一目 元 运算符逻辑表达式用逻辑运算符将关系表达式或其他逻辑量连接起来的式子 143 判断年龄在13至17岁之内 age 13 age65 逻辑运算符及其优先次序 144 逻辑运算的真值表 逻辑运算符及其优先次序 145 逻辑运算符的优先次序 为三者中最高 与其他运算符的优先次序 高 算术运算符关系运算符 和 赋值运算符 低 逻辑运算符及其优先次序 146 逻辑表达式 逻辑表达式的值应该是逻辑量 真 或 假 编译系统在表示逻辑运算结果时以数值1代表 真 以0代表 假 但在判断一个量是否为 真 时以0代表 假 以非0代表 真 注意 将一个非零的数值认作为 真 147 1 若a 4 则 a的值为0 2 若a 4 b 5 则a b的值为1 3 a和b值分别为4和5 则a b的值为1 4 a和b值分别为4和5 则 a b的值为1 5 4 0 2的值为1 逻辑表达式 148 修改后的逻辑运算真值表 逻辑表达式 149 判别某一年是否闰年 用逻辑表达式表示闰年的条件是符合下面二者之一 能被4整除 但不能被100整除 如2008 能被400整除 如2000 year 4 0 year100 0 year 400 0如果表达式值为1 则闰年 否则为非闰年 逻辑表达式 150 条件运算符和条件表达式 有一种if语句 当被判别的表达式的值为 真 或 假 时 都执行一个赋值语句且向同一个变量赋值如 if a b max a elsemax b max a b a b 条件运算符 151 条件运算符和条件表达式 有一种if语句 当被判别的表达式的值为 真 或 假 时 都执行一个赋值语句且向同一个变量赋值如 if a b max a elsemax b max a b a b 条件表达式 152 条件表达式的一般形式为表达式 表达式 表达式 条件运算符和条件表达式 条件运算符的执行顺序 求解表达式1若为非0 真 则求解表达式2 此时表达式2的值就作为整个条件表达式的值若表达式1的值为0 假 则求解表达式3 表达式3的值就是整个条件表达式的值 153 条件运算符优先于赋值运算符条件运算符的结合方向为 自右至左 以下为合法的使用方法 a b max a max b a b printf d a printf d b 条件运算符和条件表达式 154 长度运算符 长度运算符优先级 和单目算术运算符 单目逻辑运算符 增1减1运算符同级别同级运算符的结合性是自右向左的 155 设变量定义如下 intn shorts unsignedlongu3 floatf charc 则sizeof n 的值是4sizeof s 的值是2sizeof long 的值是4sizeof unsignedint 的值是2sizeof u3 的值是4sizeof f 的值是4sizeof double 的值是8sizeof c 的值是1 注意 上述结果是在32位机VisualC 6 0环境运行的结果 156 位运算C语言中提供的位运算符 1 按位取反运算符 形式 A功能 把A的各位都取反 即0变1 1变0 例如 intA 179 157 2 按位与运算符 形式 A B功能 对A的各位与B的对应位进行比较 如果两者都为1 A B对应位上的值为1 否则为0 例如 intA 179 二进制10011 intB 169 二进制01001 158 3 按位或运算符 形式 A B功能 对A的各位与B的对应位进行比较 如果两者中有一个为1 A B对应位上的值为1 否则为0 例如 intA 179 二进制10011 intB 169 二进制01001 159 4 按位异或运算符 形式 A B功能 对A的各位与B的对应位进行比较 如果两者不同 A B对应位上的值为1 否则为0 例如 intA 179 二进制10011 intB 169 二进制01001 160 5 左移运算符 形式 A n 其中n为一个大于0的整型表达式 功能 把A的值向左移动n位 右边空出的n位用0填补 当左移时移走的高位中全都是0时 相当于对A作n次乘以2的运算 例如 intA 27 二进制11011 161 6 右移运算符 形式 A n 其中n为一个大于0的整型表达式 功能 把A的值向右移动n位 左边空出的n位用0填补 相当于对A作n次除以2的运算 例如 intA 179 二进制10011 162 几乎每一个C程序都包含输入输出输入输出是程序中最基本的操作之一 3 3输入输出操作 163 1 所谓输入输出是以计算机主机为主体而言的从计算机向输出设备 如显示器 打印机等 输出数据称为输出从输入设备 如键盘 磁盘 光盘 扫描仪等 向计算机输入数据称为输入 3 3输入输出操作 164 2 语言本身不提供输入输出语句输入和输出操作是由C标准函数库中的函数来实现的printf和scanf不是 语言的关键字 而只是库函数的名字putchar getchar puts gets 3 3输入输出操作 165 3 在使用输入输出函数时 要在程序文件的开头用预编译指令 include或 include stdio h 3 3输入输出操作 166 在C程序中用来实现输出和输入的 主要是printf函数和scanf函数这两个函数是格式输入输出函数用这两个函数时 必须指定格式 3 3输入输出操作 167 用printf函数输出数据 1 printf函数的一般格式printf 格式控制 输出表列 例如 printf i d c c n i c 格式声明 168 1 printf函数的一般格式printf 格式控制 输出表列 例如 printf i d c c n i c 普通字符 用printf函数输出数据 169 1 printf函数的一般格式printf 格式控制 输出表列 例如 printf i d c c n i c 可以是常量 变量或表达式 用printf函数输出数据 170 2 常用格式字符 格式符 用来输出一个有符号的十进制整数可以在格式声明中指定输出数据的域宽printf 5d 5d n 12 345 d输出int型数据 ld输出long型数据 用printf函数输出数据 171 2 常用格式字符 格式符 用来输出一个字符charch a printf c ch 或printf 5c ch 输出字符 a 用printf函数输出数据 172 2 常用格式字符 格式符 用来输出一个字符串printf s CHINA 输出字符串 CHINA 用printf函数输出数据 173 2 常用格式字符f格式符 用来输出实数 以小数形式输出 不指定数据宽度和小数位数 用 f例 用 f输出实数 只能得到 位小数 doublea 1 0 printf f n a 3 用printf函数输出数据 174 2 常用格式字符f格式符 用来输出实数 以小数形式输出 指定数据宽度和小数位数 用 m nfprintf 20 15f n 1 3 printf 0f n 10000 3 0 用printf函数输出数据 175 2 常用格式字符f格式符 用来输出实数 以小数形式输出 输出的数据向左对齐 用 m nf 用printf函数输出数据 176 2 常用格式字符f格式符 用来输出实数 以小数形式输出float型数据只能保证6位有效数字double型数据能保证15位有效数字计算机输出的数字不都是绝对精确有效的 用printf函数输出数据 177 2 常用格式字符e格式符 指定以指数形式输出实数 e VC 给出小数位数为 位指数部分占5列小数点前必须有而且只有1位非零数字printf e 123 456 输出 1 234560e 002 用printf函数输出数据 178 2 常用格式字符e格式符 指定以指数形式输出实数 m neprintf 13 2e 123 456 输出 1 23e 002 前面有4个空格 用printf函数输出数据 179 printf格式字符 180 181 printf的附加格式说明字符 182 用scanf函数输入数据 1 scanf函数的一般形式 scanf 格式控制 地址表列 含义同printf函数 183 1 scanf函数的一般形式 scanf 格式控制 地址表列 可以是变量的地址 或字符串的首地址 用scanf函数输入数据 184 2 scanf函数中的格式声明 与printf函数中的格式声明相似以 开始 以一个格式字符结束 中间可以插入附加的字符scanf a f b f c f 用scanf函数输入数据 185 3 使用scanf函数时应注意的问题scanf函数中的 格式控制 后面应当是变量地址 而不应是变量名 scanf f f f a b c scanf f f f 用scanf函数输入数据 错 对 186 3 使用scanf函数时应注意的问题如果在 格式控制字符串 中除了格式说明以外还有其他字符 则在输入数据时应输入与这些字符相同的字符 scanf a f b f c f 132 a 1 b 3 c 2 a 1b 3c 2 用scanf函数输入数据 错 错 对 187 3 使用scanf函数时应注意的问题 在用 c 格式输入字符时 空格字符和 转义字符 都作为有效字符输入 对于scanf c c c 如输入 a b c c1值为字符 a c2值为字符 c3值为字符 b 因为 c只要求输入一个字符 后面不需要用空格作为两个字符的间隔 因此空格 作为下一个字符送给c2 用scanf函数输入数据 188 3 使用scanf函数时应注意的问题 在输入数据时 遇以下情况时该数据认为结束 遇空格 或按
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 微型创业贷款合同三篇
- 建筑供配电与照明技术 课件 第8-10章 电气安全技术、高层建筑供配电与照明系统设计实例、建筑电气BIM模型创建
- 智能分类垃圾
- 疼痛科药物使用管理制度
- 智能交通系统升级改造方案
- 重庆大学2022年春季学期课程作业《电力建设项目管理学》在线作业题库
- 7年级数学培训课件
- 小餐饮客户满意度调查总结
- 农业合作社与农户协作方案
- 教师法制知识培训
- 千分尺完整(公开课用)课件
- 上海市普陀区2024-2025学年八年级上学期期中物理练习卷
- 人力资源管理绩效管理合同
- 2024-2030年中国自助餐行业发展分析及竞争策略与趋势预测研究报告
- 2024年消防知识竞赛考试题库500题(含答案)
- 业务拓展经理招聘面试题与参考回答(某世界500强集团)2024年
- 期中试题(试题)-2024-2025学年三年级上册数学青岛版
- 2024年公考时事政治知识点
- 2024中石油校园招聘高频考题难、易错点模拟试题(共500题)附带答案详解
- 中考数学计算题练习100道(2024年中考真题)
- 业主授权租户安装充电桩委托书
评论
0/150
提交评论