《运算符和表达式精.ppt》由会员分享,可在线阅读,更多相关《运算符和表达式精.ppt(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、运算符和表达式运算符和表达式第1页,本讲稿共73页3.0 预备知识预备知识v计算机中数的表示及进制转换计算机中数的表示及进制转换数码、基与权数码、基与权v数码:表示数的符号数码:表示数的符号v基:数码的个数基:数码的个数v权:每一位所具有的值权:每一位所具有的值数制数制:二进制、八进制、十进制、十六进制二进制、八进制、十进制、十六进制各种进制之间的转换各种进制之间的转换v非十进制非十进制(二、八、十六进制二、八、十六进制)转换成十进制转换成十进制方法:方法:按权相加按权相加v十进制转换成非十进制十进制转换成非十进制(二、八、十六进制二、八、十六进制)方法:方法:除基反序取余除基反序取余(整数部
2、分整数部分)第2页,本讲稿共73页v二进制与八进制之间的转换二进制与八进制之间的转换二进制转换成八进制:从右向左,每二进制转换成八进制:从右向左,每3位一组(不足位一组(不足3位左补位左补0),转换成八进制),转换成八进制八进制转换成二进制:用八进制转换成二进制:用3位二进制数代替每一位八进制数位二进制数代替每一位八进制数v二进制与十六进制之间的转换二进制与十六进制之间的转换二进制转换成十六进制:从右向左,每二进制转换成十六进制:从右向左,每4位一组(不足位一组(不足4位左补位左补0),转换成十六进制),转换成十六进制十六进制转换成二进制:用十六进制转换成二进制:用4位二进制数代替每一位十六进
3、位二进制数代替每一位十六进制数制数第3页,本讲稿共73页v字节和位字节和位内存以字节为单元组成内存以字节为单元组成每个字节有一个地址每个字节有一个地址一个字节一般由一个字节一般由8个二进制位组成个二进制位组成每个二进位的值是每个二进位的值是0或或1v数值的表示方法数值的表示方法原码、反码和补码原码、反码和补码原码:最高位为符号位,其余各位为数值本身的绝对值原码:最高位为符号位,其余各位为数值本身的绝对值反码:反码:v正数:反码与原码相同正数:反码与原码相同v负数:符号位为负数:符号位为1,其余位对原码取反,其余位对原码取反补码:补码:v正数:原码、反码、补码相同正数:原码、反码、补码相同v负数
4、:最高位为负数:最高位为1,其余位为原码取反,再对整个数加,其余位为原码取反,再对整个数加1第4页,本讲稿共73页原码原码反码反码补码补码数的范围数的范围0111111111111111(-127+127)0111111110000000(-127+127)0111111110000000(-128+127)(用一字节表示数)(用一字节表示数)第5页,本讲稿共73页3.1 C语言的数据类型语言的数据类型数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型void整型整型实型实型字符型字符型char单精度型单精度型float数组型数组型双精度型双精度型double结构体类
5、型结构体类型struct共用体类型共用体类型union枚举类型枚举类型enum有符号有符号无符号无符号基本整型基本整型int短整型短整型short长整型长整型long基本整型基本整型unsigned int短整型短整型unsigned short长整型长整型unsigned long自定义类型自定义类型typedef数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作第6页,本讲稿共73页3.2 常量与变量常量与变量一、标识符一、标识符 1、定义:可用来标识变量名、符号常量名、函数名、数组名、类型名、定义:可用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符
6、序列。文件名的有效字符序列。2、命名规则:、命名规则:由字母、数字、下划线组成由字母、数字、下划线组成 以字母或下划线打头以字母或下划线打头 区分大小写区分大小写 命名尽量做到命名尽量做到“见名知义见名知义”Turbo C允许标识符最大长度允许标识符最大长度32个字符,建意不超过个字符,建意不超过8个字符个字符 不允许和关键字相同不允许和关键字相同第7页,本讲稿共73页二、常量二、常量 1、常量:在程序运行过程中,值不变的量。、常量:在程序运行过程中,值不变的量。2、直接常量直接常量:即常数。如:即常数。如 1、2、35、a。可以分为实型、整型、可以分为实型、整型、字符型。其特点是从字面上即可
7、判定它们是某一类型的常量。也字符型。其特点是从字面上即可判定它们是某一类型的常量。也称称“字面常量字面常量”3、符号常量符号常量:在一个程序中指定用一个符号代表一个常量。:在一个程序中指定用一个符号代表一个常量。符号常量用符号常量用#define命令定义。其值不能改变。习惯上用大写。命令定义。其值不能改变。习惯上用大写。如在程序的开头有如下定义:如在程序的开头有如下定义:#define PI 3.1415926 则在整个程序中可用则在整个程序中可用“PI”代替代替3.1415926进行运算进行运算第8页,本讲稿共73页例例1:符号常量的应用:符号常量的应用#define PRICE 30 ma
8、in()int num,total;num=10;total=num*PRICE;printf(total=%d,total);第9页,本讲稿共73页三、变量三、变量1、定义:在程序运行的过程中,值可以改变的量。、定义:在程序运行的过程中,值可以改变的量。2、变量的属性:、变量的属性:变量名:合法标识符。变量名:合法标识符。变量值:变量的存储空间中存放的变量的内容。变量值:变量的存储空间中存放的变量的内容。存储单元:变量定义后,为其分配存储空间的起始位置。存储单元:变量定义后,为其分配存储空间的起始位置。12a变量名变量名(符号地址符号地址)变量值变量值存储单元存储单元(物理地址物理地址)第1
9、0页,本讲稿共73页3、变量的使用、变量的使用:先定义,后使用先定义,后使用。原因:原因:1、编译程序不能翻译未定义变量。、编译程序不能翻译未定义变量。2、编译程序在编译时根据变量类型确定存储单元的数量。、编译程序在编译时根据变量类型确定存储单元的数量。3、编译程序在编译时根据变量类型进行语法检查。、编译程序在编译时根据变量类型进行语法检查。例例 :整型变量整型变量a、b可以进行可以进行“求余求余”运算运算 a%b 若把若把a、b定义为实数,则上述运算非法。定义为实数,则上述运算非法。第11页,本讲稿共73页一、整型常量:有三种表示形式一、整型常量:有三种表示形式 1、十进数形式:、十进数形式
10、:1、98、345 2、八进数形式:、八进数形式:以以0 开头的数字开头的数字。01、076 3、十六进数形式:、十六进数形式:以以0 x开头的数字开头的数字。0 x3F、0 x7653.3 整型数据整型数据第12页,本讲稿共73页二、整型变量二、整型变量:(有符号和无符号有符号和无符号)类型类型 有符号有符号 无符号无符号 基本型(简称整型)基本型(简称整型)int unsigned int 短整型短整型 short或或short int unsigned short 长整型长整型 long或或long int unsigned long 说明:说明:无符号型无符号型加加unsigned修饰
11、符表示,只表示正数,无符号位。修饰符表示,只表示正数,无符号位。各类型数据所占宽度和范围见书各类型数据所占宽度和范围见书43页表页表3.1第13页,本讲稿共73页三、整型变量的定义三、整型变量的定义 1、变量的定义一般在函数的开头部分;也可以在其它位置,但定义、变量的定义一般在函数的开头部分;也可以在其它位置,但定义的位置影响变量的作用范围。的位置影响变量的作用范围。2、一条定义语句可定义多个同种类型的变量,各变量之间用逗号分、一条定义语句可定义多个同种类型的变量,各变量之间用逗号分隔。隔。3、变量类型符与其后所定义变量之间用空格分隔。变量类型符与其后所定义变量之间用空格分隔。如如:int a
12、;unsigned short b,c;long d;第14页,本讲稿共73页四、整型常量的类型四、整型常量的类型整型常量赋值给整型变量时的注意事项整型常量赋值给整型变量时的注意事项:1、如果一个整型常量在、如果一个整型常量在-3276832767之间,可以赋给之间,可以赋给int 型和变型和变量量long int型变量。型变量。2、如果一个整型常量在、如果一个整型常量在-231231-1之间,可以赋给之间,可以赋给long int型变型变量量 3、常量中没有无符号型,但非负常量可以赋给无符号变量、常量中没有无符号型,但非负常量可以赋给无符号变量 4、在一个整型常量后加一个字母、在一个整型常量
13、后加一个字母 l 或或L,则编译器把该整型则编译器把该整型常量作为常量作为long类型处理。如:类型处理。如:123L、0L 第15页,本讲稿共73页一、实型常量:实数又称为浮点数,有两种表示形式一、实型常量:实数又称为浮点数,有两种表示形式 1、十进制数形式十进制数形式:由数字和小数点组成(必须有小数点):由数字和小数点组成(必须有小数点)如如:43.2、89.、.86 2、指数形式指数形式:即科学计数法。如:即科学计数法。如:45e2相当于相当于45102、34e5相当于相当于34105。字母。字母e前必须有数字,字母前必须有数字,字母e后必须是整后必须是整数。数。v “规范化指数形式规范
14、化指数形式”:在指数形式中,小数部分中的小:在指数形式中,小数部分中的小数点前数点前有且只有有且只有一位非零数字。一位非零数字。3.4 实型数据实型数据第16页,本讲稿共73页二、实型变量二、实型变量(分为三种类型分为三种类型)1、单精度型、单精度型(float):一般占一般占4个字节,有效数位为个字节,有效数位为7位位 2、双精度型、双精度型(double):一般占一般占8个字节,有效数位为个字节,有效数位为15位位 3、长双精度型、长双精度型(long double):一般占一般占16个字节,有效数个字节,有效数位为位为18位位v 实型常量不分单、双精度。可任意赋值,但有效数位不同。实型常
15、量不分单、双精度。可任意赋值,但有效数位不同。三、实型数据的舍入误差三、实型数据的舍入误差 第17页,本讲稿共73页3.5 字符型数据字符型数据一、字符型常量:用一对一、字符型常量:用一对单引号单引号括起来的括起来的一一个字符。个字符。说明说明:单引号不是字符常量的一部分,只是一种界定符。单引号不是字符常量的一部分,只是一种界定符。单引号内不能是单撇号或反斜杠。单引号内不能是单撇号或反斜杠。二、字符常量的分类:二、字符常量的分类:1、普通字符:、普通字符:如:如:1、a、A、*2、转义字符:转义字符:也称控制字符。也称控制字符。说明:说明:用反斜杠开头后面跟一个字母代表一个控制字符。用反斜杠开
16、头后面跟一个字母代表一个控制字符。代表字符反斜杠;代表字符反斜杠;代表撇号字符代表撇号字符 反斜杠后面的字符失去原来的含义反斜杠后面的字符失去原来的含义第18页,本讲稿共73页字符形式字符形式 功能功能 n 回车换行符回车换行符 t 横向跳格:跳到下一个输出区(每一输出区为横向跳格:跳到下一个输出区(每一输出区为8 个字符位置)个字符位置)b 退格退格 r 回车不换行(回到本行起始字符位置)回车不换行(回到本行起始字符位置)f 走纸换页走纸换页 反斜杠字符反斜杠字符 单引号单引号(撇号撇号)ddd 13位八进制数所代表的字符。如位八进制数所代表的字符。如101表示表示A xhh 12位十六进制
17、数所代表的字符。如位十六进制数所代表的字符。如x40表示表示A常用转义字符形式及功能常用转义字符形式及功能第19页,本讲稿共73页二、字符变量:用来存放字符常量。二、字符变量:用来存放字符常量。说明:说明:一个字符变量占一个字节一个字符变量占一个字节 一个字符变量只能存放一个字符一个字符变量只能存放一个字符 字符变量的定义用字符变量的定义用char三、字符数据在内存中的存储形式及其使用方法三、字符数据在内存中的存储形式及其使用方法1、字符常量与整型常量存储时都以、字符常量与整型常量存储时都以ASCII码形式存放码形式存放2、字符常量可以以整型常量形式输出,反之亦可、字符常量可以以整型常量形式输
18、出,反之亦可3、字符常量可以赋值给整型变量,反之亦可、字符常量可以赋值给整型变量,反之亦可第20页,本讲稿共73页例2:main()char c1,c2;/*定义两个字符型变量定义两个字符型变量*/c1=97;c2=98;/*分别给两个变量赋整型常量的值分别给两个变量赋整型常量的值*/printf(“%c%c”,c1,c2);/*以字符格式输出两个字符型数以字符格式输出两个字符型数据据*/输出:a b第21页,本讲稿共73页例3:main()char c1,c2;/*定义两个字符型变量定义两个字符型变量*/c1=a;c2=b;/*赋字符型常量赋字符型常量*/c1=c1-32;c2=c2-32;
19、/*分别减去分别减去32*/printf(“%c%c”,c1,c2);/*输出两个字符型数输出两个字符型数据据*/输出:输出:A B第22页,本讲稿共73页四、字符串常量:四、字符串常量:1、概念:由一对双撇号括起来的零个或多个字符序列、概念:由一对双撇号括起来的零个或多个字符序列 如如:“hello”、“programming”、“A”等。等。2、说明:、说明:双撇号是界定符,不属于字符串内容双撇号是界定符,不属于字符串内容 “”表示一个空字符串,在内存中占一个字节表示一个空字符串,在内存中占一个字节 “”表示一个空格字符串,在内存中占表示一个空格字符串,在内存中占2个字节个字节 “A”表示
20、一个字符串,表示一个字符串,A表示一个字符表示一个字符第23页,本讲稿共73页3、字符串常量与字符常量的区别:、字符串常量与字符常量的区别:一个字符常量可以赋值给一个字符变量,而字符串不一个字符常量可以赋值给一个字符变量,而字符串不可以可以 二者界定符不同二者界定符不同 二者的存储方式不同:存储字符串时,在其末尾加一个二者的存储方式不同:存储字符串时,在其末尾加一个0作为结束标志,但不输出。即存储字符串时,比字符串作为结束标志,但不输出。即存储字符串时,比字符串中所有字符个数加起来多一个。中所有字符个数加起来多一个。“0”的含义是的含义是“空操作空操作”,不产生任何作用,只起标,不产生任何作用
21、,只起标志作用志作用 无字符串变量,但可用字符型数组进行存储无字符串变量,但可用字符型数组进行存储第24页,本讲稿共73页一、赋值:向变量所代表的存储单元传送数据的操作,用一、赋值:向变量所代表的存储单元传送数据的操作,用“=”表示表示二、赋值的一般形式:变量二、赋值的一般形式:变量=表达式;表达式;三、可以先定义变量,后赋值;也可以在定义变量时直接赋值三、可以先定义变量,后赋值;也可以在定义变量时直接赋值四、对几个变量同时赋值:四、对几个变量同时赋值:1、int a,b,c=5;2、int a=3,b=3,c=3;3、int a;a=3;4、int a,b,c;c=5;3.6 变量赋初值变量
22、赋初值第25页,本讲稿共73页3.7 各类型数值数据间的混合运算各类型数值数据间的混合运算一、转换原因:不同类型之间进行运算,必须先转换为同一类型一、转换原因:不同类型之间进行运算,必须先转换为同一类型二、转换的类型:实型、整型、字符型二、转换的类型:实型、整型、字符型三、转换规则:三、转换规则:doublefloatlongunsignedintchar,short 1、按、按“向高看齐向高看齐”的原则,将的原则,将“较低较低”的类型进行提升的类型进行提升 2、所有、所有char 或或short型全部自动转换为型全部自动转换为int型型 3、所有、所有float型转换成型转换成double型
23、型图形注解:纵向箭头表示转换方向图形注解:纵向箭头表示转换方向 横向箭头表示必然转换横向箭头表示必然转换第26页,本讲稿共73页注意:注意:箭箭头头方方向向只只表表示示数数据据类类型型由由低低向向高高转转换换,不不要要理理解解为为int型型先先转转换换成成unsigned型型,再再转转换换成成long型,最后转换成型,最后转换成double型。型。第27页,本讲稿共73页3.8 算术运算符和算术表达式算术运算符和算术表达式(一)按功能划分:(一)按功能划分:1、算术运算符:、算术运算符:+、-、*、/、%2、关系运算符:、关系运算符:、=、=、!=3、逻辑运算符:!、逻辑运算符:!、&、|4、
24、位运算符:、位运算符:、|、&5、赋值运算符:、赋值运算符:=、+=、-=、*=、/=6、条件运算符:、条件运算符:?,:7、逗号运算符:,、逗号运算符:,8、指针运算符:、指针运算符:*、&9、求字节数运算符:、求字节数运算符:sizeof 10、强制类型转换运算符:强制类型转换运算符:(类型名类型名)11、分量运算符:、分量运算符:12、下标运算符:、下标运算符:13、其它:函数运算符、其它:函数运算符一、一、C运算符分类运算符分类第28页,本讲稿共73页(二)按所需操作数个数划分(二)按所需操作数个数划分 1、单目运算符、单目运算符 2、双目运算符、双目运算符 3、三目运算符、三目运算符
25、第29页,本讲稿共73页二、算术运算符和算术表达式二、算术运算符和算术表达式1、基本的算术运算符:、基本的算术运算符:+、-、*、/、%(1)关于除法运算符关于除法运算符/C语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,5/2=2。-5/3=-1(余(余-2),Turbo C 取取结果用结果用“向零取整向零取整”的方法;的方法;(2)关于求余数运算关于求余数运算 要求两侧的操作数均为整型数据,否则出错。要求两侧的操作数均为整型数据,否则出错。第30页,本讲稿共73页2.表达式和算术表达式表达式和算术表达式(1)表达式的概念)表达式的概念 用用运运算算符符和和括括号号将将运运算算对对
26、象象(常常量量、变变量量和和函函数数等等)连连接接起起来来的的、符合语言语法规则的式子,称为表达式。符合语言语法规则的式子,称为表达式。单单个个常常量量、变变量量或或函函数数,可可以以看看作作是是表表达达式式的的一一种种特特例例。将将单单个个常常量量、变变量量或或函函数数构构成成的的表表达达式式称称为为简简单单表表达达式式,其其它它表表达达式式称称之之为为复复杂杂表表达达式式。(2)算术表达式的概念)算术表达式的概念 表表达达式式中中的的运运算算符符都都是是算算术术运运算算符符。例例如如,3+6*9、(x+y)/2-1等,都是算术表达式。等,都是算术表达式。良良好好的的源源程程序序书书写写习习
27、惯惯:在在表表达达式式中中,在在双双目目运运算算符符的的左左右右两两侧侧各加一个空格,可增强程序的可读性。各加一个空格,可增强程序的可读性。请请比比较较表表达达式式“(x+y)/2 1”与与“(x+y)/21”,您您认认为为哪哪个个的的可可读读性更好一些?性更好一些?第31页,本讲稿共73页 3.运算符的优先级与结合性运算符的优先级与结合性 (1)语言规定了运算符的优先级和结合性。)语言规定了运算符的优先级和结合性。所所谓谓结结合合性性是是指指,当当一一个个操操作作数数两两侧侧的的运运算算符符具具有有相相同同的的优优先先级级时时,该该操操作作数数是是先先与与左左边边的的运运算算符符结结合合,还
28、还是是先先与与右边的运算符结合。右边的运算符结合。自自左左至至右右的的结结合合方方向向,称称为为左左结结合合性性。反反之之,称称为为右右结结合合性性。结结合合性性是是语语言言的的独独有有概概念念。除除单单目目运运算算符符、赋赋值值运运算算符符和和条件条件运算符是运算符是右结合性右结合性外,其它运算符都是外,其它运算符都是左结合性左结合性。第32页,本讲稿共73页(2)表达式求值)表达式求值 1)按按运运算算符符的的优优先先级级高高低低次次序序执执行行。例例如如,先先乘除后加减。乘除后加减。2)如如果果在在一一个个运运算算对对象象(或或称称操操作作数数)两两侧侧的的运运算算符符的的优优先先级级相
29、相同同,则则按按语语言言规规定定的的结结合合方方向向(结合性)进行。(结合性)进行。例例如如:算算术术运运算算符符的的结结合合方方向向是是“自自左左至至右右”,即即:在在执执行行“a b+c”时时,变变量量b先先与与减减号号结结合合,执执行行“a-b”;然后再执行加然后再执行加c的运算。的运算。第33页,本讲稿共73页4、强制类型转换运算符、强制类型转换运算符强制类型转换的规则:强制类型转换的规则:(1)一般形式:(类型名)(表达式)一般形式:(类型名)(表达式)如:(如:(int)a;(float)(x+y);(double)(4%3);(2)注意:注意:v 表达式应用括号括起来。表达式应用
30、括号括起来。v 强制类型转换时,得到一个所需类型的中间变量,原来强制类型转换时,得到一个所需类型的中间变量,原来变量的类型不发生变化。变量的类型不发生变化。第34页,本讲稿共73页例:例:(int)x+y :将将x 转换成整转换成整 型数据后与型数据后与y 相加相加 (int)(x+y):将将x+y的值转换成整型的值转换成整型 区别:区别:(int)x 与与 int(x)、(int)(x)例:已知例:已知x 为一个实型变量,经过强制类型转换为一个实型变量,经过强制类型转换(int)x后,后,x 的数据类型是怎样的。的数据类型是怎样的。进行强制类型转换,只是生成一个进行强制类型转换,只是生成一个
31、int型的中间变量,而型的中间变量,而x原原来的类型并没改变。所以来的类型并没改变。所以x仍是实型数据仍是实型数据;第35页,本讲稿共73页例4:main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);运行结果如下:x=3.600000,i=3第36页,本讲稿共73页5、自增(自增(+)、自减()、自减(-)运算)运算 1)作用)作用 自增运算使单个变量的值增自增运算使单个变量的值增,自减运算使单个变量的值减。自减运算使单个变量的值减。2)用法与运算规则)用法与运算规则 自增、自减运算符都有两种用法:自增、自减运算符都有两种用法:(
32、1)前置运算前置运算运算符放在变量之前:变量、变量运算符放在变量之前:变量、变量 先使变量的值增(或减),然后再以变化后的值参与其它运算,即先使变量的值增(或减),然后再以变化后的值参与其它运算,即先增先增减、后运算减、后运算。(2)后置运算后置运算运算符放在变量之后:变量、变量运算符放在变量之后:变量、变量 变量先参与其它运算,然后再使变量的值增(或减),即变量先参与其它运算,然后再使变量的值增(或减),即先运算、先运算、后增减后增减。第37页,本讲稿共73页例5 自增、自减运算符的用法与运算规则示例。自增、自减运算符的用法与运算规则示例。/*程序功能:自增、自减运算符的用法与运算规则示例程
33、序功能:自增、自减运算符的用法与运算规则示例*/main()int x=6,y;printf(x=%dn,x);/*输出输出x的初值的初值*/y=+x;/*前置运算前置运算*/printf(y=+x:x=%d,y=%dn,x,y);y=x-;/*后置运算后置运算*/printf(y=x-:x=%d,y=%dn,x,y);程序运行结果:程序运行结果:x=6y=+x:x=7,y=7y=x-:x=6,y=7 第38页,本讲稿共73页3.说明说明(1)自自增增、自自减减运运算算,常常用用于于循循环环语语句句中中,使使循循环环控控制制变变量量加加(或或减减),以以及及指指针针变变量量中中,使使指指针针指
34、指向向下下(或或上上)一一个个地地址。址。(2)自增、自减运算符,不能用于常量和表达式。)自增、自减运算符,不能用于常量和表达式。例如,例如,5+、-(a+b)等都是非法的。等都是非法的。第39页,本讲稿共73页(3)在在表表达达式式中中,连连续续使使同同一一变变量量进进行行自自增增或或自自减减运运算算时时,很很容容易出错,所以最好避免这种用法。易出错,所以最好避免这种用法。如如:i=3;k=(i+)+(i+)+(i+)k值等于值等于9。k=(+i)+(+i)+(+i)k值等于值等于18。(4)出出现现多多个个运运算算符符时时,编编译译器器在在处处理理时时尽尽可可能能多多的的(从从左左到到右右
35、)将将若若干个字符组合成一个运算符干个字符组合成一个运算符。如如:i+j;(i+)+j i+(+j)(5)Turbo C中,调用函数时,实际参数的处理顺序是中,调用函数时,实际参数的处理顺序是从右到左从右到左。如如:i=3;printf(%d,%d,i,i+);输出结果:输出结果:4,3 第40页,本讲稿共73页6、正、负号运算符、正、负号运算符 1)一元运算符;一元运算符;2)结合方向是自右向左的结合方向是自右向左的 3)优先级和自增、自减相同,高于优先级和自增、自减相同,高于*、/运算符运算符 4)相当于一次算术运算相当于一次算术运算例:例:-a*b=(-a)*b -a=0-a第41页,本
36、讲稿共73页3.9赋值运算符和赋值表达式赋值运算符和赋值表达式一、赋值运算符:一、赋值运算符:=作用:将一个表达式的值赋给变量。作用:将一个表达式的值赋给变量。赋值运算符的一般形式为:赋值运算符的一般形式为:变量变量 =赋值表达式赋值表达式 例如例如:x=5 y=(float)5/2 如果表达式值的类型,与被赋值变量的类型不一致,但都是数如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。数据类型,然后再赋值给变量。思考思考:假设变量:假设变量num的数
37、据类型为的数据类型为float,其值为其值为2.5,则执行,则执行“num=(int)num”后,后,num的值等于多少?的值等于多少?第42页,本讲稿共73页左(变量)左(变量)右(表达式)右(表达式)结果结果int float、double舍弃小数(截断)舍弃小数(截断)float、double int 值不变值不变 int(2字节)字节)unsigned char赋给赋给int的低的低8位位,高高8位补位补0 signed char赋给赋给int的低的低8位位,高高8位补符号位补符号charint、short、long取低取低8位位long int int符号扩展符号扩展intlong
38、int截断(取低截断(取低16位)位)long int unsigned int 高位补高位补0二、赋值时的类型转换二、赋值时的类型转换 当赋值运算符两侧的类型不同时,在赋值前要进行类型转换。当赋值运算符两侧的类型不同时,在赋值前要进行类型转换。转换规则如下表:转换规则如下表:第43页,本讲稿共73页三、复合赋值运算三、复合赋值运算 复复合合赋赋值值运运算算符符是是由由赋赋值值运运算算符符之之前前再再加加一一个个双双目目运算符构成的。运算符构成的。复合赋值运算的一般格式为:复合赋值运算的一般格式为:变量变量 双目运算符=表达式表达式 复合赋值运算符复合赋值运算符 它它等价于:变量:变量=变量双
39、目运算符变量双目运算符(表达式表达式)。当当表表达达式式为为简简单单表表达达式式时时,表表达达式式外外的的一一对对圆圆括括号号才才可可缺缺省,否则可能出错。省,否则可能出错。第44页,本讲稿共73页例如:例如:x+=3 /*等价于等价于x=x+3*/y*=x+6/*等价于等价于y=y*(x+6),而不是而不是y=y*x+6*/C语言规定的语言规定的10种复合赋值运算符如下:种复合赋值运算符如下:+=,-=,*=,/=,%=;/*复合算术运算符(复合算术运算符(5个)个)*/&=,=,|=,=;/*复合位运算符(复合位运算符(5个)个)*/第45页,本讲稿共73页四、赋值表达式四、赋值表达式 一
40、般形式:一般形式:例:例:赋值表达式:赋值表达式:a=5 赋值语句:赋值语句:a=5;赋值表达式中的赋值表达式中的“表达式表达式”也可以是赋值表达式。也可以是赋值表达式。请计算下列表达式中各变量的值:请计算下列表达式中各变量的值:(1)a=(b=5)(2)a=b=5 (3)a=5+(c=6)(4)a=(b=4)+(c=6)(5)a=(b=10)/(c=2)(6)a+=a-=a*a(设设a=5)第46页,本讲稿共73页3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式一、一般形式:表达式一、一般形式:表达式1,表达式,表达式2,表达式表达式n二、求解过程:按顺序求解。二、求解过程:按顺序求解
41、。三、表达式的值:最后一个表达式的值三、表达式的值:最后一个表达式的值四、优先级:最低四、优先级:最低五、不是所有的逗号都是逗号运算符五、不是所有的逗号都是逗号运算符第47页,本讲稿共73页例:(1)a=5+4,6*a(2)(a=5+4,6*a),a-2(3)b=(a=4,a*5)(4)b=a=4,5*a答案:(1)a=9,54(2)a=9,7(3)a=4,b=20(4)a=4,b=4,20第48页,本讲稿共73页区别区别1:(逗号运算符在所有运算符中优先级最低):(逗号运算符在所有运算符中优先级最低)x=(a=3,6*3)/*赋值表达式赋值表达式*/x=a=3,6*a/*逗号表达式逗号表达式
42、*/区别区别2:(逗号可以作运算符,也可以作分隔符):(逗号可以作运算符,也可以作分隔符)printf(%d,%d,%d,a,b,c);/*逗号做分隔符逗号做分隔符*/printf(%d,%d,%d,(a,b,c),b,c);/*(a,b,c)中的逗号是运算符,其余逗号是分隔符中的逗号是运算符,其余逗号是分隔符*/第49页,本讲稿共73页课后作业(课后作业(P66):):必做题:必做题:2、3、5、6、8、9、10、12 选做题:选做题:4、11第50页,本讲稿共73页5.1 关系运算符及其表达式关系运算符及其表达式 关关系系运运算算:比比较较运运算算,用用“关关系系表表达达式式”进进行行运运
43、算算。它它取两个值:取两个值:真真(true)和和假假(false)。)。一、一、关系运算符及其优先次序关系运算符及其优先次序 1.C语言有六种关系运算符:语言有六种关系运算符:小于优先级相同小于优先级相同 (高)(高)大于大于 =大于或等于大于或等于 =等于等于 !=不等于不等于 (低)(低)注意:在语言中,:在语言中,“等于等于”关系运算符是双等号关系运算符是双等号“=”,而不是单等号而不是单等号“=”(赋值运算符)。(赋值运算符)。第51页,本讲稿共73页2优先级优先级 (1)在在关关系系运运算算符符中中,前前4个个优优先先级级相相同同,后后2个也相同,且前个也相同,且前4个高于后个高于
44、后2个。个。(2)与其它种类运算符的优先级关系)与其它种类运算符的优先级关系 关关系系运运算算符符的的优优先先级级,低低于于算算术术运运算算符符,但高于赋值运算符。但高于赋值运算符。第52页,本讲稿共73页二、关系表达式二、关系表达式 1关系表达式的概念关系表达式的概念 所所谓谓关关系系表表达达式式是是指指,用用关关系系运运算算符符将将两两个个表表达达式式连连接起来,进行关系运算的式子。接起来,进行关系运算的式子。例如,下面的关系表达式都是合法的:例如,下面的关系表达式都是合法的:ab,a+bc-d,(a=3)=b,(ab)=(bc)2关系表达式的值关系表达式的值逻辑值逻辑值(非(非“真真”即
45、即“假假”)。)。由由于于语语言言没没有有逻逻辑辑型型数数据据,所所以以用用整整数数“”表表示示“逻辑真逻辑真”,用整数,用整数“”表示表示“逻辑假逻辑假”。第53页,本讲稿共73页例如,假设例如,假设num1=3,num2=4,num3=5,则:则:(1)num1num2的值的值=0。(2)(num1num2)!=num3的值的值=1。(3)num1num2num3的值的值=1。思考:任任意意改改变变num1或或num2的的值值,会会影影响响整整个个表表达达式式的的值值吗吗?为什么?为什么?(4)(num1num2)+num3的的值值=6,因因为为num1=0”。如果需要描述如果需要描述“x
46、=0”、同时同时“x=0)&(x10)、(x5)、!(x=0)、(year%4=0)&(year%100!=0)|(year%400=0)(2)运算规则运算规则 1)&:当当且且仅仅当当两两个个运运算算量量的的值值都都为为“真真”时时,运运算算结结果果为为“真真”,否则为否则为“假假”。2)|:当当且且仅仅当当两两个个运运算算量量的的值值都都为为“假假”时时,运运算算结结果果为为“假假”,否则为,否则为“真真”。3)!:当当运运算算量量的的值值为为“真真”时时,运运算算结结果果为为“假假”;当当运运算算量量的值为的值为“假假”时,运算结果为时,运算结果为“真真”。例如,假定例如,假定x=5,则
47、则 (x=0)&(x10)的值为的值为“真真”,(x5)的值为的值为“假假”。第56页,本讲稿共73页2逻辑运算符的运算优先级逻辑运算符的运算优先级 (1)逻逻辑辑非非的的优优先先级级最最高高,逻逻辑辑与与次次之之,逻逻辑辑或或最最低低,即:即:!(非)!(非)&(与)(与)|(或)(或)(2)与其它种类运算符的优先关系)与其它种类运算符的优先关系 !算术运算算术运算 关系运算关系运算&|赋值运算赋值运算第57页,本讲稿共73页二、逻辑表达式二、逻辑表达式 1逻辑表达式的概念逻辑表达式的概念 所所谓谓逻逻辑辑表表达达式式是是指指,用用逻逻辑辑运运算算符符将将1个个或或多多个个表表达达式式连连接
48、接起起来来,进进行行逻逻辑辑运运算算的的式式子子。在在C语语言言中中,用用逻逻辑表达式表示多个条件的组合。辑表达式表示多个条件的组合。例如,例如,(year%4=0)&(year%100!=0)|(year%400=0)就是就是一个判断一个年份是否是闰年的逻辑表达式。一个判断一个年份是否是闰年的逻辑表达式。v 逻辑表达式的值也是一个逻辑值逻辑表达式的值也是一个逻辑值(非非“真真”即即“假假”)。第58页,本讲稿共73页2逻辑量的真假判定逻辑量的真假判定0和和非非 语语言言用用整整数数“”表表示示“逻逻辑辑真真”、用用“”表表示示“逻逻辑辑假假”。但但在在判判断断一一个个数数据据的的“真真”或或
49、“假假”时时,却却以以和和非非为为根根据据:如如果果为为,则则判判定定为为“逻逻辑辑假假”;如如果果为为非非,则则判定为判定为“逻辑真逻辑真”。例例如如,假假设设num=12,则则:!num的的值值=,num=1 num31的值的值=1。第59页,本讲稿共73页3说明说明 (1)逻逻辑辑运运算算符符两两侧侧的的操操作作数数,除除可可以以是是和和非非的的整整数数外外,也可以是其它任何类型的数据也可以是其它任何类型的数据,如实型、字符型等。,如实型、字符型等。(2)在在计计算算逻逻辑辑表表达达式式时时,只只有有在在必必须须执执行行下下一一个个表表达达式式才才能能求求解解时,才求解该表达式时,才求解
50、该表达式(即并不是所有的表达式都被求解)。换句话说:(即并不是所有的表达式都被求解)。换句话说:1)对对于于逻逻辑辑与与运运算算,如如果果第第一一个个操操作作数数被被判判定定为为“假假”,系系统统不再判定或求解第二操作数。不再判定或求解第二操作数。2)对对于于逻逻辑辑或或运运算算,如如果果第第一一个个操操作作数数被被判判定定为为“真真”,系统不再判定或求解第二操作数。系统不再判定或求解第二操作数。例如:例如:假假设设n1、n2、n3、n4、x、y的的值值分分别别为为1、2、3、4、1、1,则则求求解解表表达达式式“(x=n1n2)&(y=n3n4)”后后,x的的值值变变为为,而而y的的值值不不