第3章 数据类型、运算符.ppt

上传人:sccc 文档编号:5911118 上传时间:2023-09-03 格式:PPT 页数:57 大小:224.54KB
返回 下载 相关 举报
第3章 数据类型、运算符.ppt_第1页
第1页 / 共57页
第3章 数据类型、运算符.ppt_第2页
第2页 / 共57页
第3章 数据类型、运算符.ppt_第3页
第3页 / 共57页
第3章 数据类型、运算符.ppt_第4页
第4页 / 共57页
第3章 数据类型、运算符.ppt_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《第3章 数据类型、运算符.ppt》由会员分享,可在线阅读,更多相关《第3章 数据类型、运算符.ppt(57页珍藏版)》请在三一办公上搜索。

1、第3章 数据类型、运算符与表达式,C程序设计,3.1 C语言的数据类型,3.2 常量与变量,3.2.1 常量和符号常量常量是指在运行过程中,其值不能被改变的量称为常量。根据常量的取值对象,C语言将常量分为以下5种类型:(1)整型常量。例如:16,0,-3等。(2)浮点型常量。例如:3.14159,-3.6等。(3)字符常量。例如:A,5,#等。,3.2.1 常量和符号常量(续),(4)字符串常量。例如:Abc,6estghj,45+35等。(5)符号常量。例如:“#define PI 3.14159”中的PI等。符号常量,用一个标识符代表的常量。格式:#define 常量名 字面常量 举例:#

2、define PRICE 100#define PI 3.14#define C1 a 习惯上,符号常量名用大写,变量用小写,以示区别。,3.2.1 常量和符号常量(续),例3.1 符号常量的使用#define PRICE 30#include void main()int num,total;num=10;total=num*PRICE;printf(total=%dn,total);,3.2.2 变量,变量:在程序运行过程中,其值可以改变的量称为变量。变量的两个要素(1)变量名。每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。

3、在程序中,通过变量名来引用变量的值。标识符:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字长度:最长32个字符,3.2.2 变量(续),变量名命名原则:见名知意 合法的变量名如:aver,a,s2,student_name,_init 不合法的变量名:M.D.John,1a,#33,abC 语言要求对变量“先定义,后使用”,其目的在于:凡未被事先定义的,不作为变量名,从而能保证程序中变量名使用得正确。每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。每一变量属于一个类型,就便于在编译时据此检查该变量所进行的运算是否合法。,3.3 整型数据,

4、3.3.2整型常量的表示方法 整型常量,即整型常数。C语言整型常量可用以下3种形式表示:十进制整数:由数字09和正负号表示.如 123,-456,0八进制整数:由数字0开头,后跟数字07表示.如0123,011十六进制整数:由0 x开头,后跟09,af,AF表示.如0 x123,0Xff,1.整型数据在内存中的存放形式。(参见教材)数据在内存中是以二进制形式存放的。如:int i;/*定义为整型变量*/i=10;/*给i赋以整数10*/,3.3.2 整型变量,3.3.2 整型变量(续),2.整型变量的分类 整型变量可分为以下4种整型类型:a.基本型,以int表示;b.短整型,以short表示;

5、c.长整型,以long表示;d.无符号整型,以unsigned表示。,3.3.2 整型变量(续),3.整型变量的定义 规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。例如:int a,b(指定变量、为整型)unsigned short c,d;(指定变量、为无符号短整型)long e,f;(指定变量、为长整型),3.3.2 整型变量(续),例3.2 整型变量的定义与使用#include void main()int a,b,c,d;/*指定,为整型变量*unsigned;*指定为无符号整型变量*12;-24;10;printf(“,”,,);,3.3.2 整型变量(续),4.

6、整型数据的溢出例3.3 整型数据的溢出#include void main()int a,b;a=32767;b=a+1;printf(“%d,%dn”,a,b);,数值是以补码表示的。一个整型变量只能容纳-3276832767范围内的数,无法表示大于32767或小于-32768的数。遇此情况就发生“溢出”。,3.3.3 整型常量的类型,一个整常量,其值在-215215-1内可认为是 int 型,并可赋值给 int 型和 long int 型变量;一个整常量,其值在 231 231-1 范围内则认为它是 long int 型,可赋值给一个 long int 型变量;如果某一微机的C版本确定的s

