第2章基本数据类型及其操作.ppt

上传人:本田雅阁 文档编号:2252343 上传时间:2019-03-11 格式:PPT 页数:55 大小:208.01KB
返回 下载 相关 举报
第2章基本数据类型及其操作.ppt_第1页
第1页 / 共55页
第2章基本数据类型及其操作.ppt_第2页
第2页 / 共55页
第2章基本数据类型及其操作.ppt_第3页
第3页 / 共55页
亲,该文档总共55页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第2章基本数据类型及其操作.ppt》由会员分享,可在线阅读,更多相关《第2章基本数据类型及其操作.ppt(55页珍藏版)》请在三一文库上搜索。

1、1,第2章 基本数据类型及其操作,2.1 C语言的基本数据类型 2.2 常量与变量 2.3 常用运算符与表达式 2.4 数据的输入与输出 2.5 应用实例 本章小结,2,2.1 基本数据类型,一个程序应包括对数据的描述和对数据处理的描述。 对数据的描述,即数据结构。 在C语言中,系统提供的数据结构,是以数据类型的形式出现的。 对数据处理的描述,即计算机算法。算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。 实际上,一个程序除了数据结构和算法外,还必须使用一种计算机语言,并采用结构化方法来表示。,3,C语言提供的数据结构,是以数据类型形式出现的。具体分类如下: 1. 基本类型(分为整型、实

2、型(又称浮点型)、字符型和枚举型四种)。 2. 构造类型(分为数组、结构体和共用体三种)。 3. 指针类型。 4. 空类型,4,1. 整数的存储。以二进制形式存储,一个数据占据2/4个字节内存。数据有正、负,负数以补码方式存放,或参与运算。如十进制数100,二进制为0110 0100。,2. 实数的存储。采用指数形式存储,一个数占据4个字节内存,数值部分3个字节,指数部分一个字节。也是采用二进制数形式。,3. 字符数据的存储。存放字符的ASCII码值,占一个字节。例如,字符A的ASCII码值为65,转换为二进制数为:0100 0001。,5,2.2 常量和变量,一、常量(常量的类型,可通过书写

3、形式来判别) 1. 常量的概念 在程序运行过程中,其值不能被改变的量称为常量。 2. 常量的分类 (1)整型常量(分十进制、八进制、十六进制):123、67(十进制);056、024(八进制);0x123、0x56(十六进制) (2)实型常量:12.56、3.0e+4(指数形式,表示3.0104) (3)字符常量:A、c、 、6等,也包括转义字符,参见P16表2.1。 (4)符号常量:用一个标识符代表一个常量。,6,案例2.1 符号常量的使用。 #define PI 3.1415926 /*定义符号常量的命令行*/ #include /*文件包含预处理命令*/ void main() doub

4、le r,s,v; /*定义双精度浮点型变量r*/ r=3.5; /*为半径r赋值*/ s=4.0*PI*r*r; /*计算表面积*/ v=4.0/3.0*PI*r*r*r; /*计算体积*/ printf(“s=%f,v=%fn”,s,v); /*输入计算结果*/ 该例题中 PI 就是符号常量。使用符号常量需要用命令行定义。,定义符号常量格式为: #define 标识符 常量串 例如: #define PI 3.1415926 表示把符号常量的值定义为3.1415926,7,二、 变量 1. 变量的概念 在程序运行过程中,其值可以被改变的量称为变量。 2. 变量的两个要素 (1)变量名。每个

