《C语言课件-3数据类型、运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《C语言课件-3数据类型、运算符与表达式.ppt(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章第三章 数据类型、运算符与表达式数据类型、运算符与表达式 3.1 3.1 语言的字符集语言的字符集3.23.2 语言的数据类型语言的数据类型3.33.3 常量与变量常量与变量3.43.4 变量的定义与赋值变量的定义与赋值3.53.5 符号常量符号常量3.63.6 运算符与表达式运算符与表达式3.73.7 各类型数据的混合运算各类型数据的混合运算3.8 3.8 不同类型赋值的结果不同类型赋值的结果3.1 3.1 语言的字符集语言的字符集3.1.1语言字符集语言字符集:1、字母:、字母:小写字母小写字母az、大写字母、大写字母AZ。2、数字:、数字:09共共10个。个。3、空白符:、空白符:
2、空格符、制表符、换行符等。空格符、制表符、换行符等。4、标点和特殊字符、标点和特殊字符。5、字符常量,、字符常量,字符串常量和注释中还可以使用字符串常量和注释中还可以使用汉字或其它可表示的图形符号。汉字或其它可表示的图形符号。字符是组成字符是组成字符是组成字符是组成语言的最语言的最语言的最语言的最基本的元基本的元基本的元基本的元素。素。素。素。3.1.2语言词汇(六类)语言词汇(六类)1、标识符:、标识符:变量名、函数名、标号等。变量名、函数名、标号等。2、关键字:、关键字:关关键键字字是是由由语语言言规规定定的的具具有有特特定定意意义义的的字字符符串串,通通常常也也称称为为保保留留字字。用用
3、户户定定义义的的标标识识符符不不应应与与关关键键字相同。字相同。P365(1)类类型型说说明明符符:用用于于定定义义、说说明明变变量量、函函数数或或其它数据结构的类型。其它数据结构的类型。(2)语句定义符:用于表示一个语句的功能。)语句定义符:用于表示一个语句的功能。(3)预处理命令字:用于表示一个预处理命令。)预处理命令字:用于表示一个预处理命令。标标识识符符:由由英英文文字字母母、数数字字和和下下划划线线这这三三种种字符组成且第一个字符必须为字母或下划线。字符组成且第一个字符必须为字母或下划线。作用:作用:用来给变量、函数等命名用来给变量、函数等命名注意:注意:1.区分大小写英文字母区分大
4、小写英文字母2.关键字(保留字)不能作标识符关键字(保留字)不能作标识符例例:book、Book 、int1、Int、printf、_a12都可作标识符都可作标识符5a、$、p#、int、x+y都不可作标识符都不可作标识符函数名不是函数名不是保留字保留字保留字保留字I大写大写3、运算符:、运算符:运运算算符符与与变变量量,函函数数一一起起组组成成表表达达式式,表表示示各各种种运运算功能。运算符由一个或多个字符组成。算功能。运算符由一个或多个字符组成。4、分隔符、分隔符在语言中采用的分隔符有逗号和空格两种。在语言中采用的分隔符有逗号和空格两种。5、常量:、常量:在后面章节中将专门给予介绍。在后面
5、章节中将专门给予介绍。6、注释符:、注释符:C语言的注释符是以语言的注释符是以“/*”开头并以开头并以“*/”结尾的串。结尾的串。在在“/*”和和“*/”之间的即为注释。程序编译时,之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解释程序的意义。位置。注释用来向用户提示或解释程序的意义。其值不可以再分解为其它类型。其值不可以再分解为其它类型。其值不可以再分解为其它类型。其值不可以再分解为其它类型。值用来表示某个值用来表示某个值用来表示某个值用来表示某个变量在内存储器变量在内存储器变量在内存储器变量在内
6、存储器中的地址中的地址中的地址中的地址 根据已定义的一个或多根据已定义的一个或多根据已定义的一个或多根据已定义的一个或多个数据类型用构造的方个数据类型用构造的方个数据类型用构造的方个数据类型用构造的方法来定义的。构造类型法来定义的。构造类型法来定义的。构造类型法来定义的。构造类型的值可以分解成若干个的值可以分解成若干个的值可以分解成若干个的值可以分解成若干个“成员成员成员成员”或或或或“元素元素元素元素”。每个每个每个每个“成员成员成员成员”都是一个都是一个都是一个都是一个基本数据类型或又是一基本数据类型或又是一基本数据类型或又是一基本数据类型或又是一个构造类型。个构造类型。个构造类型。个构造
7、类型。3.2 3.2 语言的数据类型语言的数据类型在调用函数值时,通常返回一个在调用函数值时,通常返回一个在调用函数值时,通常返回一个在调用函数值时,通常返回一个函数值,这个函数值是具有一定函数值,这个函数值是具有一定函数值,这个函数值是具有一定函数值,这个函数值是具有一定的数据类型的,应在函数定义及的数据类型的,应在函数定义及的数据类型的,应在函数定义及的数据类型的,应在函数定义及函数说明中给以说明。函数说明中给以说明。函数说明中给以说明。函数说明中给以说明。但是,也有一类函数,调用后并但是,也有一类函数,调用后并但是,也有一类函数,调用后并但是,也有一类函数,调用后并不需要向调用者返回函数
8、值,这不需要向调用者返回函数值,这不需要向调用者返回函数值,这不需要向调用者返回函数值,这种函数可以定义为种函数可以定义为种函数可以定义为种函数可以定义为“空类型空类型空类型空类型”。其类型说明符为其类型说明符为其类型说明符为其类型说明符为voidvoid。3.3 3.3 常量与变量常量与变量 基本数据类型分为:基本数据类型分为:1、常常量量:在在程程序序执执行行过过程程中中,其其值值不不发发生生改变的量改变的量2、变量:、变量:其值可变的量称为变量。其值可变的量称为变量。在程序中,常量是可以不在程序中,常量是可以不经说明而直接引用的,经说明而直接引用的,而变量则必须先定义后而变量则必须先定义
9、后使用。使用。3.3.1常量常量直接常量直接常量直接常量直接常量(字面常量字面常量字面常量字面常量):n整型常量:整型常量:12、0、-3;n n实型常量:实型常量:4.6、-1.23;n n字符常量:字符常量:a、b。n n字符串常量:字符串常量:“ABC”、“123”。标标标标识识识识符符符符:用用来来标标识识变变量量名名、符符号号常常量量名名、函函数数名名、数组名、类型名、文件名的有效字符序列。数组名、类型名、文件名的有效字符序列。符符符符号号号号常常常常量量量量:用用标标示示符符代代表表一一个个常常量量。在在语语言言中中,可可以以用用一一个个标标识识符符来来表表示示一一个个常常量量,称
10、称之之为为符符号号常常量。量。在使用之前必须先定义,在使用之前必须先定义,在使用之前必须先定义,在使用之前必须先定义,#define#define 一、整型常量:一、整型常量:1.十进制整数:十进制整数:123、-76、02八进制整数:八进制整数:076、-0253076转换成十进制:转换成十进制:7*8+63十六制整数:十六制整数:0 xa、0 x20、0 xf40 xf4转换成十进制:转换成十进制:15*16+4程序执行过程中值程序执行过程中值不发生改变的量不发生改变的量只有只有整数整数标识符号标识符号常量常量整型数据在内存中的存放形式整型数据在内存中的存放形式:如果定义了一个整型变量如果
11、定义了一个整型变量i:inti;i=10;十十进进制制数数10是是以以二二进进制制形形式式表表示示的的:1010,每每一一个整形变量在内存中占内个整形变量在内存中占内2字节,存放示意图为:字节,存放示意图为:事实上,数值是以补码表示的:事实上,数值是以补码表示的:事实上,数值是以补码表示的:事实上,数值是以补码表示的:n n正数的补码和原码相同;正数的补码和原码相同;n n负负数数的的补补码码:将将该该数数的的绝绝对对值值的的二二进进制制形形式式按位取反再加按位取反再加1。0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0例如:例如:求求-10的补码:的补码:10的原码:的原码:取
12、反:取反:再加再加1,得,得-10的补码:的补码:由此可知,左面的第一位是表示符号的。由此可知,左面的第一位是表示符号的。0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 01 1 1 1 1 1 1 1 1 1 1 1 0 1 0 11 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0二二、实实型型常常量量(浮浮点点型型):也也称称为为实实数数或或者者浮浮点数。实数只采用十进制,有二种形式:点数。实数只采用十进制,有二种形式:小数形式小数形式指数形式指数形式由由由由数数数数码码码码00 9 9和和和和 小小小小 数数数数 点点点点 组组组组成。成。成。成。小小小小 数数数
13、数 形形形形 式式式式 必必必必须有须有须有须有小数点小数点小数点小数点。由由由由 十十十十 进进进进 制制制制 数数数数、加加加加 阶阶阶阶 码码码码 标标标标 志志志志“e e”或或或或“E E”、阶阶阶阶码码码码(只只只只能能能能为为为为整数,可以带符号)组成。整数,可以带符号)组成。整数,可以带符号)组成。整数,可以带符号)组成。其其其其一一一一般般般般形形形形式式式式为为为为:aaEEn n(a a为为为为十十十十进制数,进制数,进制数,进制数,n n为十进制整数)为十进制整数)为十进制整数)为十进制整数)其值为:其值为:其值为:其值为:a*10a*10n n。实型常量实例:实型常量
14、实例:小数形式:小数形式:12.、.71、0.71、3.14指数形式:指数形式:6.945e-8注注意意:指指数数形形式式(科科学学表表示示法法)中中,尾尾数数和和阶阶码码都都不不能能省省略略、阶阶码码只只能能为为整整型型常常量量、只只有有十进制形式十进制形式6.945e8尾数尾数阶码阶码6.945*10-8小数点不能省略小数点不能省略注注:任任一一字字符符都都可可用用ddd或或xhh表表示示,其其中中ddd为为该该字字符符的的ASCII码码八八进进制制形形式式、hh为为该该字字符符的的ASCII码十六进制形式码十六进制形式例:例:A、101、x41均表示均表示A三、字符常量三、字符常量(一个
15、字符)(一个字符)两种表示方式:两种表示方式:1在字符前后加单撇号:在字符前后加单撇号:y、3、$2用转义字符表示(用转义字符表示(P48表表3.3):n换行换行r回车回车”表示表示”12换行换行15回车回车xa换行换行134xd回车回车x5c0-70-70-90-9a-fa-f整型常量与转义字符不能混淆整型常量与转义字符不能混淆整型常量与转义字符不能混淆整型常量与转义字符不能混淆四、字符串常量:四、字符串常量:由两个双撇号括起来由两个双撇号括起来由两个双撇号括起来由两个双撇号括起来一串字符,一串字符,其中字符个数其中字符个数=0个个字符串常量和字符常量字符串常量和字符常量区别区别:1)字字符
16、符常常量量由由单单引引号号括括起起来来,字字符符串串常常量量由由双双引引号号括括起起来来。字字符符常常量量只只能能是是单单个个字字符符,字符串常量则可以含一个或多个字符。字符串常量则可以含一个或多个字符。2)可可以以把把一一个个字字符符常常量量赋赋予予一一个个字字符符变变量量,不能把一个字符串常量赋予一个字符变量。不能把一个字符串常量赋予一个字符变量。3)字字符符常常量量占占一一个个字字节节的的内内存存空空间间。字字符符串串常常量量占占的的内内存存字字节节数数等等于于字字符符串串中中字字节节数数加加1。增增加加的的一一个个字字节节中中存存放放字字符符0(ASCII码为码为0)。这是字符串结束的
17、标志。这是字符串结束的标志。常量总结常量总结一、整型常量:一、整型常量:二、实型常量:二、实型常量:三、字符常量:三、字符常量:四、字符串常量:四、字符串常量:十进制整数:十进制整数:10八进制整数:八进制整数:012十六制整数:十六制整数:0 xa小数形式:小数形式:0.123456指数形式:指数形式:1.23456e-1ASCII码码 十十 进进 制制:nAASCII码码八八进进制制:12 101ASCII码码十十六六制制:xa x41以以00结束。结束。例如:例如:字符串字符串“Cprogram”在内存中所占的字节为在内存中所占的字节为:字符常量字符常量a和字符串常量和字符串常量“a”在
18、内存中的区别在内存中的区别:a在内存中占一个字节,可表示为:在内存中占一个字节,可表示为:a在内存中占二个字节,可表示为:在内存中占二个字节,可表示为:Cprogram0aa001100001例例:-3、3、3、“3”在在内内存存中中的的存存放放形形式:式:3:3:“3”:-3:0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 10 0 1 1 0 0 1 10 0 0 0 0 0 0 0 0 0 0 0 0 0 1 10 0 1 1 0 0 1 111 1 1 1 1 1 1 1 1 1 1 1 1 0 1?011 1 1 1 1 1 1 1 1 1 1 1 1 0 0ASCIIA
19、SCII码值为码值为码值为码值为(51)(51)1010(110011)(110011)2 21、计计 算算 字字 符符 串串 长长 度度(其其 中中 字字 符符 个个 数数)时时 要要 认认 真区分转义字符与一般字符真区分转义字符与一般字符如:如:”x1818qw+1681676”中字符个数为中字符个数为?2、字符串存储到内存中所占的字节数为:字符个数、字符串存储到内存中所占的字节数为:字符个数+1字符串常量可用转义字符表示字符串常量可用转义字符表示例:例:”ThisisaCprogramn”是字符串是字符串常量,它也可表示为常量,它也可表示为:”Thisisa103x20programn”
20、*若若若若把把把把字字字字符符符符串串串串存存存存储储储储到到到到内内内内存存存存中中中中,系系系系统统统统会自动在其末尾加一个会自动在其末尾加一个会自动在其末尾加一个会自动在其末尾加一个008*8+3=678*8+3=672*16=322*16=3210例例1.main()printf(”abtttpracticetbookn”);结果结果abtpracticebook*转义字符转义字符的使用例子的使用例子n换行换行、r回车、回车、t水平跳到下一个水平跳到下一个tab位置位置b退格退格、f换页换页8个字符个字符9 91 17 73333例例.voidmain()printf(”pencilb
21、bbxxxn”);先显示先显示先显示先显示pencilpencil再退三格用再退三格用再退三格用再退三格用xxxxxx覆盖覆盖覆盖覆盖cilcil先打印先打印先打印先打印pencilpencil再重复打印再重复打印再重复打印再重复打印xxxxxx覆盖覆盖覆盖覆盖cilcil退格退格退格退格显示结果显示结果:penxxx打印结果打印结果:pencilxxx例例.voidmain()printf(”room”);printf(”penciln1234567890r0t1”);显示结果显示结果:roompencil0 01010打印结果打印结果:roompencil1234567890换行换行换行换
22、行回车回车回车回车水平跳到下水平跳到下水平跳到下水平跳到下一个一个一个一个TabTab位位位位01先显示先显示先显示先显示12345678901234567890用标识符命名,习惯用小写用标识符命名,习惯用小写1、整型变量类型:、整型变量类型:(1)signedint(2)signedshortint(3)signedlongint(4)unsignedint(5)unsignedshortint(6)unsignedlongint区别:区别:每个变量在内存中所占字节数每个变量在内存中所占字节数所能存放的数值范围所能存放的数值范围3.3.2变量变量2 2字节字节字节字节1616位位位位4 4字
23、节字节字节字节3232位位位位P43P43表表表表3.13.1-32768-327683276732767006553565535各类整型量所分配的内存字节数及数的表示范围各类整型量所分配的内存字节数及数的表示范围以以13为例:为例:int型:型:shortint型:型:longint型:型:unsignedint型:型:unsignedshortint型:型:unsignedlongint型:型:00000000000011010000000000001101000000000000110100 00 00 00 00 00 11 0100 00 00 00 00 00 00 00 00 0
24、0 00 00 00 00 11 0100 00 00 00 00 00 00 00 00 00 00 00 00 00 11 01整型数据的溢出整型数据的溢出voidmain()inta,b;a=32767;b=a+1;printf(%d,%dn,a,b);32767:32767:0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0运行结果:运行结果:运行结果:运行结果:3276732767,-32768-32768-32768:-32768:2、字符型变量类型:、字符型变量类型:*字字符符型型变变量量是是用用来
25、来存存放放单单个个字字符符常常量量的的ASCII码码,不不是是字字符符本本身身。整整型型变变量量与与字字符符型变量可混淆使用。型变量可混淆使用。例如:例如:chara,b;(1)char(2)unsignedchar区别:对变量值区别:对变量值ASCII码码的理解的理解char一个数的补码一个数的补码unsignedchar一个不带正负号的整数一个不带正负号的整数字符变量的类字符变量的类字符变量的类字符变量的类型说明符型说明符型说明符型说明符 字符数据在内存中的存储形式及使用方法字符数据在内存中的存储形式及使用方法每每个个字字符符变变量量分分分分配配配配一一一一个个个个字字字字节节节节的的的的
26、内内内内存存存存空空空空间间间间,因因因因此此此此只只只只能能能能存存存存放一个字符放一个字符放一个字符放一个字符。字符值以字符值以字符值以字符值以ASCIIASCII码的形式存放码的形式存放码的形式存放码的形式存放。如:如:x的十进制的十进制ASCII码是码是120y的十进制的十进制ASCII码是码是121x:y:允允许许对对整整型型变变量量赋赋以以字字符符值值,或或对对字字符符变变量量赋赋以以整整型型值值。允允许许把把字字符符变变量量按按整整型型量量输输出出,或或把把整整型型量量按按字符量输出。字符量输出。整型量为二字节量,字符量为单字节量,当整型量整型量为二字节量,字符量为单字节量,当整
27、型量整型量为二字节量,字符量为单字节量,当整型量整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。按字符型量处理时,只有低八位字节参与处理。按字符型量处理时,只有低八位字节参与处理。按字符型量处理时,只有低八位字节参与处理。0111100001111001120的二进的二进制代码制代码3、实型变量类型、实型变量类型(1)float(2)double*(3)longdouble区别:区别:每个变量在内存中所占字节数每个变量在内存中所占字节数float4、double8所能存放的数值范围所能存放的数值范围float10-381038double10-308103
28、08有效数字位数有效数字位数float7、double16实数实数3.14159在内存中的存放形式如下:在内存中的存放形式如下:+.3141591数符数符指数指数小数部分小数部分占的位数愈多,占的位数愈多,数的有效数字愈数的有效数字愈多,精度愈高。多,精度愈高。占的位数愈占的位数愈多,能表示多,能表示的数值范围的数值范围愈大。愈大。实型数据的舍入误差。实型数据的舍入误差。voidmain()floata,b;a=123456.789e5;b=a+20;printf(%fn,a);printf(%fn,b);注意:注意:1.0/3*3的结果并不等于的结果并不等于1。大数加小大数加小大数加小大数加
29、小数数数数有效数字有效数字有效数字有效数字7 7位,位,位,位,前前前前7 7位有效位有效位有效位有效voidmain()floata;doubleb;a=33333.33333;b=33333.33333333333333;printf(%fn%fn,a,b);结结果:果:33333.332031 33333.333333 a a是是是是单单单单精精精精度度度度浮浮浮浮点点点点型型型型,有有有有效效效效位位位位数数数数七七七七位位位位。整整整整数数数数已已已已占占占占五五五五位位位位,故故故故小小小小数数数数二二二二位位位位之之之之后后后后均均均均为为为为无无无无效数字效数字效数字效数字b
30、b是是是是双双双双精精精精度度度度型型型型,有有有有效效效效位位位位为为为为十十十十六六六六位位位位。但但但但TurboTurboCC小小小小数数数数后后后后最最最最多多多多保保保保留留留留六六六六位位位位,其其其其余余余余部分四舍五入。部分四舍五入。部分四舍五入。部分四舍五入。一、定义变量类型:一、定义变量类型:;若若变变量量表表中中含含有有多多个个变变量量,它它们们之之间间 用用逗逗号号隔隔开开。最最后后一一个个变变量量名名之之后后必必须须以以“;”号结尾号结尾例:例:unsignedinti,j;或或unsignedi,j;3.4 3.4 变量定义与赋值变量定义与赋值一般所有变量都在声一
31、般所有变量都在声明部分定义类型明部分定义类型二、给变量赋值二、给变量赋值把把把把“=”“=”右侧的值赋给右侧的值赋给右侧的值赋给右侧的值赋给“=”“=”左侧的变量左侧的变量左侧的变量左侧的变量1、赋初值:定义变量类型时给变量赋值、赋初值:定义变量类型时给变量赋值在相应变量后写在相应变量后写=例:例:inta=123,b=456,sum;2、赋值表达式、赋值表达式:=赋值语句赋值语句:=;例:例:a=123sum=a+ba=123;sum=a+b;表达式末尾加表达式末尾加表达式末尾加表达式末尾加“;”后即变后即变后即变后即变成语句成语句成语句成语句等价于等价于等价于等价于inta,b,sum;i
32、nta,b,sum;a=123;b=456;a=123;b=456;表表达达式式本本身身有有值值的的概概念念,其其值值同同“=”左左边边变变量相同;而语句本身无值的概念;量相同;而语句本身无值的概念;表达式是用来构成语句的。表达式是用来构成语句的。注:注:表达式中变量可用给该变量赋值的赋值表表达式中变量可用给该变量赋值的赋值表达式代替达式代替(应加圆括号)(应加圆括号)例:例:a=123;b=456;sum=a+b;可改为:可改为:sum=(a=123)+(b=456);注意:注意:在在定义中定义中不允许连续赋值不允许连续赋值,如:,如:inta=b=c=5是不合法的是不合法的而而inta,b
33、,c;a=b=c=5则则是合法的是合法的voidmain()chara,b;a=120;b=121;printf(%c,%cn,a,b);printf(%d,%dn,a,b);运行运行结结果:果:x,y 120,121向字符向字符变变量量赋赋以整数以整数定义定义a,b为字符型为字符型赋值语句中赋值语句中赋以整型值赋以整型值格式符格式符c“,输出字符,输出字符格式符为格式符为d,输出整数输出整数voidmain()chara,b;a=a;b=b;a=a-32;b=b-32;printf(%c,%cn%d,%dn,a,b,a,b);运行运行结结果:果:A,B 65,66a,b被定义为字符变被定义为
34、字符变量并赋予字符值量并赋予字符值用字符的用字符的ASCII码参与运算码参与运算大小写字母的大小写字母的ASCII码相码相差差32,因此运算后把小写,因此运算后把小写字母换成大写字母。然后字母换成大写字母。然后分别以整型和字符型输出分别以整型和字符型输出3、变量、变量名、变量类型、变量值、给变量变量、变量名、变量类型、变量值、给变量赋值之间的关系赋值之间的关系变量变量杯杯变量名变量名杯子的号码杯子的号码变量类型变量类型所装的材料名称所装的材料名称变量值变量值所装的东西多少所装的东西多少给变量赋值给变量赋值把某材料倒进杯子把某材料倒进杯子水水1号杯号杯水水2号杯号杯油油3号杯号杯若类型不若类型不
35、若类型不若类型不一致、以一致、以一致、以一致、以变量为准变量为准变量为准变量为准inta;inta;a=123.5;a=123.5;则则则则a a为为为为123123*变量的特性:变量的特性:一个变量只有一个值一个变量只有一个值新的不来、旧的不去,新的一来、旧的立即丢失新的不来、旧的不去,新的一来、旧的立即丢失取之不尽取之不尽例例:inta;a=3;a=7.8;这段时间这段时间这段时间这段时间aa值值值值为为为为3 3这段时间这段时间这段时间这段时间aa值值值值为为为为7 74、两类常用赋值表达式的特别表示、两类常用赋值表达式的特别表示(1)自增、自减运算符自增、自减运算符=+1+1可用可用+
36、代替代替例例:i=i+1、count=count+1=11可用可用代替代替例例k=k1、num=num1+与与+的区别的区别+的值为变量增一前的值的值为变量增一前的值+的值为变量增一的值的值为变量增一的值同样,同样,的值为变量减一前的值的值为变量减一前的值的值为变量增一的值的值为变量增一的值提高可执提高可执行程序的行程序的质量质量+i+countknum例:例:voidmain()inti,j,k;i=3;j=+i;i=3;k=i+;printf(”%d,%dn”,j,k);i=3;j=i;i=3;k=i;printf(”%d,%dn”,j,k);j j为为为为4 4i i为为为为4 4i i
37、为为为为3 3重新赋值重新赋值重新赋值重新赋值k k为为为为i i增增增增1 1前的值前的值前的值前的值i i为为为为3 3重新赋值重新赋值重新赋值重新赋值结果:结果:结果:结果:44,3 322,3 3例:例:voidmain()inti,j,k;i=3;j=+i;k=i+;printf(”%d,%dn”,j,k);i=3;j=i;k=i;printf(”%d,%dn”,j,k);j j为为为为4 4i i为为为为4 4k k为为为为4,4,运行之后运行之后运行之后运行之后i i为为为为5 5j j为为为为3,3,运行之后运行之后运行之后运行之后i i为为为为2 2结果:结果:4,43,1(
38、2)复合的赋值运算符)复合的赋值运算符=+表达式表达式表达式表达式=表达式表达式表达式表达式=*表达式表达式表达式表达式分别可用分别可用+=+=表达式表达式表达式表达式=表达式表达式表达式表达式*=*=表达式表达式表达式表达式代替代替i=i+3sum=sum+y+8n=n2sum=sum3*wn=n*2sum=sum*(3+w)i+=3sum+=y+8n=2sum=3*wn*=2sum*=3+w+=、=、*=、/=%=求余求余=右移右移&=按位与按位与=按位异或按位异或|=按位或按位或10种复合的赋值运算符:种复合的赋值运算符:3.5 3.5 符号常量符号常量 用用#define命命令令宏宏定
39、定义义一一个个符符号号常常量量(用用标标识识符符命命名名)代表某一常量代表某一常量作用:作用:作用:作用:减少程序中重复书写某些常量的工作量减少程序中重复书写某些常量的工作量例例#definePI3.141592#definePI3.141592#includevoidmain()printf(”%f,%fn”,sin(35*PI/180),cos(35*PI/180);注意:注意:注意:注意:1.符号常量名中的英文字母习惯用大写符号常量名中的英文字母习惯用大写2.不能象给变量赋值那样给符号常量赋值不能象给变量赋值那样给符号常量赋值3.符号常量即以后要讲的符号常量即以后要讲的宏名宏名宏名宏名的
40、用途。的用途。调用函数库调用函数库调用函数库调用函数库中的函数中的函数中的函数中的函数a=3.14159合法合法3.14159=a非法非法例:例:#defineS“ThisisaCProgram.”voidmain()printf(S););双引号双引号3.6 3.6 运算符与表达式运算符与表达式由由P365附附录录III中中的的运运算算符符把把常常量量、符符号号常常量量、变变量量、函函数数等等连连接接起起来来的的有有意意义的式子义的式子:如:如:a+=a*=(b=2)/(float)(int)(a=4.5).(1 1)算术运算符:)算术运算符:)算术运算符:)算术运算符:用于各类数值运算:用
41、于各类数值运算:加加(+)、减、减(-)、乘、乘(*)、除、除(/)、求余、求余(或称模或称模运算,运算,%)、自增、自增(+)、自减、自减(-)共七种。共七种。(2 2)关系运算符:)关系运算符:)关系运算符:)关系运算符:用于比较运算:用于比较运算:大于大于()、小于、小于(=)、小于等于小于等于(=)和不等于和不等于(!=)六种。六种。(3 3)逻辑运算符:)逻辑运算符:)逻辑运算符:)逻辑运算符:用于逻辑运算:与用于逻辑运算:与(&)、或、或(|)、非、非(!)三种。三种。3.6.1语言的运算符:语言的运算符:P365(4)位操作运算符:)位操作运算符:参与运算的量,按二进制位进行运算
42、:参与运算的量,按二进制位进行运算:位与位与(&)、位或、位或(|)、位非、位非()、位异或、位异或()、左移左移()六种。六种。(5)赋值运算符:)赋值运算符:用于赋值运算,分为简单赋值用于赋值运算,分为简单赋值(=)、复合算术、复合算术赋值赋值(+=,-=,*=,/=,%=)和复合位运算赋值和复合位运算赋值(&=,|=,=,=,=)三类共十一种。三类共十一种。(6)条件运算符:)条件运算符:这是一个三目运算符,用于条件求值这是一个三目运算符,用于条件求值(?:)。(7)逗号运算符:)逗号运算符:用于把若干表达式组合成一个表达式用于把若干表达式组合成一个表达式(,)。(8)指针运算符:)指针
43、运算符:用于取内容用于取内容(*)和取地址和取地址(&)二种运算。二种运算。(9)求字节数运算符:)求字节数运算符:用于计算数据类型所占的字节数用于计算数据类型所占的字节数(sizeof)。(10)特殊运算符:)特殊运算符:有括号有括号(),下标,下标,成员,成员(,.)等几种。等几种。3.6.2表达式表达式一、一、赋值表达式:赋值表达式:1三种形式的赋值表达式三种形式的赋值表达式一般赋值表达式:一般赋值表达式:自增自减表达式:自增自减表达式:复合赋值表达式:复合赋值表达式:t*=j/(2*j+1)k+s=6*a+12、赋值表达式举例:、赋值表达式举例:a=b=c=5a=5+(c=6)a=(b
44、=4)+(c=6)a=(b=10)/(c=2)表达式的值为表达式的值为5,a,b,c的值均为的值均为5表达式的值为表达式的值为11,a值为值为11,c的值为的值为6表达式的值为表达式的值为10,a为为10,b为为4,c为为6表达式的值为表达式的值为5,a为为5,b为为10,c为为2二算术表达式二算术表达式:类似数学中的代数式。类似数学中的代数式。例:例:pow(a,2)*b/c+1.5*fabs(sin(x*3.14159/180)/aP371函数函数a2b/c+1.5|sin(3.14159x)/180|/97abs(abs(整型整型整型整型)fabc(fabc(实型实型实型实型/整型整型整
45、型整型)1、算术运算符的有关说明:、算术运算符的有关说明:两个整数相除,如果有小数部分:两个整数相除,如果有小数部分:1、结果为整数:舍去小数部分,取整;、结果为整数:舍去小数部分,取整;2、结果为负数:舍入方向不固定,采取、结果为负数:舍入方向不固定,采取“向向零取整零取整”的方法,即取整后向的方法,即取整后向“0”靠拢。靠拢。如:如:-5/3=-1l l运运算算符符的的优优先先级级:P365,优优先先级级较较高高的的先先于于优优先先级级较较低低的的。一一个个运运算算量量两两侧侧的的运运算算符符优优先先级级相相同同时时,则则按按运运算算符符的的结结合合性性所所规规定定的的结合方向处理。结合方
46、向处理。l l运运算算符符的的结结合合性性:分分为为左左结结合合性性(自自左左至至右右)和右结合性和右结合性(自右至左自右至左)。x-y+z(左结合性):(左结合性):x=y=z(右结合性):(右结合性):与与“-”号结合号结合执行执行x-y执行执行+z执行执行y=z执行执行x=(y=z)2、算术表达式的有关说明:、算术表达式的有关说明:1、对表达式:(+i)+(+i)+(+i)TurboC将将3作为表达式中所有作为表达式中所有i的值,因此的值,因此3个个i相加,得表达式的值为相加,得表达式的值为9。编程时应避免这种歧义。编程时应避免这种歧义性,应写成:性,应写成:i=3;a=i+;b=i+;
47、c=i+;d=a+b+c;2、设、设i的初值为的初值为3,语句,语句printf(“%d,%d”,i,i+);有的系统具有左结合性,而另一些系统具有有结合有的系统具有左结合性,而另一些系统具有有结合性,结果分别为:性,结果分别为:3,3和和4,3。编程时应避免这。编程时应避免这种歧义性,应写成:种歧义性,应写成:j=i+;printf(“%d,%d”,j,i);3含有强制类型转换运算符的表达式:含有强制类型转换运算符的表达式:即表达式中含即表达式中含(类型名)(表达式)(类型名)(表达式)例例(int)a例例w+(float)(j%k)/5整整体体的的值值为为int类类型型,a及及a的值为原类
48、型的值为原类型值值为为float类类型型,j、k及及它它们的值仍为原来的类型们的值仍为原来的类型例:例:voidmain()floatx=3.6;intk;k=(int)x/5;printf(”x=%f,k=%dn”,x,k);结果结果x=3.600000,k=03强制转换运算符的意义强制转换运算符的意义例如例如:1/2*sqrt(x+y)结果为结果为0intfloatintintfloat(float)1/2*sqrt(x+y)0.50.5取整取整取整取整一般写为一般写为1.0/2例如例如:floatk=3必须写成必须写成abs(int)k)因为因为abs函数中的参数必须是整型的函数中的参数
49、必须是整型的见见P371求整数的绝对值函数求整数的绝对值函数三、逗号表达式:三、逗号表达式:格式格式:表达式表达式1,表达式表达式2,表达式表达式n功能功能:从左至右顺序计算各表达式的值,以表达式从左至右顺序计算各表达式的值,以表达式n的值作为的值作为逗号表达式逗号表达式逗号表达式逗号表达式的值(整体)的值(整体)例例1.定义:定义:ints,p;则执行则执行s=5;p=s+,+p,p+2,p+;优先级最低优先级最低p为为5,先将,先将5赋给赋给p后,后,s的的值再加值再加1p为为6p p的的的的值值值值是是是是7 7,是是是是整整整整个个个个逗逗逗逗号号号号表达式最终的值表达式最终的值表达式
50、最终的值表达式最终的值未赋值未赋值例:例:若有定义:若有定义:inta,b;则表达式:则表达式:a=4,b=3,a+b+2,a+,a+b+2值值值值是是是是1010,是是是是整整整整个个个个逗逗逗逗号号号号表表表表达达达达式式式式最终的值最终的值最终的值最终的值a为为4b为为3a为为5最终最终b值为值为3优先级高优先级高优先级高优先级高a a、b b未赋值未赋值未赋值未赋值例:例:voidmain()inta=2,b=4,c=6,x,y;y=(x=a+b),(b+c);printf(y=%d,x=%d,y,x);运行运行结结果:果:y=6,x=6x为为6赋值优赋值优先,先,y为为6逗号表达式逗