7、hort int 与 int 型数据在内存中占据的长度相同,则它的表数范围与 int 型相同,因此,一个 int 型的常量也同时是一个 short int 型常量,可以赋给 int 或 short int 型变量;常量中无 unsigned 型,但一个非负值的整常量可以赋给 unsigned 型整变量;在一个整常量后面加字母 l 或 L,则认为是long int 型常量。,3.4 浮点型数据,3.4.1 浮点型常量的表示方法有两种方式:十进制小数形式:123.34,-0.0045,0.0指数形式:E(e)如0.23e2,-0.45e-3,3.0+5注意:字母e(或E)之前必须有数字,且e后面的

8、指数必须为整数例如:1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e,3.4 浮点型数据,3.4.2 浮点型变量1.浮点型数据在内存中的存放形式 一个浮点型数据一般在内存中占4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。指数形式:(数符+小数部分+指数部分),3.4.2 浮点型变量(续),规范化的指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字.例如:123.456可以表示为:1.23456e3,3.4.2

9、 浮点型变量(续),2.浮点型变量的分类 浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(long double)三类形式。,3.4.2 浮点型变量(续),3.浮点型数据的舍入误差 例3.4 浮点型数据的舍入误差#include void main()float a,b;a=123456.789e5;b=a+20;printf(“%fn”,b);,说明:一个浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数,3.4.3 浮点型常量的类型,C编译系统将浮点型常

10、量作为双精度来处理。例如:f=2.45678*4523.65 系统先把2.45678和4523.65作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其前7位赋给浮点型变量f。如是在数的后面加字母f或F(如1.65f,654.87F),这样编译系统就会把它们按单精度(32位)处理。,3.5 字符型数据,3.5.1 字符常量(1)由一对单引号括起来的一个字符。如:a,x,D,#。一些特殊的字符常量:以“”开头的字符序列,有特殊的含义,叫转义符,3.5.1 字符常量(续),转义符,3.5.1 字符常量(续),例3.5 转义字符的使用#include void main()print

11、f(“ab ct der ft gn“);printf(”ht ibb j kn”);,3.5.2字符变量,字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:char c1,c2;在本函数中可以用下面语句对c1,c2赋值:c1a;c2 b;一个字符变量在内存中占一个字节,以ASCII码存储,3.5.3字符数据在内存中的存储形式及其使用方法,在内存中,字符变量的实际值是字符变量相应的ASCII代码。C语言中,字符型数据和整型数据之间可以通用,因此在C语言中,一个字符数据即可以以字符形式输出,也可以以整数形式输出。字符数据与整型数据可以互相赋值。,3.5.3字符数据在内存中的

12、存储形式及其使用方法(续),例3.6 向字符变量赋以整数。#include void main()char c1,c2;c1=97;c2=98;printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);,3.5.3字符数据在内存中的存储形式及其使用方法(续),例3.7 大小写字母的转换#include void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“c c,c1,c2);,3.5.4字符串常量,字符串常量是一对双撇号括起来的字符序列.合法的字符串常量:“How do you do.”,“CHINA

13、”,“a”,“$123.45”可以输出一个字符串,如printf(“How do you do.”);在内存中,对字符串常量是采用字符数组表示,即用一个字符型数组来存放一个字符串。注意:a是字符常量,“a”是字符串常量,二者不同。,3.5.4字符串常量(续),规定:在每一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。规定以字符作为字符串结束标志。如:如果有一个字符串常量”,实际上在内存中是:它占内存单元不是个字符,而是个字符,最后一个字符为。但在输出时不输出。C中没有字符串变量(字符串用字符型数组进行处理)。,3.6变量赋初值,(1)语言允许在定义变量的同时使变量

