第2章语言的基本数据类型PPT讲稿.ppt
第2章语言的基本数据类型第1页,共67页,编辑于2022年,星期一 C语言数据类型语言数据类型 常量与变量常量与变量 整型数据整型数据 实型数据实型数据 字符型数据字符型数据 各类数值类型间的混合运算各类数值类型间的混合运算第2页,共67页,编辑于2022年,星期一2.1 C语言数据类型语言数据类型 著名计算机科学家Nikiklaus Wirth曾经提出了一个非常著名的公式:数据结构+算法=程序。可见在一个程序中必须存在以下两点:(1)数据结构:是指程序中对数据的具体描述及数据的组织形式,它包括数据的类型和数据的组织形式。不同的计算机语言所允许定义和使用的数据结构是不同的,比如在C语言中提供的“结构体”数据结构,而在FORTRAN语言中就不支持这种数据结构。W第3页,共67页,编辑于2022年,星期一 (2)算法:是指程序中具体的操作步骤,它处理的对象是数据,而数据是以某种特定的形式存在(如整数、实数、字符数等)于程序中,因而算法处理的对象实际上是各种不同的数据类型。可以说算法是程序的灵魂,数据结构是程序的加工对象,在处理同一类问题时,如果数据结构不同,算法也不同。因而在考虑算法时,必须注意合理地选择数据结构。通常在处理复杂问题时,应当综合考虑数据结构和算法,选择最优的数据结构及算法。第4页,共67页,编辑于2022年,星期一 在C语言中,数据结构通常是以数据类型的形式出现的,具体数据类型如图2.1.1所示。图2.1.1 C语言中的数据类型第5页,共67页,编辑于2022年,星期一2.2 常量与变量常量与变量 常量和变量是C语言中的两种重要的数据组织形式。顾名思义,常量就是其值不能被改变的量;变量就是其值可以被任意改变的量。在C语言中,各类数据是计算机处理的主要对象,这些数据在计算机处理的过程中,就是以常量和变量的形式表达和存储的。第6页,共67页,编辑于2022年,星期一2.2.1 常量和符号常量常量和符号常量 在C语言中,把在程序运行过程中其值保持恒定不变的数据称为常量。根据类型的不同可以将常量分为以下4种:(1)整型常量:是以整数形式存在的常量,如21,0,-21等。(2)实型常量:是以浮点形式存在的常量,如2.6,-3.7等。(3)字符常量:是以字符形式存在的常量,如a,f,x等。(4)字符串常量:是以字符串形式存在的常量,如student,for,int等。第7页,共67页,编辑于2022年,星期一 常量不仅可以直接表示,也可以用一个标识符来代替,这种用标识符代表的常量称为符号常量,该标识符其实就是常量的别名。符号常量的一般格式如下:#define 标识符 字符串第8页,共67页,编辑于2022年,星期一例2.1 编写一个求圆面积的程序,要求输入圆的半径,输出圆面积。程序#include#define PI 3.14main()float rad,area;printf(Input the radius of the round:n);scanf(%fn,&rad);area=PI*rad*rad;printf(The area of the round is);printf(%fn,area);第9页,共67页,编辑于2022年,星期一输入Input the radius of the round:12.54输出The area of the round is 493.770020#define表示宏定义命令,一般情况下符号常量名用大写,变量名用小写,以示区别,在程序中使用符号常量,具有以下优点:(1)含义清楚。在定义符号常量时,可以按“见名知意”的原则为符号常量命名,这样在检查程序时可以很方便地分清常量的含义。比如可以用PI代表圆周率,用area表示面积等。第10页,共67页,编辑于2022年,星期一 (2)修改方便。如果需要修改常量值时,只须在符号常量定义的位置修改即可,这样其值在整个程序中都将发生改变。在C语言中,系统提供了一个测试某一种类型数据所占存储空间长度的运算符“sizeof”,其格式如下:sizeof(类型表示符)例如:利用运算符sizeof求整型int所占的内存空间。sizeof(int);第11页,共67页,编辑于2022年,星期一2.2.2 变量变量 变量就是在程序的运行过程中,其值可以根据需要经常更新的数据。变量可分为整型变量、实型变量、字符变量等。每个变量都必须具备4个基本要素,即变量名、变量值、变量对应的内存空间和变量的数据类型。第12页,共67页,编辑于2022年,星期一1变量名为了区分不同的变量,每个变量必须具有自己的名称,在对变量命名时应该遵循以下3点:(1)变量名只能由字母、数字和下画线3种字符组成。(2)数字不能作为第1个字符。(3)英文大写字母和小写字母是不同的字符。下面是合法的标识符和变量名:num,day,mouth,year,max12,Student,_round等。下面的则是不合法的标识符和变量名:M.D.jack,¥1982,#86,sohu,ab,deng-lei等。第13页,共67页,编辑于2022年,星期一 注意:在C语言中,英文大写字母和小写字母被认为是两个不同的字符,如num和NUM就是两个不同的变量名。一般情况下,变量名用小写字母表示,而符号常量名用大写字母表示。第14页,共67页,编辑于2022年,星期一 2变量的定义 常量在使用前可以不用定义,但是变量在使用前必须先定义。定义变量的实质就是在内存中为变量分配一定大小的空间。定义变量的一般形式如下:例如:int num1,num2;/*定义整型变量num1,num2*/float f1,f2;/*定义浮点型变量f1,f2*/char c1,c2;/*定义字符型变量c1,c2*/第15页,共67页,编辑于2022年,星期一 3变量的用法 为变量赋值的过程称为变量的初始化。一般情况下,变量初始化的方法有以下3种:(1)定义变量的同时为其赋值。例如:int num=5;(2)定义变量后再为其赋值。例如:float pi;pi=3.14;/*此处“=”表示赋值运算符*/(3)同时定义多个变量并分别为它们赋值。例如:int num1=12;num2=14;num3=16;第16页,共67页,编辑于2022年,星期一2.3 整型数据整型数据 在C语言中,用于表达和处理整数的数据称为整型数据。整型数据有整型常量和整型变量之分。2.3.1 整型常量整型常量 整型常量即整常量,在C语言中,整型常量可用以下3种形式表示:(1)十进制整数:如1982,-86,0等。(2)八进制整数:通常把以数字0开头的数称为八进制数,如0154,-0123等。其中,(0154)8=182+581+480=(108)10(-0123)8=-(182+281+380)=(-83)10第17页,共67页,编辑于2022年,星期一 (3)十六进制整数:通常把以数字0 x开头的数称为十六进制数,如0 x154,-0 x123等。其中,(0 x154)16=1162+5161+4160=(340)10(-0 x123)16=-(1162+2161+3160)=(-291)10第18页,共67页,编辑于2022年,星期一例2.2 整型常量3种形式的应用。程序#includemain()int num1,num2,num3;num1=125;num2=0125;num3=0 x125;第19页,共67页,编辑于2022年,星期一printf(The algorism numbers are);printf(%d,%d,%dn,num1,num2,num3);/*以十进制形式输出*/printf(The octavo numbers are);printf(%o,%o,%on,num1,num2,num3);/*以八进制形式输出*/printf(The hex numbers are);printf(%x,%x,%xn,num1,num2,num3);/*以十六进制形式输出*/第20页,共67页,编辑于2022年,星期一输出The algorism numbers are 125,85,293The octavo numbers are 175,125,445The hex numbers are 7d,55,125分析“%d”,“%o”,“%x”为格式转换控制符,分别用于输出十进制、八进制、十六进制整数。第21页,共67页,编辑于2022年,星期一2.3.2 整型变量及分类整型变量及分类 整型变量是用来存储整型数据的,数据在计算机内部是以二进制形式存放的,根据数据的表示范围可以将整型变量分为3种。1有符号与无符号基本整型变量 有符号基本整型变量一般是以signed int表示的,或直接表示为int,通常用到的都是有符号基本整型变量;无符号基本整型变量一般是以unsigned int表示的,或表示为unsigned,使用无符号整型变量是为了充分利用变量的表示范围,节约内存。无符号整型变量只能存放不带符号的整数,如123,456等,而不能存放负数,如-123,-456等。第22页,共67页,编辑于2022年,星期一 2有符号与无符号长整型变量 有符号长整型变量一般以signed long int表示,或直接用long表示;无符号长整型变量一般以unsigned long int表示,或直接用unsigned long表示。3有符号与无符号短整型变量 有符号短整型变量一般以signed short int表示,或直接用short表示;无符号长整型变量一般以unsigned short int表示,或直接用unsigned short表示。ANSI标准定义了整数数据的字节长度和数的取值范围,如表2.1所示。其中,表中“”内的部分表示可以省略,不影响变量在内存中数的取值范围,如signed long int与long是等价的。第23页,共67页,编辑于2022年,星期一数据类型字节长度数的取值范围signed int2-32 76832 767即-215(215-1)unsigned int2065 535即0(216-1)signed long int4-2 147 483 6482 147 483 647即-231(231-1)unsigned long int404 294 967 295即0(232-1)signed short int2-32 76832767即-215(215-1)unsigned short int2065 535即0(216-1)表2.1 整型数据的字节长度和数的取值范围第24页,共67页,编辑于2022年,星期一例2.3 整型数据溢出的应用。程序#includemain()int num1=32767,num2;num2=num1+1;printf(%d,%dn,num1,num2);输出32767,-32768第25页,共67页,编辑于2022年,星期一 分析 有符号基本整型变量int的范围是-32 76832 767即215(215-1),在上例中num1=32 767,由于计算机只识别二进制数,因而将num1转换成二进制数。当num1+1后,其结果超出了有符号基本整型变量的范围,此情况称为数据溢出,当达到最大值后,就又从最小值开始计数,因而当32 767加1后得不到32 768,而得到有符号基本整型变量取值的最小值-32 768,如图2.3.1所示。第26页,共67页,编辑于2022年,星期一num1:32 7670111111111111111num2:-32 7681000000000000000图2.3.1 整型数据溢出第27页,共67页,编辑于2022年,星期一2.4 实型数据实型数据 在C语言中,用于表达和处理实数的数据称为实型数据。实型数据有实型常量和实型变量之分。2.4.1 实型常量实型常量 实型常量即实数,在C语言中又称为浮点数,实型常量可用以下两种形式表示:(1)普通形式:一般用小数表示,书写时小数点不能省略。如3.14,.15,5.,0.0等,其中,0.0,0.和.0是等价的。第28页,共67页,编辑于2022年,星期一 (2)指数形式:即科学计数法,在C语言中,指数的表示主要靠字母“e”或“E”来实现,e或E跟一个整数表示以10为底数的幂。如3.14e-2表示3.1410-2即0.0314,5.14E3表示5.14103即5140。值得注意的是C语言中规定字母“e”或“E”的前后都必须有数字,并且后面的数字必须为整数,如e5,e.,3.14e2.5等都是不合法的指数形式。第29页,共67页,编辑于2022年,星期一例2.4 实型常量的应用。程序#includemain()float x,y;x=3.14e4;y=3.14E-4;printf(x=%fn,x);printf(y=%fn,y);输出x=31400.000000y=0.000314第30页,共67页,编辑于2022年,星期一2.4.2 实型变量及分类实型变量及分类 实型变量是用来存储实数数据的,在C语言中,可将实型变量分为单精度实型变量、双精度实型变量和长双精度实型变量3种,实型数据的字节长度和数的取值范围如表2.2所示。表中的有效位表示数据在前几位之内是有效的,而其后的数字则是计算机的随机数。如单精度float数123456.789只能保证前7位数字的准确性。第31页,共67页,编辑于2022年,星期一表2.2 实型数据的字节长度和数的取值范围数据类型字节长度有效位数的取值范围单精度float471e-381e+38双精度double8151e-3081e+308长双精度long double16181e-49321e+4932第32页,共67页,编辑于2022年,星期一例2.5 实型变量的定义与应用。程序#includemain()float x;double y;x=123456.789;y=123456.789;printf(x=%fn,x);printf(y=%fn,y);输出x=123456.789062y=123456.789000第33页,共67页,编辑于2022年,星期一 分析 从程序运行结果可以看出,x的值并不等于赋予的初值,而y的值等于赋予的初值。这是由不同数据类型变量的有效数字不同产生的差异。因而在需要定义较大的数时,应选取双精度double型,甚至选取长双精度long double型,以确保数据的准确性。第34页,共67页,编辑于2022年,星期一2.5 字符型数据字符型数据 在C语言中,用于表达和处理字符的数据称为字符型数据。字符型数据有字符常量和字符变量之分。2.5.1 字符常量字符常量 字符型常量是一个用单撇号括起来的字符。如a,A,%,等。在C语言中,除了以上形式的字符常量外,还允许某些特殊形式的字符常量存在,这些字符常量是一种“控制字符”,称为转义字符。在屏幕上不能显示,只能产生相应的功能操作,如转义字符n表示换行。C语言中常用的转义字符及其含义,如表2.3所示。第35页,共67页,编辑于2022年,星期一表2.3 常用的转义字符及其含义字符形式含 义ASCIIn换行,从当前位置移到下一行开头10b退格,从当前位置移到前一列8r回车,从当前位置移到本行开头13t水平制表,从当前位置移到下一个tab位置9f换页,从当前位置移到下页开头12反斜杠字符“”92 单撇号字符“”39 双撇号字符“”34第36页,共67页,编辑于2022年,星期一 表中,“转义字符”的含义是将反斜杠“”后面的字符转换成相应的意思。如n中的“n”,并不表示字母n,而是作为“换行”符;f 中的“f”不表示字母f,而是作为“换页”符。除了表中的转义字符外,在C语言中还可以用“”加上13位八进制数表示的ASCII码来表示,如“101”表示字母A;“012”表示换行符。此外还可以用“”加上12位十六进制数来表示,如“x0c”表示换页符;“x0d”表示回车符等。第37页,共67页,编辑于2022年,星期一例2.6 转义字符实例。程序#includemain()printf(n);printf(ctprogramn);printf(ctbprogramn);输出c programc program第38页,共67页,编辑于2022年,星期一 分析 程序中第1个输出语句是换行;第2个输出语句是在第1列,先输出字符“c”,然后跳到第9列输出字符串“program”;第3个输出语句是在第1列先输出字符“c”,然后跳到第9列准备输出,遇到一个退格控制符“b”,回到第8列输出字符串“program”。第39页,共67页,编辑于2022年,星期一2.5.2 字符变量及分类字符变量及分类 字符变量是用来存储字符常量的,在内存中,一个字符占一个字节。在C语言中,可将字符变量分为有符号字符变量(char)和无符号字符变量(unsigned char)。将一个字符常量存入字符变量中,实际是将该字符的ASCII码存入存储单元中,与整数的存储形式类似,因此一个字符数据既可以以字符形式输出,也可以以整数形式输出。字符数据的字节长度和数的取值范围如表2.4所示。第40页,共67页,编辑于2022年,星期一表2.4 字符数据的字节长度和数的取值范围数据类型字节长度取值范围char1-128127unsigned char10255第41页,共67页,编辑于2022年,星期一例2.7 字符变量实例。程序#includemain()char c1,c2;c1=a;c2=97;printf(%dn,c1);printf(%dn,c2);输出9797第42页,共67页,编辑于2022年,星期一 分析 由于字符a的ASCII码是97。在本程序中,将字符a赋予c1,将数字97赋予c2,然后分别以整型形式输出,结果都是97;可见字符型数据与整形数据之间是可以通用的。第43页,共67页,编辑于2022年,星期一2.5.3 字符串常量字符串常量 在C语言中,使用单个字符的情况较少,大多时候是使用字符串。一般情况下,字符用单撇号括起来,如a,b等;而字符串用双撇号括起来,如“student”,“I love C Program!”等。第44页,共67页,编辑于2022年,星期一例2.8 字符串常量实例。程序#includemain()char c;c=a;printf(%cn,c);printf(an);printf(I love C Program!n);输出aaI love C Program!第45页,共67页,编辑于2022年,星期一 分析 本程序中,第1个输出语句输出的是一个字符a;第2个输出语句输出的是一个字符串“a”,其中包括两个字节,即a和0;第3个输出语句输出的是一个字符串“I love C Program!”。在C语言中每个字符串的结尾都加一个字符串结束标志,以便系统辨别字符串的结束。规定以字符0作为字符串结束标志,其ASCII码为0。程序中3个输出语句的输出结果实际上在内存中分别如下:第46页,共67页,编辑于2022年,星期一aa0IloveCProgram!0在C语言中,没有专门的字符串变量,如果将某个字符串存放在变量中,必须用字符数组,即将字符串中的每个字符存放在数组中的单元中,关于数组将在第7章介绍。第47页,共67页,编辑于2022年,星期一2.6 各类数值型数据间的混合运算各类数值型数据间的混合运算 在C语言中,整型、实型、字符型数据之间可以在同一表达式中进行混合运算。在进行运算时,不同类型的数据先要转换成同一类型的数据,然后再进行运算。数据的转换方式有2种,即自动转换和强制转换。1自动转换自动转换的规则有两点:一是低类型数据必须转换成高类型数据;二是赋值符号“=”右边的数据类型转换成左边的数据类型。具体转换规则如图2.6.1所示。第48页,共67页,编辑于2022年,星期一图2.6.1 数据类型转换规则第49页,共67页,编辑于2022年,星期一 数据类型自动换转时需要注意以下几点:(1)图中横向的箭头表示必定的转换。如字符数据char和短整型数据short必须先转换成整型数据int;实型数据float必须先转换成双精度型double,然后再进行各种运算。(2)图中纵向箭头表示当运算对象为不同数据类型时的转换方向。如某个int型数据和某个long型数据进行运算,应先将int型转换成long型,再进行运算,其结果是long型。第50页,共67页,编辑于2022年,星期一 (3)当进行赋值运算时,将赋值符号右边的类型转换成赋值符号左边的类型,其结果为赋值符号左边的类型。如果赋值符号右边为实型float,左边为整型int,转换时应去掉小数部分;当右边是双整型double,左边是实型float,转换时应做四舍五入处理。第51页,共67页,编辑于2022年,星期一例2.9 不同类型数据的混合运算实例。程序#includemain()int n,num=125;char c,ch=a;float f,flo=3.14;n=num+ch*flo;c=num+ch*flo;f=num+ch*flo;第52页,共67页,编辑于2022年,星期一printf(int-n=%dn,n);printf(char-c=%cn,c);printf(float-f=%fn,f);输出int-n=429char-c=float-f=429.580017第53页,共67页,编辑于2022年,星期一 2强制转换 上面运算中数据类型的转换都是系统自动进行的,但有时设计者需要自己实现数据类型的转换,这种转换形式称为强制转换。其一般形式如下:(数据类型名)(表达式)其中,数据类型名表示待强制转换的类型;表达式表示强制转换的对象。例如:(int)(ch+flo)表示将表达式(ch+flo)的结果转换成整型数据。第54页,共67页,编辑于2022年,星期一例2.10 不同类型数据的混合运算实例。程序#includemain()int num1,num2,num3;long num4;char c;float f1,f2;num1=100;num2=500;第55页,共67页,编辑于2022年,星期一f1=45.55;f2=55.55;num3=num1*num2;num4=(long)num1*num2;/*符号“*”的优先级高于“()”,因而(long)num1*num2等价于(long)(num1*num2)*/c=(char)f1*f2;printf(%d,%ld,%cn,num3,num4,c);输出-15536,50000,第56页,共67页,编辑于2022年,星期一2.7 程序举例程序举例例2.11 求一元二次方程ax2+bx+c=0的两个根x1和x2。其中a,b,c从键盘输入。算法在解方程前,首先应判断a及b是否为0,然后再判断b2-4ac的值是否为正,最后求方程的根,一元二次方程的根为上式可以分解为设 ,则x1=p+q,x2=pq 第57页,共67页,编辑于2022年,星期一程序#includemain()float a,b,c;double x1,x2,p,q,disc;printf(“Please input a,b and c:n”);scanf(“%f,%f,%fn”,&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(fabs(disc)/(2*a);/*sqrt函数是系统函数,表示求二次方根,fabs表示求绝对值*/第58页,共67页,编辑于2022年,星期一if(a=0)if(b=0)printf(Error!n);elseprintf(The answer is x1=x2=%fn,-c/b);elseif(disc0)printf(The answer isn);printf(The real part is%f,n,p+q);printf(The imag part is%fn,p-q);第59页,共67页,编辑于2022年,星期一elseprintf(The answer isn);printf(x1=%fn,p+q);printf(x2=%fn,p-q);输入Please input a,b and c:12,24,12输出The answer isx1=-1.000000 x2=-1.000000第60页,共67页,编辑于2022年,星期一输入Please input a,b and c:12,3,21输出The answer isThe real part is 1.191957,The imag part is-1.441957第61页,共67页,编辑于2022年,星期一 本章小结本章小结 本章首先介绍了C语言中的常量与变量的定义及用法,然后结合实例重点介绍了常见的3种基本数据类型即整型数据、实型数据和字符数据的相关概念,最后介绍了整型数据、实型数据和字符数据之间的相互转换及混合运算。第62页,共67页,编辑于2022年,星期一 习习 题题 二二一、填空题1C语言中,常量包括_、_、_和_。2C语言中,数据类型包括_、_、_和_。3若有定义:int a=0;则执行赋值语句a+=a*=a%=a-=15;后变量a中的值是_。4printf(“%dn”,(int)(2.5+3.0)/3);的输出结果是_。5假设变量a为整型,则执行a=3+5,a*4;printf(“%dn”,a);后的输出结果是_。第63页,共67页,编辑于2022年,星期一二、选择题1下列数据中,不正确的数值或字符常量是()。A0.825e2B5LC0 xabcdDo132以下字符中,不正确的C语言转义字符是()。AB018CxaaDt3若有代数式,则错误的C语言表达式是()。Aa/b/c*eBa*e/b*cCa*e/b/cDa*e/c/b第64页,共67页,编辑于2022年,星期一4已知有以下变量定义:int i=8,k,a,b;unsigned long w=5;double x=1.42,y=5.2;则不符合C语言语法的表达式是()。Ak=i+B(int)x+0.4Cw+=-2Da=2*a=3第65页,共67页,编辑于2022年,星期一三、上机操作题1写出下列程序的运行结果。#include#define num 35#define cha f#define flo 5.25main()int n;char c;float f;n=num*flo-cha;c=num*flo-cha;f=num*flo-cha;printf(n=%dnc=%cnf=%fn,n,c,f);第66页,共67页,编辑于2022年,星期一2编写程序求如下表达式的值。(1)(2)(3)其中:a=23,b=25,c=15第67页,共67页,编辑于2022年,星期一