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

下载本文档

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

文档简介

1、C程序设计,第二讲,语言的字符集,字符是组成语言的最基本的元素。语言字符集由字母,数字,空格,标点和特殊字符组成。在字符常量,字符串常量和注释中还可以使用汉字或其它可表示的图形符号。 1.字母 小写字母az共26个 大写字母AZ共26个 2.数字 09共10个 3.空白符 空格符、制表符、换行符等统称为空白符。空白符只在字符常量和字符串常量中起作用。在其它地方出现时,只起间隔作用,编译程序对它们忽略不计。因此在程序中使用空白符与否,对程序的编译不发生影响,但在程序中适当的地方使用空白符将增加程序的清晰性和可读性。 4.标点和特殊字符,一、语言词汇 在语言中使用的词汇分为六类:标识符,关键字,运

2、算符,分隔符,常量,注释符等。 1.标识符 在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C 规定,标识符只能是字母(AZ,az)、数字(09)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。,变量名 函数名 由英文字母、数字和下划线组成,大小写敏感 不可以是数字开头 直观,见名知意,便于记忆和阅读 最好使用英文单词或其组合 切忌使用汉语拼音 下划线和大小写通常用来增强可读性 variablename variable_name VariableName, variableName 不允许使用关键字作为标识符的名字 int,

3、 float, for, while, if等 某些功能的变量采用习惯命名 如:for语句所采用的循环变量习惯用i, j, k,Windows 风格,UNIX 风格,标识符命名,在使用标识符时还必须注意以下几点: (1)标准C不限制标识符的长度,但它受各种版本的C 语言编译系统限制,同时也受到具体机器的限制。例如在某版本C 中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标识符。 定义标识符最好不要超过8个。 (2)在标识符中,大小写是有区别的。例如BOOK和book 是两个不同的标识符。 最好全部用小写 (3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因

4、此,命名应尽量有相应的意义,以便于阅读理解,作到“顾名思义”。,以下标识符是合法的: a, x, x3, BOOK_1, sum5 以下标识符是非法的: 3s 以数字开头 U.S 中间有非法字符. s*T 出现非法字符* -3x 以减号开头 bowy-1 出现非法字符-(减号) Good bye 中间有空格 int 关键字,2.关键字 关键字是由语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同。语言的关键字分为以下几类: (1)类型说明符 用于定义、说明变量、函数或其它数据结构的类型。如int,double (2)语句定义符 用于表示一个语句的功能。如if 就

5、是条件语句的语句定义符。 (3)预处理命令字 用于表示一个预处理命令。如include。,ANSI C一共只有32个关键字,(1) 数据类型说明符(14个) 长短单双正负 long short single double unsigned singned 无值整型浮点字符(指针)void int float char 联合枚举结构(数组) union struct enum (2) 变量类型(4个): 外部 静态自动 寄存器 extern static auto register (3)常量(1个): const,(2)程序结构语句定义符(10个) 判断: If 循环: for do whil

6、e 转移:goto 跳出: break continue 返回:return 开关:switch case,3、其它关键字 sizof 大小 typedef类型定义 default volatile可变的变量,数据为什么要区分类型? 不同类型的数据代表不同的 数据表示形式 合法的取值范围 占用内存空间大小 可参与的运算种类,数据类型(Data Type),语言的数据类型,数据类型是按被说明量的性质,表示形式,占据存储空间的多少,构造特点来划分的。 在语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。 数据类型:基本 构造 空 指针,数据类型,无符号整型,数据类型(Da

7、ta Type),1、基本数据类型:基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。 2、构造数据类型:构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有以下几种: 数组类型 结构体类型 联合类型,b, B, KB, MB, GB, TB,bit,位 Byte,字节 Kilobyte(KB), K Megabyte(MB),兆 Gigabyte(GB),G Terabyte(TB),T,1 TB =

8、1,024 GB,1 GB = 1,024 MB,1 MB = 1,024 KB,1 KB = 1,024 B,1 B = 8 b,Int 整数,在目前绝大多数机器上占4个字节。TC2中是2个字节 int a=64; Float 浮点数 单精度浮点数,一般是4个字节长 float b=64.0; Char 字符 字符,一般是1个字节长 用来表示256个ASCII字符,或者0-255的整数。 char=a;,基本数据类型,short int,短整型,2个字节。通常简写为short long int,长整型,4个字节。通常简写为long single 单精度浮点数 4个字节 double 双精度浮

9、点数8个字节 long double ? signed 用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略 unsigned 用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0),数据类型修饰符,Turbo C中各类整型量所分配的内存字节数及数的表示范围。,以13为例: int型:,short int型:,long int型:,unsigned int型:,unsigned short int型:,unsigned long int型:,实型数据在内存中的存放形式 实型数据一