14、初始化如:int a=3;/*指定为整型变量,初值为*/float f=3.56;/*指定为浮点型变量,初值 为.56*/char c=a;/*指定为字符变量,初值为a*/int a,b,c=5;/*表示只给c赋初值。*/(相当于int a,b,c;c=5;),3.6变量赋初值(续),(2)可以使被定义的变量的一部分赋初值。如:int a,b,c=5;表示指定、为整型变量,但只对初始化,c的初值为(3)如果对几个变量赋以同一个初值,应写成:int a=3,b=3,c=3;表示、的初值都是。不能写成 int a=b=c=3;,3.7各类数值型数据间的混合运算,不同类型的数据(整型、实型、字符型)

15、可以进行混合运算。如:10+a+1.5 8765.1234*b 必须首先将它们转换成同一类型的数值。转换原则是由低向高转换,运算结果为最高级别的类型。,1、向左的箭头表示必定的转换2、float型数据在运算时一律先 转为double型,然后再相加,以提高运算速度3、箭头方向表示数据类型转换由 低向高转换4、类型转换是由系统自动完成的,3.8算术运算符和算术表达式,3.8.1 运算符简介,3.8.2 算术运算符和算术表达式(续),1.基本的算术运算符:(加法运算符,或正值运算符。如:、)(减法运算符,或负值运算符。如:、)*(乘法运算符。如:*)(除法运算符。如:)(模运算符,或称求余运算符,两

16、侧均应为整型数据,如:的值为)。,3.8.2 算术运算符和算术表达式(续),2.算术表达式和运算符的优先级与结合性:C 算术表达式:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合语法规则的式子,称为算术表达式。运算对象包括常量、变量、函数等。例如:*.5a 是一个合法的表达式运算符的优先级和结合性:见教材附 录III,3.8.2 算术运算符和算术表达式(续),3.强制类型转换运算符C语言可以利用强制类型转换符可以将一个表达式转换成所需类型强制类型转换符的一般形式:(类型名)变量或(表达式)例如:(double)/*将转换成double类型*/(int)(x+y)/*将x+y的值转换

17、成整型*/(float)(5%3)/*将5%3的值转换成float型*/,3.8.2 算术运算符和算术表达式(续),说明:1、表达式应用括号()括起来2、强制转换时,变量的原有类型未发生变化,只是得到一个中间变量。,3.8.2 算术运算符和算术表达式(续),例3.8 强制类型转换。#include void main()float;int i;x=3.6;i=(int)x;printf(x=%f,i=%dn,x,i);,3.8.2 算术运算符和算术表达式(续),4.自增、自减运算符 作用是使变量的值增或减 例如:+i,-i(在使用i之前,先使i的值加(减)i+,i-(在使用i之后,使i的值加(

18、减),3.8.2 算术运算符和算术表达式(续),i+与+i的区别:+i是先计算i=i+1,后使用i的值(即把增加1后的i值作为表达式+i 的值);i+是先引用 i 的值(即把i原有的值 作为表达式i+的值),后进行计算i=i+1,此时 i 的值才增加1。例如:;i的值先变成4,再赋给,j的值均为;先将 i的值3赋给,的值为,然后变为,3.8.2 算术运算符和算术表达式(续),注意:(1)自增运算符(),自减运算符(),只能用于变量,而不能用于常量或表达式,(2)和的结合方向是“自右至左”。自增(减)运算符常用于循环语句中使循环变量自动加。也用于指针变量,使指针指向下一个地址,3.8.2 算术运

19、算符和算术表达式(续),5.有关表达式使用中的问题说明 ANSI C并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排。例如:对表达式 a=f1()+f2()并不是所有的编译系统都先调用f1(),然后调用f2()。在有的情况下结果可能不同。有时会出现一些令人容易搞混的问题,因此务必要小心谨慎。,3.8.2 算术运算符和算术表达式(续),语言中有的运算符为一个字符,有的运算符由两个字符组成,为避免误解,最好采取大家都能理解的写法。例如:不要写成i+j的形式,而应写成(i+)+j的形式,3.8.2 算术运算符和算术表达式(续),在调用函数时,实参数的求值顺序,标准并无统一规定。例如

