C语言第3章数据类型、运算符与表达式ppt课件_第1页
C语言第3章数据类型、运算符与表达式ppt课件_第2页
C语言第3章数据类型、运算符与表达式ppt课件_第3页
C语言第3章数据类型、运算符与表达式ppt课件_第4页
C语言第3章数据类型、运算符与表达式ppt课件_第5页
已阅读5页,还剩115页未读 继续免费阅读

下载本文档

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

文档简介

1、1数据类型、运算符与表达式数据类型、运算符与表达式2一、一、C C的数据类型的数据类型二、常量与变量二、常量与变量三、基本数据类型三、基本数据类型四、运算符与表达式四、运算符与表达式 主要内容主要内容3一、一、C C的数据类型的数据类型(一一) 什么是数据类型?什么是数据类型?(二二) C语言的数据类型有哪些?语言的数据类型有哪些?4数据结构数据结构+算法算法=程序程序C语言中以语言中以“数据类型数据类型”形式存在形式存在对数据的描述对数据的描述对操作的描述对操作的描述 ( (一一) ) 什么是数据类型?什么是数据类型?5n所谓数据类型是按被定义变量的性质,表示形所谓数据类型是按被定义变量的性

2、质,表示形式,占据存储空间的多少,构造特点来划分的。式,占据存储空间的多少,构造特点来划分的。6数据类型数据类型基本类型基本类型整型整型字符型字符型实型实型(浮点型浮点型)枚举类型枚举类型构造类型构造类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型文件文件指针类型指针类型空类型空类型单精度型单精度型双精度型双精度型在程序中对用到的在程序中对用到的所有数据都必须指所有数据都必须指定其数据类型定其数据类型.( (二二) C) C的数据类型的数据类型7( (一一) ) 常常 量量( (二二) ) 变变 量量二、常量与变量二、常量与变量8概念概念在程序运行过程中,其值不能被改变的量。在程序

3、运行过程中,其值不能被改变的量。分类分类直接常量直接常量( 字面常量字面常量):): 12 -412 -44.6 a Hello!4.6 a Hello!”符号常量符号常量:用一个:用一个标识符标识符代表一个常量。代表一个常量。 ( (一一) ) 常量常量9符号常量的定义符号常量的定义格式格式:#define 常量名常量名 字面常量字面常量举例:举例:#define PRICE 100 #define PI 3.14 #define C1 a习惯上常量名用大写,习惯上常量名用大写,变量名用小写。变量名用小写。符号常量的定义放在符号常量的定义放在函数外面。函数外面。习惯上常量名用大写,习惯上常量

4、名用大写,变量名用小写。变量名用小写。10n#define也是一条预处理命令(预处理命令都也是一条预处理命令(预处理命令都以以“#”开头),称为宏定义命令(在后面预开头),称为宏定义命令(在后面预处理程序中将进一步介绍)。处理程序中将进一步介绍)。n其功能是把该标识符定义为其后的常量值。其功能是把该标识符定义为其后的常量值。n一经定义,以后在程序中所有出现该标识符的一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值,并且在作用域内不能地方均代之以该常量值,并且在作用域内不能再被赋值。再被赋值。 11#define PRICE 100 /定义符号常量定义符号常量#include voi

5、d main()int sum;sum=PRICE*20;printf(%dn,sum);单价单价符号常量符号常量数量数量直接常量直接常量举例举例1、求购买某商品所需的费用。、求购买某商品所需的费用。 int NUM=20;sum=PRICE*NUM;?符号常量的定义放在符号常量的定义放在函数外面。函数外面。12符号常量优点符号常量优点1、含义清楚。、含义清楚。2、在需要改变一个常量时,能够做到、在需要改变一个常量时,能够做到“一一 改改全全改改” 13概念概念变量代表内存中具有特定属性的一变量代表内存中具有特定属性的一个存储单元,它用来存放数据,也个存储单元,它用来存放数据,也就是变量的值。

