C语言的基本数据类型及其运算.pptx
2.1 C2.1 C语言的数据类型语言的数据类型注意:C C程序中所出现的所有数据都必须明确指定其数据类型。数据类型基本类型整型实型字符型标准类型用户定义类型枚举型单精度型双精度型空类型指针类型构造类型结构体类型数组类型共用体类型数据类型的分类:C C语言提供了丰富的数据类型。数据类型的概念:数据类型是一类数据的抽象表示,这类数据具 有相同的形式,遵从相同的运算规则.C C语言的基本数据类型及其运算第1页/共42页数据类型的长度:在计算机中,由于软硬件的各种原因,数据类 型必须有一个长度的限制。这个长度是指数据 存储在计算机中需要占用多少个字节数。不同 类型的数据在内存中占用的字节数是不同的。溢出处理:不同的数据类型规定了不同的机内表示长度,也决定了 对应数据量的变化范围。当某一数据超出该数据类型所规定的范围时,计算机会拒绝接受,而将之转换成范围内的另外某个数,这种情况称之为溢出处理。例如:在PCPC机上的Turbo CTurbo C系统下整型的长度规定为2 2个字节,所 以表示的范围限制在-32768-327683276732767(-2-215152 21515-1-1)之间。在大多数UNIXUNIX机器上,整数是由4 4个字节(3232位),它们表 示的范围是-2147483648-2147483648 21474836472147483647(-2-231312 23131-1-1)。溢出演示:21.cC C语言的基本数据类型及其运算第2页/共42页 常量和变量是在计算机中数据类型的具体表现形式,它们不再是抽象的概念而是实在的数据,这些数据符合对数据类型的规定(形式和运算规则两方面)。常量和变量之间的区别在于程序执行过程中的变化情况。常量是一成不变的,而变量则可以不断改变。2.2 2.2 常量与变量常量与变量 C C语言中的数据分为常量和变量。他们都有类型之分。2.2.1 2.2.1 常量与符号常量2.2.2 2.2.2 变量C C语言的基本数据类型及其运算第3页/共42页 常量:常量:常量:常量:在程序运行过程中其值不能被改变的量值。例如:1 1,2 2,3.13.1,-4.0-4.0,A A,b b,“abncabnc”,“ABnABn”。C C语言规定的常量根据数据类型分为四种:整型常量 实型常量 字符型常量 字符串常量 在程序中使用常量时,一般不需要具体指出它属于哪一种类型,C C语言编译系统会自动根据常量的数据大小和直观形式来确定它 的数据类型。例如例如:(1 1)1 1,2 2,-1-1 这些值为整数,属于整型常量;(2 2)3.13.1,-4.0-4.0,3.14159263.1415926的值为实数,属于实型常量。(3 3)A A,b b则为字符常量。符号常量:符号常量:符号常量:符号常量:当某个常量引用起来比较复杂而由要经常使用时,可以将该常量定义为符号常量。C C语言的基本数据类型及其运算第4页/共42页整型常量:整型常量:就是一个整数。在计算机中一般占用2 2个字节。三种形式:例如0X0X100100表示十六进制数100100。0 x1230 x123,0 xacd 0 xacd 十进制整数(一般表示方法)八进制整数(以0 0开头的数)十六进制整数(以0X0X开头的数)100100表示十进制100100。例如0 0100100表示八进制数100100。例如:01230123,-0456-0456等注意:注意:整常数在不加特别说明时为正值。如果是负值,则“-”必须放在常 数的前面。例如:-123-123长整型常量和普通的整型常量基本相似,在一个常数的后面加一个 字母L L或l l,则被认为是长整型。长整型常量的长度为四个字节,因 此长整型常量的表示范围要远远大于整型常量。例如:10L10L,79L79L,0115L0115L,0 x4eL0 x4eL整型C C语言的基本数据类型及其运算第5页/共42页实型常量:实型常量:就是通常带有小数点的实数,在计算机中占用4 4个字节。实型常量有两种表示方法:十进制数形式(由正负号、数字和小数点组成)例如:100.5100.5,-1.0-1.0,.123.123,5.5.,0.00.0指数形式(由尾数、字母E E或e e、指数三部分组成)例如:123.0E-1:123.0E-1,1.23E31.23E3注意:必须有小数点标准的指数形式是:小数点的左侧只有一位数字。例如1.23E-21.23E-2,0.276E30.276E3。计算机的输出是按标准指数形式输出的。注意:指数部分必须为整数,不能为小数注意:书写实型常量时常有一些省略形式,实型常量中的小数部分或整数 部分可以省略,但不能同时省略;小数点不能省略;指数形式 中的E E或e e不能省略;+可以省略;-不能省略。所有的实型常量的有效位数为7 7位,所以一个实型常量中超过7 7个有效 位的部分是无效的。字母E E或e e之前必须有数字,而且字母E E或e e之后的指数必须为整数。实数C C语言的基本数据类型及其运算第6页/共42页字符常量:字符常量:包括可以全部在计算机上显示的符号,也可以说是ASCIIASCII 码表上的全部字符,一个字符占一个字节。字符常量表示方法:用单引号 将一个字符括起来。例如:A A、1 1等。在C C语言中字符是按其所对应的ASCIIASCII码值来存储的,目前计算机系统中的字符集有两种:ASCIIASCII码和EBCDICEBCDIC码。美国标准信息交换码,128128个字符,最为常用的,是ISOISO(标准化组织)标准的字符集。在其字符集内,每个字符对应唯一的码值(次序值),不同字符,码值不同。例如:0 0表示数字字符0 0,其码值为4848;A A表示字母字符A A,其码值为6565等。ASCIIASCII字符集内,数字、大写、小写字母的大小关系为:0 0 9 9 A A Z Z a a z z(扩充的交换码,256256个字符)C C语言的基本数据类型及其运算第7页/共42页C C语言中有两种类型的字符常量:1.1.1.1.普通字符:普通字符:用单引号 括起来的一个(单个)字符。例如:a a、$、=、3 3等。2.2.2.2.转义字符:转义字符:通常使用转义字符表示ASCIIASCII码字符集中不可打印的 控制字符以及具有特定功能的字符。转义字符用()开头后面跟一个字符或一个八进制 或十六进制数表示。例如:nn表示换行,tt表示 横向跳格。注意注意:(1 1)每个字符常量数据只能是一个字符,不能是一串字符。(2 2)字符1 1和数字1 1的区别:前者是字符常量,后者是整型常量。它们的含义和在计算机中的存储方式都不相同。(3 3)字符常量可以像整型常量(整数)一样在程序中参与相关的 运算。例如:A A+32;/*+32;/*执行结果65+32=9765+32=97,是a a的ASCIIASCII码值*/结果演示22.c22.c由于跟在“”后的字符已不代表原来的字符含义了,所以称其为转义字符。字符型C C语言的基本数据类型及其运算第8页/共42页字符串常量:字符串常量:用一对双引号“”阔起来0 0个或多个字符组成的字符 序列。串是一组字符。例如:例如:“”空串(0 0个字符)“a a”是由一个字符a a构成的字符串“Happy new YearHappy new Year”是由多个字符序列构成的字符串“abcnabcn”是由多个字符构成的字符串“”不是空串,是空格串注意:注意:1.1.C语言规定字符串的最后必须以空字符0结尾。这个结束符是C语 言自动加上的,空字符并不计算在字符串的长度里,但是存储时,空字符将会额外的占用一个字节空间。例如:例如:字符串“”ABCABC”的长度是?字符串“xab107Axab107A”的长度?2.2.字符序列中的字符个数称为字符串的长度。对字符串的理解中比较 容易出错的是当字符串中出现转义字符时字符串长度的确定。C C语言的基本数据类型及其运算第9页/共42页字符常量与字符串常量的字符常量与字符串常量的区别区别区别区别:#1#1:a a 与“a a”是不同的:a a 表示的是字符常量,在内存中占一个字 节;而“a a”表示的是字符串常量。在内存中占2 2个字节。#2#2:一个字符串常量的存储长度要比它实际的字符串长度多一个字节 (字符)。所以:字符串常量与字符常量的区别是:1 1)书写格式不同:与“”2 2)表现形式不同:一个与多个 3 3)存储方式不同:长度不同 在内存中,字符常量的存储只占用一个字节,而字符串常量存储时,C C语言编译系统将自动在字符串的尾部加上一个特殊的字符00,作为字符串结束的标志。系统依据此标志进行判断该字符串是否结束。字符串C C语言的基本数据类型及其运算第10页/共42页符号常量:符号常量:在C C语言中允许程序中的常量定义为一个标识符,这个 标识符称为符号常量。既带有名字的常量。符号常量必须在使用前先定义定义格式:定义格式:#define#define 优点优点:简化书写格式、减少出错率;可以和常量一样进行运算,一旦要求有所变化,只需更改 宏定义。例如:#define AGE 35#define AGE 35#define M 1.9734067e9#define M 1.9734067e9注意:注意:符号常量不同于变量,在其作用域内不能被改变和重新赋值。习惯上,符号常量名用大写英文标识符,而变量名用小写英文标识 符,以示区别。定义符号常量可以提高程序的可读性,便于程序的调试和修改。因 此在定义符号常量名时,应尽量使其表达它所代表的常量的含义。符号常量C C语言的基本数据类型及其运算第11页/共42页变量变量:就是在程序运行过程中其值发生改变(可以被改变)的量值。变量的命名:变量的定义:变量的属性与赋值:变量的引用原则:C C语言规定所有用到的变量都必须在程序中指定其数据类型,必须“先定义后使用”,一个变量应该有一个名字(标识符),一种数据类型以及一个数据值。定义变量时要给其命名;该变量在内存中占据一定的存储单元,编译系统根据定义的变量的数据类型为其分配存储单元并在该存储单元中存放变量的值。C C语言的基本数据类型及其运算第12页/共42页变量的命名:变量的命名:注意:1.C1.C语言规定标识符只能由字母、数字和下划线组成。且第一个 字符必须是字母或下划线。2.2.大、小写字母被认为是不同的变量名。SunSun、sunsun、SUNSUN是三个 不同的变量。为了避免混淆,应该为变量取不同的名字而不 是用大小写区分。3.3.变量名的长度无统一的规定,但在取名时长度尽量在3131位有效 字符之内。4.4.尽量取与变量含义接近的名称。C C语言允许将值存放在变量中,C C程序中出现的每个变量,都是 由用户在程序设计时按照标识符的规则取名并定义的。每个变 量都由一个变量名来标识。命名C C语言的基本数据类型及其运算第13页/共42页变量定义具有二个目的:变量定义具有二个目的:(1 1)定义变量名。)定义变量名。(2 2)定义变量的数据类型。)定义变量的数据类型。变量定义的格式变量定义的格式:type namelist;例如:int aint a,b23b23,C_123C_123;数据类型的类型标识符准备声明的变量名称列表当同时声明多个变量时,需要将变量名之间用“,”逗号分隔开。注意:任何一个变量都必须具有确定的数据类型,变量类型告诉 C C该变量的用法以及保存的方法。不管变量的值怎样变化,必须符合该类数据类型的规定(形式和规则两个方面)。变量的基本数据类型:变量的基本数据类型:整型变量、实型变量、字符型变量变量的定义变量的定义变量的定义说明了变量叫什么以及用来做什么。定义一个变量的过程,实际上就是向内存申请一个变量的数据类型大小的空间的过程。变量实质上就是内存某一单元的标识符号,对这个符号的引用就是对相应的内存单元的存取操作。C C语言的基本数据类型及其运算第14页/共42页整型变量:整型变量:整型类型的标志是intint,一个整型变量可以保存一个整数。C C语言提供的整型变量有:基本型(intint)短整型(short int short int、shortshort)长整型(long int long int 、long long)无符号整型(unsigned intunsigned int、unsigned long unsigned long、unsigned shortunsigned short)一般:以一个机器字(wordword)存放一个intint型数据,而long intlong int型数据 的字节数应不小于intint型,short intshort int型数据的字节数应不长于 intint型。注意:使用某种类型的变量时,一定要注意该类型变量的取值范围。例如:int aint a,b b,c c;long ilong i,j j;整型C C语言的基本数据类型及其运算第15页/共42页实型变量:实型变量:C C语言提供的实型变量有两种类型:单精度(floatfloat)和双精度(doubledouble)定义格式定义格式:float(double);例如:float afloat a,b b,c c;double ddouble d,e e,f f;在一般系统中,C C语言对一个floatfloat型实数提供4 4个字节的存储单元,而对一个doubledouble型实数则提供8 8个字节的存储单元。floatfloat可存放7 7位有效数据,doubledouble可提供15-1615-16位的有效数据。例如:float afloat a;a=98765.4321 a=98765.4321;double bdouble b;b=98765.4321b=98765.4321;注意:(1 1)运用实数运算时要注意数据的范围。例如:float afloat a;a=0.000000011a=0.000000011;需要用doubledouble来进行定义。(2 2)一个实型常量可以赋给floatfloat或 doubledouble型变量,根据变量的 类型截取实型常量的相应有效位数。实型演示23.cC C语言的基本数据类型及其运算第16页/共42页字符变量:字符变量:用来存放一个字符常量。即一个字节存放一个字符。格式:格式:char ;例如:例如:char c1char c1,a2a2;注意:注意:不能将一个字符串常量赋给一个字符变量。例如:char c1char c1,c2c2;c1=c1=a a ;c2=c2=b b ;合法:占一个字节例如:char c1char c1,c2c2;c1=c1=“a a”;c2=c2=“abcabc”;非法:占2 2个或4 4个字节为什么字符数据与整型数据之间可以通用?字符型的数据在机器内存中是以ASCIIASCII码的形式保存的,由于ASCIIASCII码的取值范围为0 0255255,可用一个字节存放。字符型数据在内存中以二进制码形式存储,而整型数据在内存中也是二进制码的形式。也就是说:字符数据与整型数据在内存中的存储格式是一样的。基于这一点,C C语言允许整型数据与字符型数据通用。实际上字符是一组小整数的集合。C C语言的基本数据类型及其运算第17页/共42页例:例:mainmain()char c1 char c1,c2c2;c1=c1=a a;c2=c2=b b;printfprintf(“c1=%cc1=%c,c2=%cnc2=%cn”,c1,c2,c1,c2);printfprintf(“c1=%d,c2=%dnc1=%d,c2=%dn”,c1,c2,c1,c2);c1=97c1=97;c2=98c2=98;printfprintf(“c1=%cc1=%c,c2=%cnc2=%cn”,c1,c2,c1,c2);printfprintf(“c1=%d,c2=%dnc1=%d,c2=%dn”,c1,c2,c1,c2);运行结果:c1=a,c2=bc1=a,c2=b 演示24.24.c c c1=97,c2=98 c1=97,c2=98 c1=a,c2=b c1=a,c2=b c1=97,c2=98 c1=97,c2=98一个字符型数据既可以以字符型形式输出也可以按整型数据格式输出:按字符型形式输出时系统首先将内存单元中二进制码值转换为相应的字符,然后输出这个字符;按整型数据形式输出一个字符时,直接输出该字符的ASCIIASCII码值。C C编译系统根据程序的上下文来决定取字符本身还是取ASCIIASCII码值。C C编译系统首先将a,ba,b转换为ASCIIASCII码值97,9897,98然后存放在内存单元中。字符型C C语言的基本数据类型及其运算第18页/共42页变量的属性与赋值:变量的属性与赋值:例如:int i;分配2个字节大小的内存 空间,以后变量i的值就从这2个 字节单元中取得。内容变量i内存地址变量有变量有4 4个属性:个属性:(1)名称:符合标识符的命名规则(2)数据类型:必须属于某种数据类型(3)值:定义一个变量的目的就是为了使用它的内容(值),没有值的变量是没有意义的。(4)地址:是系统分配给变量的内存单元之编号。这个内存单 元用来存放变量的值。其中:(1)(2)由用户定义,(4)由系统决定,而(3)来自程序中的赋值。i=3就代表变量i的内存值为3&i C C语言的基本数据类型及其运算第19页/共42页变量赋值的方法:变量赋值的方法:(1)初始化赋值方式(变量赋初值)C语言允许在定义一个变量的同时对变量进行初始化。例如:int i=0;表示定义一个整型变量i的同时将i赋值为0。注意:如果对几个变量同时赋一个初始值,则可以写成 float a=3.0,b=3.0,c=3.0;表示a、b、c的初始值均为3.0,但并不表示整个程序中三个变量值一直不变或一直相等。int i,j,k;k=10;例如:int i,j,k=10;表示i,j,k为整型,只有k被初始化赋值,其值为10。(2)赋值语句方式 在程序运行过程中用赋值语句给变量赋一个值。例如:a=10;C C语言的基本数据类型及其运算第20页/共42页例:例:演示演示25.c#define MULTI 123main()int num1=0;/*赋初值方式*/int num2;int total1=0,total2=0;num2=20;/*赋值语句方式*/total1=num1+MULTI;total2=2*num2+MULTI;/*变量使用前要定义*/赋值?怎样知道它是否运行?我们需要用某种方式显示结果。C C语言的基本数据类型及其运算第21页/共42页变量的引用原则变量的引用原则 在C语言程序设计中,变量必须遵循“先定义,后使用”的原则。也就是说在具体使用某个变量之前必须对这个变量定义。例1:int stroe;STROE=10;例2:查找错误 main()int i,j;i=10;j=20;k=30;sum=i+j;int sum;非法:C编译系统会认为STORE未被定义k未定义既被赋值先使用,后定义C C语言的基本数据类型及其运算第22页/共42页2.3 C2.3 C语言的运算符语言的运算符用来表示各种数据操作的符号称之为运算符。C C语言的运算符有以下几类:语言的运算符有以下几类:(1)算术(自增/自减)运算符:(+,*,/,%、+、-)(2)关系运算符:(,=,=,!=,=)(3)逻辑运算符:(!,&,|)(4)位运算符:(、|、&)(5)赋值运算符:(=)(6)条件运算符:(?:)(7)逗号运算符:(,)(8)指针运算符:(*,&)(9)强制类型转换运算符:(type)(10)分量运算符:(和 )(11)下标运算符:()(12)函数调用运算符:(())对运算符的掌握应从三个方面着手:和操作符相关的数据类 型(包括操作数和操作 结果的数据类型);运算符的优先级;运算符的结合次序;C C语言的基本数据类型及其运算第23页/共42页2.4 C2.4 C语言的表达式语言的表达式概念概念:表达式是由常量、变量、函数通过运算符连接起来而形成 的一个算式。求值过程:求值过程:表达式的求值过程实际上是一个数据加工的过程,通过 各种不同的运算符,可以实现不同的数据加工。表达式 代表了一个具体的值。必须按C规定的原则求值。特别地:一个常量、一个变量、一个函数都可以看成是一个表达式。算术算术表达式,如:表达式,如:3+4*5赋值赋值表达式,如:表达式,如:a=3关系关系表达式,如表达式,如:5b逻辑逻辑表达式,如:表达式,如:35&a=b条件条件表达式,如:表达式,如:ab?a:b逗号逗号表达式,如:表达式,如:a=3,b=4,c=5指针表达式,如:指针表达式,如:p-2,&a(在指针一章介绍)(在指针一章介绍)C C语言允许使用以下类型表达式:语言允许使用以下类型表达式:练习C C语言的基本数据类型及其运算第24页/共42页表达式的求值原则:表达式的求值原则:在一个表达式中可以包含不同类型的运算符。例如:a+bc&c+d=e+(c=f)根据什么原则进行运算呢?C语言规定了运算符的优先级优先级和结合性结合性。注意:注意:(1)可以通过括号()来改变表达式求值的顺序。(2)表达式求值过程中存在类型转换。在表达式求值时,先按运算符的优先级级别的高低次序执行。如果运算符两侧的优先级级别相同,则按规定的“结合方向”处理。C C语言的基本数据类型及其运算第25页/共42页类型转换类型转换如果同一个表达式中含有不同类型的常量和变量,C语言则在计算该表达式时会自动转换为同一种数据类型以便进行运算。这种由一种数据类型到另一种数据类型的转换被称为类型转换。在C语言中,类型转换可能发生在赋值运算、算术表达式和输出时。(1 1)赋值运算的类型转换)赋值运算的类型转换转换原则转换原则:当赋值运算符“=”右侧表达式的值被计算出来后,不论是什么类型都一律转换为“=”左侧的变量的类 型,然后再赋值给左侧的变量。例如:float a;a=10;例如:int a;a=15.3;其结果为a=10.0(数据填充)注意:注意:在赋值类型转换时要注意数值的范围不能溢出。演示26.c其结果为a=15(数据截取)C C语言的基本数据类型及其运算第26页/共42页(2 2)算术运算的类型转换)算术运算的类型转换转换原则:“类型提升”。如果一个运算符有两个不同类型的运算分量,那么在运算前,先将较低类型的数据提升为较高的类型,从而使两者的数据类型一致,然后再进行计算,其结果是较高类型的数据。类型的高低是根据其数据所占内存空间的大小来判定的,占用空间越大,类型越高。反之越低。intchar,shortunsignedlongdoublefloat 低高?问题:char a;long b;float c;则3*a+b+c的结果是什么类型?C C语言的基本数据类型及其运算第27页/共42页(3 3)输出时类型转换)输出时类型转换 在数据输出时发生的类型转换。同样要遵守“类型提升”的原则。例如:printf(“%f”,10);注意:1.数据类型的转换通常是由编译系统来自动进行的,一般情况下,不需要程序员人工编写程序干预,所以又被称为隐式类型转换。2.如果要求一定将数据的类型从某种类型转换为另外一种类型,则 需要人工编程进行强制类型转换,也叫显式转换。其格式如下:(type)表达式 例如:(int)4.2的结果是4;类型转换的实际情况是:字符型到整型是取字符的ASCII码值;整型到字符型只是去掉多余的高位;实型到整型要去掉小数部分;双精度实型到实型是舍入的;表达式C C语言的基本数据类型及其运算第28页/共42页算术表达式算术表达式算术表达式算术表达式由算术运算符连接数值型运算对象构成,其结果可以是整数、单精度实数和双精度实数。例如:int a=2;float b=4.5;表达式 2*a+b 的结果为8.5。注意:注意:两个整数相除其结果仍为整数(即舍去小数部分)。例如:13/10的结果为1。“%”为求余运算符,要求参与运算的两个数均为整数。除以0在计算机系统中是没有意义的。C C语言的基本数据类型及其运算第29页/共42页注意:1.自增和自减只能作用于变量,不允许对常量、表达式或其它进行 操作。2.当自增/自减变量值本身就单独构成一条语句时,前缀和后缀的 效果是一样的。3.对于“+”和“-”的使用要避免二义性。自增自增/自减:自减:“+”与“-”的作用是使变量的值增1或减1。C语言提供两种形式的 +/-运算符:+a,-a(前缀运算:先进行增量运算后使用)a+,a-(后缀运算:先使用后进行增量运算)比较难掌握的自增/自减运算符,主要是运算结果的确定和多个 +/-号连在一起时的区分问题。C C语言的基本数据类型及其运算第30页/共42页问题?如何理解A+B?C语言对这种情况作了规定:自左向右取尽可能多的符号组成运算符,所以A+B应理解为(A+)+B。2A.C可以理解为(A+)+B也可以看成A+(+B)副作用:副作用是指语句执行主操作时所附带执行的操作。例如:下面合法的C代码:a=5;b=+a;/*将a赋值给b的操作时a的值增1。*/C C语言的基本数据类型及其运算第31页/共42页main()演示28.c int a=2,b=2,y1,y2;y1=+a;y2=b-;printf(“y1=%d,a=%d”,y1,a);printf(“y2=%d,b=%d”,y2,b);结果:y1=3,a=3 y2=2,b=1算术C C语言的基本数据类型及其运算第32页/共42页赋值表达式赋值表达式由赋值运算符“=”连接表达式(右侧)和变量(左侧)。既将赋值运算符右侧的表达式的结果值赋予赋值运算符左侧的变量,其最后的结果与变量的值相同。形式形式形式形式:=常量、变量、表达式和另一个赋值表达式例如:int a=2,float b=5.2,c;c=a*b;结合性:结合性:自右向左a=b=c=4a=(b=(c=4)注意:“=”不是数学中的“等号”,它表示一个动作。右侧的值送与左侧 的变量中(左侧只允许是变量,不能是表达式或其他)。赋值运算符两侧的类型要求一致,否则要进行类型转换。赋值表达式后面不能有“;”。有则为赋值语句。复合赋值运算符:C语言提供了某些赋值语句的简写形式。例如:x=x+2;其简写形式为x+=2;赋值运算符=,相等运算符=,和一般习惯有所不同。赋值C C语言的基本数据类型及其运算第33页/共42页关系表达式关系表达式关系表达式关系表达式关系运算符中的“关系”二字的含义是指一个值与另一个值之间的关系。关系由关系运算符(,=,=,!=,=)连接表达式构成,其结果为整型值(0与1(逻辑假与逻辑真)。形式:形式:形式:形式:OP OP 优先级:优先级:(,=,=)高于(!=,=)表达式可以是常量、变量、算术表达式或关系表达式结合方向结合方向:自左向右例如:int a=2;float b=3.4;ab的结果值为1(真)a+b b b的结果为1关系C C语言的基本数据类型及其运算第34页/共42页逻辑表达式逻辑表达式逻辑表达式逻辑表达式“逻辑”是指连接关系的方式。由逻辑运算符(&、|、!)连接的表达式构成。其结果为整数值0(逻辑假)或1(逻辑真)。形式形式形式形式:OP OP 优先级优先级优先级优先级:逻辑非(!)的级别高于算术运算符,而逻辑与和逻辑或 的优先级(相同)低于关系运算符。表达式可以是常量、变量、或其他表达式结合方向结合方向结合方向结合方向:自左向右例如:int a=3,b=4,c=5;(ac)为0 注意:注意:1.对于逻辑表达式对于逻辑表达式A&B(与运算),只有当(与运算),只有当A与与B的值全部为真的值全部为真时,时,A&B的结果值为真,否则为假。的结果值为真,否则为假。2.对于逻辑表达式对于逻辑表达式A|B(或运算),只要(或运算),只要A或或B的值有一个为真时,的值有一个为真时,A|B的结果值为真,只有当的结果值为真,只有当A与与B的值全部为假时,的值全部为假时,A|B的结果值的结果值为假。为假。3.对于逻辑表达式对于逻辑表达式!A(非运算),当(非运算),当A的值为假(的值为假(0),则),则!A的值的值为真(为真(1);若);若A的值非的值非0,则,则!A的值为的值为0。逻辑C C语言的基本数据类型及其运算第35页/共42页条件表达式条件表达式条件表达式条件表达式由条件运算符连接它的三个运算对象构成的表达式称之为条件表达式,其结果可以是任何类型。形式形式形式形式:?2:3 优先级:优先级:优先级:优先级:高于赋值运算符结合方向:结合方向:结合方向:结合方向:自右向左执行过程是:求解表达式1的值?为真:求解表达式2的值,并将表达式2的值作为整个条件表达式的结果值;为假:求解表达式3的值,并将表达式3的值作为整个条件表达式的结果值。例如:int a=2;float b=5.2;求!a?2*b:b的结果。注意:注意:条件运算符的优先级高于赋值运算符,而低于算术运算符和关 系运算符。所以(xy)?x:(y+1)等同于xy?x:y+1条件表达式中,三个运算对象的类型可以不相同。例如:x?a:0.5条件运算遵循“自右向左”方向的结合原则。所以 xy?x:zw?z:w 等同于xy?x:(zw?z:w)条件C C语言的基本数据类型及其运算第36页/共42页执行过程:先求解表达式1的值,再求解表达式2的值,最后求解表达式n的值,并将表达式n的值作为整个表达式的结果值。逗号表达式逗号表达式 由逗号连接符(,)与表达式构成。其结果为最后一个表达式的结果值。可以是任何类型。形式形式形式形式:1,2,n优先级优先级:级别最低(既最后进行逗号运算)结合方向:结合方向:自左向右例如:int a=2;float b=5.2;2*a,2*b的结果值是多少?注意注意:(1)不是出现逗号的地方都是逗号表达式,逗号在C语言中用于 语句之中的参数分隔符。(2)在多数情况下,使用逗号表达式的目的是要分别求出每个表 达式的结果值。这在循环结构中经常使用。(3)逗号运算符,的优先级要比赋值运算符=的优先级低,所 以a=b,c和a=(b,c)的值不同。条件C C语言的基本数据类型及其运算第37页/共42页【例1】设a=3,b=-4,c=5,表达式a+b,b*5,a=b+4的值?0【例2】设int x,a;表达式x=(a=4,6*2)的x值?表达式x=a=4,6*2的x值?x为12为4【例3】设 int b=7;float a=2.5,c=4.7;表达式a+(int)(b/3*(int)(a+c)/2)%4的值?5.500000【例4】int x=10,y=9;int a,b,c;a=(-x=y+)?x:-y;b=x+;c=y;a,b,c的结果是?分别为8,8,10【例5】若a和b均为int类型的变量,则执行 下面程序段后的输出结果是:x=15;y=5;printf(“%dn”,x%=(y%=2);答案:A.0;B.1;C.6;D.12;A正确15/1的余数为0。C C语言的基本数据类型及其运算第38页/共42页【例7】若定义x,y为double型,则表达式x=1,y=x+3/2的值是?2.0【例6】执行下面程序段后,演示29.c int a=1,b=1,c=1;a=a+b+c+;printf(“%d,%d,%d”,a,+b,c+);输出结果为:A.4,3,2;B.3,3,2;C.3,3,3;D.3,2,2;C C语言的基本数据类型及其运算【例8】若变量已经定义并赋值,下面夫和C语言与法的表达式是:A)a:=b+1 B)a=b=c+2 C)int 18.5%3 D)a=a+7=c+b【例8】若a为int类型,且值为3,则执行完表达式a+=a-=a*a后,a的值是多少?A)-3 B)9 C)-12 D)6 思考题:思考题:1.+a与与a+的区别是什么?的区别是什么?2.在在C语言程序设计过程中,如何使用变量和常量?语言程序设计过程中,如何使用变量和常量?第39页/共42页第40页/共42页小结:小结:常见的程序设计错误:除以0 会导致致命的错误将+/-运算符运用到非简单变量的表达式中将二目运算符分开书写/方向写反会导致语法错误“=”与“=”运算符混淆良好的程序设计习惯:用做变量的标识符应该采用小写字符选择有意义的单词做变量名在二目运算符的两侧增加空格可以提高程序可读性在进行表达式求值时,应参考运算符优先级/结合性 表,确保表达式中运算符的正确执行顺序C C语言的基本数据类型及其运算第41页/共42页感谢您的欣赏!第42页/共42页