10、般占4个字节(32位)内存空间。按指数形式存储。实数3.14159在内存中的存放形式如下:,数符 小数部分 指数,小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。 指数部分占的位数愈多,则能表示的数值范围愈大。 一般单精度浮点数,小数部分点三个字节,指数占一个字节,TC2中int的范围是-3276832767 如果我们给它一个小于-32768或者大于32767的数会如何呢?,小蛇能吞下大象吗?,超出取值范围会怎样?,一台安装了Windows 95/98的机器,如果连续运行49.7天没有重新启动,可能死机 原因: Windows自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。

11、这个计数器是个unsigned long 类型的变量 unsigned long 的最大值是: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、1

12、e-2f、4.5e3F 长双精度型常量 123.45l、 456.78L、1e-2l、4.5e3L (没有长单精度的说法),常数(Constant),以数字“0”开始的整型常数是八进制数 022、-037 010和10大小不一样 因为八进制并不常用,所以此种表示法比较少见 以“0 x”或者“0X”开始的整型常数是十六进制 A-F和a-f用来表示十进制的10-15 十六进制的形式比较常用,尤其在进行位一级的控制的时候 0 x12、-0 x1F, -0 x1f,八进制与十六进制常数,练习,下列哪些数是合法的16进制数,0X2A 0XA0 5A 0XFFFF 0X3H,字符常数的表示方法 a, A

13、, 5 , % , $ 单引号内只能有一个字符,除非用开头 就是一个普通整数,也可以参与各种数学运算 每个字符具有一个0-255之间的数值,可从ASCII表查出 注意: 5 和整数5的区别 字符的数学运算在密码学内用得比较多,字符(Character)常数,转义字符 一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示,字符常数,小写字母转换为大写字母,#include main() char ch = b; ch = b - 32; printf(%c, %dn, ch, ch); ,#include main() char ch = a; /*定义 ch 为字符型变量*/ printf

14、(“%c, %dn”, ch, ch);/*分别以字符形式、整数形式输出ch */ ,Char 型与 int 型之间的关系,例2.4,例2.5,以字符型和整数型两种格式输出字符变量。,用双引号括住的由0个或多个字符组成的字符序列 I am a string 表示空字符串 转义字符也可以在字符串中使用 引号只作为字符串开始和结束的标志 C语言内部用 0 表示字符串的结束 除注释外,是唯一可以出现中文的地方 x和x是不同的 里定义了一系列专门的字符串处理函数,字符串(String)常数,a=x; b=X; 实际上是在a,b两个单元内存放120和88的二进制代码: a:,b:,#include st

15、dio.h main() int a, b=322; float x, y=8.88; char c1=k,c2; a=y; printf(a=%dn,a); x=b; a=c1; c2=b; printf(%ft, %dt, %ct, x, a, c2); ,宏常量 也称符号常量 一般采用大写字母表示 #define 标识符 字符串 不是语句,而是一种编译预处理命令 宏替换(Macro Substitulition),#include #define PI 3.14159 #define R 5.3 main() printf(area = %fn, PI * R * R); printf(