6、就是变量的值。(二)变量(二)变量14(1 1)变量名。)变量名。每个变量都有一个名字每个变量都有一个名字变量名,代表一个地址。变量名,代表一个地址。(2 2)变量值。)变量值。在程序运行过程中,变在程序运行过程中,变量值存储在内存中。在程序中,通过量值存储在内存中。在程序中,通过变量名来引用变量的值。变量名来引用变量的值。15变量名与变量值的关系变量名与变量值的关系例如:例如:max=1010变量值变量值max存储单元存储单元变量名变量名16变量定义变量定义数据类型数据类型 变量名变量名, 变量名变量名2;int a1,a2;float x1,x2;double y1,y2;char c1,

7、c2;习惯上,变量名用小写字母。习惯上,变量名用小写字母。常量名用大写字母。常量名用大写字母。17方式:方式:1、定义变量的同时赋初值(也叫变量初始化)。、定义变量的同时赋初值(也叫变量初始化)。 格式:格式: 数据类型数据类型 变量名变量名=初值初值, 变量名变量名2=初值初值2;2、通过一个赋值语句给变量赋初值。、通过一个赋值语句给变量赋初值。 格式格式 : 变量名变量名=初值初值;变量赋初值变量赋初值(初始化初始化)出现在函数体出现在函数体的的声明声明部分部分出现在函数体出现在函数体的的执行执行部分部分int a,b=3;int a,b;b=3;181 1、程序中用到的变量必须、程序中用

8、到的变量必须“先定义(先定义(declaredeclare),), 后使用后使用”。2 2、C C语言的语言的关键字关键字不能用作变量名。不能用作变量名。3 3、C C语言对英文字母的语言对英文字母的大小写敏感大小写敏感,即同一字母,即同一字母 的大小写,被认为是两个不同的字符。的大小写,被认为是两个不同的字符。关于变量以及变量赋初值的几点说明关于变量以及变量赋初值的几点说明194、定义变量时,给几个变量赋相同的初值,应、定义变量时,给几个变量赋相同的初值,应写成写成 : int a=3,b=3,c=3; 不能写成不能写成: int a=b=c=3;20 关键字、标识符和保留标识符关键字、标识

9、符和保留标识符 关键字关键字 是具有是具有特定含义的特定含义的、专门用来说明、专门用来说明C语言的特定成分语言的特定成分的一类单词。的一类单词。 例如,关键字例如,关键字int用来定义整型变量,而关键字用来定义整型变量,而关键字float则则用来定义实型用来定义实型(浮点型浮点型)变量。变量。 21标识符标识符 在在C C语言中用于标识名字(语言中用于标识名字(变量名、符号常量变量名、符号常量名、函数名、数组名、类型名、文件名名、函数名、数组名、类型名、文件名 )的)的有效字符序列称为有效字符序列称为标识符标识符。 22(1) (1) 标识符的标识符的第一个字符第一个字符必须是必须是英文字母或

10、下划英文字母或下划线线(2) (2) 如果第一个字符后面还有如果第一个字符后面还有字符序列字符序列,则它应,则它应是是英文字母、下划线符或数字组成的序列英文字母、下划线符或数字组成的序列。(3)(3)关键字关键字不能不能作为作为标识符使用标识符使用. .23(4) (4) 标识符中的英文字母标识符中的英文字母大小写是有区别的大小写是有区别的, 如标识符如标识符abcabc与标识符与标识符ABCABC不相同。不相同。(5)标识符的有效长度标识符的有效长度随系统而异随系统而异,如果超,如果超 长,则超长部分被舍弃。长,则超长部分被舍弃。VC+6.0中规中规 定最大长度为定最大长度为247个字符。个

11、字符。24请选出下列正确的请选出下列正确的标识符标识符M.D.John , 12%gf ,1add ,_ce36 ,age&5thclass, lotus-1-2-3 , cd*ef , float,file_2, yes? 25 保留标识符保留标识符是系统保留的一部分标识符,通是系统保留的一部分标识符,通常用于常用于系统定义和标准库函数系统定义和标准库函数(printf , scanf)的名字。的名字。 例如,例如,以下划线开始的标识符以下划线开始的标识符通常用于定义通常用于定义系统变量。系统变量。不应该不应该把这些标识符来把这些标识符来定义自己的变定义自己的变量量。虽然它们也是合法

