《第2章 C语言的基本数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《第2章 C语言的基本数据类型与表达式.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第2章章 C语言的基本数语言的基本数据类型与表达式据类型与表达式C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页教学目的和基本要求:教学目的和基本要求:要求学生清楚数据类型与变量、常量要求学生清楚数据类型与变量、常量的关系,掌握各种常量的性质和定义,的关系,掌握各种常量的性质和定义,掌握表达式中各种运算符的功能和特掌握表达式中各种运算符的功能和特点,了解数据类型的相互转换规则。点,了解数据类型的相互转换规则。教学重点:教学重点:数据类型、常量定义,运算符与表数据类型、常量定义,运算符与表达式。达式。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页
2、上一页下一页下一页 C语言给出几种固定的形式,这些形式就是最基本语言给出几种固定的形式,这些形式就是最基本的的数据类型数据类型。2.1 C2.1 C语言的基本数据类型语言的基本数据类型为什么要设置数据类型?为什么要设置数据类型?在计算机中使用在计算机中使用一定长度的存储单元一定长度的存储单元(通常是(通常是字字节的倍数节的倍数)来存储数据。)来存储数据。不同类型的数据的不同类型的数据的编码方式编码方式、存储方式存储方式和和所占的存所占的存储储 长度长度也不同。也不同。其中,用于存储数据的存储单元的长度其中,用于存储数据的存储单元的长度(字节数)字节数)决定了数据取值范围的大小。决定了数据取值范
3、围的大小。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 字符型(字符型(charchar)整型(整型(short,int,long,unsignedshort,int,long,unsigned)单精度型(单精度型(floatfloat)实型实型 双精度型(双精度型(doubledouble)枚举类型(枚举类型(enumenum)数组类型(数组类型()构造类型构造类型 结构体类型(结构体类型(structstruct)共用体类型(共用体类型(unionunion)指针类型(指针类型(*)空类型(空类型(voidvoid)基本类型基本类型数据类型数据类型一、数
4、据类型概述本章中将对基本类型中的前三类进行介绍和学习。本章中将对基本类型中的前三类进行介绍和学习。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 变量:变量:指指以以标识标识符符为为名字,其名字,其值值可以改可以改变变的量。的量。在学习各种数据类型之前,我们先简单了解一下在学习各种数据类型之前,我们先简单了解一下常量常量和和变量变量的概念。后面的章节中将会详细介绍。的概念。后面的章节中将会详细介绍。常量常量:指在程序运行中指在程序运行中,其数值不能被改变的量。其数值不能被改变的量。变量变量 代表计算机内存中的某一存储空代表计算机内存中的某一存储空间,变量的类型
5、决定了该存储空间的长度间,变量的类型决定了该存储空间的长度和其和其中存放中存放数据的编码方式及存储格式。数据的编码方式及存储格式。变量的类型也决定了该存储空间中存变量的类型也决定了该存储空间中存放数据的数据形式和取值范围。放数据的数据形式和取值范围。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 *八进制的数码范围为八进制的数码范围为07;018 *十六进制的十六进制的数码除了数字数码除了数字0 09 9外外,还使用英文字母还使用英文字母a f(或或A F)表示表示1015。如:如:0 x1e 二、整型(只能表示纯整数)1 1、整型常量:整型常量:(1)(1)
6、十进制形式十进制形式:与数学上的整数表示相同;与数学上的整数表示相同;例如例如:12,-100,0:12,-100,0(2)(2)八进制形式八进制形式:在数码前加数字在数码前加数字0 0;例如例如:012=1*8:012=1*81 1+2*8+2*80 0=10(=10(十进制)十进制)(3)(3)十六进制形式十六进制形式:在数码前加在数码前加0X0X(数字数字0和字母和字母X)。)。例如例如:0 x12=1*16:0 x12=1*161 1+2*16+2*160 0=18(=18(十进制)十进制)C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 2、整型变量的
7、分类:整型变量的分类:根据数据所占的存储单元长度的不同根据数据所占的存储单元长度的不同(字节数)(字节数),可将整型数据分为可将整型数据分为:基本基本整型整型 int(类型标示符为(类型标示符为int)短整型短整型short int(或(或short)长整型长整型long int(或(或long)在在Turbo C中,中,int占占2个字节,个字节,short占占2个字节,个字节,long占占4个字节个字节。那么一个那么一个int型变量的值的范围就是型变量的值的范围就是2152151,即:即:3276832767。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页
8、在有些实际应用中,变量的值常常都是正的(如学号、年在有些实际应用中,变量的值常常都是正的(如学号、年龄等),为了充分利用变量的表数范围,可考虑将全部的龄等),为了充分利用变量的表数范围,可考虑将全部的二进制位都用来存放数据本身,而不存放符号位,如此,二进制位都用来存放数据本身,而不存放符号位,如此,int型变量的值的范围就可达到型变量的值的范围就可达到02161(即(即065535)。)。由此,可将由此,可将int,short,long三类整型数据细分为无符号型三类整型数据细分为无符号型unsigned和有符号型和有符号型signed(signed 通常省略);通常省略);故可组合出六种整型数
9、据:故可组合出六种整型数据:short unsigned short short unsigned short int unsigned int int unsigned int long unsigned long long unsigned longC语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 如如Turbo C中,有中,有 short(2字节字节)int(2字节字节)long(4字节字节)关键字关键字 所占位数所占位数 取值范围取值范围 short 16 16 -32768-327683276732767 unsigned short 16 16 0
10、06553565535 int 16 16 -32768-327683276732767 unsigned 16 16 0 06553565535 long 32 -2147483648 32 -214748364821474836472147483647 unsigned long 32 32 0 0429496729542949672953、整型变量的值域:整型变量的值域:C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页4.4.整型数据在内存中的存放形式整型数据在内存中的存放形式以以二进制补码二进制补码的形式存放。的形式存放。如整数如整数1212在内存中的实
11、际存放情况下图所示:在内存中的实际存放情况下图所示:整数整数1212在内存中的存放示意图在内存中的存放示意图 0000000000001010 正数的补码:正数的补码:与原码相同与原码相同负数的补码负数的补码:负数负数取绝对值取绝对值二进制二进制按位取反按位取反 再加再加1 1 C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页3 3的原码的原码 按位取反按位取反 加加1 1 得得-3-3的补码的补码 由此可知,在整数的由此可知,在整数的1616位中,最左边的一位为符号位,为位中,最左边的一位为符号位,为0 0,表示数值为正;为表示数值为正;为1 1,表示数值为负
12、,表示数值为负000000000000010111111111111110101111111111111110例如:求例如:求-3在内存中的存放形式在内存中的存放形式C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页注意:注意:若在一个整数后面加上字母若在一个整数后面加上字母l或或L,则表示其是,则表示其是长整型(长整型(long int型),它会在内存中占型),它会在内存中占4个字节。个字节。如:如:12和和12L,尽管它们的值相同,但它们在内存中,尽管它们的值相同,但它们在内存中占用的字节数不同,占用的字节数不同,12在内存中占在内存中占2个字节,而个字节,而
13、12L则则占占4个字节。个字节。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页5、整型数据的溢出:整型数据的溢出:不同的整型数据有不同的取值范围,在程序运行过不同的整型数据有不同的取值范围,在程序运行过程中,如果出现数值超出整型数据的允许值范围,就会程中,如果出现数值超出整型数据的允许值范围,就会出现出现“溢出溢出”。例如:例如:一个一个int型的变量的最大值为型的变量的最大值为(215-1)=32767,如如果再加果再加1,则产生溢出则产生溢出,其结果为其结果为:-215=-32768100000000000000032767-327680111111111
14、111111C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页2、实型变量的分类及值域实型变量的分类及值域:关键字关键字 字节数字节数 取值范围取值范围 精度精度(位位)float 4 3.4 4 3.41010-38 3.43.4101038 7 7 double 8 1.7 8 1.71010-308 1.71.71010308 1515注意注意三、实型1 1、常量:常量:(1)(1)十进制小数形式:十进制小数形式:由数字和小数点组成;由数字和小数点组成;例如例如:3.4,4.,.3:3.4,4.,.3。(2)(2)指数形式:指数形式:“十进制数十进制数”+“
15、e(”+“e(或或E)”+“E)”+“十进制十进制整数整数”。例如例如:12.5e-6:12.5e-6 表示表示12.512.51010-6 45E+6 45E+6 或或 45E6 45E6 均表示均表示 4510 45106 6 小数点不能单独出现;小数点不能单独出现;0.0.0 .0 .e e或或E E的两边必须有数,且其后面必须为整数;的两边必须有数,且其后面必须为整数;例例如:如:e 6E0.2 6E0.2 e5e5 6E6E C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页四、字符类型1 1、常量:常量:(1)(1)用单引号括起来的一个字符;如:用单引
16、号括起来的一个字符;如:A、1、?等等。(2)(2)用单引号括起来的由反斜杠用单引号括起来的由反斜杠()引导引导的的一个字符一个字符或者或者一个数字序列一个数字序列,叫作,叫作“转义字符转义字符”或或“特殊字符特殊字符”。其意思是当程序中碰到这种字符组合时,反斜杠后面的其意思是当程序中碰到这种字符组合时,反斜杠后面的字符转变成了另外的意义。字符转变成了另外的意义。常用的转义字符表如下常用的转义字符表如下C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 字符形式字符形式 功能功能 n n 换行换行 t t 横向跳格横向跳格 b b 退格退格 r r 回车回车 反斜
17、杠字符反斜杠字符 单引号字符单引号字符 ddd 8 ddd 8进制数表示的进制数表示的ASCIIASCII码对应的字符码对应的字符 xhh 16 xhh 16进制数表示的进制数表示的ASCIIASCII码对应的字符码对应的字符常用的转义字符表常用的转义字符表C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例如:字符例如:字符A A的的ASCIIASCII码为:码为:65D 65D(十进制)(十进制)=41H=41H(十六进制)(十六进制)=101Q=101Q(八进制)(八进制)字符字符A A可以表示为可以表示为AA、x41x41、101101。2、字符型变量的分
18、类:字符型变量的分类:char char 和和 unsigned charunsigned char;3 3、值域值域 每每个个字字符符型型数数据据在在内内存存中中占占一一个个字字节节;包包括括ASCIIASCII字字符符表中的所有字符(可显示字符和非显示字符)。表中的所有字符(可显示字符和非显示字符)。字字符符型型数数据据可可以以参参与与数数学学运运算算,参参与与运运算算的的是是其其ASCII码值。码值。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页4 4、字符串常量:字符串常量:是用一对是用一对双引号双引号“”“”括起来的字符序列。括起来的字符序列。注意:
19、每个字符串的后面都有一个注意:每个字符串的后面都有一个00结束符。结束符。如:如:“SHANGHAI”“SHANGHAI”,“AbcdeFGHijk”“AbcdeFGHijk”,“How are you”“How are you”。注意注意 a a与与“a”“a”的区别。的区别。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页一、常量与符号常量 常量是指在程序运行中常量是指在程序运行中,其数值不能被改变的量。其数值不能被改变的量。常量又可分为直接常量和符号常量。常量又可分为直接常量和符号常量。2.2 2.2 常量与变量常量与变量C语言程序设计C语言程序设计C语言
20、程序设计C语言程序设计上一页上一页下一页下一页 120、-100、0;0120、072;0 xFFFF、0 x1e、0X28AF,0XED4;120L,200L;长整型常量长整型常量 3.14、-3.1、5.12E-6;a、#、n、101;099、12f、0 xg、48EA;019.5、1e-08;实型常量只能用十进制形式表示实型常量只能用十进制形式表示 2.1E10.2、E-6、6.4E+4.8、E9;changsha、+?ab;、p、ab;1、直接常量:直接常量:是在程序中直接引用的数据。是在程序中直接引用的数据。请请判判断断这这些些常常量量正正确确与与否否:C语言程序设计C语言程序设计C
21、语言程序设计C语言程序设计上一页上一页下一页下一页 定义形式定义形式:#define 标识符标识符 常量数据常量数据 例如例如:#define PI 3.14159 在程序预处理时,凡是出现标识符在程序预处理时,凡是出现标识符PI的地方都将用的地方都将用数据数据3.14159来替换。来替换。如如:2*2.3*PI 就就等价于等价于 2*2.3*3.14159。变量是指变量是指以以标识标识符符为为名字名字,其,其值值可以改可以改变变的量。的量。变量代表计算机内存中的某一存储空间,该存储空间变量代表计算机内存中的某一存储空间,该存储空间 中存放中存放的数据就是变量的值。的数据就是变量的值。在同一程
22、序块中,在同一程序块中,变量变量不能被重复定义。不能被重复定义。使用变量时必须使用变量时必须“先定义,后使用先定义,后使用”。2、符号常量符号常量 是是用标用标识符来表示一个数据;识符来表示一个数据;在程序中不能给它赋值。在程序中不能给它赋值。二、变量C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页1、定义形式:定义形式:类型标识符类型标识符 变量名变量名1,变量名变量名2,变量名变量名3.;自己设定,满足自己设定,满足标识符的规定标识符的规定如如int,float,char;不可省;不可省2、变量初始化变量初始化 在定义变量的同时给变量一个初始值。在定义变量的
23、同时给变量一个初始值。注意注意int a=5,b=3;int a=b=c=3;int a,b,c;a=b=c=3;例如例如:int a,b,c;float x,y;char c1,c2;int sum;定定义义变变量量就就是是由由系系统统自自动动在在内内存存中中划划出出一一块块相相应应类类型型的的存存储储空空间间给该变量,用于存放该变量的值。给该变量,用于存放该变量的值。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 main()int x,y,z,w;/*定义定义x,y,z,w为整型变量为整型变量*/unsigned int k;/*定义定义k为无符号整型变
24、量为无符号整型变量*/x=10;y=-20;k=30;z=x+k;w=y+k;printf(“x+k=%d,y+k=%dn”,z,w);例例2-1:程序运行结果为:程序运行结果为:x+k=40 x+k=40,y+k=10y+k=10C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页2.3 2.3 运算符与表达式运算符与表达式运算符运算符:就是表示:就是表示某种运算功能的符某种运算功能的符号。按操作功能运号。按操作功能运算符大致可分为算符大致可分为1212种。种。算术运算符算术运算符+-*/%关系运算符关系运算符 =!=逻辑运算符逻辑运算符!&赋值运算符赋值运算符=
25、条件运算符条件运算符?:逗号运算符逗号运算符,指针运算符指针运算符*和和&求字节数运算符求字节数运算符 sizeof强制类型转换运算符强制类型转换运算符()分量运算符分量运算符 下标运算符下标运算符 位运算符位运算符|&C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 在数学里当多个运算符一起组成一个表达式时,我们规定在数学里当多个运算符一起组成一个表达式时,我们规定了了优先级优先级(先乘除后加减)和(先乘除后加减)和结合规则结合规则(从左至右)。(从左至右)。同样,在同样,在C语言中,我们也规定了每个运算符的结合规则语言中,我们也规定了每个运算符的结合规则及运
26、算符之间的优先级及运算符之间的优先级(见教材的附录见教材的附录)。)。表达式:是由操作数和运算符组成的序列。表达式:是由操作数和运算符组成的序列。如:如:1+2*3-4、35-7、a=b%2 等都是等都是C语言中的表达式。语言中的表达式。下面分类介绍各种运算符:下面分类介绍各种运算符:C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页%(%(取余取余):(注意:取余运算的操作数只能是整数,注意:取余运算的操作数只能是整数,且结果的符号与前一操作数的符号相同且结果的符号与前一操作数的符号相同)一、算术运算符和算术表达式一、算术运算符和算术表达式1 1、运算符运算符
27、+(+(加加):3+43+4、+3+3 -(-(减减):3-53-5、-5-5 *(*(乘乘):3*53*5 /(/(除除):5/25/2、5.0/2 5.0/2(注意,此二种形式结果不同)(注意,此二种形式结果不同)5%35%3的值为的值为2 2;-5%3-5%3的值为的值为-2-2;5%(-3)5%(-3)的值为的值为2 2;-5%(-3)-5%(-3)的值为的值为-2-2;12.3%3 12.3%3 若若a%b a%b 的结果为的结果为0 0,则表明,则表明a a能被能被b b整除整除C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 2 2、算术表达式算术
28、表达式 用用算术运算符算术运算符和和括符括符将操作数连接起来的式子。将操作数连接起来的式子。优先级:()优先级:()*、/、%+%+、-结合性:从左至右;结合性:从左至右;表达式的值:表达式的值:数值型数值型(int、long、unsigned、float、double);例如:例如:已知:已知:float a=2.0;int b=6,c=3;求解:求解:a*b/c-1.5+a+fabs(-5)=?C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 float a=2.0;int b=6,c=3;a*b/c-1.5+a+fabs(-5)12.012.0/3/354
29、.0 4.0-1.5-1.52.5 2.5 +97(int)+97(int)99.5 99.5 +5+5104.5104.5(double)(double)思考思考?int a=1,b=2;表达式表达式a/b+3的结果是多少?的结果是多少?int a=10000,b=30000;表达式表达式a+b的结果是多少?的结果是多少?如何修改?如何修改?double floatunsigned long long unsigned int int char,shortC语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页等价于等价于j=i;i+;所以所以i i的值为的值为4 4
30、,j j的值为的值为3 3等价于等价于i+;j=i;所以所以i i的值为的值为4 4,j j的值为的值为4 4(1)i=3;j=i+;(2)i=3;j=+i;3 3、自增与自减运算符自增与自减运算符(+、-)+i,-i+i,-i:使用之前使:使用之前使i i的值增的值增1 1(或减(或减1 1););i+,i-i+,i-:使用之后使:使用之后使i i的值增的值增1 1(或减(或减1 1););分析下面几种情况中分析下面几种情况中i与与j的值:的值:当当+、-不与其他运算符混合使用时,不与其他运算符混合使用时,+i+i与与i+i+都等价于都等价于 i=i+1 i=i+1;-i-i与与i-i-都等
31、价于都等价于 i=i-1 i=i-1C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 如:如:i=2;j=-i+;求执行完这两句后求执行完这两句后i i与与j j的值分别是多少的值分别是多少特殊的:特殊的:设设i=3i=3,j=4j=4,k=i+jk=i+j,k=i=j=k=i=j=结合性:自右至左。结合性:自右至左。分析:分析:“+”与与”-“和和”+”是同优先级,且都高于是同优先级,且都高于“=”“=”按结合规则,等价于:按结合规则,等价于:j=-(i+);结果:结果:i i的值为的值为3 3,j j的值为的值为-2-2。再看几个例子:再看几个例子:如:设如
32、:设a=3,b=(a+)+(a+)a=3,b=(a+)+(a+)b=a=b=a=65设设a=3,b=(+a)+(a+)b=a=a=3,b=(+a)+(a+)b=a=85设设a=3,b=(a+)+(+a)b=a=a=3,b=(a+)+(+a)b=a=85设设a=3,b=(+a)+(+a)b=a=a=3,b=(+a)+(+a)b=a=105744C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 1 1、6 6种关系运算符:种关系运算符:=!=!=2 2、关系表达式:关系表达式:用关系运算符将表达式连接起来的式子用关系运算符将表达式连接起来的式子 优先级:优先级:(=
33、)(=)(=!=)(=!=)结合性:自左至右;结合性:自左至右;表达式的值:表达式的值:若为真,则结果为若为真,则结果为1 1;若为假,则结果为若为假,则结果为0 0。35 35 值为:值为:32 32 值为:值为:设设x=-2;-3x-1 x=-2;-3x-1 值为:值为:设设x=1;2x4 x=1;2x4 值为:值为:例例如如二、关系运算符和关系表达式二、关系运算符和关系表达式求如下关系表达式的值:求如下关系表达式的值:0001算术运算符优先级高于关系运算符算术运算符优先级高于关系运算符3+(43)*4 3+(43)*4 值为:值为:3+43+43*4 num2的值的值=?(2)(num1
34、num2)!=num3的值的值=?(3)num1num2num3的值的值=?。?。再次强调:再次强调:C语言用整数语言用整数“1”表示表示“逻辑真逻辑真”,用整数,用整数“0”表示表示“逻辑假逻辑假”。所以,关系表达式的值可以参与其它种类的运算,所以,关系表达式的值可以参与其它种类的运算,例如算术运算、逻辑运算等。例如算术运算、逻辑运算等。思考思考:(4)(num1&|结合性:自左至右;结合性:自左至右;表达式的值:表达式的值:若为真,则结果为若为真,则结果为1 1;若为假,则结果为若为假,则结果为0 0。三、逻辑运算符和逻辑表达式三、逻辑运算符和逻辑表达式 1 1、3 3种逻辑运算符:种逻辑
35、运算符:&|!&|!参与逻辑运算的操作数叫逻辑量。参与逻辑运算的操作数叫逻辑量。逻辑量可以是整型、实型、字符型和指针类型,逻辑量可以是整型、实型、字符型和指针类型,其中,其中,0 0,0.00.0,0,NULL0,NULL代表代表假假,其余逻辑量代表,其余逻辑量代表真真。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 运算规则运算规则 1 1)&:全全真真为为真真。当当且且仅仅当当两两个个运运算算量量的的值值都都为为“真真”(”(即都不等于即都不等于0 0)时,运算结果为)时,运算结果为“真真”,否则为,否则为“假假”。2 2)|:全全假假为为假假。当当且且仅
36、仅当当两两个个运运算算量量的的值值都都为为“假假”(即都等于即都等于0 0)时,运算结果为)时,运算结果为“假假”,否则为,否则为“真真”。3 3)!:非非真真即即假假,非非假假即即真真。当当运运算算量量的的值值为为“真真”时时,运运算算结结果果为为“假假”;当当运运算算量量的的值值为为“假假”时时,运运算算结结果果为为“真真”。x&x-5的值呢?的值呢?x|x-5的值呢?的值呢?!x的值呢?的值呢?例如,假定例如,假定x=5,则,则(x=0)&(x10)的值为的值为“真真”;(x5)的值为的值为“假假”,!(x5)的值为的值为“真真”。C语言程序设计C语言程序设计C语言程序设计C语言程序设计
37、上一页上一页下一页下一页 int a=5;float b=3.5;!a ()!(a b)()a&b ()!a&b()!a&!b ()!(a&b)()a b ()!a|b ()!a|!b ()!(a|b)()(a 0)()(a 0)()练习练习 011000110001C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 3、逻辑或逻辑或|优化优化 和和 逻辑与逻辑与&优化:优化:2)对于逻辑或)对于逻辑或|运算,如果第一个表达式的值为运算,如果第一个表达式的值为“真真”,系统不再求解第二个表达式的值了。系统不再求解第二个表达式的值了。例:例:a=1;b=1;(c=-
38、a)|b-|c=3;结果结果:a为为1,b为为1,c为为1,表达式的值为表达式的值为1。例:例:a=0;b=1;(c=a)&(b=3);结果结果:b为为1,c为为0,表达式的值为表达式的值为0。1)对于逻辑与)对于逻辑与&运算,如果第一个表达式的值为运算,如果第一个表达式的值为“假假”,系统就不再求解第二个表达式的值了。,系统就不再求解第二个表达式的值了。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 (1)a=0;b=1;c=a+&(b=3);执行后执行后:a为为 ,b为为 ,c为为 。110(2)a=1;b=1;c=0;d=-a b-(c=b+3);执行后
39、执行后:a为为 ,b为为 ,c为为 ,d为为 。0001练习练习 C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例如表达式运算如下:例如表达式运算如下:混合优先级混合优先级:!高高 算术运算符算术运算符 关系运算符关系运算符&和和|赋值运算符赋值运算符 低低 4-04-01&21&28 48 3&2|8 3&2|8 4-!5C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例如:例如:(1)n (1)n是小于是小于m m的偶数:的偶数:(2)year (2)year是闰年是闰年:(能被(能被4 4整除但不能被整除但不能被10010
40、0整除整除,或能被或能被400400整除)整除)逻辑表达式一般用于控制语句中的条件:逻辑表达式一般用于控制语句中的条件:n m&n%2=0 year%4=0&year%100!=0|year%400=0C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例如例如:(1)x=(y=12)/4(1)x=(y=12)/4 (2)x=y=12/4 (2)x=y=12/4 (3)x=(y=12/4)(3)x=(y=12/4)四、赋值运算符和赋值表达式四、赋值运算符和赋值表达式1 1、赋值运算符赋值运算符 “=“(执行功能:把执行功能:把“=“=”右边的表达式的值,存入右边的表
41、达式的值,存入“=”=”左边的左边的变变量量对应的存储空间,即给此变量赋值对应的存储空间,即给此变量赋值)3=2+1 a=a+2)3=2+1 a=a+2 2 2、赋值表达式:赋值表达式:用赋值运算符将变量和表达式连接起来的式子用赋值运算符将变量和表达式连接起来的式子 形式形式:=求值规则求值规则:将将“=”“=”右边表达式的值赋给左边的变量。右边表达式的值赋给左边的变量。优先级:优先级:!算术算术 关系关系&|赋值赋值 结合性:自右至左;结合性:自右至左;表达式的值:被赋值变量的值。表达式的值:被赋值变量的值。y y值为值为1212,x x值为值为3 3,表达式的值为,表达式的值为3 3y y
42、值为值为3 3,x x值为值为3 3,表达式的值为,表达式的值为3 3y y值为值为3 3,x x值为值为3 3,表达式的值为,表达式的值为3 3C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页练习:练习:设设a=12a=12,计算表达式,计算表达式a+=a-=a*12a+=a-=a*12和和a+=a-=a*=12a+=a-=a*=12的值的值 3 3、复合赋值运算符复合赋值运算符 *=*=、/=/=、%=%=、+=+=、-=-=复合运算符复合运算符是一个运算符是一个运算符,但但功能上功能上,是两个运算符功是两个运算符功能的组合能的组合。例如例如:a+=b :a
43、+=b 相当于相当于 a=a+b a=a+b a*=b a*=b 相当于相当于 a=a*b a=a*b注意:注意:a*=b+c a*=b+c 相当于相当于 a=a*(b+c)a=a*(b+c)而不是而不是 a=a*b+c a=a*b+c 优先级:优先级:与与=是同一优先级。是同一优先级。结合性:自右至左;结合性:自右至左;表达式的值:被赋值变量的值。表达式的值:被赋值变量的值。-2640C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 求值规则:求值规则:先求解表达式先求解表达式1 1的值的值 若为真若为真(非非0),0),求解表达式求解表达式2 2,并把表达式
44、,并把表达式2 2的值的值 作为整个条件表达式的值作为整个条件表达式的值 若为假若为假(0),(0),求解表达式求解表达式3 3,并把表达式,并把表达式3 3的值作的值作 为整个条件表达式的值为整个条件表达式的值 四、其它运算符四、其它运算符 1 1、条件运算符条件运算符?和和:,它们与三个操作数组组成三元运算。它们与三个操作数组组成三元运算。形式为形式为:?:3 优先级:优先级:逻辑逻辑 条件条件 赋值赋值 结合性:自右至左;结合性:自右至左;C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页2 2、逗号运算符:逗号运算符:,形式形式:表达式表达式1 1,表达式
45、,表达式2 2,表达式,表达式n n 求值规则求值规则:从左至右依次计算各表达式的值从左至右依次计算各表达式的值;优先级:优先级:最低;最低;结合性:自左至右;结合性:自左至右;表达式的值:最后一个表达式的值。表达式的值:最后一个表达式的值。又如:又如:y=x10?x/10:x0?x:-x y=x10?x/10:x0?x:-x 当当x x的值为整型的的值为整型的1515时,表达式的结果为:时,表达式的结果为:当当x x的值为整型的的值为整型的5 5时,表达式的结果为:时,表达式的结果为:15 5例如例如:int max,:int max,a=5a=5,b=3;b=3;max=ab?a:b ma
46、x=ab?a:b 求求maxmax的值的值 max的值为的值为5C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例如:例如:a b y a b y 表达式表达式 y=a=4,b=5,a+b;y=a=4,b=5,a+b;y=(a=4,b=5,a+b);y=(a=4,b=5,a+b);y=(a=4,b=5),a+b;y=(a=4,b=5),a+b;y=a=(4,b=5),a+b;y=a=(4,b=5),a+b;4 45 54 49 94 45 59 99 94 45 59 95 55 55 55 51010C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一
47、页上一页下一页下一页 形式有两种:形式有两种:sizeof 变量名变量名 sizeof(类型名类型名)结果为整型数。结果为整型数。int a int a;float x float x;printf(“%d,%d”,sizeof a,sizeof x);printf(“%d,%d”,sizeof a,sizeof x);printf(“%d,%d”,sizeof(int),sizeof(float);printf(“%d,%d”,sizeof(int),sizeof(float);以上两个以上两个printfprintf语句结果均为语句结果均为 。例如例如3 3、求求字节运算符:字节运算符:s
48、izeof 作用:求得变量或某种数据类型所需的字节数。作用:求得变量或某种数据类型所需的字节数。2 2,4 4C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 CC语言允许整型、实型、字符型数据进行混合运算。语言允许整型、实型、字符型数据进行混合运算。有有3 3种转换方式:自动转换、赋值转换和强制转换。种转换方式:自动转换、赋值转换和强制转换。一、类型自动转换一、类型自动转换 2.4 2.4 数据类型转换数据类型转换 double floatunsigned long long unsigned int int char,short特点:由数值存储位数少特点:由
49、数值存储位数少的向多的转换;整型向实的向多的转换;整型向实型转换!型转换!操作数为相同类型的不转操作数为相同类型的不转换,仍取原类型,特别注换,仍取原类型,特别注意此时可能带来的错误!意此时可能带来的错误!C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 int x=2;float y=1.6;char c=A;int x=2;float y=1.6;char c=A;则:则:c +1/x *y c +1/x *y =例如例如char c=68.5;printf(“%c”,c);65(int)+0(int)*1.6(float65(int)+0(int)*1.6
50、(float)65(float)65(float)二、二、赋值转换赋值转换 在赋值时将赋值符右边值的类型转换成与其左边变量在赋值时将赋值符右边值的类型转换成与其左边变量类型一致的类型。类型一致的类型。有下列几种情况:有下列几种情况:(1)(1)实型实型 整型(字符型):去掉小数部分;整型(字符型):去掉小数部分;C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页(2)(2)整型(字符型)整型(字符型)实型:实型:补足有效位;补足有效位;float f=23;23.00000 f(7位)位)double f=A;65.0000000000000 f(15位)位)(3