16、circumference = %fn, 2 * PI * R); ,宏常量,例2.2,习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。,用const修饰定义的变量为常量 const float pi = 3.1425926; 常量只能在定义时赋值,然后不能再改变其值 常数、 const常量、宏常量和枚举常量,都可以用来表示一个永远不会改变的数 前者不建议直接使用,而用后三者代替,const常量,变量,变量的名字和变量的值关系 变量的命名同自定义标识符 使用变量的基本原则 变量必须先定义,后使用 所有变量必须在第一条可执行语句前定义 声明的顺序无关紧要 一条声明语句可声明若干

17、个同类型的变量 声明变量,是初始化变量的最好时机 不被初始化的变量,其值为危险的随机数 char esc = a; int i = 1; int sum = 0; float eps = 1.0e-5;,float型数据提供7位有效数字 double型数据提供16位有效数字 使用不当导致舍入误差,#include main() float a; double b; a = 123456.789e4; b = 123456.789e4; printf(%fn%fn,a,b); ,实型数据提供的有效数字位数,例2.6,程序执行结果: 123457888.000000 1234567890.0000

18、00,#include main() float f; f = 123.456; if (f = 123.456) printf(f is equal to 123.456 indeed.); else printf(In fact, f is equal to %fn, f); 运行结果会是什么?,浮点数的陷阱,不要轻易使用单精度浮点来进行判断。,float的精度低,较易发生精度带来的相等性判断问题 double精度高,这个问题发生的概率小一些,但也存在 解决办法:if (fabs(f 123.456) 1E-5),根据精度要求设定,浮点数的陷阱,课堂练习,下面不是C语言基本数据类型的是?

19、1)指针类型2)整型 3)无符号长整型3)单精度实型,数据类型,无符号整型,数据类型(Data Type),可以在C程序中用作标识符的一组是_,1) if , define , BYED 2) bb_b3, _1234, If 3) FFF, FOR, -bcd 4) 3d, DM , SSII,由英文字母、数字和下划线组成,大小写敏感 不能有非法字符 不可以是数字开头 不允许使用关键字作为标识符的名字 int, float, for, while, if等,标识符命名,下面不是C语言整型常量的是。 1)012)0 x11 3) 08 4) -32768,以数字“0”开始的整型常数是八进制数

20、022、-037 010和10大小不一样 因为八进制并不常用,所以此种表示法比较少见 以“0 x”或者“0X”开始的整型常数是十六进制 A-F和a-f用来表示十进制的10-15 十六进制的形式比较常用,尤其在进行位一级的控制的时候 0 x12、-0 x1F, -0 x1f,八进制与十六进制常数,变量赋初值,在程序中常常需要对变量赋初值,以便使用变量。语言程序中可有多种方法为变量提供初值。 在变量定义中赋初值的一般形式为: 类型说明符 变量1= 值1,变量2= 值2,; 例如: int a=3; int b,c=5; float x=3.2,y=3f,z=0.75; char ch1=K,ch2

21、=P; 应注意,在定义中不允许连续赋值,如a=b=c=5是不合法的。,2.6.2 算术运算符,+,-,*,/ 加、减、乘、除运算 四则混合运算中,先算乘除,后算加减,按从左向右的顺序计算,左结合 - 取负值运算符,右结合 % 求余运算 注:操作数类型影响算术运算的结果 注:C语言表达式与数学表达式的区别,算术运算符作用于整型或浮点型数据,完成算术运算。(1)一、二元算术运算符,如下表所示。,二、一元算术运算符,如下表所示:,常用的标准数学函数 math.h,2.6.3 关系运算符,,=,=,=,!= 大于,大于等于,小于,小于等于,等于,不等于 左结合 关系运算符运算出的结果为0和非0 0,表

22、示假,即该关系不成立 非0,表示真,即该关系成立 绝大多数编译器,关系运算得到的非0结果为1,关系运算符关系运算符用来比较两个值,返回布尔类型的值true或false。关系运符都是二元运算符,如下表所示:,2.6.4 逻辑运算符,逻辑运算也称为布尔(Boolean)运算 /*被赋值的量放在等号左边*/ 下面两个语句是等价的 i = i + 2; i += 2; +、-、*、/、%、 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,