12、的标识符,但是用它们来。虽然它们也是合法的标识符,但是用它们来做一般标识符就可能会出问题。做一般标识符就可能会出问题。 保留标识符保留标识符26变量变量举例举例include void main() int student,age; int if=adrress=1; float score=90; stadent=2; Age=20; printf(%d %d %d %f,if,student,age,score);本程序中有本程序中有几处错误?几处错误?27第五讲第五讲28( (一一) ) 整数类型整数类型( (二二) ) 实数类型实数类型( (三三) ) 字符类型字符类型( (四四) )

13、 不同类型数据间的转换不同类型数据间的转换三、基本数据类型三、基本数据类型29(一一) 整数类型整数类型 整数变量整数变量 整数常量整数常量30整型数据在内存中是以整型数据在内存中是以补码补码表示的表示的。1 1、整型数据的存储方式、整型数据的存储方式编码编码正数表示方法正数表示方法负数表示方法负数表示方法原码原码最高位为符号位(最高位为符号位(0正数,正数,1负数负数)。其他位为此数)。其他位为此数绝对值的二进制表示。绝对值的二进制表示。反码反码同原码同原码最高位为符号位(最高位为符号位(1),其他位为原),其他位为原码表示的各位码表示的各位取反。取反。补码补码同原码同原码最高位为符号位(最

14、高位为符号位(1),其他位为绝),其他位为绝对值的原码的对值的原码的各位取反再末位加各位取反再末位加1。31000000000000101010 int i正整数的原码是最高位为符号位正整数的原码是最高位为符号位0+该数的二进制数。该数的二进制数。正整数的补码和原码相同。正整数的补码和原码相同。数据在内存中的存放数据在内存中的存放符号位符号位32例如:例如: 求十进制求十进制-10的补码表示(按的补码表示(按16位存储)。位存储)。10的原码的原码各位取反各位取反末位加末位加1则得到则得到-10的二进制补码的表示。的二进制补码的表示。000000000000101011111111111101

15、011111111111110110符号位符号位33n练习3。4 (1)342、整型变量的分类、整型变量的分类基本型:基本型:int,在内存中占,在内存中占2个字节。个字节。短整型:短整型:short或或short int ,在内存中占,在内存中占2个字节。个字节。长整型:长整型:long或或long int ,在内存中占,在内存中占4个字节。个字节。35n无符号型无符号型:unsigned。n无符号型又可与上述三种类型匹配而构成:无符号型又可与上述三种类型匹配而构成:无符号基本型无符号基本型:unsigned intunsigned int或或unsignedunsigned。无符号短整型:

16、无符号短整型:unsigned shortunsigned short。无符号长整型无符号长整型:unsigned longunsigned long。 无符号类型量所占的内存空间字节数与相应的有符无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示号类型量相同。但由于省去了符号位,故不能表示负数。负数。36short int 类型类型比特数比特数/ 字节数字节数范围范围intsigned int 16/2 -3276832767(215-1)unsigned int 16/2 065535signed short int 16 /2 -3276832767

