C语言程序设计-第2-讲字符集.ppt

上传人:max****ui 文档编号:10963521 上传时间:2020-04-16 格式:PPT 页数:92 大小:753.50KB
返回 下载 相关 举报
C语言程序设计-第2-讲字符集.ppt_第1页
第1页 / 共92页
C语言程序设计-第2-讲字符集.ppt_第2页
第2页 / 共92页
C语言程序设计-第2-讲字符集.ppt_第3页
第3页 / 共92页
点击查看更多>>
资源描述
C语言程序设计 第二讲 1 C文件可以由一个或多个C源程序组成 2 C源程序可以由一个或多个函数组成 3 C文件有且仅有一个主函数 main函数 4 C源程序中用预处理命令调用库函数或其它程序 5 每个执行语句以分号结尾 6 变量要先定义再应用 上节提要 7 一个函数由两部分组成 函数的说明部分 函数名后有一对圆括号 函数体部分 花括号 执行语句 8 C程序书写区分大小写 9 printf 格式化字符串 参数表 10 可以用 或 对C源程序做注解 上节提要 语言的字符集 每一种可书写的语言 全部可用的字符的集合称为字符集英语的字符集a z26个字母阿拉伯数字的字符集为0 9汉语的字符集 中文字符 太多了 两个或两个以上的字符组合称为词汇 语言的字符集 语言字符集由字母 数字 空格 标点和特殊字符组成 在字符常量 字符串常量和注释中还可以使用汉字或其它可表示的图形符号 1 字母大小写英文字母2 数字0 93 空白符空格符 制表符 t 换行符 n 等统称为空白符 空白符只在字符常量和字符串常量中起作用 4 标点和特殊字符标点 冒号 逗号 大中小括号特殊字符 等 一 语言词汇在 语言中使用的词汇分为六类 标识符 关键字 运算符 分隔符 常量 注释符等 1 标识符在程序中使用的变量名 函数名 标号等统称为标识符 除库函数的函数名由系统定义外 其余都由用户自定义 标识符是只能由字母 数字和下划线 组成的字符串 并且其第一个字符必须是字母或下划线 由英文字母 数字和下划线组成 大小写敏感不可以是数字开头直观 见名知意 便于记忆和阅读最好使用英文单词或其组合切忌使用汉语拼音下划线和大小写通常用来增强可读性Variablename 太长 不建议 variable name UNIX风格 VariableName variableName Windows风格 不允许使用关键字作为标识符的名字int float for while if等某些功能的变量采用习惯命名如 for语句所采用的循环变量习惯用i j k 标识符命名 在使用标识符时还必须注意以下几点 1 标准C不限制标识符的长度 但它受各种版本的C语言编译系统限制 同时也受到具体机器的限制 例如在某版本C中规定标识符前八位有效 当两个标识符前八位相同时 则被认为是同一个标识符 定义标识符最好不要超过8个 2 在标识符中 大小写是有区别的 例如BOOK和book是两个不同的标识符 最好全部用小写 3 标识符虽然可由程序员随意定义 但标识符是用于标识某个量的符号 因此 命名应尽量有相应的意义 以便于阅读理解 作到 顾名思义 以下标识符是合法的 a x x3 BOOK 1 sum5以下标识符是非法的 3s以数字开头U S中间有非法字符 s T出现非法字符 3x以减号开头bowy 1出现非法字符 减号 Goodbye中间有空格int关键字 2 关键字关键字是由 语言规定的具有特定意义的字符串 通常也称为保留字 用户定义的标识符不应与关键字相同 语言的关键字分为以下几类 1 类型说明符用于定义 说明变量 函数或其它数据结构的类型 如int double 2 控制语句符用于表示一个语句的功能 如if就是条件语句的语句定义符 ANSIC一共只有32个关键字 1 数据类型说明符 12个 长短 单 双正负longshortdoubleunsignedsingned无值整型浮点字符 指针 voidintfloatchar联合枚举结构 数组 unionstructenum 2 变量类型 4个 外部静态自动寄存器externstaticautoregister 3 常量 1个 const 2 程序结构语句定义符 12个 判断 Ifelse循环 fordowhile转移 goto跳出 breakcontinue返回 return开关 switchcasedefault 3 其它关键字sizeof大小typedef类型定义volatile可变的变量 数据为什么要区分类型 不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类 数据类型 DataType 语言的数据类型 数据类型是按被说明变量的性质 表示形式 占据存储空间的多少 构造特点来划分的 在 语言中 数据类型可分为 基本数据类型 构造数据类型 指针类型 空类型四大类 数据类型 基本构造空指针 基本类型 构造类型 指针类型 空类型void 整型 浮点型 实型 字符型char 枚举类型enum 基本整型 singned int 长整型long int 短整型short int 数据类型 无符号整型unsigned int 单精度实型float 双精度实型double 数组类型 结构体类型struct 联合类型union 数据类型 DataType 1 基本数据类型 基本数据类型最主要的特点是 其值不可以再分解为其它类型 也就是说 基本数据类型是自我说明的 2 构造数据类型 构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的 也就是说 一个构造类型的值可以分解成若干个 成员 或 元素 每个 成员 都是一个基本数据类型或又是一个构造类型 在C语言中 构造类型有以下几种 数组类型 结构体类型 联合类型 计算机中的数据单位 b B KB MB GB TB bit 位bByte 字节BKilobyte KB KMegabyte MB 兆MGigabyte GB GTerabyte TB T 1TB 1 024GB 1GB 1 024MB 1MB 1 024KB 1KB 1 024B 1B 8b 思考 为什么是1024而不是更容易计算的1000 1024是2的10次方 注意 硬盘的容量计算与此不同 硬盘的1K是1000 思考 为什么是8而不是更直观的10 int整数 在目前绝大多数机器上占4个字节 TC2中是2个字节inta 64 float浮点数单精度浮点数 一般是4个字节长floatb 64 0 char字符字符 一般是1个字节长用来表示256个ASCII字符 或者0 255的整数 char a 基本数据类型 shortint 短整型 2个字节 通常简写为shortlongint 长整型 4个字节 通常简写为longsingle单精度浮点数4个字节double双精度浮点数8个字节longdouble signed用来修饰char int short和long 说明他们是有符号的整数 正整数 0和负整数 一般缺省都是有符号的 所以这个修饰符通常省略unsigned用来修饰char int short和long 说明他们是无符号的整数 正整数和0 数据类型修饰符 数据的存储形式 计算机中 所有的数据都是以二进制进行存储的 因为用一个两位的十六进制数就可以表示8位的二进制数 为方便阅读 都是以16进制的形式写出 常用字符与ASCII码对应 使用ULTRAEDIT打开flashfxp exe文件 进行十六进制编辑 以13为例 二进制数为 1101int型 2字节 15位有效数字 最高位为符号位 longint型 4字节 31位有效数字 最高位为符号位 unsignedint型 2字节 16位有效数字 无符号位 unsignedlongint型 4字节 31位有效数字 无符号位 整型数据在内存中的存放形式 0D 0D00 0D 0D00 TurboC中各类整型量所分配的内存字节数及数的表示范围 TC2中int的范围是 32768 32767如果我们给它一个小于 32768或者大于32767的数会如何呢 小蛇能吞下大象吗 超出取值范围会怎样 一台安装了Windows95 98的机器 如果连续运行49 7天没有重新启动 可能死机原因 Windows自启动时刻起 有一个计数器 记录系统已经运行了多少毫秒 这个计数器是个unsignedlong类型的变量unsignedlong的最大值是 4294967295一天有24 60 60 1000 86400000毫秒4294967295 86400000 49 71026961805 当49 7天的时候 此计数器会溢出 引起死机 溢出 Overflow 造成的危害 2浮点型数据 浮点型常量的表示方法 两种表示形式 小数指数 0 1231 23e 3 注意 字母e 或E 之前必须有数字 且e后面的指数必须为整数 1e3 1 8e 3 123e 6 1e 3e3 2 1e3 5 e3 e 3 4浮点型数据 规范化的指数形式 在字母e 或E 之前的小数部分中 小数点左边应有一位 且只能有一位 非零的数字 例如 123 456可以表示为 123 456e0 12 3456e1 1 23456e2 0 123456e3 0 0123456e4 0 00123456e其中的1 23456e3称为 规范化的指数形式 3 4浮点型数据 3 4 2浮点型变量 1 浮点型数据在内存中的存放形式一个浮点型数据一般在内存中占4个字节 32位 与整型数据的存储方式不同 浮点型数据是按照指数形式存储的 系统把一个浮点型数据分成小数部分和指数部分 分别存放 指数部分采用规范化的指数形式 图3 7 计算机中用二进制表示浮点数 使用二进制表示只有0和1 那么对于小数就只能用下面的方式来表示 a1 2 1 a2 2 2 a3 2 3 an 2 n其中a1等数可以是0或者1 从理论上将 使用这种表示方法可以表示一个有限的小数 IEEE754标准 一个浮点数V在IEEE754标准中可以用V 1 S M 2E的形式表示在表示浮点数时 每个浮点数均由三部分组成 符号位S 指数部分E和有效数字MS 0表示正数 S 1表示负数有效数字M是二进制小数 M的每一位数只能是0或1 以0 75为例十进制数0 75 0 5 0 25 1 1 2 1 1 4 1 2 1 1 2 2写成二进制的格式 0 75d 1 1 2 1b 219 125d 11011011 001b换算过程 1 128 1 64 0 32 1 16 1 8 0 4 1 2 1 1 0 0 5 0 0 25 1 0 125 1 27 1 26 0 25 1 24 1 23 0 22 1 21 1 20 0 2 1 0 2 2 1 2 3 11011011 001b 1 1011011001 27b 写成计算机存储的规范格式01000011010110110010000000000000 符号位s 正数则s 0 指数位E 用127代表0 E大于0则为127 E E小于0则为127 E 省略整数1后得到有效数字 或称尾数 219 125d 1 1011011001 27 类型位数数的范围有效数字float32 3 4 10 38 3 4 10386 7位double型64 1 7 10 308 1 7 1030815 16位longdouble128 1 2 10 4932 1 2 10493218 19位 浮点型数据的有效位数 2 浮点型变量的分类浮点型变量分为单精度 float型 双精度 double型 和长双精度型 longdouble 三类形式 有效数是M 23位 111111111111111111111111111B 8388607D 3 2常量与变量 3 2 1常量和符号常量在程序运行过程中 其值不能被改变的量称为常量常量区分为不同的类型 整型100 012 0 xFF实型3 14 1 23E2字符型 a 2 72 字符串 a ab 1232 符号常量 definePRICE30 整型常量18 31长整型常量123l 123L 123456l 123456L无符号型常量123u 123U浮点常量十进制小数形式123 45 456 78指数形式1e 2 4 5e3单精度实型常量123 45f 456 78F 1e 2f 4 5e3F长双精度型常量123 45l 456 78L 1e 2l 4 5e3L 没有长单精度的说法 常量 Constant 以数字 0 开始的整型常量是八进制数022 037010和10大小不一样因为八进制并不常用 所以此种表示法比较少见以 0 x 或者 0X 开始的整型常量是十六进制A F和a f用来表示十进制的10 15十六进制的形式比较常用 尤其在进行位一级的控制的时候0 x12 0 x1F 0 x1f 八进制与十六进制常量 练习 写出以下程序的执行结果 voidmain inta b c a 12 b 012 c 0 x12 printf d d d a b c 练习 找出下列程序中的错误 voidmain inta b c d e f g a 0X2A b 0XA0 c 5A d 0XFFFF e 0X3H f 019 g 003 printf d d d d d d d a b c d e f g 字符常数为用单引号扩起的一个字符 a A 5 单引号内只能有一个字符 除非用 开头其值为整数 也可以参与各种数学运算每个字符具有一个0 255之间的数值 可从ASCII表查出注意 5 和整数5的区别字符的数学运算在密码学内用得比较多 字符 Character 常量 例 向字符变量赋以整数 includevoidmain charc1 c2 c1 97 c2 98 printf c c n c1 c2 printf d d n c1 c2 说明 在第 和第4行中 将整数 和 分别赋给c1和c2 它的作用相当于以下两个赋值语句 c1 c2 因为 a 和 b 的ASCII码为 和 运行结果 9798 3 5字符型数据 3 5 3字符数据在内存中的存储形式及其使用方法将一个字符常量放到一个字符变量中 实际上并不是把该字符本身放到内存单元中去 而是将该字符的相应的ASCII代码放到存储单元中 这样使字符型数据和整型数据之间可以通用 一个字符数据既可以以字符形式输出 也可以以整数形式输出 转义字符一些特殊字符 无法从键盘输入或者另有它用 用转义字符表示 字符常数 小写字母转换为大写字母 Char型与int型之间的关系 例2 4 例2 5 以字符型和整数型两种格式输出字符变量 main charch a 定义ch为字符型变量 printf c d n ch ch 分别以字符形式 整数形式输出ch main charch b ch b 32 printf c d n ch ch 用双引号括住的由0个或多个字符组成的字符序列 Iamastring 表示空字符串转义字符也可以在字符串中使用引号只作为字符串开始和结束的标志C语言内部用 0 表示字符串的结束除注释外 是唯一可以出现中文的地方 x 和 x 是不同的里定义了一系列专门的字符串处理函数 字符串 String 常数 练习 写出以下程序的执行结果 include stdio h main inta b 322 floatx y 8 88 charc1 k c2 a y printf a d n a x b a c1 c2 b printf f t d t c t x a c2 宏常量也称符号常量一般采用大写字母表示 define标识符字符串不是语句 而是一种编译预处理命令宏替换 MacroSubstitulition include definePI3 14159 defineR5 3main printf area f n PI R R printf circumference f n 2 PI R 宏常量 例2 2 习惯上符号常量的标识符用大写字母 变量标识符用小写字母 以示区别 用const修饰定义的变量为常量constfloatpi 3 1425926 常量只能在定义时赋值 然后不能再改变其值 const常量 main constfloata 3 5 floatb a a a 2 b b 2 printf f f a b 练习 找出下列程序的错误 3 2变量 3 2 2变量变量的值存放在特定存储单元中的数据 在程序运行期间 变量的值是可以改变的 变量名对应着内存空间中的某个地址 在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址 从变量中取值 实际上是通过变量名找到相应的内存地址 从该存储单元中读取数据 变量 使用变量的基本原则变量必须先定义 后使用所有变量必须在第一条可执行语句前定义不同变量定义的顺序无关紧要一条定义语句可定义若干个同类型的变量定义变量 是初始化变量的最好时机不被初始化的变量 其值为危险的随机数charesc a inti 1 intsum 0 floateps 1 0e 5 练习 写出以下程序的执行结果 includemain inta 1 b 2 c floatf1 1 0 f2 2 0 f3 3 0 charch1 a ch2 b printf a d b d c d n n a b c printf f 2 0f 3 2f n n f1 f2 f3 printf c c n ch1 1 ch2 3 float型数据提供7位有效数字double型数据提供16位有效数字使用不当导致舍入误差 includemain floata doubleb a 123456 789e4 b 123456 789e4 printf f n f n a b 实型数据提供的有效数字位数 includemain floatf f 123 456 if f 123 456 printf fisequalto123 456indeed elseprintf Infact fisequalto f n f 运行结果会是什么 浮点数的陷阱 不要轻易使用单精度浮点来进行判断 float的精度低 较易发生精度带来的相等性判断问题double精度高 这个问题发生的概率小一些 但也存在解决办法 if fabs f 123 456 1E 5 根据精度要求设定 浮点数的陷阱 变量赋初值 在程序中常常需要对变量赋初值 以便使用变量 语言程序中可有多种方法为变量提供初值 在变量定义中赋初值的一般形式为 类型说明符变量1 值1 变量2 值2 例如 inta 3 intb c 5 floatx 3 2 y 3f z 0 75 charch1 K ch2 P 应注意 在定义中不允许连续赋值 如inta b c 5是不合法的 2 6 2算术运算符 加 减 乘 除运算四则混合运算中 先算乘除 后算加减 按从左向右的顺序计算 左结合 取负值运算符 右结合 求余运算注 操作数类型影响算术运算的结果6 46 0 4注 C语言表达式与数学表达式的区别 算术运算符作用于整型或浮点型数据 完成算术运算 1 一 二元算术运算符 如下表所示 二 一元算术运算符 如下表所示 常用的标准数学函数math h 2 6 3关系运算符 大于 大于等于 小于 小于等于 等于 不等于左结合关系运算符运算出的结果为0和非00 表示假 即该关系不成立非0 表示真 即该关系成立绝大多数编译器 关系运算得到的非0结果为1 关系运算符关系运算符用来比较两个值 返回布尔类型的值true或false 关系运符都是二元运算符 如下表所示 2 6 4逻辑运算符 逻辑运算也称为布尔 Boolean 运算 与运算 a b b c a大于b 并且b大于c 或运算 a b b c a大于b 或者b大于c 求反 非运算 单目运算 a如果a是0 结果非0 如果a是非0 结果是0a的值不变逻辑运算优先级低于关系运算关系运算优先级低于算术运算 a 1 b b c 逻辑运算符逻辑运算符进行逻辑运算 如下表所示 2 6 5赋值运算符 inth 0 被赋值的量放在等号左边 下面两个语句是等价的i i 2 i 2 运算符都可以按此种方式处理 二元操作符这种形式看起来更直观 而且执行效率一般也能更高一些 例 写出下列程序的运行结果 include stdio h voidmain inta 5 x 2 y 100 z 100 a 5 x a 3 y x z x printf d d d d a x y z 2 6 6增一和减一运算符 n n n n 让参与运算的变量加1 让参与运算的变量减1 操作数只能是变量作为后缀运算符时 先取n的值 然后加 减1作为前缀运算符时 先加 减1 然后取n的值m n 等价于m n m n m n n n m n 等价于m n n n m n m n 练习 写出下列程序的输出结果 Inti 8 printf d n i printf d n i printf d n i printf d n i printf d n i printf d n i 良好的程序设计风格提倡 在一行语句中 一个变量只能出现一次加1或者减1运算过多的加1和减1运算混合 不仅可读性差 而且因为编译器实现的方法不同 导致不同编译器产生不同的运行结果Sum a a 晦涩 可读性差 2 6 6增一和减一运算符 的使用例子 的优先级大于 include stdio h main inti 8 x 5 y 5 p q printf Afteri d t ishow d tbeforei d n i i i printf Afteri d t ishow d tbeforei d n i i i printf Afteri d ti show d tbeforei d n i i i printf Afteri d ti show d tbeforei d n i i i printf Afteri d t i show d tbeforei d n i i i printf Afteri d t i show d tbeforei d n i i i printf n printf Afterx d tpshow d tbeforex d n x p x x x x printf Aftery d tqshow d tbeforey d n y q y y y y 的使用例子 的优先级大于 include stdio h main inti 8 x 5 y 5 p q printf Afteri d t ishow d tbeforei d n i i i printf Afteri d t ishow d tbeforei d n i i i printf Afteri d ti show d tbeforei d n i i i printf Afteri d ti show d tbeforei d n i i i printf Afteri d t i show d tbeforei d n i i i printf Afteri d t i show d tbeforei d n i i i printf n printf Afterx d tpshow d tbeforex d n x p x x x x y 5 printf Aftery d tqshow d tbeforey d n y q y y y 5 printf Aftery d tqshow d tbeforey d n y q y y y y 5 printf Aftery d tqshow d tbeforey d n y q y y y y y 5 printf Aftery d tqshow d tbeforey d n y q y y y y include stdio h main inta 1 b c k b 1 a a printf a d b d n a b a 1 b 1 a a printf a d b d n a b a 3 k a a a printf k d a d n k a a 1 b 2 c a b 练习 写出下列程序的输出结果 include stdio h main inta 1 b c k b 1 a a printf a d b d n a b a 计算先用a的原值计算后 再用a 1 a 2 a 1 b 1 a a printf a d b d n a b a先计算a 1 再进行其它计算 a 3 k a a a printf k d a d n k a a a a 最后再a 1 a 1 b 2 c a b 逻辑与运算 强制转换 类型关键字 表达式intm 5 float m 2 float m 2 floatm 2 float m 2 表达式的结果被转换为设定的类型 但变量的类型和值不变 2 6 7类型转换 2 6 7类型转换 在进行赋值操作时 会发生类型转换将取值范围小的类型转为取值范围大的类型是安全的 反之是不安全的如果大类型的值在小类型能容纳的范围之内 则平安无事浮点数转为整数 会丢失小数部分 非四舍五入 自动类型转换 同种数据类型的运算结果 还是该类型不同种数据类型的运算结果 是两种类型中取值范围更大的那种longdouble double float long int short char把数据赋值给另外一种类型变量也会发生自动类型转换从小到大 顺利转换从大到小 可能丢失信息 好的编译器会发出警告 类型强制转换 消除从大到小的警告l long i 可以通过 类型 表达式 的方式把表达式的值转为任意类型强转时 你必须知道你在做什么强转与指针 并称C语言两大神器 用好了可以呼风唤雨 用坏了就损兵折将 include stdio h main intm 5 printf m 2 d n m 2 printf float m 2 f n float m 2 printf float m 2 f n float m 2 printf m d n m 2 6 8位操作运算符 按位与运算 按位或运算 按位异或运算 按位右移运算 按位求反 在 语言中逗号 也是一种运算符 称为逗号运算符 其功能是把两个以上的表达式连接起来组成一个表达式 称为逗号表达式 其一般形式为 表达式1 表达式2 表达式3其求值过程是分别求每个表达式的值 并以最后一个表达式的值作为整个逗号表达式的值 main inta 2 b 4 c 6 x y y x a b b c printf y d x d y x 2 6 9逗号运算符 2 6 9逗号运算符 表达式1 表达式2 表达式n多数情况下 并不使用整个逗号表达式的值 更常见的情况是要分别得到各表达式的值主要用在循环语句中 同时对多个变量赋初值等for i 0 j 0 i j i j 条件表达式 把a和b中的最大值放入z中if a b z a elsez b z a b a b 此种表达式切忌用得过于繁杂 优先级 类型 sizeof 结合性 多数运算符为左结合少数为右结合 一元运算符赋值运算符条件运算符 变量的命名规则数据类型char short int long float double longdoublesigned unsigned常数 转义字符运算符算术运算符 关系运算符 逻辑运算符 增一 减一运算符 位运算符 赋值运算符 类型强转运算符 逗号运算符 条件运算符 sizeof类型转换优先级和结合性 小结 ASCII字符表1 练习 编程实现下列功能 从键盘中输入两个参数 圆半径 圆柱高计算圆周长 圆面积 球表面积 球体积 圆柱体积 保留小数点后两位
展开阅读全文
相关资源
相关搜索

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


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

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


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