C语言第二章ppt课件.ppt
《C语言第二章ppt课件.ppt》由会员分享,可在线阅读,更多相关《C语言第二章ppt课件.ppt(55页珍藏版)》请在三一办公上搜索。
1、第二章 数据类型、运算符与表达式,2.1 的数据类型 一个程序应包括两个方面的内容: 数据的描述。 操作步骤,即动作的描述。 数据是操作的对象,操作的结果会改变数据的状况。打个比方,厨师做菜肴,需要有菜谱,菜谱上一般应包括:配料,指出应使用哪些原料:操作步骤,指出如何使用这些原料按规定的步骤加工成所需的菜肴,没有原料是无法加工成所需菜肴的。面对同一些原料可以加工出不同风味的菜肴。作为程序设计人员,必须认真考虑和设计数据结构和操作步骤(即算法)。因此,著名计算机科学家沃思(Niklklaus Wirth)提出一个公式: 数据结构十算法=程序,实际上,一个程序除了以上两个主要要素之外,还应当采用结
2、构化程序设计方法进行程序设计,并且用某一种计算机语言表示。因此,可以这样表示。 程序算法十数据结构十程序设计方法十语言工具和环境 也就是说,以上四个方面是一个程序设计人员所应具备的知识。在本书中不可能全面介绍这些内容,它们都属于有关的专门课程范畴。本书主要介绍语言本身,而下拟深入介绍有关算法和数据结构等方面的知识。 语言提供的数据结构是以数据类型形式出现的,的数据类型如下:,语言中数据有常量与变量之分,它们分别属于以上这些类型。 在本章中主要介绍基本数据类型。,2.2 常量与变量2.2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。常量区分为不同的类型,如、等为整型常量,4.
3、6,-1.23等为实型常量,a,d为字符常量,一般从其字面形式即可判别,也可以用一个标识符代表一个常量。例 /* example 2.1 on page11 */#define PI 3.1415926main()float s,r,l;r=10.;l=2.*PI*r;s=PI*r*r;printf(l=%f s=%fn,l,s);printf(PI=%fn,PI);,程序中用#define命令行定义PI代表常量3.1415926,此后凡在此文件中出现的PI都代表3.1415926,可以和常量一样进行运算.有关#define命令行的详细用法参见第章。 这种用一个标识符代表一个常量的,称为符号常
4、量,即标识符形式的常量,注意符号常量不同于变量,它的值在其作用域(在本例中为主函数)内不能改变,也不能再被赋值。如再用以下赋值语句给PI赋值: PI=3.1416是错误的。 习惯上,符号常量名用大写,变量用小写,以示区别,2.2.2变量 其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元中存放变量的值。请注意区分变量名和变量值这两个不同的概念。 和其它高级语言一样,用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称标识符(identifier),简单他说,标识符就是一个名字。 C语言规定标识符只能由字母、数字和下划线三种字符组成,
5、且第一个字符必须为字母或下划线。如 sum,average,class,day,month,student_name, 下面是不合法的标识符和变量名: M.D, John, $123. #33, 3D64,a b 注意,大写字母和小写字母被认为是两个不同的字符。因此,和是两个不同的变量名。习惯上,变量名用小写字母表示,以增加可读性。,语言中标识符的长度(字符个数)取个字符,假如程序中出现的变量名长度大于个字符,则只有前面个字符有效,后面的不被识别。例如,有两个变量:student_name和student_number,由于二者的前个字符相同,系统认为这两个变量是一回事而不加区别。可以将它们改
6、为:stud_name和stud_num以使之区别。因此,在写程序时应了解所用系统对标识符长度的规定,以免出现上面的混淆,这种错误并不反映在编译过程中(即语法无错误),但运行结果显然不对。 在选择变量名和其它标识符时,应注意做到“见名知意”,即选有含意的英文单词(或其缩写)作标识符,如count, name, day, month, class, city, country等,除了数值计算程序外,一般不要用代数符号(如a,b,c,x1,y1等)作变量名,以增加程序的可读性。这是结构化程序的一个特征。本书在一些简单的举例中,为简单起见,仍用单字符的变量名(如a,b,等),请读者注意不要在其它所有
7、程序中都如此。 在语言中,要求对所有用到的变量作强制定义,也就是“先定义,后使用”,否则,在编译时会指出有关“出错信息”。 下面各节分别介绍整型、实型(浮点型)、字符型数据。,2.3 整型数据2.3.1 整型常量 整型常量即整常数。整常数可用以下三种形式表示: 十进制整数。如、一、。八进制整数。以O开头的数是八进制数。如O123表示八进制数123,即(123)8等于十进制数。-o11表示八进制数-11,即十进制数-9。十六进制整数。以开头的数是进制数。如,代表进制数,即()160=。一等于十进制数一。main()int a=0123;b=ox123;printf(“a=%d,b=%d”,a,b
8、);,2.3.2 整型变量 一、整型变量的分类 整型变量可分为:基本型、短整型、长整型和无符号型四种。 基本型,以int表示。 2. 短整型,以short int表示,或以short表示。 3. 长整型,以1ong int表示,或以1ong表示。4. 无符号型,存储单元中全部二进位(bit)用作存放数本身,而不包括符号。无符号型中又分为无符号整型、无符号短整型和无符号长整型,分别以unsigned int,unsigned short unsigned long表示。无符号型变量只能存放不带符号的整数,如123、 4687等,而不能存放负数,如-123、-3,一个无符号整型变量中可以存放的数的
9、范围比一般整型变量中数的范围扩大一倍。如果整型量在内存中占2个字节(16位),则int型变量数的范围为:-3276832767.,二、整型变量的定义 前已提到,C规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”,这是和BASIC、 FORTRAN不同的,而和PASCAL相类似。例如: int a,b; (指定变量a,b为整型) unsigned short c,d; (指定变量c,d为无符号短整型) 1ong e,f; (指定变量e,f为长整型) 对变量的定义,一般是放在一个函数的开头部分(也可以放在程序中间,但作用域只限于某一分程序,这将在第七章介绍)。,例2.2/* exam
10、ple 2.2 on page 14 */main()int a,b,c,d; * 指定a,b,c,d为整型变量 *unsigned u; * 指定为无符号整型变量* /a=12;b=-24;u=10;c=a+u;d=b+u;printf(c=%d d=%d,c,d); 运行结果为 十b+u=-14 可以看到不同种类的整型数据可以进行算术运算。在本例中是int型数据与unsigned int型数据进行相加相减运算(有关运算的规则在本章2.7中介绍)。,三、整型常量的类型 我们已知整型变量可分为int、 short int、 1ong int和unsigned int、unsigned shor
11、t、 unsigned long等类别。那么常量是否也有这些类别?在将一个整型常量赋值给上述几种类别的整型变量时如何做到类型匹配?请注意以下几点: 1.一个整常量,如果其值在一32768+32767范围内。认为它是int型,它可以赋值给int型和1ong int型变量。 一个整常量,如果其值超过了上述范围,而在一21474836482147483647范围内,则认为它是1ong int型。可以将它赋值给一个1ong int型变量。 如果某一计算机系统的版本确定的short int 与int型数据在内存中占据的长度相同,则它的表数范围与int型相同,因此一个int型的常量也同时是一个short
12、int型常量,可人赋给int型或short int型变量。 4.常量中无unsigned型。但一个非负值的整常量可以赋值给unsigned型整变量,只要它的范围不超过变量的表数范围即可,例如,将50000赋给一个unsigned int型变量是可以的,而将70000赋给它是不行的(溢出)。 5.在一个整常量后面加一个字母l或L则认为是1ong int型常量。例如123l、432L.这往往用于函数调用中。如果函数的形参为1ong Jnt型,则要求实参也为1ong int型,此时用123作实参不行,而要用123L作实参。,2.4 实型数据2.4.1 实型常量 实数在语言中又称俘点数,实数有两种表示
13、形式: 1.十进制数形式。它由数字和小数点组成(注意必须有小数点)。0.123、.123、 123.0、123.、0.0都是十进制数形式。 2.指数形式,如123e3或123E3都代表123X103但注意字母e(或E)之前必须有数字。且e后面指数必须为整数,如e3、2.1e3.5、e等都不是合法的指数形式。,2.4.2实型变量 C实型变量分为单精度(float型)和双精度(double型)两类,对每一个实型变量都应在使用前加以定义。如: float x,y; (指定x,y为单精度实数) doublez; (指定z为双精度实数) 在一般系统中,一个float型数据在内存中占4个字节(32位)一个
14、double型数据占8个字节。单精度实数提供7位有效数字,双精度实数提供16位有效数字,数值的范围随机器系统而异。在1BM-PC Ms-C中,单精度实数的数值范围约为10-381038,双精度实数范围约为10-30810308。 应当说明,实型常量不分float型和double型。一个实型常量可以赋给一个float型或double型变量。根据变量的类型截取实型常量中相应的有效位数字,假如a已指定为单精度实型变量: float a; a=1111.111; 由于float型变量只能接收位有效数字,因此最后两位小数不起作用。如果改为double型,则能全部接收上述位数字并存储在变量中。,2.5 字
15、符型数据2.5.1字符常量 C的字符常量是用单引号(即撇号)括起来的一个字符,如a,x,D,?,$等都是字符常量,注意,a和A是不同的字符常量。 除了以上形式的字符常量外,C还允许用一种特殊形式的字符常量,就是以一个”开头的字符序列,例如,前面已经遇到过的,在printf函数中的n,它代表一个“换行”符。这种非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示。常用的以“”开头的特殊字符见表,表中列出的字符称为“转义字符”,意思是将反斜杠()后面的字符转变成另外的意义。如“n”中的“n”不代表字母n而作为“换行”符。 表中最后第二行是用ASCII码(八进制数)表示的一个字符,例如101
16、代表字符A。012代表“换行”。用376,代表图形字符。用表中的方法可以表示任何可输出的字母字符、专用字符、图形字符和控制字符。请注意0或000是代表ASCII码为0的控制字符,即“空操作”字符。它将用在字符串中。,例2.3 main ( ) printf(“ ab ct derftgn”); printf(htibbj k); 程序运行时在打印机上得到以下结果:f ab c gdeh ji k 注意在显示屏上最后看到的结果与上述打印结果不同,是:f gdeh j k,2.5.2 字符变量 字符型变量用来存放字符常量,注意只能放一个字符,不要以为在一个字符变量中可以放一个字符串(包括若干字符)
17、。 字符变量的定义形式如下: char c1,c2; 它表示c1和c2为字符型变量,各可以放一个字符,因此可以用下面语句对c1、c2赋值: c1=a; c2=b; 一般以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。,253 字符数据在内容中的存储形式及其使用方法将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。例如字符a的ASCII代码为97,b为98,在内存中变量c1、c2的值如图2.2(a)所示。实际上是以二进制形式存放的,如图2.2(b)所示。 c1 c2 97 98 01100001 0110
18、0010,【例2.4】 main( )char c1,c2;c1=97;c2=98;printf(%c %c,c1,c2); c1、c2被指定为字符变量。但在第3行中,将整数97和98分别赋给c1和c2,它的作用相当于以下两个赋值语句: c1=a;c2=b因为a和b的ASCII码为97和98。也可以理解为将97和98两个整数直接存放到cl和c2的内存单元中。而c1=a和c2=b是先将字符a和b成ASCII码头97和98,然后放到内存单元中。二者作用是相同的。第4行将输出两个字符。“%c”是输出字符的格式符。程序输出:a b,既然在内存中,字符数据以ASCII码存储,它的存储形式与整数的存储形式
19、相类似。C语言使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出。以整数形式输出时,直接将ASCII码作为整数输出。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算。,【例2.4】 main( )char c1,c2;c1=a;c2=b;c1=97;c2=98;printf(%c %c,c1,c2); c1、c2被指定为字符变量。但在第3行中,将整数97和98分别赋给c1和c2,它的作用相当于以下两个赋值语句: c1=a;c2=b因为a和b的ASCII码为
20、97和98。也可以理解为将97和98两个整数直接存放到cl和c2的内存单元中。而c1=a和c2=b是先将字符a和b成ASCII码头97和98,然后放到内存单元中。二者作用是相同的。第4行将输出两个字符。“%c”是输出字符的格式符。程序输出: A B,字符数据与整型数据可以互相赋值。如: int i; char c; i=a; c=97;是合法的。如果将i的值输出得到97。输出c可得字符a。 字符数据可以以字符形式输出,也可以用整数形式输出。例如在上面语句之后执行语句: printf(”c,dn”,c,c); printf (”c,dn”,i,i);输出: a, 97 a, 97,2.5.4 字
21、符串常量 前面已提到,字符常量是由一对单引号括起来的单个字符。C语言除了允许使用字符常量外,还允许使用字符串常量。字符串常量是一对双引号括起来的字符序列。如: “How do you do。”,”CHINA”,”12345”都是字符串常量,可以输出一个字符串,如 printf (”How do you do.”): 不要将字符常量与字符串常量混淆。a是字符常量,”a”是字符串常量,二者不同。假设 c被指定为字符变量: char c; c=a;是正确的。而 c=”a”;是错误的。c”CHINA”,也是错误的。不能把一个字符串赋给一个字符变量。有人不能理解:a和“a”究竟有什么区别。,C规定:在每
22、一个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。c规定以字符0作为字符串结束标志。0是一个ASCII码为0的字符,从ASCII代码表中可以看到ASCII码为0的字符是,“空操作字符”,即它不引起任何控制动作,也不是一个可显示的字符。如果有一个字符串,“CHINA”实际上在内存中是 C H I N A0它的长度不是5个字符,而是6个字符,最后一个字符为0。但在输出时不输出0。 例如在printf(”How do you do。”)中,输出时一个一个字符输出,直到遇到最后的0字符,就知道字符串结束,停止输出。注意,在写字符串时不必加0,否则画蛇添足,0,字符是系统自动加上
23、的。字符串”a”,实际上包含2个字符:a和0,因此,把它赋给一个字符变量c: c”a” 显然是不行的 在C语言中没有专门的字符串变量(BASIC中的字符串变量形式为A、B等),字符串如果需要存放在变量中,需要用字符数组来存放,即用一个字符型数组来存放一个字符串,这将在第六章中介绍。,26变量赋初值 程序中常需要对一些变量预先设置初值。C规定,可以在定义变量时同时使变量初始化。如: int a=3; 指定a为整型变量,初值为3 float f=3.56; 指定f为实型变量,初值为356 char c=a; 指定c为字符变量,初值为a 也可以使被定义的变量的一部分赋初值。如: int a,b,c=
24、5表示a、b、c为整型变量,只有c初始化,值为5。 如果对几个变量赋以同一个初值,不能写成: jnt abc=3;而应写成: int a3,b3,c=3;,初始化不是在编译阶段完成的(只有在第六章中介绍的静态存储变量和外部变量的初始化是在编译阶段完成的),而是在程序运行时执行本函数时赋以初值的。相当于有一个赋值语句,例如 int a=3;相当于: int a; 指定a为整型变量 a=3; 赋值语句,将3赋予a又如 int a,b, c=5;相当于: int a,b, c; 指定a、b、c为整型变量 c5; 将5赋给c作业:2.3 2.4 2.6 2.7,27各类数值型数据间的混合运算 整型、单
25、精度型、双精度型数据可以混合运算。前已述及,字符型数据可以与整型通用,因此,整型、实型(包括单、双精度)、字符型数据间可以混合运算。例如 10+a+15-87651234b是合法的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则按图2.3所示,图中横向向左的箭头表示必定的转换,如字符数据必定先转换为整数,short型转为int型,float型数据在运算时一律转换成双精度型,以提高运算精度(即使是两个float型数据在加化成double型,然后再相加)。 纵向的箭头表示当运算对象为不同类型时转换的方向。例如int型与doub1e型数据进行运算,先将int型的数据转换成图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 第二 ppt 课件
链接地址:https://www.31ppt.com/p-1480405.html