17、(215-1)unsigned short int 16 /2 065535long intsigned long int 32/4 -2147483648 2147483647unsigned long int 32/4 04294967295各类型整型变量占用的各类型整型变量占用的内存字节数,随系统而内存字节数,随系统而异。(异。(Turbo C.0Turbo C.0)373、整型变量的定义、整型变量的定义变量定义的一般形式为: 类型说明符 变量名标识符,变量名标识符,.;例如: int a,b,c; (a,b,c为整型变量) long x,y; (x,y为长整型变量) unsigned

18、p,q; (p,q为无符号整型变量)38nmain()nnint a,b,c,d;nunsigned u;na=12;b=-24;u=10;nc=a+u;d=b+u;nprintf(“a+u=%d,b+u=%dn”,c,d);n394 4、整型数据的溢出、整型数据的溢出#include void main()int a,b;a=32767;b=a+1;printf(%dn%d,a,b);3276732768运行结果运行结果改为改为214748364721474836472147483648运行结果运行结果40#include void main() long int c,d=9L; unsig

19、ned int e=-3 , f; f =5; c=-6; printf(%ldn%ldn%un%u,c,d,e,f);-6942949672935运行结果运行结果41表示方法表示方法十进制:十进制: 123, -456, 0八进制:八进制: 0123, -0456,十六进制:十六进制: 0 x123, -0 x456以数字以数字0开头开头以以0 x开头开头5 5、整型常量、整型常量42nmain()nn printf(%dn,012);n printf(%dn,12);n printf(%dn, -41);n printf(%dn%d,-0 x41,0 x12);n 43Int (数据范围与

20、(数据范围与int型一样)型一样)Long int (在数值后面加(在数值后面加“L(l)”, 数据范围与数据范围与long int型一样)型一样)Unsigned int 如如123l,315L44说明说明1:在取值范围内,长整型和基本整型取值等效。在取值范围内,长整型和基本整型取值等效。#include stdio.hmain()printf(123=%dn123L=%ldn,123,123L,-1234u); 45( (二二) )实数类型实数类型 实型也称为浮点型(实型也称为浮点型(float)。)。 461、实型常量的表示方法 在语言中,在语言中,实数只采用十进制实数只采用十进制。 它

21、有二种形式:它有二种形式:十进制小数形式十进制小数形式,指数形式指数形式。47 十进制小数形式:十进制小数形式: 由数码由数码0 09 9和小数点组成和小数点组成( (必须有小数点必须有小数点) )。 例如:例如: 0.00.0、25.025.0、5.7895.789、0.130.13、5.05.0、300.300.、 -267.8230-267.823048指数形式:指数形式:由十进制数,加阶码标志由十进制数,加阶码标志“e e”或或“E E”以及阶码以及阶码(只能为整数,可以带符号)组成。(只能为整数,可以带符号)组成。 a E na E n (a a为十进制数,为十进制数,n n为十进制

22、整数)为十进制整数)表示的值为表示的值为 a*10n 。49例如:例如:合法的实数形式:合法的实数形式:2.1E5 (等于等于2.1*105)3.7E-2 (等于等于3.7*10-2)0.5E7 (等于等于0.5*107)-2.8E-2 (等于等于-2.8*10-2)50不合法的实数形式:不合法的实数形式:n345 (无小数点无小数点)nE7 (阶码标志阶码标志E之前无数字之前无数字)n-5 (无阶码标志无阶码标志)n53.-E3 (负号位置不对负号位置不对)n2.7E (无阶码无阶码)51n思考: 2654.567 0.5 用指数形式如何表示呢?52【说明说明】 允许浮点数使用后缀。后缀为允

23、许浮点数使用后缀。后缀为“f”或或“F”即表示该数为浮点数。如即表示该数为浮点数。如356f和和356.是等是等价的。价的。main() printf(%fn ,356.); printf(%fn ,356f);example:532、浮点型数据的存储方式实型数据实型数据一般占一般占4个字节个字节(32位)内存空间,位)内存空间,是按是按指数形式指数形式存储的。存储的。举例:举例:3.14159在内存中的存放形式为:在内存中的存放形式为: .314159 1数符号数符号 小数部分小数部分 指数指数54 类型类型 比特数比特数 有效数字有效数字 数值范围数值范围 float 32 67 10-3

24、71038 double 64 1516 10-30710308long double 128 1819 10-49311049323、浮点型变量的分类55 说明:说明: 1. 实型变量定义的格式和书写规则与整型相同。实型变量定义的格式和书写规则与整型相同。 float x,y; (x,y为单精度实型量为单精度实型量) double a,b,c; (a,b,c为双精度实型量为双精度实型量)564、实型数据的舍入误差、实型数据的舍入误差n由于实型变量是由有限的存储单元组成的,由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。因此能提供的有效数字总是有限的。57void mai

25、n()void main() float a; float a; double b; double b; a=33333.33333; a=33333.33333; b=33333.33333333333333; b=33333.33333333333333; printf( printf(“a=%fnb=%fn,a,b);a=%fnb=%fn,a,b); 无效数位无效数位58从本例可以看出:从本例可以看出: 由于由于a a 是单精度浮点型,有效位数只有七位。是单精度浮点型,有效位数只有七位。故小数二位后之后均为无效数字。故小数二位后之后均为无效数字。 b b 是双精度型,有效位为十六位。但是

