




已阅读5页,还剩153页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2019 12 27 1 武汉理工大学计算机学院 授课教师 王红霞 C语言程序设计 2019 12 27 2 选用教材与参考书 主教科书顾治华 陈天煌等 C语言程序设计 机械工业出版社2007 2参考教材顾治华 陈天煌等 C语言程序设计实验指导 机械工业出版社2007 2参考书谭浩强 C语言程序设计 清华大学出版社 2019 12 27 3 课程内容 第一章C语言程序设计概述第二章算法及算法设计简介第三章数据描述与基本操作第四章选择结构程序设计第五章循环结构程序设计第六章数组与指针第七章函数与模块化程序设计方法 2019 12 27 4 第一章C语言程序设计基础 1 1程序与程序设计1 2C语言简介1 3简单的C语言程序1 4C语言程序的上机步骤1 5C语言的基本词法1 6C语言程序的基本结构 2019 12 27 5 程序与计算机语言 程序是存放在计算机中的操作指令的集合 用程序设计语言安排好的处理问题的步骤称为计算机程序 用程序设计语言编制一个能完成某项任务的计算机程序的过程叫做计算机程序设计 程序设计 数据结构 算法 程序设计方法 编程语言 程序设计的关键 必须掌握一种程序设计语言 掌握程序设计的逻辑思维 2019 12 27 6 程序设计过程 1 问题的提出 要达到的要求 2 确定数据结构和所采用的算法 3 编制程序 4 调试程序 5 整理并写出文档 2019 12 27 7 C语言的特点 1 语言简洁 紧凑 使用方便 灵活 C语言一共只有32个关键字 主要用小写字母表示 2 比其他高级语言更接近硬件 比低级语言更接近算法 程序易编 易读 易查错 易修改 兼有高级语言和低级语言的优点 3 数据类型和运算符十分丰富 程序设计和算法描述更为简单和方便 4 语法结构十分简单 语句数目少 简单易学 2019 12 27 8 6 它是一种模块化的程序设计语言 适合大型软件的研制和调试 5 它是一种结构化程序设计语言 提供了完整的程序控制语句 选择语句和循环语句 很适合结构化的程序设计方法 7 生成目标代码质量高 程序执行效率高 8 用c语言写的程序可移植性好 9 它提供了大量的库函数以供调用 简化了程序设计工作 2019 12 27 9 C语言程序的结构 C语言是结构化的程序设计语言 C语言是模块化的程序设计语言 程序是由函数构成的 一个C源程序至少包含一个main函数 也可以包含一个main函数和若干个其他函数 因此 函数是C程序的基本单位 一个函数由两部分组成 函数的首部 函数的第一行 包括函数名 函数类型 函数属性 函数参数 形参 名 参数类型 函数体 即函数首部下面的大括弧 内的部分 如果一个函数内有多个括弧 则最外层的一对 为函数的范围 函数体一般包括 声明部分 在这部分中定义所用到的变量 执行部分 由若干个语句组成 2019 12 27 10 4 一个C程序总是从main函数开始的 而不论main函数在整个程序中的位置如何 main函数可以放在程序最前头 也可以放在程序最后 或在一些函数之前 在另一些函数之后 5 C程序书写格式自由 一行内可以写几个语句 一个语句可以分写在多行上 6 每个语句和数据定义的最后必须有一个分号 分号是C语句的必要组成部分 分号不可少 7 C语言本身没有输入输出语句 输入输出的操作是由库函数scanf和printf等函数来完成的 8 可以用 对C程序中的任何部分作注释 2019 12 27 11 简单的C语言程序示例 例一main printf ThisisaCprogram n 本程序的作用是输出以下一行信息 ThisisaCprogram 2019 12 27 12 例二main inta b sum 这是定义变量 a 123 b 456 以下3行为C语句 sum a b printf sumis d n sum 程序的运行结果 Sumis579 2019 12 27 13 例三 example1 3输入两个数 求其中较大的数 includeintmax intx inty 被调用函数 intz if x y z x elsez y return z 将z的值返回 通过max带回调用处 main 主函数 inta b c scanf d d 运行结果 4 6 max 6 2019 12 27 14 C程序的上机步骤 2019 12 27 15 C语言的基本词法 标识符 定义 在程序中使用的变量名 函数名 标号等统称为标识符 除库函数的函数名由系统定义外 其余的都由用户自己定义 命名规则 标识符只能是字母 A Z a z 数字 0 9 下划线 组成的字符串 并且其第一个字符必须是字母或下划线 例如 以下标识符是合法的 a x x3 BOOK 1 sum5 x7 以下标识符是非法的 3s s T 3x bowy 1 M D John a b 2019 12 27 16 1 标准C不限制标识符的长度 但它受各种版本的C语言编译系统限制 同时也受到具体机器的限制 TurboC规定标识符的长度为32 一般情况下 标识符的长度不要超过8个字符 2 在标识符中 大小写是有区别的 例如SUM和sum是两个不同的标识符 变量名应尽量使用小写字母 以增加程序的可读性 3 标识符虽然可由程序员随意定义 但标识符是用于标识某个量的符号 因此 命名应尽量有相应的意义 以便于阅读理解 做到 顾名思义 在C语言中 所有的变量都是先定义后应用 使用没有定义的变量名被认为是 非法 的 在使用标识符时还必须注意以下几点 2019 12 27 17 C语言的基本词法 关键字 定义 关键字是由 语言规定的具有特定意义的字符串 通常也称为保留字 用户定义的标识符不应该与关键字相同 分类 语言的关键字分为以下3类 1 类型说明符用于定义和说明变量 函数或其它数据结构的类型 如int double float long short auto signed static struct unsigned char enum extern register和union等 2019 12 27 18 2 语句定义符用于表示一个语句的功能 如条件语句的语句定义符ifelse 循环语句的语句定义符do while for等 3 预处理命令字用于表示一个预处理命令 使用时前面要加 如include define ifdef endif等 关键字后必须有空格 圆括号 尖括号 双引号等分隔符 否则与其它字符一起组成新的标识符 2019 12 27 19 C语言的基本词法 其它 运算符 语言中含有相当丰富的运算符 运算符与变量 函数一起组成表达式 表示各种运算功能 运算符由一个或多个字符组成 分隔符在 语言中采用的分隔符有逗号和空格两种 逗号主要是用在类型说明和函数参数表中分隔各个变量 空格多用于语句各单词之间作间隔符 常量C语言中使用的常量可分为数字常量 字符常量 字符串常量 符号常量 转义字符等多种 2019 12 27 20 语言的字符集 1 字母小写字母a z共26个 大写字母A Z共26个 2 数字0 9共10个 3 空格符 制表符 换行符等统称为空白符 4 标点和特殊字符 2019 12 27 21 C语言程序设计的基本结构 1 顺序结构 2019 12 27 22 2 选择结构 或称分支结构 此结构中必包含一个判断框 根据给定的条件P是否成立而选择执行A框或B框 2019 12 27 23 3 循环结构 它又称为重复结构 即反复执行某一部分的操作 又两类循环结构 a 当型 while型 循环结构 它的功能是判断当前给定的条件p1成立时 执行A框操作 执行完A后 再判断条件p1是否成立 如果仍然成立 再执行A框 如此反复执行A框 直到某一次p1条件不成立为止 此时不执行A框 而从b点脱离循环结构 2019 12 27 24 b 直到型 Until型 循环结构 它的功能是先执行A框 然后判断给定的p2条件是否成立 如果p2条件不成立 则再执行A 然后再对p2条件作判断 如果p2条件仍然不成立 又执行A 如此反复执行A 直到给定的p2条件成立为止 此时不再执行A 从b点脱离本循环结构 2019 12 27 25 本章课堂练习 1 以下说法中正确的是 A C语言程序总是从第一个函数开始执行B 在C语言程序中 要调用的函数必须在main 函数中定义C C语言程序总是从main 函数开始执行D C语言程序中的main 函数必须放在程序的开始部分 2019 12 27 26 解答 C解释 C语言程序总是从main 函数开始执行 而不论其在程序中的位置 当主函数执行完毕时 亦即程序执行完毕 除main函数外 其它函数都是在执行main函数时被调用执行的 在C语言中 函数不允许嵌套定义 习惯上 将主函数main 放在最前头 但并不是必须的 2019 12 27 27 2 以下叙述不正确的是A 一个C源程序可由一个或多个函数组成B 一个C源程序必须包含一个main函数C C程序的基本组成单位是函数D 在C程序中 注释说明只能位于一条语句的后面 2019 12 27 28 解答 D解释 凡是用 和 括起来的文字 都是注释 其出现的位置可以任意 2019 12 27 29 3 下列标识符中 合法的变量名有 A a bB 888C A1D 3x56 2019 12 27 30 解答 C解释 变量名只能由字母 数字和下划线三种字符所组成 且第一个字符必须为字母或下划线 C语言的关键字不能用作变量名 另外 C语言对英文字母的大小写敏感 即同一字母的大小写 被认为是两个不同的字符 习惯上 变量名和函数名中的英文字母用小写 以增加可读性 2019 12 27 31 第二章算法及算法设计简介 2 1算法的概念2 2算法的设计与表达2 3简单的算法实例2 4结构化程序设计方法简介 2019 12 27 32 算法的概念 任何一个程序应包含的如下两方面的内容 1 对数据的描述 在程序中要指定数据的类型和数据的组织形式 即数据结构 datastructure 2 对操作的描述 即操作步骤 也就是算法 algorithm 著名计算机科学家沃思 NikiklausWirth 提出公式数据结构 算法 程序 算法 是对解决某个问题的方法步骤的描述 程序 从计算机角度来说 程序是用某种计算机能理解并执行的计算机语言描述解决问题的方法和步骤 2019 12 27 33 实际上 一个程序除了以上两个主要要素之外 还应当采用结构化程序设计方法进行程序设计 并且用某一种计算机语言表示 因此 可以这样表示 程序 算法 数据结构 程序设计方法 语言工具和环境在这4个方面中 算法是灵魂 数据结构是加工对象 语言是工具 编程需要采用合适的算法 算法是解决 做什么 和 怎么做 的问题 2019 12 27 34 算法的表示 1 用自然语言表示算法采用汉语 英语或其它语言来描述解决问题的方法和步骤 由于自然语言容易出现 歧义性 且描述问题的文字冗长 因此一般很少使用自然语言来描述算法 2019 12 27 35 例1 有50个学生 要求将他们之中成绩在80分以上者打印出来 用n表示学号 n1代表第一个学生学号 ni代表第i个学生学号 用g代表学生成绩 gi代表第i个学生成绩 算法可表示如下 S1 1 iS2 读入学号ni和成绩giS3 如果gi 80 则打印ni和gi 否则不打印S4 i 1 iS5 如果i 50 返回S2 继续执行 否则 算法结束 2019 12 27 36 2 用流程图表示算法 1 常用的流程图符号 2019 12 27 37 上例用流程图表示 1 流程图表示算法的优点 表示算法直观形象 比较清楚地显示出各个框之间的逻辑关系 简单 易于掌握 流程图 2019 12 27 38 3 用N S图表示算法 1973年美国学者I Nassi和B Shneiderman提出了一种新的流程图形式 在这种流程图中 完全去掉了带箭头的流程线 全部算法写在一个矩形框内 在该框内还可以包含其他的从属于它的框 这种流程图又称N S结构化流程图 N S流程图用以下的流程图符号 1 顺序结构 A B 2019 12 27 39 2 选择结构 P 成立 不成立 A B 3 循环结构 当p1成立 A 当型循环结构 直到p1成立 A 直到型循环结构 用以上3种N S流程图中的基本框 可以组成复杂的N S流程图 以表示算法 2019 12 27 40 上例用N S图表示 用N S表示算法如图 2019 12 27 41 4 用伪码表示算法 伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法 它不用图形符号 因此书写方便 格式紧凑 也比较好懂 便于向计算机语言算法 即程序 过渡 例有50个学生 要求将他们之中成绩在80分以上者打印出来 用n表示学生学号 n1表示第一个学生学号 ni表示第i个学生学号 用g表示学生成绩 gi表示第i个学生成绩 2019 12 27 42 BEGIN 算法开始 1 iWhileii END 算法结束 用伪代码表示算法如下 2019 12 27 43 5 用计算机语言表示算法 设计算法的目的是为了实现算法 因此 不仅要考虑如何设计一个算法 也要考虑如何实现一个算法 我们的任务是用计算机解题 也就是要用计算机实现算法 计算机是无法识别流程图和伪代码的 只有用计算机语言编写的程序才能被计算机执行 当然还要经过编译成目标程序才能被计算机识别和执行 因此 在用流程图或伪代码描述出一个算法后 还要将它转换成计算机语言程序 2019 12 27 44 例 有50个学生 要求将他们之中成绩在80分以上者打印出来 用n表示学生学号 n1表示第一个学生学号 ni表示第i个学生学号 用g表示学生成绩 gi表示第i个学生成绩 C语言程序如下 main intg 50 n 50 i for i 0 i 80 printf 6d 3d n n i g i 2019 12 27 45 例2 对一个大于或等于3的正整数 判断它是不是一个素数 方法 将n 其中n 3 作为被除数 将2到 n 1 各个整数轮流作为除数 如果都不能被整除 则n为素数 简单的算法实例 2019 12 27 46 算法表示如下 S1 输入n的值S2 2 i i作为除数 S3 n被i除 得余数rS4 如果r等于0 表示n能被i整除 则打印n 不是素数 算法结束 否则执行S5S5 i 1 iS6 如果i n 1 返回S3 否则 打印n 是素数 算法结束 2019 12 27 47 S1 1 signS2 1 sumS3 2 denoS4 1 sign signS5 sign 1 deno termS6 sum term sumS7 deno 1 denoS8 若deno 100返回S4 否则算法结束 例3 求1 1 2 1 3 1 4 1 99 1 100 2019 12 27 48 结构化程序设计方法简介 1 三种基本结构回顾 1 顺序结构 2019 12 27 49 2 选择结构 或称分支结构 2019 12 27 50 3 循环结构 它又称为重复结构 即反复执行某一部分的操作 又两类循环结构 a 当型 while型 循环结构 2019 12 27 51 b 直到型 Until型 循环结构 2019 12 27 52 2 结构化程序 所谓结构化程序 就是仅仅使用顺序 选择 循环等三种基本结构所构造的程序 3 结构化程序设计方法 结构化程序设计方法的基本思想是 把一个复杂问题的求解过程分阶段进行 每个阶段的问题都控制在人们容易理解和处理的范围内 2019 12 27 53 1 i i 1 i gi 80 i 50 结束 开始 打印ni gi Y N N Y 读入ni和gi 2019 12 27 54 解答 用自然语言表示 用传统的流程图表示 N S流程图 用伪代码表示等 1 算法的表示形式主要有哪些 课堂练习 2019 12 27 55 2 设计算法 A B两人各有一桶油 现两人要将各自桶内的油互换 解答 必须借助另外一个空桶 并按如下算法进行 用Si表示第i步操作 A的桶叫A B的桶叫B 空桶叫M 开始 S0 将A桶中的油倒入M桶中 S1 将B桶中的油倒入A桶中 S2 将M桶中的油倒入B桶中 2019 12 27 56 3 设计算法写出求n 的算法 解答 S0 给出n的值 S1 1 p S2 2 i S3 p i p S4 i 1 i S5 若i n 返回S3 否则 结束 第三章数据描述与基本操作 3 1基本数据类型3 2常用的运算符和表达式3 3表达式及赋值语句3 4基本输入输出操作的实现3 5顺序结构程序设计实例 概述 使用高级语言编写程序 必须在程序中做好两件事 一是描述数据 二是描述数据的加工方法 前者是通过数据定义语句实现的 后者是通过若干执行语句 包括用各种运算符构成的表达式来实现的 本单元主要介绍C语言的基本数据类型 为后续单元的学习奠定一个基础 关于复杂的数据类型 如数组 指针 结构型 共用型等 将在以后单元中介绍 3 1C语言的数据类型 C语言具有十分丰富的数据类型 所谓数据类型是指数据的内在表现形式 具体的数据类型有以下若干种 1 基本数据类型 整型 实型和字符型 2 构造类型 由若干个相关的基本数据类型数据组合在一起形成的一种复杂的数据类型 如数组型 结构型和共用型 3 指针型 一种简单的数据类型 它是用来表示内存地址的 指针类型的数据可以表示基本类型数据的地址 它可以表示结构类型数据的首地址和其中某个具体数据的地址 4 枚举型 某数据在程序运行中 只取固定的几个值 我们可以把这几个值列出来 以后这个数据只能取这几个值中的某一个 5 空类型 没有任何具体值的数据类型 C语言中的数据类型如下图所示 数据类型 基本类型 整型 字符型 实型 浮点型 单精度型 双精度型 枚举类型 构造类型 数组类型 结构体类型 共用体类型 指针类型 空类型 2019 12 27 62 常量和变量 2 常量的分类 1 整型常量 2 实型常量 3 字符常量 4 字符串常量 5 符号常量常量的类型 可通过书写形式来判别 常量1 常量的概念在程序运行过程中 其值不能被改变的量称为常量 2019 12 27 63 变量1 变量的概念在程序运行过程中 其值可以被改变的量称为变量 2 变量的两个要素 1 变量名 每个变量都必须有一个名字 变量名 变量命名遵循标识符命名规则 2 变量值 在程序运行过程中 变量值存储在内存中 在程序中 通过变量名来引用变量的值 2019 12 27 64 变量有以下几个特征 变量名 变量值 变量的数据类型 变量的地址 变量的存储类别 变量的作用域及变量的生存期等 变量必须先定义后使用 定义变量格式如下 数据类型关键字 如intx y z 变量的初始化 变量赋初值的过程就是变量初始化过程 整型数据 整型常量 整型常量就是整常数 包括正整数和负整数及0 其书写形式如下 1 十进制整数 如123 456 0 2 八进制整数 以0开头的是八进制数 如0123表示八进制数123 即 123 8 3 十六进制整数 以0 x开头的数是十六进制数 如0 x123 代表十六进制数 123 16 1 16 2 16 3 16 256 32 3 291 整型常量在一般微型机中占用2个字节 不管是十进制 八进制或十六进制整数 它们的数值范围都是十进制的 32768 32767 注意 C语言还提供一种 长整型常量 它们的数值范围是十进制的 2147483648 2147483647 在计算机中占用四个字节 它们的书写方法是在数据的末尾加一个大写字母 L 或小写字母 l 如0L 038L 0 x15L 2019 12 27 67 整型变量 1 分类根据占用内存字节数的不同 整型变量又分为 类 1 基本整型 类型关键字为int 2 短整型 类型关键字为short int 3 长整型 类型关键字为long int 4 无符号整型 无符号型又分为无符号基本整型 unsigned int 无符号短整型 unsignedshort 和无符号长整型 unsignedlong 三种 只能用来存储无符号整数 2 占用内存字节数与值域上述各类型整型变量占用的内存字节数 随系统而异 在16位操作系统中 一般用 字节表示一个int型变量 且long型 字节 int型 字节 short型 字节 2019 12 27 69 实型数据 实型常量 表示形式实型常量即实数 在 语言中又称浮点数 其值有两种表达形式 1 一般形式的实数 它是由整数 小数点 小数三部分组成 其中整数部分或小数部分可以省略 数的正负用前面的 可以省略 号或 号来区分 例如 12 345 1 2345 47 0 234 47 等都是实型常量 2 指数形式的实数 它是由尾数 小写字母e或大写字母E 指数三部分组成 尾数部分可以是十进制整型常量或一般形式的实数 指数部分是十进制的短整型常量 可以带E负号 例如 12 3e2 1 2e 3 47 0e2 234e 3等都是实型常量 C语言规定 字母e 或者E 之前必须要有数字 且e 或者E 后面的指数必须为整数 如 e3 5e3 5 e3都是不合法的指数形式 注意 实型常量在一般的微机中是占用4个字节的 不管是一般形式还是指数形式 它们的数值范围都是 10 10有效数字7位 例如 1 23456789和1 234567是相同的 因为实型常量的有效数字是7位 所以1 23456789中的后两位是无效的 38 38 2019 12 27 72 实型变量 语言的实型变量 分为两种 1 单精度型 类型关键字为float 一般占 字节 位 提供 位有效数字 2 双精度型 类型关键字为double 一般占 个字节 提供15 16位有效数字 字符型数据 A 把单个字符用一对单引号括起来表示字符常量 如 a d w 等都是字符常量 B 用该字符的ASCII码值表示字符常量 如65表示 A C 转义字符 反斜杠开头后跟规定的单个字符或数字 并用一对单引号括起来表示字符常量 如下 一字符常量 1 字符常量是ASCII码字符集里的一个字符 包括字母 大 小写有区别 数字和标点符号以及特殊字符等 均为半角字符 2 字符常量表示形式 2019 12 27 75 例1 字符与整数的转化 include stdio h voidmain inti charn n 97 i b printf n c n n printf i d n i printf i c n i 程序的输出为 n ai 98i b 2019 12 27 76 例2字符参与整数运算 include stdio h voidmain charn n a n n 65 printf n d n n 程序的输出结果为 n 32 2019 12 27 77 例3字母的大小写转换 include stdio h voidmain charn i n a i B n n 32 i i 32 printf n c n n printf i c n i 程序的输出为n Ai b 二字符串常量 字符串就是用两个双引号 号后括住的若干个字符 例如 abc 123456 aBbB 都是字符串 转义符可以出现在字符串中 例如 ABC 101 102 x43 x44 等都是字符串 分别表示 ABCD ABCD 两个字符串 一个字符串中所有的字符的个数称为该字符串的长度 其中每个转义字符只当做一个字符 例如 ABC 的长度为5 注意 a 与 a 的区别 C语言规定 每个字符串在内存中占用的字符数等于字符串的长度 1 其中最后一个字符存放的字符称为 空字符 其值为0 书写时常用转义字符 0 来表示 在C语言中称为字符串结束标志 关于变量的补充内容 1 变量 变量是指在程序运行过程中其值可以发生变化的量 2 变量的取名规则为 以字母 下划线 开头 后跟若干个字母 下划线 数字 一般约定 用户使用的变量名采用以字母开头 C语言内部使用的变量名以下划线开头 例如 abc a 1 age 1等都是合法的变量名 而3a age则是非法的变量名 当程序运行时 每个变量都要占用若干个连续的字节 所占用的字节数由变量的数据类型确定 其中第1个字节的地址称为变量的地址 C语言规定 程序中变量的地址是用 变量名 来表示的 3 变量的数据类型及其定义 1 变量可以是任何一种数据类型 具有某种数据类型的变量就叫做该类型变量 2 每个变量在使用前必须定义 说明其数据类型 3 定义变量数据类型的语句格式如下 数据类型符变量1 变量2 基本数据类型符及含义如下表所示 38 38 308 308 5 变量的初始化 1 在定义变量的同时给变量赋予初始值就称为变量的初始化 2 变量赋初值的语句格式如下 存储类型符数据类型符变量名1 初值1 变量名2 初值2 3 2运算符 1概述2算术运算符3赋值运算符4逗号运算符5条件运算符6长度运算符7位运算符8关系运算符 下章介绍9逻辑运算符 下章介绍 一 概述 用来表示各种运算的符号称为运算符 运算符必须有运算对象 运算对象是一个的 则称为单目运算 运算对象是两个的 则称为双目运算 运算对象是三个的 则称为三目运算 例如 数值运算中经常用到的 等 每个运算符都代表对运算对象的某种运算 都有自己特定的运算规则 每个运算符运算的对象都规定了数据类型 同时运算结果也有确定的数据类型 当表达式中出现多个运算符 计算表达式值时 就有谁先算 谁后算的问题 我们把这个问题称为运算符的优先级 计算表达式值时 优先级高的运算要先进行运算 同级别的运算符有左结合和右结合之分 C的运算符十分丰富 有13类 30多种 其分类如下 C语言运算符 基本运算符 算术运算符 基本算术运算符 增1减1运算符 关系运算符 逻辑运算符 赋值运算符 基本赋值运算符 算术自反赋值运算符 逗号运算符 条件运算符 数据长度运算符 sizeof 位运算符 位逻辑运算符 位移运算符 位自反赋值运算符 专用运算符 强制运算符 下标运算符 成员运算符 指针运算符 注意 少数运算符号有双重意义 主要有以下几种 1 号 在算术运算中即表示单目的取正运算 又可表示双目的加法运算 2 号 在算术运算中即表示单目的取负运算 又可表示双目的减法运算 3 号 在算术运算中即表示双目的乘法运算 在指针运算中表示指针变量指向的变量 4 号 在位逻辑运算中表示双目 与 运算 在指针运算中表示取地址的运算 二 算术运算符 1 基本算术运算符 基本算术运算符的运算对象 运算规则与结果 结合性如表所示 对象数 运算符 名称 运算对象 运算结果 结合性 单目 双目 正负 整型或实型 整型或实型 自右向左 自左向右 加减乘除 整除取余 整型 整数 算术运算符的优先级规定如下 单目基本算术运算符优先于双目基本算术运算符 优先于 同级单目基本算术运算符的结合性是自右向左 同级双目基本算术运算符的结合性是自左向右 例1 基本算术运算符的使用 设变量定义如下 intn 10 m 3 floatf 5 0 g 10 0 doubled 5 0 e 10 0 则 n的结果是 10 n m n m n m n m n m的结果分别为13 7 30 3 1 d e d e d e d e的结果分别为15 0 5 0 50 0 0 5 n m f g d的运算顺序相当于 n m f g d 结果是3 0 n m f d的运算顺序相当于 n m f d 结果是25 0 如果参加运算的两个数中有一个为浮点型 则结果是double型 2 增1减1运算符 1 增1减1运算符的运算对象 运算规则与结果 结合性如下表所示 对象数 单目 名称 运算符 运算规则 运算对象 运算结果 结合性 增1 前缀 先加1后使用 增1 后缀 减1 前缀 减1 后缀 先使用后加1 先减1后使用 先使用后减1 整型 字符型 指针型变量或数组元素 同运算对象的类型 自右向左 2 增1减1运算符的优先级 增1减1运算符优先于双目基本算术运算符 增1减1运算符和单目运算符 同级别 结合性是自右向左 注意 若出现难以区分的若干个 或 组成运算符串时 C语言规定 自左向右取尽可能多的符号组成运算符 例1 a b应理解为 a ba b应理解为 a b 例2 增1减1运算符的使用 设变量定义如下 charc1 b c2 B c1 c2可看成整型 其值分别为98 66 则 c1的值是99 运算后c1的值是 c c1 的值是98 运算后c1的值是 a c1 c2的值是164 运算后c1的值是 c c2的值是 B c1 c2的值是32 运算后c1的值是 a c2的值是 B 三 赋值运算符 1 赋值运算符 赋值运算符是双目运算符 赋值运算符的左边必须是变量 右边是表达式 1 赋值运算符的运算对象及有关规则如下表 2 赋值运算符的优先级 算术运算符优先于关系运算符优先于双目逻辑运算符优先于赋值运算符 赋值运算符的结合性是自右向左 3 赋值运算符的使用 设变量定义如下 charc1 a c2 intn1 65 n2 n3 n4 n5 n6 floatf1 3 0 f2 则 c2 n1运算后 c2的值是65 n1的值不变 n2 c1运算后 n2的值是0 c1的值不变 f2 f1 0 001运算后 f2的值是3 001 f1的值不变 n3 c1 n1 c1 n1运算后 n3的值是1 c1和n1的值不变 注 运算顺序相当于n3 c1 n1 c1 n1 n4 n5 n6 n1 运算后 n4 n5 n6的值均是 64 n1的值是64 注意 上述表达式的值就等于赋值表达式中的最左边的变量值 2 算术自反赋值运算符 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 数值型 数值型 自右向左 整型 整型 2 算术自反赋值运算符的优先级 算术运算符优先于关系运算符优先于双目逻辑运算符优先于算术自反赋值运算符 算术自反赋值运算符和赋值运算符是同级别的 结合性是自右向左 3 算术自反赋值运算符的使用 设变量定义如下intn1 10 n2 10 m1 10 m2 10 m3 10 m4 10 则 n1 n2 n1的值为20 n2的值不变 n1 n2 n1的值为0 n2的值不变 n1 n2 n1的值为100 n2的值不变 n1 n2 n1的值为1 n2的值不变 m1 m2 m3 m4 2运算后 m1 m2 m3 m4的值依次是 30 40 50 5 运算顺序相当于m1 m2 m3 m4 2 四 逗号运算符 逗号运算符是双目运算符 其运算对象是表达式 1 逗号运算符 注意 由逗号运算符组成的式子也是表达式 其值等于最右边的表达式的值 2 逗号运算符的优先级 任何运算符优先于逗号运算符 逗号运算符的结合性是自左向右 3 例题 设整型变量a b为2 则 b a 3 c b 4运算结果 a不变 b为5 c为9 表达式的值为9 d a e d f e运算结果 a为1 d为1 e为1 f为1 表达式的值为1 五 条件运算符 1 条件运算符 2 条件运算符的优先级 其它运算符优先于条件运算符优先于赋值 算术自反赋值运算符 条件运算符的结合性是自右向左 3 例子 1 设整型变量a b c d均为2则a b c 1 d 0 结果a b d不变 c为1 表达式的值为1 2 a 1 3 b a 2 c a 3 结果a c不变 b为4 表达式值为4 3 a b c 0 a b c 1 c 1 结果a b不变 c为0 表达式的值为0 1 长度运算符 六 长度运算符 2 长度运算符优先级 和单目算术运算符 单目逻辑运算符 增1减1运算符同级别 3 例子 设变量定义如下 intn shorts unsignedlongu3 floatf charc 则sizeof n 的值是2sizeof s 的值是2sizeof long 的值是4sizeof unsignedint 的值是2sizeof u3 的值是4sizeof f 的值是4sizeof double 的值是8sizeof c 的值是1 注意 上述结果是TurboC2 0在微机上运行的结果 2019 12 27 107 七位运算C语言中提供的位运算符 1 按位取反运算符 形式 A功能 把A的各位都取反 即0变1 1变0 例如 intA 179 2019 12 27 108 2 按位与运算符 形式 A B功能 对A的各位与B的对应位进行比较 如果两者都为1 A B对应位上的值为1 否则为0 例如 intA 179 二进制0000000010110011 intB 169 二进制0000000010101001 2019 12 27 109 3 按位或运算符 形式 A B功能 对A的各位与B的对应位进行比较 如果两者中有一个为1 A B对应位上的值为1 否则为0 例如 intA 179 二进制0000000010110011 intB 169 二进制0000000010101001 2019 12 27 110 4 按位异或运算符 形式 A B功能 对A的各位与B的对应位进行比较 如果两者不同 A B对应位上的值为1 否则为0 例如 intA 179 二进制0000000010110011 intB 169 二进制0000000010101001 2019 12 27 111 5 左移运算符 形式 A n 其中n为一个大于0的整型表达式 功能 把A的值向左移动n位 右边空出的n位用0填补 当左移时移走的高位中全都是0时 相当于对A作n次乘以2的运算 例如 intA 27 二进制0000000000011011 2019 12 27 112 6 右移运算符 形式 A n 其中n为一个大于0的整型表达式 功能 把A的值向右移动n位 左边空出的n位用0填补 相当于对A作n次除以2的运算 例如 intA 179 二进制0000000010110011 3 3表达式 用运算符将运算对象连接形成的式子就是表达式 1 表达式的定义 2 C语言的表达式非常丰富 也有人称C语言为表达式语言 C语言使用的基本表达式有 赋值表达式 如 a 3 算术表达式 如 3 4 2 关系表达式 如 3 2 逻辑表达式 如 3 5 a b 条件表达式 如 a b a b 逗号表达式 如 a 3 b 4 c 5 3 4赋值语句 1 构成规则 1 变量 表达式 2 变量赋值运算符表达式分号 2019 12 27 116 2 注意区分赋值语句和赋值表达式的区别 例如a b 2 这是赋值表达式 a b 2 这是赋值语句 a 这是表达式 a 这是赋值语句 等价与a a 1 2019 12 27 117 3 5输入输出在C语言中的实现 1 输入输出的概念从计算机向外部输出设备 如显示屏 打印机 磁盘等 输出数据称为 输出 从外部向输入设备 如键盘 磁盘 光盘 扫描仪等 输入数据称为 输入 2 C语言本身不提供输入输出语句 输入和输出操作是由函数来实现的 在C标准函数库中提供了一些输入输出函数 例如 printf函数和scanf函数 2019 12 27 118 3 在使用C语言库函数时 要用预编译命令 include 将有关的 头文件 包括到用户源文件中 在调用标准输入输出库函数时 文件开头应有以下预编译命令 include或 include stdio h 4 允许在使用printf和scanf两个函数时可不加 include命令 2019 12 27 119 一 字符数据的输入输出 1 putchar函数 字符输出函数 函数格式 putchar C C可以是字符型变量或整型变量或常量 函数的功能 向终端输出一个字符 2019 12 27 120 2 程序实例 includemain chara b c a B b O c Y putchar a putchar b putchar c 注意 该程序可以输出控制字符 如putchar n 输出一个换行符 也可以输出其他转义字符如putchar 101 输出字符A putchar 输出单引号字符 运行结果 BOY 2019 12 27 121 3 getchar函数 字符输入函数 函数格式 getchar 函数的功能 从终端输入一个字符 函数的值就是从输入设备得到的字符 4 程序实例 includemain charc c getchar putchar c 在运行时 如果从键盘输入字符 a 并按回车键 就会在屏幕上看到输出的字符 a a 输入 a 后 按 回车 键 字符才送到内存 a 输出变量c的值 a 2019 12 27 122 注意 1 getchar 只能接收一个字符 getchar函数收到的字符可以赋给一个字符变量或整型变量 2 若在程序中调用getchar putchar函数 则必须在程序的开头部分加上 包含命令 include或 include stdio h 2019 12 27 123 二 格式输入与输出 一 printf函数 格式输出函数 1 printf函数的一般格式为printf 格式控制字符串 输出表列 括弧内包括两部分 1 格式控制字符串 是用双引号括起来的字符串 也称 转换控制字符串 它包括两种信息 格式说明 由 和格式字符组成 如 d f等 它的作用是将输出的数据转换为指定的格式输出 格式说明总是由 字符开始的 普通字符 即需要原样输出的字符 2 输出表列 是需要输出的一些数据 可以是表达式 2019 12 27 124 下面是一个例子 printf d d a b 格式说明输出表列 printf a db d a b 格式说明输出表列 2019 12 27 125 2 格式字符常用的有以下几种格式字符 1 d格式字符 用来输出十进制整数 有以下几种格式字符 d 按整型数据的实际长度输出 md m为指定的输出字段的宽度 如果数据的位数小于m 则左端补以空格 若大于m 则按实际位数输出 如printf 4d 4d a b 若a 123 b 12345 则输出结果为 123 12345 ld 输出长整型数据 如longa 135790 printf ld a 2019 12 27 126 对long型数据应当用 ld格式输出 对长整型数据也可以指定字段宽度 如将上面printf函数中的 ld 改为 8ld 则输出为 135790 8列 一个int型数据可以用 d或 ld格式输出 2 O格式符 以八进制数形式输出整数 由于是将内存单元中的各位的值 0或1 按八进制形式输出 因此输出的数值不带符号 即将符号位也一起作为八进制数的一部分输出 例如 inta 1 printf d o a a 2019 12 27 127 1111111111111111输出为 1 177777对长整型数 long型 可以用 lo 格式输出 同样可以指定字段宽度 如printf 8o a 输出为 177777 1在内存单元中的存放形式 以补码形式存放 如下 2019 12 27 128 3 x格式符 以十六进制数形式输出整数 同样不会出现负的十六进制数 例如inta 1 Printf x o d a a a 输出结果为 ffff 177777 1 2019 12 27 129 4 u格式符 用来输出unsigned型数据 即无符号数 以十进制形式输出 5 C格式符 用来输出一个字符 如 charc a printf c c 输出字符 a 请注意 c 中的c是格式符 引号右边的c是变量名 不要搞混 一个整数 只要它的值在0 255范围内 也可以用字符形式输出 在输出前 系统会将该整数作为ASCII码转换成相应的字符 反之 一个字符数据也可以用整数形式输出 2019 12 27 130 6 S格式符 用来输出一个字符串 有几种用法 s 例如 printf s CHINA 输出 CHINA 字符串 不包括双引号 ms 输出的字符率占m列 如字符串本身长度大于m 则突破m的限制 将字符串全部输出 若串长小于m 则左补空格 2019 12 27 131 ms 如果串长小于m 则在m列范围内 字符率向左靠 右补空格 m ns 输出占m列 但只取字符串中左端n个字符 这n个字符输出在m列的右侧 左补空格 m ns 其中m n含义同上 n个字符输出在m列范围的左侧 右补空格 如果n m 则m自动取n值 即保证n个字符正常输出 2019 12 27 132 7 f格式符 用来输出实数 包括单 双精度 以小数形式输出 有以下几种用法 m nf指定输出的数据共占m列 其中有n位小数 如果数值长度小于m 则左端补空格 m nf与 m nf基本相同 只是使输出的数值向左端靠 右端补空格 f 不指定字段宽度 由系统自动指定 使整数部分全部如数输出 并输出6位小数 应当注意 并非全部数字都是有效数字 单精度实数的有效位数一般为7位 2019 12 27 133 1 字符数据的输出 main charc a inti 97 printf c d n c c printf c d n i i 运行结果为 a 97a 97 3 例子 2019 12 27 134 2 字符串的输出main printf 5s 7 2s 4s 5 3s n CHINA CHINA CHINA CHINA 输出如下 CHINA CH CHIN CHI 其中第3个输出项 格式说明为 4s 即只指定n 没指定m 自动使m n 4 故占4列 2019 12 27 135 3 输出实数时的有效位数 main floatx y x 111111 111 y 222222 222 printf f x y 运行结果为 333333 328125 2019 12 27 136 4 输出实数时指定小数位数 main floatf 123 456 printf f 10f 10 2f 2f 10 2f n f f f f f 运行结果为 123 456001 123 456001 123 46 123 46 123 46 2019 12 27 137 4 格式符小结 printf格式字符 2019 12 27 138 2019 12 27 139 printf的附加格式说明字符 2019 12 27 140 5 使用printf函数时 还需注意以下几点 1 除了X E G外 其他格式字符必须用小写字母 如 d不能写成 D 2 可以在printf函数中的 格式控制 字符串内包含 转义字符 如 n t b r f 377 等 3 上面介绍的d o x u c s i e g等字符 如用在 后面就作为格式符号 一个格式说明以 开头 以上述9个格式字符之一为结束 中间可以插入附加格式字符 也称修饰符 例如 2019 12 27 141 printf c cf fs s c f s 格式说明 第一个格式说明为 c 而不包括其后的f 第二个格式说明为 f 不包括其后的S 第三个格式说明为 s 其他的字符为原样输出的普通字符 4 如果想输出字符 则应该在 格式控制 字符串中用连续两个 表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 爬虫应急饲养管理办法
- 牲口运输造价管理办法
- 特种气体罐装管理办法
- 特种陶瓷订单管理办法
- 犊牛疾病预防管理办法
- 玉米增产管理办法细则
- 环保专项项目管理办法
- 环保投资资金管理办法
- 环保违法处罚管理办法
- 环境刑罚处罚管理办法
- 北师版八年级数学上课程纲要
- 华晨宝马大东厂区天然气分布式能源站项目环评报告
- 青海2023届高校毕业生就业报告出炉:医学和法学就业率最高
- 汽车电控发动机构造与维修(第三版)
- GB/T 328.13-2007建筑防水卷材试验方法第13部分:高分子防水卷材尺寸稳定性
- 茶叶实践报告3篇
- 西门子低压电器快速选型手册
- 养羊与羊病防治技术课件
- 最新教科版五年级科学上册《第2课时 地球的结构》教学课件
- Q∕SY 05129-2017 输油气站消防设施及灭火器材配置管理规范
- 企业微信私域流量运营方案
评论
0/150
提交评论