C语言程序设计-第2讲字符集.ppt_第1页
C语言程序设计-第2讲字符集.ppt_第2页
C语言程序设计-第2讲字符集.ppt_第3页
C语言程序设计-第2讲字符集.ppt_第4页
C语言程序设计-第2讲字符集.ppt_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C程序设计 第二讲 语言的字符集 字符是组成语言的最基本的元素 语言字符集由字母 数字 空格 标点和特殊字符组成 在字符常量 字符串常量和注释中还可以使用汉字或其它可表示的图形符号 1 字母小写字母a z共26个大写字母A Z共26个2 数字0 9共10个3 空白符空格符 制表符 换行符等统称为空白符 空白符只在字符常量和字符串常量中起作用 在其它地方出现时 只起间隔作用 编译程序对它们忽略不计 因此在程序中使用空白符与否 对程序的编译不发生影响 但在程序中适当的地方使用空白符将增加程序的清晰性和可读性 4 标点和特殊字符 一 语言词汇在 语言中使用的词汇分为六类 标识符 关键字 运算符 分隔符 常量 注释符等 1 标识符在程序中使用的变量名 函数名 标号等统称为标识符 除库函数的函数名由系统定义外 其余都由用户自定义 C规定 标识符只能是字母 A Z a z 数字 0 9 下划线 组成的字符串 并且其第一个字符必须是字母或下划线 变量名函数名由英文字母 数字和下划线组成 大小写敏感不可以是数字开头直观 见名知意 便于记忆和阅读最好使用英文单词或其组合切忌使用汉语拼音下划线和大小写通常用来增强可读性variablenamevariable nameVariableName variableName不允许使用关键字作为标识符的名字int float for while if等某些功能的变量采用习惯命名如 for语句所采用的循环变量习惯用i j k Windows风格 UNIX风格 标识符命名 在使用标识符时还必须注意以下几点 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就是条件语句的语句定义符 3 预处理命令字用于表示一个预处理命令 如include ANSIC一共只有32个关键字 1 数据类型说明符 14个 长短单双正负longshortsingledoubleunsignedsingned无值整型浮点字符 指针 voidintfloatchar联合枚举结构 数组 unionstructenum 2 变量类型 4个 外部静态自动寄存器externstaticautoregister 3 常量 1个 const 2 程序结构语句定义符 10个 判断 If循环 fordowhile转移 goto跳出 breakcontinue返回 return开关 switchcase 3 其它关键字sizof大小typedef类型定义defaultvolatile可变的变量 数据为什么要区分类型 不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类 数据类型 DataType 语言的数据类型 数据类型是按被说明量的性质 表示形式 占据存储空间的多少 构造特点来划分的 在 语言中 数据类型可分为 基本数据类型 构造数据类型 指针类型 空类型四大类 数据类型 基本构造空指针 数据类型 无符号整型 数据类型 DataType 1 基本数据类型 基本数据类型最主要的特点是 其值不可以再分解为其它类型 也就是说 基本数据类型是自我说明的 2 构造数据类型 构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的 也就是说 一个构造类型的值可以分解成若干个 成员 或 元素 每个 成员 都是一个基本数据类型或又是一个构造类型 在C语言中 构造类型有以下几种 数组类型 结构体类型 联合类型 b B KB MB GB TB bit 位Byte 字节Kilobyte KB KMegabyte MB 兆Gigabyte GB GTerabyte TB T 1TB 1 024GB 1GB 1 024MB 1MB 1 024KB 1KB 1 024B 1B 8b 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 数据类型修饰符 TurboC中各类整型量所分配的内存字节数及数的表示范围 以13为例 int型 shortint型 longint型 unsignedint型 unsignedshortint型 unsignedlongint型 实型数据在内存中的存放形式实型数据一般占4个字节 32位 内存空间 按指数形式存储 实数3 14159在内存中的存放形式如下 数符小数部分指数 小数部分占的位 bit 数愈多 数的有效数字愈多 精度愈高 指数部分占的位数愈多 则能表示的数值范围愈大 一般单精度浮点数 小数部分点三个字节 指数占一个字节 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 造成的危害 整型常数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 八进制与十六进制常数 练习 下列哪些数是合法的16进制数 0X2A0XA05A0XFFFF0X3H 字符常数的表示方法 a A 5 单引号内只能有一个字符 除非用 开头就是一个普通整数 也可以参与各种数学运算每个字符具有一个0 255之间的数值 可从ASCII表查出注意 5 和整数5的区别字符的数学运算在密码学内用得比较多 字符 Character 常数 转义字符一些特殊字符 无法从键盘输入或者另有它用 用转义字符表示 字符常数 小写字母转换为大写字母 includemain charch b ch b 32 printf c d n ch ch includemain charch a 定义ch为字符型变量 printf c d n ch ch 分别以字符形式 整数形式输出ch Char型与int型之间的关系 例2 4 例2 5 以字符型和整数型两种格式输出字符变量 用双引号括住的由0个或多个字符组成的字符序列 Iamastring 表示空字符串转义字符也可以在字符串中使用引号只作为字符串开始和结束的标志C语言内部用 0 表示字符串的结束除注释外 是唯一可以出现中文的地方 x 和 x 是不同的里定义了一系列专门的字符串处理函数 字符串 String 常数 a x b X 实际上是在a b两个单元内存放120和88的二进制代码 a b 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常量 宏常量和枚举常量 都可以用来表示一个永远不会改变的数前者不建议直接使用 而用后三者代替 const常量 变量 变量的名字和变量的值关系变量的命名同自定义标识符使用变量的基本原则变量必须先定义 后使用所有变量必须在第一条可执行语句前定义声明的顺序无关紧要一条声明语句可声明若干个同类型的变量声明变量 是初始化变量的最好时机不被初始化的变量 其值为危险的随机数charesc a inti 1 intsum 0 floateps 1 0e 5 float型数据提供7位有效数字double型数据提供16位有效数字使用不当导致舍入误差 includemain floata doubleb a 123456 789e4 b 123456 789e4 printf f n f n a b 实型数据提供的有效数字位数 例2 6 程序执行结果 123457888 0000001234567890 000000 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 根据精度要求设定 浮点数的陷阱 课堂练习 下面不是C语言基本数据类型的是 1 指针类型2 整型3 无符号长整型3 单精度实型 数据类型 无符号整型 数据类型 DataType 可以在C程序中用作标识符的一组是 1 if define BYED2 bb b3 1234 If3 FFF FOR bcd4 3d DM SSII 由英文字母 数字和下划线组成 大小写敏感不能有非法字符不可以是数字开头不允许使用关键字作为标识符的名字int float for while if等 标识符命名 下面不是C语言整型常量的是 1 012 0 x113 084 32768 以数字 0 开始的整型常数是八进制数022 037010和10大小不一样因为八进制并不常用 所以此种表示法比较少见以 0 x 或者 0X 开始的整型常数是十六进制A F和a f用来表示十进制的10 15十六进制的形式比较常用 尤其在进行位一级的控制的时候0 x12 0 x1F 0 x1f 八进制与十六进制常数 变量赋初值 在程序中常常需要对变量赋初值 以便使用变量 语言程序中可有多种方法为变量提供初值 在变量定义中赋初值的一般形式为 类型说明符变量1 值1 变量2 值2 例如 inta 3 intb c 5 floatx 3 2 y 3f z 0 75 charch1 K ch2 P 应注意 在定义中不允许连续赋值 如a b c 5是不合法的 2 6 2算术运算符 加 减 乘 除运算四则混合运算中 先算乘除 后算加减 按从左向右的顺序计算 左结合 取负值运算符 右结合 求余运算注 操作数类型影响算术运算的结果注 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论