26、双精度型,有效位为十六位。但Turbo C Turbo C 规定小数后最多保留规定小数后最多保留六位六位,其余部分四舍五入。,其余部分四舍五入。59void main()void main() float a,b; float a,b; a=123456.789e5; a=123456.789e5; b=a+20; b=a+20; printf( printf(“a=%fnb=%fn,a,b);a=%fnb=%fn,a,b); 605、浮点型常量的类型 实型常量不分单、双精度,都按双精度实型常量不分单、双精度,都按双精度double型处理。型处理。61nvoid main()nn float

27、a,c;n double b;n a=2.45678*4523.65;/双乘双双乘双=双,取前双,取前7位位n b=2.45678*4523.65;/双乘双双乘双=双双n c=2.45678f*4523.65f;/单乘单单乘单=单单n n printf(a=%fnb=%fnc=%f,a,b,c);n 6263(三)(三) 字符类型字符类型 1 1、字符常量字符常量 是用单引号括起来的一个字符。是用单引号括起来的一个字符。 如:如:aa、bb、=、+、? 64字符常量的特点字符常量的特点:字符常量只能用字符常量只能用单引号单引号括起来,不能用双引号括起来,不能用双引号或其它括号。或其它括号。字符

28、常量只能是字符常量只能是单个字符单个字符,不能是字符串。,不能是字符串。字符可以是字符集中的任意字符。字符可以是字符集中的任意字符。 问:问: 5 5和和5 5 是相同的吗?是相同的吗?65n#include stdio.hnvoid main()nn int a=3,b;n b=a+5;n printf(b=%d,b); n56运行结果运行结果66转义字符转义字符 字符形式字符形式 含义含义 ( (P48P48) ) n n 换行换行, ,从当前位置移到下一行开头从当前位置移到下一行开头 t t 水平制表水平制表( (跳到下一个跳到下一个tabtab位置位置) ) b b 退格退格, ,将当

29、前位置移到前一列将当前位置移到前一列 r r 回车回车, ,将当前位置移到本行开头将当前位置移到本行开头 单撇号字符单撇号字符 反斜杠字符反斜杠字符 双撇号字符双撇号字符 ddd 13ddd 13位位8 8进制数所代表的字符进制数所代表的字符 xhh 12xhh 12位位1616进制数所代表的字符进制数所代表的字符 转义字符是一种特殊的字符常量。转义字符以反斜线转义字符是一种特殊的字符常量。转义字符以反斜线“ ”开头,后跟一个开头,后跟一个 或几个字符。用来表示那些用一般字符不便于表示的控制代码。或几个字符。用来表示那些用一般字符不便于表示的控制代码。 将将后面的字符转换后面的字符转换为另外的

30、意义为另外的意义.即是即是一种控制符号一种控制符号.67n#include nvoid main()nn printf(a=3tb=5n);n printf(hellobpKn);n printf(helloravn);n printf(c=6f);n n printf(n);n printf(n);n printf();n printf(x4Fx4Bx21n); /* 等价于等价于printf(OK!n); */ 68n例题3。569n练习3。670 字符变量字符变量用来存储字符常量,即单个字符。用来存储字符常量,即单个字符。 字符变量的类型说明符是字符变量的类型说明符是char。 如:如:

31、char a,b;2、 字符变量字符变量71存储方式存储方式以以ASCII码存储码存储,占一个字节。占一个字节。注意:注意:字符型数据与整型数据在存储方式字符型数据与整型数据在存储方式上的相似性使得两者之间可以通用。但字上的相似性使得两者之间可以通用。但字符型数据的表示范围是:符型数据的表示范围是:0255。举例举例字符变量字符变量c1中存放字符中存放字符a,其,其ASCII码为码为97,在内存中以二进制形式存放,其格式如下:在内存中以二进制形式存放,其格式如下:0 1 1 0 0 0 0 1c1 72例例 字符变量的字符变量的字符形式输出字符形式输出和和整数形式输出整数形式输出。 void