23、操作数只能是变量 作为后缀运算符时,先取n的值,然后加/减1 作为前缀运算符时,先加/减1,然后取n的值 m = n+; 等价于 m = n-; m=n; m=n; n+; n-; m = +n; 等价于 m = -n; n+; n-; m=n; m=n;,练习:写出下列程序的输出结果,Int i=8; printf(“ %dn”, +i); printf(“ %dn”, -i); printf(“ %dn”, i +); printf(“ %dn”, i -); printf(“ %dn”, -i+); printf(“ %dn”, -i-);,良好的程序设计风格提倡:在一行语句中,一个变量

24、只能出现一次加1或者减1运算 过多的加1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果 Sum =(+a) + (a+); /*晦涩,可读性差*/,2.6.6 增一和减一运算符,/* +, -的使用例子, +, - 的优先级大于 - */ #include stdio.h main() int i=8, x=5, y=5, p, q; printf(After i=%dt +i show %dt before i=%dn , i, +i,i ); printf(After i=%dt -i show %dt before i=%dn, i, -i,

25、 i); printf(After i=%dt i+ show%dt before i=%dn, i, i+,i); printf(After i=%dt i- show %dt before i=%dn, i, i-,i); printf(After i=%dt -i+ show %dt before i=%dn, i, -i+ ,i ); printf(After i=%dt -i- show %dt before i=%dn, i, -i- ,i ); printf(n); printf(After x=%dt p show %dt before x=%dn , x, p=(x+)+(x

26、+)+(x+), x ); printf(After y=%dt q show %dt before y=%dn , y, q=(+y)+(+y)+(+y), y ); ,/* +, -的使用例子, +, - 的优先级大于 - */ #include stdio.h main() int i=8, x=5, y=5, p, q; printf(After i=%dt +i show %dt before i=%dn , i, +i,i ); printf(After i=%dt -i show %dt before i=%dn, i, -i, i); printf(After i=%dt i+

27、 show%dt before i=%dn, i, i+,i); printf(After i=%dt i- show %dt before i=%dn, i, i-,i); printf(After i=%dt -i+ show %dt before i=%dn, i, -i+ ,i ); printf(After i=%dt -i- show %dt before i=%dn, i, -i- ,i ); printf(n); printf(After x=%dt p show %dt before x=%dn , x, p=(x+)+(x+)+(x+), x ); y=5; printf(

28、After y=%dt q show %dt before y=%dn , y, q=(+y), y ); y=5; printf(After y=%dt q show %dt before y=%dn , y, q=(+y)+(+y), y ); y=5; printf(After y=%dt q show %dt before y=%dn , y, q=(+y)+(+y)+y, y ); y=5; printf(After y=%dt q show %dt before y=%dn , y, q=(+y)+(+y)+(+y), y ); ,#include stdio.h main() i

29、nt a=1,b,c, k; b=(1-a)*a+; printf(a=%d,b=%dn,a,b); a=1;b=(1-a)*+a; printf(a=%d,b=%dn,a,b); a=3;k=(a+)+(a+)+(a+); printf(k=%d, a=%dn,k,a ); a=1;b=2;c=ab ,练习:写出下列程序的输出结果,#include stdio.h main() int a=1,b,c, k; b=(1-a)*a+; printf(a=%d,b=%dn,a,b); /* a+ 计算先用a的原值计算后,再用a+1, a=2*/ a=1;b=(1-a)*+a; printf(a=%d,b=%dn,a,b); /* +a 先计算a+1, 再进行其它计算*/ a=3;k=(a+)+(a+)+(a+); printf(k=%d, a=%dn,k,a ); /* a + a + a , 最后再a+1*/ a=1;b=2;c=ab /* (float)m/2; float (m)/2; float m/2; float (m/2); 表达式的结果被转换为设定的类型,但变量的类型和值不变,2.6.7 类型转换,2.6.7 类型转换,在进行赋值操作时,会发生类型

温馨提示

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

评论

0/150

提交评论