《第三章 基础知识.ppt》由会员分享,可在线阅读,更多相关《第三章 基础知识.ppt(77页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章第三章 基础知识基础知识【目的和要求目的和要求】:熟悉熟悉C C程序的符号系统,掌握程序的符号系统,掌握数据类型、常量和变量、运算符和表达式,熟数据类型、常量和变量、运算符和表达式,熟悉数据类型的转换。悉数据类型的转换。【重点重点】:数据类型,常量和变量,数据类型,常量和变量,运算符和表达式运算符和表达式【难点难点】:运算符和表达式运算符和表达式2例如:例如:【例【例3.1】计算圆的面积,半径为计算圆的面积,半径为 5 cm。main()float r r,areaarea;r r=5 5;areaarea=3.143.14*r r*r r;printf(%fn,areaarea);运算
2、结果运算结果运算结果运算结果:78.50000078.500000程序中用到的数据:程序中用到的数据:r、area、5、3.14对数据进行的运算:对数据进行的运算:*、=例例3.13分析:分析:计算机操作处理时,要完成以下工作计算机操作处理时,要完成以下工作:l l在内存中给半径在内存中给半径 r 和运算结果和运算结果 area 开辟存开辟存储空间,存放它们的值。储空间,存放它们的值。应该留多大的地应该留多大的地方来存放它们的值?方来存放它们的值?l l数据数据 5 和和 3.14 与与 r、area 不同,它们是在不同,它们是在编写程序时就给出确定的值,在运算过程编写程序时就给出确定的值,在
3、运算过程中不会改变。中不会改变。这样的数计算机怎么处理?这样的数计算机怎么处理?l l对对整数整数 5 和和小数小数3.14,计算机,计算机存放时是否存放时是否有区别?有区别?涉及数据类型涉及数据类型的基本知识的基本知识4本章主要内容本章主要内容l lC语言的基础,包括:语言的基础,包括:vvC C程序的符号系统程序的符号系统程序的符号系统程序的符号系统vv数据类型数据类型数据类型数据类型vv常量和变量常量和变量常量和变量常量和变量vv运算符和表达式运算符和表达式运算符和表达式运算符和表达式vv数据类型的转换数据类型的转换数据类型的转换数据类型的转换l l均是程序设计的基本知识均是程序设计的基
4、本知识l l为什么讨论为什么讨论这些知识这些知识?通常通常程序程序要对数据进行操作处理:要对数据进行操作处理:*处理的对象是处理的对象是数据数据*通过通过运算符和表达式运算符和表达式进行操作进行操作53.1 C程序的符号系统程序的符号系统l主要内容:主要内容:S基本字符基本字符S标识符标识符S关键字关键字63.1.1 基本字符基本字符 l l大写英文字母大写英文字母:A B C X Y Z l l小写英文字母小写英文字母:a b c x y z l l数字数字:0 1 2 9 l l空白符空白符:空格符、换行符、制表符:空格符、换行符、制表符 l l特殊字符特殊字符:+-*/()_ =!#%.
5、,;:“|&?$73.1.2 标识符标识符 l l由由字母字母、下划线下划线和和数字数字组成的字符序列组成的字符序列l l用于程序中的变量、符号常量、数组、函用于程序中的变量、符号常量、数组、函数、数据类型等操作对象的数、数据类型等操作对象的名字名字标识符命名规则:标识符命名规则:标识符命名规则:标识符命名规则:只能由字母、数字和下划线只能由字母、数字和下划线只能由字母、数字和下划线只能由字母、数字和下划线“_”“_”组成且必须以组成且必须以组成且必须以组成且必须以字字字字 母母母母或或或或下划线下划线下划线下划线“_”“_”开头开头开头开头 不允许使用不允许使用不允许使用不允许使用关键字关键
6、字关键字关键字作为标识符作为标识符作为标识符作为标识符 标识符中大小写字母含义不同标识符中大小写字母含义不同标识符中大小写字母含义不同标识符中大小写字母含义不同8l l建议:建议:见名知意见名知意 不宜混淆不宜混淆 如如l与与I,o与与0例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 int ab _above$123M.D.John3days#33int$123ab93.1.3 3.1.3 关键字关键字 (保留字)(保留字)l l数据类型:数据类型:数据类型:数据类型:intint、charch
7、ar、floatfloat、doubledouble、shortshort、longlong、voidvoid、signedsigned、unsignedunsigned、enumenum、structstruct、unionunion、constconst、typedeftypedef、volatile volatile l l存储类别:存储类别:存储类别:存储类别:autoauto、staticstatic、registerregister、extern extern l l语句命令字:语句命令字:语句命令字:语句命令字:breakbreak、casecase、continuecontin
8、ue、defaultdefault、dodo、elseelse、forfor、gotogoto、if if、returnreturn、switchswitch、while while l l运算符:运算符:运算符:运算符:sizeof sizeof 103.2 C语言的数据类型语言的数据类型 C数据类型数据类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型整型整型整型整型 字符型字符型字符型字符型 实实实实型型型型(浮浮浮浮点点点点型型型型)枚举类型枚举类型枚举类型枚举类型单精度型单精度型单精度型单精度型 双精度型双精度型双精度型双精度型 基本类型基本类型基本类型基本类型指针类型指针
9、类型空类型空类型构造类型构造类型本章讨论本章讨论本章讨论本章讨论基本类型数据基本类型数据基本类型数据基本类型数据数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作113.2.1 整型数据整型数据 1整型数据的类型整型数据的类型基本整型数据基本整型数据 int,分配分配 2 Byte短整型数据短整型数据 short int,分配分配 2 Byte长整型数据长整型数据 long int,分配分配 4 Byte整型数据均以整型数据均以二进制补码二进制补码形式存储形式存储问题:问题:为什么要采用补码?为什么要采用补码?如何表示?如何表示?12原码、反码和补码原码、反码和补码l l正
10、数正数:原码、反码、补码相同原码、反码、补码相同符号位为符号位为0,数值为对应的二进制数。,数值为对应的二进制数。109 01101101原原=01101101反反=01101101补补l l负数负数:原码原码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数。数。10911101101原原反码反码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数各位变反。数各位变反。10910010010反反 补码补码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数各位变反加数各位变反加1 1。10910010011补补132.有符号和无符号整型数据有
11、符号和无符号整型数据 有符号的整型数据有符号的整型数据 signed int 无符号的整型数据无符号的整型数据 unsigned int区别是将区别是将最高位最高位看作符号位还是数据位看作符号位还是数据位例如:例如:1111 1111 1010 1000作为作为有符号数有符号数使用时,最高为符号位使用时,最高为符号位为负数,值是:为负数,值是:-88(再求一次补)(再求一次补)作为作为无符号数无符号数使用时,最高为数据位使用时,最高为数据位为无符号的数,值是:为无符号的数,值是:6544814例例3.2:main()main()unsigned int m;unsigned int m;m=m
12、=6544865448;printf(nm=printf(nm=%d%dn,m);n,m);printf(m=printf(m=%u%un,m);n,m);输出结果:输出结果:m=-88m=65448按有符号数输出按有符号数输出按无符号数输出按无符号数输出例例3.215整型数据的类型及规定整型数据的类型及规定类型名称类型名称类型名称类型名称类型符类型符类型符类型符bitbit取值范围取值范围取值范围取值范围整型整型整型整型(短整型短整型短整型短整型)signed signed int int signed signed shortshort int int 1616-2 215152 2151
13、5-1-1(-32768(-3276832767)32767)无符号整型无符号整型无符号整型无符号整型unsignedunsigned int intunsigned shortunsigned short int int16160 0 2 21616-1-1(0(065535)65535)长整型长整型长整型长整型 signed signed longlong int int3232-2-231312 23131-1-1无符号长整型无符号长整型无符号长整型无符号长整型 unsigned longunsigned long int int32320 0 2 23232-1-1163.2.2 实型
14、数据实型数据 1实型数据的类型实型数据的类型 单精度实型数据单精度实型数据 float,分配分配4 Byte 双精度实型数据双精度实型数据double,分配,分配 8 Byte2实型数据的存储实型数据的存储 单精度实型单精度实型单精度实型单精度实型指数部分指数部分指数部分指数部分小数部分小数部分小数部分小数部分 小数的符号位小数的符号位指数的符号位指数的符号位17实型数据的类型及规定实型数据的类型及规定 l lC C标准并未具体规定各种实型数据所占字节数,也不规定具标准并未具体规定各种实型数据所占字节数,也不规定具标准并未具体规定各种实型数据所占字节数,也不规定具标准并未具体规定各种实型数据所
15、占字节数,也不规定具体小数和指数部分的位数。体小数和指数部分的位数。体小数和指数部分的位数。体小数和指数部分的位数。l l一般而言,小数部分位数多,数据表示的有效数字多,精度一般而言,小数部分位数多,数据表示的有效数字多,精度一般而言,小数部分位数多,数据表示的有效数字多,精度一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。就高;而指数部分位数多,则表示的数据范围更大。就高;而指数部分位数多,则表示的数据范围更大。就高;而指数部分位数多,则表示的数据范围更大。有效数字的意义?有效数字的意义?类型类型类型类型类型符类型符类型符类型符ByteByt
16、e绝对值的范围绝对值的范围绝对值的范围绝对值的范围有效数字有效数字有效数字有效数字单精度型单精度型单精度型单精度型 floatfloat4 41010-37 -37 10 1038387 78 8 位位位位双精度型双精度型双精度型双精度型 doubledouble8 81010-307-307 101030830815151616位位位位183.2.3 字符型数据字符型数据 l l字符型数据字符型数据char,分配分配 1 Byte l l字符型数据是指字母、数字、各种符号等字符型数据是指字母、数字、各种符号等用用ASCII值表示的字符值表示的字符l l例如例如 a 是一个是一个char类型数
17、据,称作字符类型数据,称作字符常量,存储:常量,存储:0 1 1 0 0 0 0 1193.3 常量、变量与标准函数常量、变量与标准函数 l主要内容:主要内容:常量常量变量变量标准库函数标准库函数203.3.1 常量常量 1整型常量整型常量*十进制十进制十进制十进制:0909*八进制八进制八进制八进制:0707,以,以,以,以 0 0开头开头开头开头*十六进制十六进制十六进制十六进制:0909,AF/afAF/af,以以以以 0 0 x x或或或或 0 0X X 开头开头开头开头例如:例如:100 -8 0 +123100 -8 0 +123010 024 0100 073010 024 01
18、00 0730 0 x38 0 x10 0X10 0XFF 0 x0ax38 0 x10 0X10 0XFF 0 x0a211.整型常量整型常量l l整型常量的类型:整型常量的类型:根据值大小默认类型。根据值大小默认类型。整型常量后面加整型常量后面加l或或L,则认为是则认为是long int型型 例如:例如:123L、0L、432l、0 x100l注意:注意:l l十六进制常量中可以使用大写字母十六进制常量中可以使用大写字母AF,也可以使用小写字母也可以使用小写字母af。l l八进制常量中不能出现数字八进制常量中不能出现数字 8 或或 9例如:例如:018、0921非法非法222.实型常量实型
19、常量 十进制形式十进制形式十进制形式十进制形式(必须有小数点)(必须有小数点)(必须有小数点)(必须有小数点)1.0 1.+12.0 -12.0 0.01.0 1.+12.0 -12.0 0.0 指数形式指数形式指数形式指数形式(e e或或或或E E之前必须有数字;指数必须为整数)之前必须有数字;指数必须为整数)之前必须有数字;指数必须为整数)之前必须有数字;指数必须为整数)1 1e3 1.8e-3 -123E-6 -.1E-3e3 1.8e-3 -123E-6 -.1E-3等价于:等价于:等价于:等价于:1101103 3 1.810 1.810-3-3 -1231012310-6-6 -0
20、.1100.110-3-3指数只能是整数,而尾数则可以是整数也可以是指数只能是整数,而尾数则可以是整数也可以是小数小数,无论指数或尾数均不能省略,无论指数或尾数均不能省略例如:例如:1 1e e、E.5E.5、E-3E-3 非法非法实型常量的类型:默认为实型常量的类型:默认为doubledouble型,后面加型,后面加F F(或或f f),),则强调表示该数是则强调表示该数是float类型类型例如:例如:3.5f f、1e2F F 233.字符常量字符常量l l定义定义定义定义:用用用用单引号单引号单引号单引号括起来的单个括起来的单个括起来的单个括起来的单个普通字符普通字符普通字符普通字符或或
21、或或转义字符转义字符转义字符转义字符.l l字符常量的值:该字符的字符常量的值:该字符的字符常量的值:该字符的字符常量的值:该字符的ASCIIASCIIASCIIASCII码码码码值值值值转义字符及其含义:转义字符及其含义:转义字符及其含义:转义字符及其含义:转义字符转义字符含义含义nvradddtbf“xhh转义字符转义字符含义含义换行换行垂直制表垂直制表回车回车响铃响铃单引号单引号3位位8进制数代表的字符进制数代表的字符水平制表水平制表退格退格换页换页反斜线反斜线双引号双引号2位位16进制数代表的字符进制数代表的字符如如 101 -A 012 -n 376 -x61 -a 60 -0 48
22、3 -()例例:A-101-x41-65如如 A65A65,a97a97,048,n10048,n10如如 a A?n 101l l转义字符转义字符转义字符转义字符:反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示例例 3.3 转义字符举例转义字符举例main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);运行结果:运行结果:(屏幕显示屏幕显示)A B CIsay:”How are
23、 you?”C ProgramTurbo C例例 3.4 main()printf(“Yb=n”);运行结果:运行结果:屏幕显示:屏幕显示:=打印机输出:打印机输出:例例3.3例例3.424aaal l字符常量与字符串常量不同字符常量与字符串常量不同字符常量与字符串常量不同字符常量与字符串常量不同4.字符串常量字符串常量l l定义:用双引号定义:用双引号定义:用双引号定义:用双引号(“”)(“”)(“”)(“”)括起来的字符序列括起来的字符序列括起来的字符序列括起来的字符序列l l存储:存储:存储:存储:每个字符串尾每个字符串尾每个字符串尾每个字符串尾自动自动自动自动加一个加一个加一个加一个
24、0 0 0 0 作为字符串结束标志作为字符串结束标志作为字符串结束标志作为字符串结束标志h e l l o 0例例 字符串字符串“hello”hello”在内存中在内存中a a 0例例 a“a”例例 空串空串 “”0例例:char ch;ch=A;例例:char ch;ch=“A”;255.符号常量符号常量 l l以标识符来代表的常量以标识符来代表的常量以标识符来代表的常量以标识符来代表的常量uu定义格式:定义格式:定义格式:定义格式:#define#define#define#define 符号常量符号常量符号常量符号常量 标识符标识符标识符标识符uu一般用大写字母一般用大写字母一般用大写字
25、母一般用大写字母uu是宏定义预处理命令,不是是宏定义预处理命令,不是是宏定义预处理命令,不是是宏定义预处理命令,不是C C语句语句语句语句例例例例3.53.5:#define define LENLEN 2.52.5main()main()float a,b;float a,b;a=2*3.14*a=2*3.14*LENLEN;b=3.14*b=3.14*LENLEN*LENLEN;printf(a=%f,b=%fn,a,b);printf(a=%f,b=%fn,a,b);定义符号常量定义符号常量定义符号常量定义符号常量使用符号常量使用符号常量使用符号常量使用符号常量编译前系统进行替换编译前系
26、统进行替换编译前系统进行替换编译前系统进行替换例例3.5265.符号常量符号常量例例例例3.63.6main()main()float a,b;float a,b;a=2*3.14*a=2*3.14*2.52.5;b=3.14*b=3.14*2.52.5*2.52.5;printf(a=%f,b=%fn,a,b);printf(a=%f,b=%fn,a,b);define是编译预处理命令,必须以是编译预处理命令,必须以“#”开开头头编译预处理命令在第编译预处理命令在第9章讨论。章讨论。替换为替换为替换为替换为例例3.6273.3.2 变量变量 变量的有关概念变量的有关概念l l在程序运行过程中
27、,其值改变的数据,称为在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量,变量用标识符表示,称为变量名变量名。l l变量必须变量必须“先定义后使用先定义后使用”l l系统为变量分配存储单元,存储变量的值。系统为变量分配存储单元,存储变量的值。l l编写程序时通过变量名来存、取编写程序时通过变量名来存、取变量值变量值。a a510510变量值变量值变量值变量值为变量分配的为变量分配的为变量分配的为变量分配的存储单元存储单元存储单元存储单元变量名变量名变量名变量名例如:例如:有有变量变量a a它的值是它的值是5 5101028编译程序根据变量定义为其编译程序根据变量定义为其分配
28、指定字节的内存单元分配指定字节的内存单元.地址地址int a=1,b=-3,c;abc2字节字节2字节字节2字节字节地址地址地址地址.内存内存1-3随机数随机数l l变量定义的一般格式:变量定义的一般格式:变量定义的一般格式:变量定义的一般格式:数据类型数据类型数据类型数据类型 变量变量变量变量11,变量,变量,变量,变量2 2,变量,变量,变量,变量n;n;l l变量初始化变量初始化变量初始化变量初始化:定义时赋初值定义时赋初值定义时赋初值定义时赋初值 例例:int a,b,c;float data;决定分配字节数决定分配字节数和数的表示范围和数的表示范围合法标识符合法标识符例例1 int
29、student;stadent=19;/*Undefined symbol statent in function main 例例2 float a,b,c;c=a%b;/*Illegal use of floating point in function main l l变量定义位置:变量定义位置:变量定义位置:变量定义位置:一般一般一般一般放在函数开头放在函数开头放在函数开头放在函数开头例例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;()main()int a,b=2;float data;a=1
30、;data=(a+b)*1.2;printf(“data=%fn”,data);变量定义变量定义可执行语句可执行语句main()int a,b=2;a=1;float data;data=(a+b)*1.2;printf(“data=%fn”,data);29&整型变量整型变量l l占字节数随机器不同而不同占字节数随机器不同而不同占字节数随机器不同而不同占字节数随机器不同而不同,一般占一个机器字一般占一个机器字一般占一个机器字一般占一个机器字l lshortintlongshortintlongshortintlongshortintlongl l可用可用可用可用sizeofsizeofsiz
31、eofsizeof(类型标识符)测量类型标识符)测量类型标识符)测量类型标识符)测量&实型变量实型变量l lfloatfloatfloatfloat:占占占占4 4 4 4字节,提供字节,提供字节,提供字节,提供7 7 7 7位有效数字位有效数字位有效数字位有效数字l ldoubledoubledoubledouble:占占占占8 8 8 8字节,提供字节,提供字节,提供字节,提供15151515 16161616位有效数字位有效数字位有效数字位有效数字&字符型变量字符型变量l l字符变量存放字符字符变量存放字符字符变量存放字符字符变量存放字符ASCIIASCIIASCIIASCII码码码码l
32、 lcharcharcharchar与与与与intintintint数据间可进行算术运算数据间可进行算术运算数据间可进行算术运算数据间可进行算术运算例例 float a;a=111111.111;/*a=111111.1*/double b;b=111111.111;/*b=111111.111*/例例 a=D;/*a=68;*/a=D;/*a=68;*/x=A+5;/*x=65+5;*/x=A+5;/*x=65+5;*/s=!+G /*s=33+71;*/s=!+G /*s=33+71;*/没有没有字符串变量字符串变量,用字符数组存放,用字符数组存放30例例3.7#define PRICE
33、12.5 main()int num=3;float total;char ch1,ch2=D;total=num*PRICE;ch1=ch2-A+a;printf(“total=%f,ch1=%cn”,total,ch1);宏定义宏定义变量定义变量定义输出结果输出结果运行结果:运行结果:total=37.500000,ch1=d例例3.7313.3.3 标准库函数标准库函数l l常用函数常用函数如:如:如:如:printfprintf、scanfscanf、fabsfabs、sqrtsqrt、sinsin等等等等(常用数学函数参见教材常用数学函数参见教材常用数学函数参见教材常用数学函数参见教
34、材 附录附录附录附录 )l l函数调用形式函数调用形式:函数名(参数表)函数名(参数表)例如:例如:putchar(a)sqrt(x)323.4 运算符和表达式运算符和表达式l l主要内容:主要内容:F算术运算符和算术表达式算术运算符和算术表达式F赋值运算符和赋值表达式赋值运算符和赋值表达式F关系运算符和关系表达式关系运算符和关系表达式(第五章选择结构中)(第五章选择结构中)(第五章选择结构中)(第五章选择结构中)F逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式(第五章选择结构中)(第五章选择结构中)(第五章选择结构中)(第五章选择结构中)F位运算符和位运算表达式位运算符和位运算表达式(第十二章
35、位运算)(第十二章位运算)(第十二章位运算)(第十二章位运算)F条件运算符和条件表达式条件运算符和条件表达式(第五章选择结构中)(第五章选择结构中)(第五章选择结构中)(第五章选择结构中)F逗号运算符和逗号表达式逗号运算符和逗号表达式F其他运算符及其运算其他运算符及其运算33学习运算符应注意:学习运算符应注意:l l运算符功能运算符功能运算符功能运算符功能l l与运算量关系与运算量关系与运算量关系与运算量关系uu要求运算量个数要求运算量个数要求运算量个数要求运算量个数uu要求运算量类型要求运算量类型要求运算量类型要求运算量类型l l运算符优先级别运算符优先级别运算符优先级别运算符优先级别l l
36、结合方向结合方向结合方向结合方向l l结果的类型结果的类型结果的类型结果的类型34运算符的有关概念运算符的有关概念l l作用:作用:对运算对象完成规定的操作运算对运算对象完成规定的操作运算l l类型:类型:按运算对象分:按运算对象分:l l单目、双目、三目单目、双目、三目单目、双目、三目单目、双目、三目 按功能分:按功能分:l l算术、赋值、关系、逻辑、算术、赋值、关系、逻辑、算术、赋值、关系、逻辑、算术、赋值、关系、逻辑、条件、逗号、位、其他条件、逗号、位、其他条件、逗号、位、其他条件、逗号、位、其他35运算符的优先级和结合性运算符的优先级和结合性l l优先级优先级例如:例如:例如:例如:算
37、术运算优先于关系运算算术运算优先于关系运算算术运算优先于关系运算算术运算优先于关系运算 算术运算中先算术运算中先算术运算中先算术运算中先*/*/*/*/后后后后+-+-+-+-l l结合性结合性 分为:分为:分为:分为:左结合左结合左结合左结合和和和和右结合右结合右结合右结合 例如:例如:例如:例如:算术运算符为算术运算符为算术运算符为算术运算符为左结合左结合左结合左结合 a-ba-b+4 4 赋值运算符为赋值运算符为赋值运算符为赋值运算符为右结合右结合右结合右结合 a=b=5a=b=5(C C语言规定见语言规定见语言规定见语言规定见附录附录附录附录)36本章涉及的运算符本章涉及的运算符+-*
38、/%+-*/%+-*/%+-*/%+-+-+-+-+-+-+-+-=+=-=*=/=%=+=-=*=/=%=+=-=*=/=%=+=-=*=/=%=&=|=!=&|&|&|&|!&|&|&|&|?:?:?:?:,&sizeof sizeof sizeof sizeof (数据类型标识符数据类型标识符数据类型标识符数据类型标识符)类型类型类型类型种类种类种类种类算术运算符算术运算符算术运算符算术运算符赋值运算符赋值运算符赋值运算符赋值运算符关系运算符关系运算符关系运算符关系运算符逻辑运算符逻辑运算符逻辑运算符逻辑运算符位运算符位运算符位运算符位运算符条件运算符条件运算符条件运算符条件运算符逗号运
39、算符逗号运算符逗号运算符逗号运算符其他运算符其他运算符其他运算符其他运算符37表达式的有关概念表达式的有关概念l l什么是表达式什么是表达式l l计算表达式的值计算表达式的值按照运算符的运算规则求值按照运算符的运算规则求值求值时注意运算符的优先级和结合性求值时注意运算符的优先级和结合性l l表达式值的类型表达式值的类型自动转换自动转换强制转换强制转换 如表达式:如表达式:如表达式:如表达式:150+b*2150+b*212.456 12.456 b=(+a)-2b=(+a)-238算术运算算术运算l l算术运算符的优先级算术运算符的优先级()+-+-*/%+-同级 同级 同级 单目单目 双目双
40、目 高高高高 低低低低l l没有乘方运算符没有乘方运算符没有乘方运算符没有乘方运算符,要计算,要计算,要计算,要计算a a3 3要写作要写作要写作要写作 a*a*a a*a*a 的连乘,的连乘,的连乘,的连乘,或用标准库函数或用标准库函数或用标准库函数或用标准库函数 pow(apow(a,3),3)l l“/”的运算对象可为各种类型数据,但是当进行两个的运算对象可为各种类型数据,但是当进行两个的运算对象可为各种类型数据,但是当进行两个的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据整型数据相除时,运算结果也是整型数据整型数据相除时,运算结果也是整型数据整型数据相除
41、时,运算结果也是整型数据 l l“%”要求运算对象必须是整型数据,功能是求两数要求运算对象必须是整型数据,功能是求两数要求运算对象必须是整型数据,功能是求两数要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同。相除的余数,余数的符号与被除数的符号相同。相除的余数,余数的符号与被除数的符号相同。相除的余数,余数的符号与被除数的符号相同。例 5/2 =2 -5/2.0=-2.5例 5%2 =1 -5%2 =-1 1%10 =1 5%1 =0 5.5%2 ()39自增自减运算自增自减运算l l+-是是单目运算符单目运算符l l有前缀和后缀有前缀和后缀两种形式两种形式 前
42、缀形式前缀形式:先自增先自增(自减自减)再引用;再引用;后缀形式后缀形式:先引用再自增先引用再自增(自减自减);l l功能:功能:前缀形式前缀形式 +a a 等价于等价于 a=a+1a=a+1 -a a 等价于等价于 a=a a=a 1 1 后缀形式后缀形式 a+a+等价于等价于 a=a+1a=a+1 a a-等价于等价于 a=a a=a 1 1表达式的值会不同表达式的值会不同40例如:例如:当当 a5 时时 +a 表达式的值为表达式的值为 6,且且 a6 a+表达式的值为表达式的值为5,且且 a6 b=+a 等价于等价于 a=a+1;b=a 表达式的值为表达式的值为6,且,且 a=6,b=6
43、 b=a+等价于等价于 b=a;a=a+1 表达式的值为表达式的值为5,且,且 a=6,b=5 41说明:说明:l l+和和-的运算对象只能是变量的运算对象只能是变量,不能是常不能是常量。量。例如:例如:5+、(a+2)+不合法。不合法。l l具有右结合性。具有右结合性。例如:例如:a+等价于等价于 -(a+)l l如果有多个运算符连续出现时,如果有多个运算符连续出现时,C系统尽可系统尽可能多的从左到右将字符组合成一个运算符能多的从左到右将字符组合成一个运算符例如:例如:i+j 等价于等价于 (i+)+j -i+-j 等价于等价于-(i+)+(-j)42main()int a=5;printf
44、(%d%dn,a,a+);说明(续):说明(续):l l对函数参数的求值顺序:对函数参数的求值顺序:Turbo C系统先计算最右边的参数值,系统先计算最右边的参数值,再依次计算左面的参数值。再依次计算左面的参数值。【例【例3.8】有多个函数参数且为同一变量自增有多个函数参数且为同一变量自增的运算处理。的运算处理。输出结果:输出结果:6 5例例3.843说明(续):说明(续):【例【例3.9】有多个函数参数且为同一变量多次有多个函数参数且为同一变量多次自增的运算处理。自增的运算处理。main()int a=5;printf(%d%dn,a,(a+)+(a+);输出结果:输出结果:7 11例例3.
45、944赋值运算赋值运算l l赋值运算符赋值运算符(右结合)右结合)=+=-=*=/=%=&=|=l l赋值表达式赋值表达式 将将表达式的值表达式的值存入存入变量变量对应的内存单元中对应的内存单元中m=12b=(+a)-2 m%=3+n 等价于等价于 m=m%(3+n)x*=(x=5)45说明:说明:l l赋值号左边必须是变量,右边可以是赋值号左边必须是变量,右边可以是C语言语言任意合法的表达式任意合法的表达式例如:例如:n=t+210 等价于:等价于:a=(b=(b*c)10)l l赋值号与数学中的等号含义不同赋值号与数学中的等号含义不同例如:例如:数学中数学中 a=b 等价于等价于 b=a
46、C语言中语言中 a=b 不等价于不等价于 b=a46关系运算关系运算l l关系运算符关系运算符关系运算符关系运算符 (左结合)左结合)左结合)左结合)=!=!=较高较高较高较高 较低较低较低较低l l关系表达式关系表达式关系表达式关系表达式例如:例如:例如:例如:1212=c c 等价于等价于等价于等价于 a=(b=c)a=(b=c)与与与与 (a=b)=c a=b)=c 不等价不等价不等价不等价l l关系运算符优先于赋值,低于算术关系运算符优先于赋值,低于算术关系运算符优先于赋值,低于算术关系运算符优先于赋值,低于算术47说明:说明:l l关系运算的结果是关系运算的结果是逻辑值逻辑值。用数值
47、。用数值 1 表示表示逻辑真逻辑真,0 表示表示逻辑假逻辑假例如:例如:75 的值是的值是 1,57 的值是的值是 0 ab的值是的值是 0,a=z l l逻辑运算符的优先级逻辑运算符的优先级 和结合性:和结合性:!是单目运算符,是单目运算符,右结合右结合,高于算术,高于算术&和和|是双目运算符,是双目运算符,左结合左结合,高于,高于赋值运算符,低于关系运算符赋值运算符,低于关系运算符50逻辑运算规则逻辑运算规则l l从左到右依次进行逻辑计算从左到右依次进行逻辑计算运算对象为运算对象为非非0 0表示表示逻辑真逻辑真运算对象为运算对象为 0 0 表示表示逻辑假逻辑假l l逻辑运算的结果为逻辑运算
48、的结果为 0 0 或或 1 1例如设:例如设:a=15,b=0,c=-2 a&b&c 结果为结果为0 a|b|c 结果为结果为1 (a+c)|b&c 结果为结果为151逻辑运算规则(续)逻辑运算规则(续)l l运算按照运算按照从左至右从左至右的顺序进行,一旦能够的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算确定逻辑表达式的值,就立即结束运算例如例如设:设:a=1,b=0,c=-2a&b&c(a+)|+b&-c为为 0,运算终止,表达式,运算终止,表达式值值为为 0为非为非0,运算终止,表达式值为,运算终止,表达式值为 1且且a为为2,b为为0,c为为-2(b,c保持原值保持原值)52关
49、系与逻辑运算符的应用关系与逻辑运算符的应用l l表示数学公式表示数学公式abc l l判断判断a,b,c三条线段能否组成一个三角形三条线段能否组成一个三角形 l la,b不同时为负不同时为负 a+bc&a+cb&b+caa=0|b=0!(a0&b0)(a=0)|(a=0&b=0&b=0)a=0)|(a=0&b=0&b=0)ab&bc53条件表达式运算条件表达式运算l l条件运算符:条件运算符:?:l l条件表达式的一般形式条件表达式的一般形式 表达式表达式1?表达式表达式2:表达式表达式3例如:例如:m5?100:200 l lC语言中唯一的语言中唯一的三目运算符三目运算符,要正确区分用,要正
50、确区分用?和和:分隔的表达式分隔的表达式58条件运算符优先级条件运算符优先级l l高于赋值、逗号运算符,低于其他运算符高于赋值、逗号运算符,低于其他运算符 例如:例如:(1)m5?100:200等价于:等价于:(m5)?100:200)条件运算符的结合性条件运算符的结合性 l l右结合性右结合性例如:例如:wx?x+w:xy?x:y 与与 wx?x+w:(xy?x:y)等价等价 与与(wx?x+w:xy)?x:y 不等价不等价 59逗号表达式运算逗号表达式运算l l逗号表达式的一般形式逗号表达式的一般形式 表达式表达式1,表达式,表达式2,表达式,表达式nl l 逗号表达式的值逗号表达式的值