32、main() char ch1,ch2; ch1=a; ch2=b; printf(ch1=%c,ch2=%cn,ch1,ch2); printf(ch1=%d,ch2=%dn,ch1,ch2); 一个字符型数据,既可以字符形式输出,也可以整数形式输出一个字符型数据,既可以字符形式输出,也可以整数形式输出73 从结果看,从结果看,a,b值的输出形式取决于值的输出形式取决于printf函函数格式串中的格式符,数格式串中的格式符,n当格式符为当格式符为“c”时,对应输出的变量值为字符,时,对应输出的变量值为字符,n当格式符为当格式符为d时,对应输出的变量值为整数。时,对应输出的变量值为整数。 74

33、n练习3。875允许对字符数据进行算术运算,此时就是对它们的允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算,运算后根据输出类型对应输出结果。码值进行算术运算,运算后根据输出类型对应输出结果。例例字符数据的算术运算(参考教材字符数据的算术运算(参考教材P364的的ASCII码表)。码表)。 main() char a,b; a=a; b=b; a=a-32; b=b-32; printf(%c,%cn%d,%dn,a,b,a,b); 程序运行结果:程序运行结果:76n练习3.777n字符串常量字符串常量是由一对是由一对双引号双引号括起的字符序列。括起的字符序列。 如:如:

34、 “CHINA” , “C program” , “$12.5”3、字符串常量、字符串常量78n字符串常量和字符常量的字符串常量和字符常量的区别区别:(1)字符常量由)字符常量由单引号单引号括起来,括起来, 字符串常量由字符串常量由双引号双引号括起来。括起来。 a china(2)字符常量只能是)字符常量只能是单个单个字符,字符, 字符串常量则可以含字符串常量则可以含一个或多个一个或多个字符。字符。79(3)可以把一个字符常量赋予一个字符变量,)可以把一个字符常量赋予一个字符变量, 但不能把一个字符串常量赋予一个字符变量。但不能把一个字符串常量赋予一个字符变量。void main()nn ch

35、ar a;n a=china;n printf(%c,a); n错误错误80(4)字符常量占)字符常量占一个字节一个字节的内存空间。的内存空间。 字符串常量占的内存字节数等于字符串常量占的内存字节数等于字符串中字符串中字节数加字节数加1。例如:例如:字符串字符串 C program 在内存中所占的字节为:在内存中所占的字节为:Cprogram0字符串结字符串结束的标志束的标志81思考?思考?1、 字符串常量字符串常量How do you do和和Good morning的的长度分别是多少?长度分别是多少?2、 字符串字符串C:msdos tc/c+和和I say: Goodbye! 在在C语言

36、中的字符串常量形式如何表示?语言中的字符串常量形式如何表示?3、 字符串字符串CHINA在内存中的实际存储形式是怎样在内存中的实际存储形式是怎样的?占用多少个字节的内存空间?的?占用多少个字节的内存空间?14和和13C:msdostc/c+和和I say:Goodbye!CHINA0占用字节占用字节而非字节而非字节内存空间内存空间82第七讲83(四)(四) 不同类型数据间的转换不同类型数据间的转换(一)(一) 隐式转换(自动转换)隐式转换(自动转换)(二)(二) 显式转换(强制转换)显式转换(强制转换)84(一)隐式转换(自动转换)(一)隐式转换(自动转换)85转换规则转换规则doublefl

37、oatlongunsignedintchar,short高高低低 1、纵向向上的箭头表示不同类型的、纵向向上的箭头表示不同类型的 转换方向(由低类型转化为高类转换方向(由低类型转化为高类 型),不表示转换所经的步骤。型),不表示转换所经的步骤。 2、横向向左的箭头表示必须的转换。、横向向左的箭头表示必须的转换。 说明说明:必定的转换必定的转换运算对象类型运算对象类型不同时转换不同时转换86int i;float f;double d;long e; i=2;f=2.5;d=3.9;e=3; 10+a+i*f-d/e1075.01.3112. 0110. 7intdoubledoubledoub