5、变量都必须有一个名字变量名,变量命名遵循标识符命名规则。 (2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。,8,3.标识符(即名称)命名规则 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前个字符有效。如果超长,则超长部分被舍弃。 (3)C语言的关键字不能用作变量名。 注意:C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小写,以增加可读性。,9,4. 变量的定义与初始化 在语言中,要求对所有用到的变量,必须先定义、后使用;且称在定义

6、变量的同时进行赋初值的操作为变量初始化。 (1)变量定义的一般格式 存储类型 数据类型 变量名,变量名2; 例如,float radius, length, area; (2)变量初始化的一般格式 存储类型 数据类型 变量名=初值,变量名2=初值2; 例如,float radius=2.5, length, area;,10,2.2.1 整型数据,1.分类 根据占用内存字节数的不同,整型变量又分为类: (1)基本整型(关键字为int) (2)短整型(关键字为short int) (3)长整型(关键字为long int) (4)无符号整型(unsigned) 无符号型又分为无符号基本整型(uns

7、igned int)、短整型(unsigned short)和长整型(unsigned long)三种,只用来存储无符号整数。,11,2. 占用内存字节数与值域 上述各类型整型变量占用的内存字节数,随系统而异。在TC中,一般用字节表示一个int型变量,且long型(字节)int型(字节)short型(字节)。 显然,不同类型的整型变量,其值域不同。例如,TC编译系统中一个int型变量,其取值范围是-3276832767;一个unsigned型变量的值为:065535。P19表2.2 .类型匹配规则 类型匹配规则为:一个整型常量,可以赋给能容纳下其值的整型变量。,12,2.2.2 实型数据,一

8、、实型变量 语言的实型变量,分为两种: (1)单精度型。关键字为float,一般占字节(32位)、提供位有效数字。 (2)双精度型。关键字为double,一般占个字节、提供1516位有效数字。 二、 实型常量 .表示形式 实型常量即实数,又称浮点数,其值有两种表达形式: (1)十进制形式。例如3.14、9.8。 (2)指数形式:E(e)。例如3.0+5等。,13,案例2.2 计算三门课的平均分。 #include void main() int english,math,c; /*定义3个整型变量*/ int sum; /*定义整型变量sum*/ float average; /*定义单精度浮

9、点类型average*/ printf(“请输入英语成绩:”); scanf(“%d”, ,14,2.2.3 字符型数据,一、 字符常量 1. 字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,A、等。 2. 转义字符 语言还允许使用一种特殊形式的字符常量,就是以反斜杠“ ”开头的转义字符。 注意:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:、 。,15,二、 字符变量 字符变量的类型关键字为char,一般占用1字节内存单元。 1. 变量值的存储 字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单

10、元中。 P342 附录CASCII码表 例如: char ch1, ch2; /*定义两个字符变量:ch1,ch2*/ ch1=a; ch2=b; /*给字符变量赋值*/,16,2. 特性 字符数据在内存中存储的是字符的ASCII码 一个无符号整数,其形式与整数的存储形式一样,所以语言允许字符型数据与整型数据之间通用(0255)。 (1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。 (2)允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。,17,案例2.3 将给定的小写字母转换为大写。 #include void main() char c1,c2; /*定义

11、两个字符类型的变量*/ c1=a; /*将字符常量a赋给字符变量c1*/ c2=b; /*将字符常量b赋给字符变量c2*/ c1=c1-32; /*求字符a对应的大写字母*/ c2=c2-32; /*求字符b对应的大写字母*/ printf(“%c %cn”,c1,c2);/*输出字符变量c1、c2的值*/ ,18,三、字符串常量 1.字符串常量的概念和字符串长度 字符串常量是用一对双引号括起来的若干字符序列。 字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为“ ” (一对紧连的双引号)。 例如,“How do you do.”、“Good mor

12、ning.”等,都是字符串常量,其长度分别为14和13(空格也是一个字符)。,19,2.字符串的存储 C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。 注意:在源程序中书写字符串常量时,不必加结束字符0。 如果有一个字符串为“CHINA”,则它在内存中的实际存储如下所示: 最后一个字符0是系统自动加上的,它占用字节而非字节内存空间。,20,综上所述,字符常量A与字符串常量“A“是两回事: (1)定界符不同:字符常量使用单引号,而字符串常量使用双引号; (2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数; (3)存储要求不

13、同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。,21,2.3 常用运算符与表达式,在语言中,除控制语句和输入输出函数外,其它所有基本操作都作为运算符处理。 1. 五种基本算术运算符 +、-(减法/取负)、*、/、%(求余数) (1)关于除法运算/ C语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,5 / 2 = 2。 (2)关于求余数运算 要求两侧的操作数均为整型数据,否则出错。,22,【案例2.4】计算表达式1+1/2+1/3+1/4+1/5的值 。 当“/”左右两边的操作数都是整数时,其结果也为整数。例如:1/2=0。若“

14、/”左右两边的操作数有一个是实数,其结果为实数,1.0/2=0.5 #include void main() float x; /*定义一个浮点型变量x*/ x=1+1.0/2+1.0/3+1.0/4+1.0/5; printf(“x=%fn”,x); /*输出变量x的值*/ ,23,2. 表达式和算术表达式 (1)表达式 用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子,称为表达式。 单个常量、变量或函数,可以看作是表达式的一种特例。将单个常量、变量或函数构成的表达式称为简单表达式,其它表达式称之为复杂表达式。 (2)算术表达式 表达式中的运算符都是算术运算符

15、。例如, 3+6*9、(x+y)/2-1等,都是算术表达式。,24,3. 运算符的优先级与结合性 (1)语言规定了运算符的优先级和结合性。 所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。 自左至右的结合方向,称为左结合性。反之,称为右结合性。 结合性是语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。,25,4.数据类型转换 (1) 在语言中,整型、实型和字符型数据间可以混合运算。如果一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则,首先将数据自动转换成同一类型

16、,然后在同一类型数据间进行运算。转换规则如下所示。 char,short float int unsigned long double 向下的箭头,表示必须的转换。char和short 型必须转换成 int 型,float型必须转换成double型。 横向向右的箭头,表示不同类型的转换方向。 注意:箭头方向只表示数据类型由低向高转换,不要理解为int型先转换成unsigned型,再转换成long型,最后转换成double型。,精度低,精度高,26,(2)除自动转换外,语言也允许强制转换。 数据类型强制转换的一般格式为: (要转换成的数据类型)(被转换的表达式) 当被转换的表达式是一个简单表达式

17、时,外面的一对圆括号可以缺省。 例如, (double)a (等价于(double)(a) /*将变量a的值转换成double型*/ (int)(x + y) /*将x+y的结果转换成int型*/ (float)5/2(等价于(float)(5)/2)/*将5转换成实型,再除以2(=2.5)*/ (float)(5/2) /*将5整除2的结果(2)转换成实型(2.0)*/ 注意:强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,(double)a 只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。,27,5. 赋值运算符及其表达式,(

18、1) “=”是一个赋值运算符 (2) a=3是赋值表达式。 (3)赋值表达式加上一个分号构成语句,如: a=3; if(a=b)0)t=a; 红色部分是一个条件 该语句的含义是:先将b的值赋予a,若a的值大于0,则将a的值赋予t。这里的a=b是一个赋值表达式。 注意:赋值表达式和赋值语句的差别。,28,2.4 数据的输入与输出,输入/输出以计算机为主体,输入是指从输入设备(键盘等)向计算机输入数据,输出是指从计算机向输出设备(显示器等)输出数据。 C语言本身不提供输入输出语句,输入输出操作通过C系统函数库的函数来完成的。如 输入函数:scanf()、 getchar(); 输出函数:print

19、f()、putchar()等。 在使用系统函数库的函数时,要用编译预处理命令“#include”将有关的“头文件”包含到用户的源文件中。,29,1. 单个字符的输出putchar()函数 案例2.5 putchar() 函数的格式和使用方法。 #include /*编译预处理命令:文件包含*/ void main() char ch1=N, ch2=E, ch3=W; putchar(ch1); putchar(ch2); putchar(ch3);/*输出*/ putchar(n); putchar(ch1); putchar(n); /*输出ch1的值,并换行*/ putchar(E);

20、putchar(n); /*输出字符E,并换行*/ putchar(ch3); putchar(n); ,程序运行结果如下: NEW N E W,30,putchar()函数的格式: putchar(ch); 其中ch可以是一个字符变量或常量,也可以是一个转义字符。putchar()函数的作用是向终端输出一个字符。 (1)putchar()函数只用于输出单个字符,且一次只能输出一个字符。另外,从功能角度来看,printf()函数可以完全代替putchar()函数。 (2)在程序中使用putchar()函数,务必牢记:在程序(或文件)的开头加编译预处理命令(也称包含命令): #include ,

21、31,2 . 单个字符的输入getchar()函数 案例2.6 getchar() 函数的使用。 #include main() char r; r=getchar(); /*输入一个字符*/ putchar(r); /*输出该字符*/ putchar(n); a /*键盘输入的字符数据*/ a /*屏幕显示的输出数据*/,程序执行时输入一个字符a并按回车键后,在屏幕上看到结果。,32,getchar()函数的格式: getchar(); getchar()函数的作用:从系统输入设备(如键盘)输入一个字符。另外,从功能角度来看,scanf()函数可以完全代替getchar()函数。 (1)ge

22、tchar()函数只能用于单个字符的输入,一次输入一个字符。当需要多个字符时,可通过循环输入实现。 (2)程序中要使用getchar()函数,必须在程序(或文件)的开头加上编译预处理命令: #include 注意: 函数getchar() 和putchar(ch)在格式上和应用上的差别。,33,3. 格式化输出函数printf()函数,案例2.7 已知圆半径radius=1.5,求圆的周长和面积并输出。 #include void main() float radius, length, area, pi=3.1415926; radius=1.5; length=2*pi*radius; /

23、*求圆周长*/ area=pi*radius*radius; /*求圆面积*/ printf(“radius=%fn”,radius); /*输出圆半径*/ printf(“length=%7.2f,area=%7.2fn”,length,area); ,34,printf()函数的作用:向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据。 printf()函数的一般格式如下: printf(格式控制,输出表列); (1)格式控制 格式控制时用双引号括起来的字符串,也称“转换控制字符串”,可以包含三种信息: 格式说明。格式说明的一般形式如下: %格式字符,35,转义字

24、符 例如,中printf()函数中的n就是转义字符,输出时产生一个“换行”操作。 普通字符除格式字符和转义字符之外的其它字符。格式字符串中的普通字符,原样输出。 例如,printf(“radius=%fn”, radius); (2)输出表列 输出表列是可选的。如果要输出的数据不止1个,相邻2个之间用逗号分开。必须与“输出表列”中、输出项的数据类型一致,否则会引起输出错误。,下面的printf()函数都是合法的: (1)printf(“I am a student.n“); (2)printf(“%d“,3+2); (3)printf(“a=%f b=%5dn“, a, a+3);,是普通字符

25、,36,(3) 格式字符 输出不同类型的数据,要使用不同的格式字符。常用的有: 格式字符d以带符号的十进制整数形式输出。 案例2.8 格式字符d的使用。 #include void main() int n1=123; long n2=123456; /*用3种不同格式,输出int型数据n1的值*/ printf(“n1=%d,n1=%5d,n1=%-5dn“,n1,n1,n1); /*用3种不同格式,输出long型数据n2的值*/ printf(“n2=%ld,n2=%5ldn“,n2,n2); printf(“n1=%ldn“,n1); ,37,格式字符f 以小数形式、按系统默认的宽度,输

26、出单精度和双精度实数。 案例2.9 显示输出浮点数(左对齐、右对齐)。 #include void main( ) float f=123.456; double d1,d2; d1=1111111.111; d2=2222222.222; printf(“%f,%10.2f,%-10.2f,%.2fn“,f,f,f,f); printf(“d1+d2=%fn“,d1+d2); ,数据右对齐,数据左对齐,38,对于实数,也可使用格式符%e,以标准指数形式输出:尾数中的整数部分大于等于1、小于10,小数点占一位,尾数中的小数部分占5位;指数部分占4位,其中e占一位,指数符号占一位,指数占2位,共

27、计11位。 也可使用格式符%g,让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。,39,格式字符c 输出一个字符(只占一列宽度)。 案例2.10 格式字符c的使用。 #include void main() char c=A; int i=65; printf(“c=%c,%5c,%dn“,c,c,c); printf(“i=%d,%cn“,i,i); 需要强调的是:在C语言中,整数可以用字符形式输出,字符数据也可以用整数形式输出。,40,格式字符s 输出一个字符串。 案例2.11格式字符s的使用。 #include void main() printf(“%s,%5s,%-

28、10sn“,“Internet“,“Internet“,“Internet“); printf(“%10.5s,%-10.5s,%4.5s“, “Internet“,“Internet“,“Internet“); 运行结果如下: 注意:系统输出字符和字符串时,不输出单引号和双引号。,41,(4) 使用说明 printf()可以输出常量、变量和表达式的值。但格式控制中的格式说明符,必须按从左到右的顺序,与输出表中的每个数据一一对应,否则出错。 格式字符x、e、g可以用小写字母,也可以用大写字母。使用大写字母时,输出数据中包含的字母也大写。除了x、e、g格式字符外,其它格式字符必须用小写字母。 例

29、如,%f不能写成%F。 格式字符紧跟在“%”后面就作为格式字符,否则将作为普通字符使用(原样输出)。,42,6. 格式输入scanf()函数,案例2.12 scanf()函数用来从键盘向计算机输入数据的。 #include void main() float x,y,z,aver; scanf(“%f%f%f”, ,43,在程序中给计算机提供数据,可以用赋值语句,也可以用输入函数。在C语言中,可使用scanf()函数,通过键盘输入,给计算机同时提供多个、任意的数据。 (1) scanf()函数的一般格式 scanf(“格式字符串“, 输入项首地址表); 格式字符串。格式字符串可以包含3种类型的

30、字符:格式字符、空格和修饰字符。 格式指示符与printf()函数的相似,空白字符作为相邻2个输入数据的缺省分隔符,非空白字符在输入数据时,必须原样一起输入。,44,输入项首地址表由若干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。 输入项地址表中的地址,可以是变量的首地址,也可以是字符数组名或指针变量。 变量首地址的表示方法: &变量名 其中“&”是地址运算符。 (2)scanf()函数的功能:从键盘上接收格式化输入。,45,(3) 格式字符 格式说明符与输出函数中一样。一般形式为: % 格式字符 格式字符 类型字符类似输出。例如案例3.6的scanf()函数语句中,格式字符串“

31、%f”。 附加说明符(最好不使用) 指定该项输入数据所占列数为n。换句话说,读取输入数据中相应的n位,按需要的位数赋给相应的变量,多余部分被舍弃。 例如,scanf(“%3c%3c“,46,使用scanf()注意事项: 1. 对应“%d%f%d”从键盘上输入数据时,整型或实型数据可以用空格、回车或Tab键隔开,但对于“%c%c”,输入字符时不需要隔开。 2“格式字符串”中出现的普通字符(包括转义字符),务必原样输入。 例如,scanf(“%d,%d“, 正确的输入操作为: n1=12,n2=36n,47,4输入数据时,遇到以下情况,系统认为该数据结束: (1)遇到空格,或者回车键,或者Tab键

32、。 (2)遇到输入域宽度结束。例如“%3d”,只取3列。 (3)遇到非法输入。例如,在输入数值数据时,遇到字母等非数值符号(数值符号仅由数字字符0-9、小数点和正负号构成)。,48,格式化的输入/输出功能强,可以用来输入输出整数、实数、字符和字符串,但是语法较复杂,要求比较严格,尤其是格式输入函数scanf()。 输入/输出函数中用到的格式字符较多,请注意区别并应用。 格式输入/输出函数scanf()、printf()使用时,系统要求把“stdio.h”头文件包含到用户的源文件中。 字符输入/输出函数只能用来输入或输出字符,使用时一定要把“stdio.h”头文件包含到用户的源文件中。,49,案

33、例2.13 输入任意三个整数,求它们的和及平均值。 #include void main() int n1,n2,n3,sum; float aver; printf(“Please input three numbers:”); scanf(“%d,%d,%d”, ,思考题:能否将“aver=sum/3.0;”中的3.0改为3? 为什么?,50,案例2.14 输入三角型的三边长,求三角形面积。 分析:由数学知识可得计算三角形面积公式: s=(a+b+c)/2 ,,#include #include void main() double a,b,c,s,area; printf(“Please

34、 input three numbers:“); scanf(“%lf,%lf,%lf“, ,51,案例2.15 求方程ax2+bx+c=0的实数根。a,b,c由键盘输入,a0且b2-4ac0。 分析:根据数学知识,当b2-4ac0时,方程有两个实根。 #include #include /*为使用求平方根函数sqrt()*/ void main() float a,b,c,disc,x1,x2; printf(“Input a, b, c: “); scanf(“%f,%f,%f“, ,52,案例2.16 鸡兔同笼问题。已知笼中鸡兔总头数有35,总脚数为94,计算鸡、兔各多少只?,设头为a,

35、脚为b,鸡为x只,兔为y只。 #include void main() int a,b,x,y; printf(“输入鸡兔总头数和脚数:“); scanf(“%d%d“, ,53,案例2.17 有面值5元和10元的钞票共100张,总值为800元。编程统计5元和10元的钞票各有多少张。 设5元的为x张,10元的为y张,m为总张数,n为总值。根据分析可得:y=(n-5*m)/5,x=m-y。,#include void main() int x,y,n,m; printf(“请输入人民币的张数和总值:“); scanf(“%d,%d“, ,54,本章小结,本章主要掌握内容: 1. 数据类型分类,重点掌握基本数据类型。,2. 算术运算符(+、-、*、/、%)、赋值运算符及其表达式等。,3. 输入输出函数的应用scanf()、printf()、 putchar()、getchar() 。,55,本章作业 P36:1,2,3题将答案写在书上; 4题改正错误并上机调试; 5题自己阅读程序将结果写在书上,并上机验证; 6题编程,在实验课时上机调试、验证。 本周实验内容 P291 实验二 教材中例2.13、2.14、2.15上机练习,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1