20、:的初值为,如果有下面的函数调用:printf(,i+)在有的系统中,从左至右求值,输出“,”在多数系统中对函数参数的求值顺序是自右而左,printf函数输出的是“,”。以上这种写法不宜提倡,最好改写成 j=i+;printf(%d,%d,j,i),3.9 赋值运算符和赋值表达式,1.赋值运算符:赋值符号“”就是赋值运算符,它的作用是将一个数据(常量、变量或表达式的值)赋值给一个变量2.类型转换 如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。例如:将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点数的小数部分。.将整型数据赋给单、双精度变量时,数值不变,但

21、以浮点数形式存储到变量中,3.9 赋值运算符和赋值表达式(续),将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(4个字节)中。但应注意数值范围不能溢出。如果将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位,在内存中以8个字节存储字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为个字节,因此将字符数据(个二进位)放到整型变量存储单元的低位中。将int、short、long数据给char 变量时,只将低8位送到char变量中(即截断);,3.9 赋值运算符和赋值表达式(续),将带符号的整型数据赋给long型

22、变量时,要进行符号扩展;反之,截断;将unsigned int数据赋给long int 变量时,只将高位补0即可;将非unsigned数据赋给长度相同的unsigned变量,是照原样赋值;总之:不同类型的整型数据间的赋值是按存储单 元中的 存储形式直接传送。,3.9 赋值运算符和赋值表达式(续),3.复合的赋值运算符 在=之前加上其他运算符(比如+=、-=、*=、/=),构成复合赋值运算符例如:等价于*等价于*()等价于 为便于记忆,可以这样理解:a+=b(其中a为变量,b为表达式)a+=b(将有下划线的“a+”移到“=”右侧)|_ a=a+b(在“=”左侧补上变量名a),3.9 赋值运算符和

23、赋值表达式(续),注意:如果是包含若干项的表达式,则相当于它有括号。如:x%=y+3 x%=(y+3)|_ x=x%(y+3)(不要错写成x=x%y+3)语言规定可以使用种复合赋值运算符:,*,|,3.9 赋值运算符和赋值表达式(续),4.赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为:例如:a=5 a=x*6,3.9 赋值运算符和赋值表达式(续),赋值表达式可以嵌套 如:a=(b=6)等价于 b=6和 a=b a=b=c=5 a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)赋值表达式可以包括复合的赋值运算符 如:a+=a-=

24、a*a 若 a的初值为 3,则 1)a-=a*a,即 a=aa*a a的值为 6 2)a+=-6,即 a=a+(-6)a 的值为-12,3.10 逗号运算符和逗号表达式,逗号运算符又称为“顺序求值运算符”,是所有运算符中级别最低的,它将两个表达式连接起来。一般形式为:表达式1,表达式2,表达式3表达式n求解过程:先求解表达式1,再求解表达式2,直到最后求表达式 n 的值,整个逗号表 达式的值是最后一个表达式 n 的值;,3.10 逗号运算符和逗号表达式(续),例如:a=3*5,a*4;a的值为15,表达式的值为60(a=3*5,a*4),a+5;a的值为15,表达式的值为20 又如:x=(a=

25、3,6*3);x的值为18 x=a=3,6*a x的值为3,表达式的值为18,3.10 逗号运算符和逗号表达式(续),1、逗号表达式的求解过程为自左至右,依次计算各表达式的值,最后一个表达式的值即为整个逗号表达式的值;2、逗号运算符的优先级最低。3、使用逗号表达式的目的通常是想分别得到各个表达式的值,而并非一定要得到整个表达式的值。4、常用于for循环语句中,除此以外很少使用。,本章小结,C语言的各种类型常量表示,其中整数可采用十、八和十六进制数表示。变量的定义及初始化。不同类型的数据可混合运算,系统进行类型转换。强制类型转换时注意,由较短类型转换为较长类型时可能有误差甚至出错。C语言的运算符及它们的优先级和结合性,本章作业,3.43.63.73.83.93.103.12,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号