38、ledouble 思考:思考:根据已知变量定义及赋值语句,根据已知变量定义及赋值语句,计算以下表达式的值,并说明每一步所得计算以下表达式的值,并说明每一步所得结果的数据类型。结果的数据类型。87说明:说明:n在赋值运算中,赋值号两边量的数据类型在赋值运算中,赋值号两边量的数据类型不同时,赋值号不同时,赋值号右边量的类型右边量的类型将将转换为左转换为左边量边量的类型。的类型。n如果右边量的数据类型长度比左边长时,如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢将丢失一部分数据,这样会降低精度,丢失的部分按失的部分按四舍五入四舍五入向前舍入。向前舍入。88Examplema

39、in() float PI=3.14159; int s,r=5; s=r*r*PI; printf(s=%dn,s);本例程序中,本例程序中,PI为实型;为实型;s,r为整型。为整型。在执行在执行s=r*r*PI语句时,语句时,r和和PI都转换都转换成成double型计算,结果也为型计算,结果也为double型。型。但由于但由于s为整型,故赋值结果仍为整型,为整型,故赋值结果仍为整型,舍去了小数部分。舍去了小数部分。89转换发生条件转换发生条件v运算转换运算转换-不同类型数据混合运算时不同类型数据混合运算时float PI=3.14159,s; int r=5; s=r*r*PI; prin

40、tf(s=%fn,s);v赋值转换赋值转换-把一个值赋给与其类型不同的把一个值赋给与其类型不同的 变量时变量时 float a=3; printf(%f,a);90n输出转换输出转换-输出时转换成指定的输出格式输出时转换成指定的输出格式 char a=4; printf(%d,a);n函数调用转换函数调用转换-实参与形参类型不一致时实参与形参类型不一致时 转换转换91(二)显式转换(强制转换)(二)显式转换(强制转换)一般形式一般形式 (要转换成的数据类型要转换成的数据类型)(被转换的表达式被转换的表达式)注:当被转换的表达式是一个变量时,注:当被转换的表达式是一个变量时,外面的一对圆括号可以

41、缺省。外面的一对圆括号可以缺省。 float x,y,a,b; x=2.3 ; y=4.5; a=(int)(x+y); b=(int)x+y ; printf(a=%f,b=%f,a,b);92main() float f=5.75; printf(int)f=%d,f=%fn,(int)f,f);f虽强制转为虽强制转为int型,但只在运算中型,但只在运算中起作用,是临时的,而起作用,是临时的,而f本身的类本身的类型并不改变。因此,型并不改变。因此,(int)f的值为的值为 5(删去了小数删去了小数)而而f的值仍为的值仍为5.75。 无论是强制转换或是自动转换,都只是为了本次运算的需无论是强

42、制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的要而对变量的数据长度进行的临时性转换临时性转换,而,而不改变不改变数据数据说明时对说明时对该变量定义的类型该变量定义的类型。 93#include void main() float x; int i; x=3.6; i=(int)x; printf(x=%f,i=%d,x,i);思考:思考:以下程序的输出结果是什么?以下程序的输出结果是什么?94已知三角形的边长已知三角形的边长a a、b b、c c,求三角形周,求三角形周长的一半。长的一半。void main() float a,b,c,s; a=3;b=4;c=5; s=

43、1/2 * (a+b+c); printf(s=%f,s);改为:改为:1.0/2 1/2.0 1.0/2.0或或 (float)1/2 1/(float)2) (float)1/(float)295nmain()nnfloat b;nb=1/2; /*int/int*/nprintf(b=%f,b);n96n练习3。997(一)(一)C C运算符简介运算符简介(二)算术运算符和算术表达式(二)算术运算符和算术表达式(三)赋值运算符和赋值表达式(三)赋值运算符和赋值表达式(四)逗号运算符和逗号表达式(四)逗号运算符和逗号表达式五、运算符与表达式五、运算符与表达式981、算术运算符算术运算符 +

44、 - * / %2、关系运算符、关系运算符 = = != 3、逻辑运算符、逻辑运算符 ! & |4、位运算符、位运算符 | &5、赋值运算符赋值运算符 =及其扩展赋值运算符及其扩展赋值运算符6、条件运算符、条件运算符 ? :7、逗号运算符、逗号运算符 ,8、指针运算符、指针运算符 * &9、求字节数运算符、求字节数运算符 sizeof10、强制类型转换运算符、强制类型转换运算符 (类型)类型)11、分量运算符、分量运算符 . 12、下标运算符、下标运算符 13、其他、其他 如函数调用运算符()如函数调用运算符()分类分类 运算符运算符 99基本算术运算符基本算术运算符+

45、 - * / %模运算符或模运算符或求余运算符求余运算符 两个整数相除的结果为整数,舍去小数部分。两个整数相除的结果为整数,舍去小数部分。当商为负数时,多采用当商为负数时,多采用“向零取整向零取整”的方法。的方法。求余运算的两侧均应为整数求余运算的两侧均应为整数.printf(%dn%dn%d,5/3,-5/3,5%3);100算术表达式算术表达式用算术运算符和括号将用算术运算符和括号将运算对象运算对象(也称操作数)(也称操作数)连接起来的、符合连接起来的、符合C语法规则的式子。语法规则的式子。优先级和结合性优先级和结合性先乘除、后加减,有括号先算括号。先乘除、后加减,有括号先算括号。自左至右

46、(左结合),右结合(自左至右(左结合),右结合(=、+、-)常量、变量、函数等常量、变量、函数等说明说明例:例: a*b/c-1.5+a 如果一个运算符两侧的数据类型不同,先自动进行如果一个运算符两侧的数据类型不同,先自动进行类型转换类型转换,使二者具有同一类型,然后进行运算。,使二者具有同一类型,然后进行运算。101自增、自减运算符自增、自减运算符作用:自增运算符()使单个变量的值增作用:自增运算符()使单个变量的值增1; 自减运算符()使单个变量的值减自减运算符()使单个变量的值减1。i=i+1i=i-1格式:格式: 前置:前置:+i , -i (在使用(在使用i之前,使之前,使i的值加(

47、减)的值加(减)1) 后置:后置:i+ , i- (在使用(在使用i之后,使之后,使i的值加(减)的值加(减)1)102nint i=2,j;n/j=+i;nj=i+;nprintf(%d %d,j,i);103nint i=2;n/printf(%d ,+i);nprintf(%d ,i+);104i=3;A) j=+i;B) j=i+;C) j=-i+;? j,i A) j=4 i=4B) j=3 i=4C) j=-3 i=4+和和-结合方向结合方向是是“自右至左自右至左”右结合右结合105main() int i=5,j=5,p,q; p=(i+)+(i+)+(i+); q=(+j)+(

48、+j)+(+j); printf(%d,%d,%d,%d,p,q,i,j);程序分析程序分析,对,对P=(i+)+(i+)+(i+)应理解为三个应理解为三个i相加,故相加,故P值值为为15。然后。然后i再自增再自增1三次相当于加三次相当于加3故故i的最后值为的最后值为8。而对于。而对于q 的值的值则不然,则不然,q=(+j)+(+j)+(+j)应理解为应理解为j先自增先自增1,再参与运算,再参与运算,由于由于j自增自增1三次后值为三次后值为8,三个,三个8相加的和为相加的和为24,j的最后值仍为的最后值仍为8。106(1)自增、自减运算是语言特有的,常用于循环语句中,自增、自减运算是语言特有的,常用于循环语句中,使循环控使循环控 制变量加(或减),以及指针变量中,使制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。指针指向下(或上)一个地址。(2) 自增、自减运算符,不能用于常量和表达式。自增、自减运算符,不能用于常量和表达式。 例如,例如,5+、-(a+b)等都是非法的。等都是非法的。(3) +和和- -的结合方向为自右至左。的结合方向为自右至左。说明说明107n(4) (4) 如果对一个变量的自增自减运算,单如果对一个变量的自增自减运算,单独构成语句,而不是作为表独构成语句,而不是作为表 达式的一部分时,达式的一部分时,前置和后置运算效果一

温馨提示

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

评论

0/150

提交评论