程序设计02章数据类型与运算_第1页
程序设计02章数据类型与运算_第2页
程序设计02章数据类型与运算_第3页
程序设计02章数据类型与运算_第4页
程序设计02章数据类型与运算_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章第二章进位计数制进位计数制l在计算机科学中除在计算机科学中除十进制十进制外,常用的外,常用的还有还有二进制二进制、八进制八进制和和十六进制十六进制。l如果用如果用r个基本符号(例如个基本符号(例如0,1,2,r 1)表示数值,则称其为)表示数值,则称其为r进进制数,制数,r称为该数制的称为该数制的基数基数。不同计数制具有的共同特点 每一种计数制都有固定的符号集每一种计数制都有固定的符号集 如十进如十进制数制,其符号有十个:制数制,其符号有十个:0,1,2,9。二进制数制,其符号有两个:二进制数制,其符号有两个:0和和1。 不同进制都使用不同进制都使用位置表示法位置表示法,即处于不,即处于

2、不同位置的数符所代表的值不同,该值与所在同位置的数符所代表的值不同,该值与所在位置的权值有关。位置的权值有关。 值值=数符数符*权值权值 x4x3x2x1x0.x-1x-2x-3x-4权值权值是基数的是基数的i次幂次幂十进制各位置(十进制各位置(012.)的权值)的权值100=1 101=10 102=100 103=1000 如 123.456 =1*102+2*101+3+4*10-1+5*10-2+6*10-3二进制各位置(二进制各位置(012.)的权值)的权值20=1 21=2 22=4 23=8 24=1625=32 26=64 27=128 28=25629=512 210=102

3、4 211=2048212=4096 213=8192 214=16384215=32768 216=65536不同进制之间的转换不同进制之间的转换lr进制转换为十进制进制转换为十进制 将将r进制数的进制数的每位(非零)数值每位(非零)数值与相应与相应位置的位置的权值权值相相乘乘,然后相,然后相加加即可。即可。 x4x3x2x1x0.x-1x-2x-3x-4如如 ( 100110.101)2 =(1*25+1*22+1*21+1*2-1+1*2-3)10 =(38.625)10思考思考(1111)2=( ? ) 10=2?-1(11111)2=( ? ) 10=2?-1(111111)2=(

4、? ) 10=2?-1(1111111)2=( ? ) 10=2?-1(11111111)2=( ? ) 10=2?-1l十进制数转换为十进制数转换为r进制:进制:除除r取余法取余法 将一个十进制整数反复除以基数将一个十进制整数反复除以基数r,直到,直到商为商为0为止,并记下每次所得余数为止,并记下每次所得余数 将最后一个余数到第一余数按从左到右的将最后一个余数到第一余数按从左到右的次序连起来,它们所组成的数字串即为相应次序连起来,它们所组成的数字串即为相应的的r进制整数。进制整数。l非十进制数间的转换非十进制数间的转换l两个非十进制数之间的转换方法一般结合两个非十进制数之间的转换方法一般结合

5、上述两种方法进行转换,即先把被转换数上述两种方法进行转换,即先把被转换数据转换为相应的十进制数,然后再将十进据转换为相应的十进制数,然后再将十进制数转换为其他进制数。制数转换为其他进制数。l由于由于二进制、八进制和十六进制之间二进制、八进制和十六进制之间存在存在特殊关系,即特殊关系,即8=23,16=24,因此转换方法,因此转换方法就比较容易就比较容易特殊关系特殊关系l1位二进制数相当于位二进制数相当于1位二进制数位二进制数 l1位四进制数相当于位四进制数相当于2位二进制数位二进制数 22l1位八进制数相当于位八进制数相当于3位二进制数位二进制数 23l1位十六进制数相当于位十六进制数相当于4

6、位二进制数位二进制数 24特殊关系基本对照表特殊关系基本对照表二进制 八进制 二进制 十六进制 二进制 十六进制 000 0 0000 0 1000 8 001 1 0001 1 1001 9 010 2 0010 2 1010 a 011 3 0011 3 1011 b 100 4 0100 4 1100 c 101 5 0101 5 1101 d 110 6 0110 6 1110 e 111 7 0111 7 1111 fl二进制转换到八进制二进制转换到八进制 只需将二进制数只需将二进制数从右向左从右向左每每3位一组(最位一组(最后不足后不足3位补零),根据基本对照表,从左位补零),根据

7、基本对照表,从左向右即可完成转换。向右即可完成转换。l二进制同十六进制之间的转换二进制同十六进制之间的转换:4位一组位一组l反之,可以转换为二进制反之,可以转换为二进制其他相关内容其他相关内容l参考参考1.1.2有关位的知识以及计算机中数值的有关位的知识以及计算机中数值的编码表示方法编码表示方法l内存是以内存是以2的指数(的指数(0123.)个字节为个字节为单位的连续的存储空间,每个内存单元有单位的连续的存储空间,每个内存单元有一个唯一的编号,即地址一个唯一的编号,即地址l一个字节由一个字节由8个二进制位组成个二进制位组成l最右边的一位称为最右边的一位称为“最低位最低位”,最左边的,最左边的一

8、位称为一位称为“最高位最高位”。l每一个二进制位的值是每一个二进制位的值是0或或1。l以最高位作为以最高位作为符号位符号位l为为0表示正数,为表示正数,为1表示负数。表示负数。l表示数值,可采用不同的编码方法,表示数值,可采用不同的编码方法,一般有:一般有:原码、反码和补码原码、反码和补码。 原码原码l符号位为符号位为0代表正数,为代表正数,为1代表负数,其余代表负数,其余各位代表数值本身的各位代表数值本身的绝对值绝对值l+0和和 0是同一个数是同一个数0,而在内存中却有两,而在内存中却有两个不同的表示个不同的表示 。l0000000000000000l1000000000000000l由于由

9、于0的表示方法的表示方法不唯一不唯一,不适合计算机,不适合计算机的运算。的运算。反码反码l正数的反码与原码相同。正数的反码与原码相同。l而负数的反码是:原码除符号位外(仍为而负数的反码是:原码除符号位外(仍为1),),各位取反各位取反。l+0的反码是:的反码是:0000000000000000l 0的反码是:的反码是:1111111111111111l同样,同样,0的表示不唯一。所以在计算机内的表示不唯一。所以在计算机内部一般也不使用反码来表示数。部一般也不使用反码来表示数。补码补码l正数的补码与原码相同。正数的补码与原码相同。l而负数的补码是:除最高位仍为而负数的补码是:除最高位仍为1外,外

10、,原原码的其余各位求反(即反码)码的其余各位求反(即反码),再加,再加1。 l用补码形式表示数值用补码形式表示数值0时,是唯一的:时,是唯一的: 0000000000000000l计算机通常都是以计算机通常都是以补码形式补码形式存放数。存放数。l不仅数值表示唯一,而且能将符号位不仅数值表示唯一,而且能将符号位与其他位统一处理。与其他位统一处理。l在计算机中可以使在计算机中可以使减法变为加法减法变为加法,为,为硬件实现提供方便。硬件实现提供方便。主要内容主要内容数据类型数据类型常量常量变量变量运算符与表达式运算符与表达式类型转换类型转换运算的优先级与结合性等运算的优先级与结合性等数据类型l数据类

11、型是一个抽象的概念,包含有一组数据类型是一个抽象的概念,包含有一组数据(值)数据(值)的定义和对该组数据能够进行的定义和对该组数据能够进行的的操作(运算)操作(运算)的定义。的定义。l对数据类型的使用,必须通过类型的实际对数据类型的使用,必须通过类型的实际例子例子(实例实例/实体,即变量或常量实体,即变量或常量)来体现。来体现。l程序中,数据仅以程序中,数据仅以变量或常量变量或常量的形式表示的形式表示c语言的数据类型语言的数据类型数组类型数组类型结构类型结构类型 structstruct联合类型联合类型基本类型基本类型整型整型字符型字符型实型(浮点型)实型(浮点型)单精度实型单精度实型 flo

12、atfloat双精度实型双精度实型 doublec语言的数据类型语言的数据类型l基本数据类型基本数据类型较简单,是语言(编译器)较简单,是语言(编译器)已经定义好的类型,可直接使用;已经定义好的类型,可直接使用;l构造类型构造类型是由基本数据类型或其他构造类是由基本数据类型或其他构造类型型组织组织而成的,是程序员而成的,是程序员自自己己定义的类型定义的类型l指针在指针在c语言中极为普遍,指针提供了动语言中极为普遍,指针提供了动态处理变量的能力,是态处理变量的能力,是c语言的语言的精髓精髓。第第2章章 第第4章章第第5章章2.1 基本数据类型基本数据类型l基本数据类型是其他类型的基础基本数据类型

13、是其他类型的基础整型、字符型、浮点型整型、字符型、浮点型l基本类型基本类型数据数据是程序处理的基本对象是程序处理的基本对象l不同的数据类型的数据具有不同的不同的数据类型的数据具有不同的取取 值范围值范围和允许的操作。和允许的操作。思考思考l为什么为什么c语言不提供语言不提供布尔类型布尔类型?2.1.1 整型整型l整型的基本类型名为整型的基本类型名为int。l根据数值的范围又可分为根据数值的范围又可分为普通整型普通整型(int)、)、短整型短整型 (short int或或short)和)和长整型长整型(long int或或long)。)。l根据整型值是否带符号位来分类,可以分根据整型值是否带符号

14、位来分类,可以分为无符号整型(为无符号整型( unsigned )和带符号整)和带符号整型型(signed可以省略可以省略) 。类型与类型名类型与类型名有符号基本整型有符号基本整型有符号短整型有符号短整型有符号长整型有符号长整型无符号基本整型无符号基本整型无符号短整型无符号短整型无符号长整型无符号长整型( signed) int (signed ) short ( int )( signed ) long ( int )unsigned intunsigned short ( int )unsigned long ( int )整型整型l需要注意的是,标准需要注意的是,标准c没有具体规定以上没

15、有具体规定以上各类数据所占内存字节数。各类数据所占内存字节数。l只要求只要求long型数据长度不短于型数据长度不短于int型,型,short型不长于型不长于int型。型。l具体如何实现,由各计算机系统和编译系具体如何实现,由各计算机系统和编译系统决定。统决定。整型整型l如在如在turbo c 2.0中,一个中,一个int型和一个型和一个short型数据分别占用型数据分别占用2个字节(个字节(16位)的位)的内存空间,一个内存空间,一个long型数据占用型数据占用4个字节个字节(32位)的内存空间;位)的内存空间;l而在而在visual c+ 6.0中,一个中,一个short型数据型数据占用占用

16、2个字节的内存空间,一个个字节的内存空间,一个int型数据型数据和一个和一个long型数据分别都占用型数据分别都占用4个字节的个字节的内存空间。内存空间。常用存储容量常用存储容量1b=8bit=1字节字节1kb=1024b1mb=1024kb (百万、兆)1gb=1024mb (十亿、千兆)1tb=1024gb (万亿、百万兆 )整型整型l根据整型数据所占的位数,可以计算一个根据整型数据所占的位数,可以计算一个整型数据能表示的数据的整型数据能表示的数据的取值范围取值范围。l超出最大值:超出最大值:溢出溢出。 l以以int(有符号普通整型)为例计算取值范(有符号普通整型)为例计算取值范围。在围。

17、在visual c+ 6.0中,普通整型占中,普通整型占32位,位,即即4个字节。个字节。存储方式存储方式l 0 1 31l第第0位是位是符号位:符号位:0:正整数,最大为正整数,最大为231 1,即,即2147483647。1:负整数,负整数,1到到31位全为位全为0时表示的数最小时表示的数最小( 231的的补码补码)。最小整数是。最小整数是 231turbo c2.0中中类型类型 字节数字节数 数值范围数值范围short 2 215(215 1) unsigned short 2 0(216 1) int 2 215(215 1) unsigned 2 0 216 long 4 231(2

18、31 1) unsigned long 4 0(232 1) visual c+ 6.0类型类型 字节数字节数 数值范围数值范围short 2 215(215-1) unsigned short 2 0(216-1) int 4 231(231-1)unsigned 4 0(232-1) long 4 231(231-1)unsigned long 4 0(232 1) 2.1.2 浮点型浮点型l标准标准c语言中,浮点型数分为单精度型语言中,浮点型数分为单精度型(float)、双精度型()、双精度型(double)和长双精)和长双精度型(度型(long double)浮点数三类。)浮点数三类。

19、l一个一个float型数据占用型数据占用4个字节的内存空间,个字节的内存空间,一个一个double型数据占用型数据占用8个字节的内存空个字节的内存空间,一个间,一个long double型数据占用型数据占用16个字节个字节(128位)的内存空间。位)的内存空间。有效位数l浮点型数据的取值范围和值的浮点型数据的取值范围和值的精度精度与与所用的所用的机器有关机器有关。l有效位数:是该数中有效数字的个数,有效位数:是该数中有效数字的个数,指从该数左方第一个非零数字算起到指从该数左方第一个非零数字算起到最末一个数字(包括中间的零)的个最末一个数字(包括中间的零)的个数,它不取决于小数点的位置。数,它不

20、取决于小数点的位置。 l浮点型数据是按照浮点型数据是按照指数形式指数形式存储的。存储的。l系统把一个浮点型数据表示为小数部系统把一个浮点型数据表示为小数部分和指数部分,分别存放。分和指数部分,分别存放。数值范围数值范围类型类型 字节数字节数 有效位数有效位数float 4 7 数值范围数值范围 3.410383.41038阶的范围阶的范围 3838思考思考l最接近最接近0的正的的正的float型数据是?型数据是?数值范围数值范围类型类型 字节数字节数 有效位数有效位数double 8 16 数值范围数值范围 1.7103081.710308阶的范围阶的范围 308308数值范围数值范围类型类型

21、 字节数字节数 有效位数有效位数long double 16 1819 数值范围数值范围 1.21049321.2104932阶的范围阶的范围 493249322.1.3 字符型字符型lc语言中,字符型的基本类型名为语言中,字符型的基本类型名为char。l以以1个字节(个字节(8位)来存放一个字符位)来存放一个字符l有符号字符型数据的取值是有符号字符型数据的取值是 128127l无符号字符型数据的取值是无符号字符型数据的取值是02552.2 常量常量l常量是在程序执行过程中常量是在程序执行过程中值不变值不变的数据。的数据。l如圆周率如圆周率 的值、字母的值、字母b在在asc码字符集码字符集中的

22、编码值等,这类数据就称为常量。中的编码值等,这类数据就称为常量。l数值常量:整型常量、浮点数常量数值常量:整型常量、浮点数常量l字符型常量:字符型常量: 字符常量、字符串常量、转义字符字符常量、字符串常量、转义字符l符号常量符号常量2.2.1 整型常量整型常量常用的三种不同的数制常用的三种不同的数制十进制十进制 八进制八进制 十六进制十六进制65 0101 0 x41125 0175 0 x7d长整型:长整型:-56l;3567l;04l无符号整型:无符号整型:586u;077765u;0 xfffdu无符号长整型:无符号长整型:0375ul;0 x45feul例2.1 整数的不同进制数表示m

23、ain( ) printf(%d %x %on,125,125,125); printf(%d %x %on,045,045,045); printf(%d %x %on,0 x32,0 x32,0 x32); 执行结果执行结果: 125 7d 175 37 25 45 50 32 622.2.2 浮点数常量浮点数常量l浮点数在程序中只能以十进制数表示。浮点数在程序中只能以十进制数表示。 小数形式:小数形式: 3.141 -25.3 23. .45 指数形式指数形式:l (整数部分整数部分).(小数部分小数部分)e( 或或e)(指数部分指数部分) 注意注意:字母字母e(或或e)之前必须有数字,

24、且之前必须有数字,且e后面的指后面的指数必须为整数数必须为整数 非法浮点数非法浮点数 3.14e7.8 ; 12.34 e8; 12,345e-22.2.3 字符常量字符常量字符常量是指用单引号括起来的一个字符。字符常量是指用单引号括起来的一个字符。字符按对应的字符按对应的ascii码值存储,占一个字节码值存储,占一个字节 a:97 a:65 9: 57 0:48字符常量可以作为整数参与运算字符常量可以作为整数参与运算a-32 等价于等价于 97-32=65 9-9 等价于等价于 57-9=48 a+32 等价于等价于 65+32=97例例 大小写字母的转换大小写字母的转换#include v

25、oid main() char c1,c2; c1=a; c2=c; printf(“c c ” ,c1+32,c2-32); 转义字符转义字符l还有一种特殊形式的字符常量,以一个还有一种特殊形式的字符常量,以一个开头的字符序列:转义(开头的字符序列:转义(escape)字符)字符l转义字符,在屏幕上不能显示,在程序中转义字符,在屏幕上不能显示,在程序中也无法用一个一般形式的字符表示,只能也无法用一个一般形式的字符表示,只能采用特殊形式来表示。采用特殊形式来表示。lc语言中,转义字符有三种:简单转义字语言中,转义字符有三种:简单转义字符、八进制转义字符和十六进制转义字符符、八进制转义字符和十六

26、进制转义字符转义字符转义字符 含含 义义 ascii代码代码 n换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头 10t 水平制表(跳到下一个水平制表(跳到下一个tab位置)位置) 9b 退格,将当前位置移到前一列退格,将当前位置移到前一列 8r 回车,将当前位置移到本行开头回车,将当前位置移到本行开头 13f 换页,将当前位置移到下页开头换页,将当前位置移到下页开头 12a发出铃声发出铃声 7 代表一个反斜杠字符代表一个反斜杠字符“”92代表一个单撇号字符代表一个单撇号字符 39” 代表一个双撇号字符代表一个双撇号字符34ddd 1到到3位八进制数对应字符位八进制数对应字符xhh

27、1到到2位十六进制数对应字符位十六进制数对应字符八进制转义字符和十六进制转义字符八进制转义字符和十六进制转义字符用用ddd 或或xhh形式可以表示任意字符形式可以表示任意字符 a 65 101 x41 5 53 065 x35 234 352 xea2.2.4 字符串常量字符串常量l用一对用一对双引号双引号括起来的零个或多个字括起来的零个或多个字符的序列。如:符的序列。如:“hello” “b” “$43.23”l字符串常量与字符常量的存储不同字符串常量与字符常量的存储不同lc编译程序在存储字符串常量时自动在编译程序在存储字符串常量时自动在其末尾加上其末尾加上null 或或0 (ascii码值

28、为码值为0)作为字符串作为字符串结束标志结束标志l“china” 长度为长度为5, 需要占需要占6个字节个字节l c h i n a null09711210510467区别区别 b 和和 “b” “” 和和 “ ” 2.2.5 符号常量符号常量l便于程序调试和修改,将常量定义为一个便于程序调试和修改,将常量定义为一个标识符标识符,称为称为符号常量符号常量。通常用大写表示。通常用大写表示。 #define max 1024 #define star * const float pi=3.1415926; /c99方式方式 int const numb=1024; /c99方式方式常量的存储常量

29、的存储l内存中安排常量数据存储区内存中安排常量数据存储区l按照常量在程序中的出现顺序(重复按照常量在程序中的出现顺序(重复出现的常量,仅仅存放一次),依次出现的常量,仅仅存放一次),依次存放各个常量存放各个常量(二进制机器数形式二进制机器数形式);l只能使用常量,不能够改变常量的值只能使用常量,不能够改变常量的值2.3 变量变量l值可以改变值可以改变的数据。的数据。l变量代表内存中的一个变量代表内存中的一个(或多个或多个)存储存储单元,单元内容就是变量的值。单元,单元内容就是变量的值。l需要给变量取个名字需要给变量取个名字l使用使用标识符标识符代表变量代表变量(变量名变量名)l标识符:以字母和

30、标识符:以字母和 “_”开头的;开头的;字母、数字和字母、数字和“_”组成的串组成的串l一般用小写字母一般用小写字母l不能与关键字同名。不能与关键字同名。2.3.1 变量定义变量定义l变量必须变量必须先定义后使用先定义后使用。定义格式为。定义格式为 数据类型名数据类型名 变量名表;变量名表;l例如:例如: int num; char ch1, ch2; double length,result,sum; 以逗号分开的变量列表以逗号分开的变量列表2.3.2 变量的初始化变量的初始化l定义变量时可以对变量赋初值。例如:定义变量时可以对变量赋初值。例如: int num2, num3=100; ch

31、ar ch1=b,ch2; float r=2.345;变量的存储变量的存储l内存中(按照函数的调用顺序动态地)内存中(按照函数的调用顺序动态地)安排变量数据存储区安排变量数据存储区l按照变量在程序中的出现顺序,依次按照变量在程序中的出现顺序,依次存放各个变量;存放各个变量;l可以使用变量,也能够改变变量的值可以使用变量,也能够改变变量的值2.3.3 变量地址变量地址l 存放变量的内存空间中的首单元地存放变量的内存空间中的首单元地址称为变量地址址称为变量地址l内存空间存放的内容称为变量的值。内存空间存放的内容称为变量的值。 &a2500h| 2501h|- 1250 - a=1250 &b25

32、02h| 2503h|- - 2504h|- - 2505h|-123.67 - b=123.67 2506h| 变量名、变量值、变量地址间的关系变量名、变量值、变量地址间的关系例如:例如: int a=1250; float b=123.67;2.4 运算符与表达式运算符与表达式lc语言的运算符范围很宽,把除了语言的运算符范围很宽,把除了控制语句和输入输出以外的控制语句和输入输出以外的几乎所几乎所有的基本操作都作为运算符处理有的基本操作都作为运算符处理。lc的运算符可分为的运算符可分为算术运算符算术运算符、赋赋值运算符值运算符、关系运算符关系运算符等。等。l按运算对象(操作数)的数目可将按运

33、算对象(操作数)的数目可将c的运算符分为的运算符分为l单目运算符、双目运算符单目运算符、双目运算符和和三目运算三目运算符(仅有符(仅有1个)个)语言的运算符 算术运算符算术运算符 + - * / % + - 关系运算符关系运算符 !逻辑运算符逻辑运算符 ! | 位运算符位运算符 | 赋值运算符赋值运算符 及其扩展赋值运算符及其扩展赋值运算符 条件运算符条件运算符 ?:?: 逗号运算符逗号运算符 , 语言的运算符(8)指针运算符指针运算符 * (9)求字节数运算符求字节数运算符 sizeof (10)强制类型转换运算符强制类型转换运算符 (类型)类型) (11)分量运算符分量运算符 - (12)

34、下标运算符下标运算符 (13) 函数调用运算符()函数调用运算符()表达式定义(递归方法)l单个常量或变量就是一个表达式单个常量或变量就是一个表达式l将表达式通过将表达式通过运算符运算符进行连接,得到进行连接,得到新的表达式新的表达式l表达式中的运算符有表达式中的运算符有优先级优先级和和结合性结合性的限制的限制l可以使用可以使用()()改变改变优先级和结合性优先级和结合性c语言的表达式语言的表达式(1)算术表达式算术表达式 (2)关系表达式关系表达式 (3)逻辑表达式逻辑表达式 (4)赋值表达式赋值表达式 (5)逗号表达式逗号表达式2.4.1算术运算符和算术表达式 l1. 双目运算双目运算加加

35、+ 10+5=15减减- 10-5=5乘乘* 10*5=50除除/ 30/4=7 30.0/4=7.5取余取余% 14%3=2; 25%8=12 单目运算单目运算自增自增 a+ 或或 +a 等效于等效于 a=a+1 自减自减 a- 或或 -a 等效于等效于 a=a-1取负取负 -a注意注意: 单目运算的单目运算的“前置前置”和和“后置后置”的的区别区别“前置前置” 变量先增值变量先增值(或先减值或先减值),后被使用后被使用“后置后置” 变量先被使用变量先被使用,后增值后增值(或后减值或后减值)l自增运算符和自减运算符只能用于变量,自增运算符和自减运算符只能用于变量,而不能用于常量或表达式,而不

36、能用于常量或表达式,l结合方向是结合方向是“自右至左自右至左”。l为避免二义性,最好采取大家都能理解的为避免二义性,最好采取大家都能理解的写法,可以加一些写法,可以加一些“不必要不必要”的括号,如的括号,如(i+)+j。 int x, y, i=25; x=-i; /* 相当于相当于: i=i-1; x=i; */ y=i;结果是结果是: x=24, y=24; int x, y, i=25; x=i-; /* 相当于相当于: x=i; i=i-1; */ y=i;结果是结果是: x=25, y=24;算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性 l将表达式通过将表达式

37、通过算术运算符算术运算符进行连接进行连接l先取负先取负 ,再再 * / % 后后 + -l结合方向为结合方向为“自左至右自左至右”l可以使用可以使用( )改变优先级和结合性改变优先级和结合性 (ij)*k (i+j)*k 2.4.2 赋值运算符和赋值表达式赋值运算符和赋值表达式 赋值是指将表达式的值赋给一个变量赋值是指将表达式的值赋给一个变量 = x=18 x=5*2+y num=x*(a+b) 赋值表达式可以连用赋值表达式可以连用(右结合右结合) x=y=z=100赋值表达式赋值表达式l赋值运算符比算术运算符的优先级赋值运算符比算术运算符的优先级低低l赋值表达式的值赋值表达式的值等于表达式的

38、值等于表达式的值l如果赋值运算符右边值的类型与左边变量如果赋值运算符右边值的类型与左边变量的类型不一致,需要把右边值的类型转换的类型不一致,需要把右边值的类型转换成左边变量的类型(自动完成)成左边变量的类型(自动完成) l可以构成可以构成复合赋值运算符复合赋值运算符(算术)复合赋值运算符加赋值加赋值a+=b等效于等效于a=a+(b)减赋值减赋值a-=b等效于等效于a=a-(b)乘赋值乘赋值a*=b等效于等效于a=a*(b)除赋值除赋值a/=b等效于等效于a=a/(b)取余赋值取余赋值 a%b等效于等效于a=a%(b)如如 x*=10+2 等效于等效于 x=x*(10+2)2.4.3关系运算符和

39、关系表达式关系运算符和关系表达式 6个关系运算符,用于比较两个运算分量间个关系运算符,用于比较两个运算分量间的大小关系。的大小关系。 大于大于 = 大于等于大于等于 小于小于 42 的结果为?的结果为?l关系运算符关系运算符结合性是结合性是左结合性左结合性。2.4.4 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 c语言中逻辑运算符有语言中逻辑运算符有3个个 逻辑与逻辑与a&b 逻辑或逻辑或a|b 逻辑非逻辑非!a 关系和逻辑表达式构成复合的逻辑关系,关系和逻辑表达式构成复合的逻辑关系,常用于控制结构中。常用于控制结构中。判断闰年的表达式为?判断闰年的表达式为? (year%4=0)&(yea

40、r%100!=0) | (year%400=0)2.2.5位运算符和位表达式位运算符和位表达式 位运算是指进行二进制位的运算。位运算是指进行二进制位的运算。 c语言中,位运算符有语言中,位运算符有位逻辑运算符位逻辑运算符和和移位运移位运算符算符。可以完成汇编语言的一些工作。可以完成汇编语言的一些工作. 位逻辑运算位逻辑运算:移位运算移位运算: 按位与按位与 a&b右移位右移位 a4 按位或按位或 a|b左移位左移位 a右移位数右移位数 每右移每右移1位相当于除以位相当于除以2l左移位运算左移位运算 变量名变量名3!=x 优先级l优先级是指不同级别运算符之间的运优先级是指不同级别运算符之间的运算

41、次序算次序l单目运算符的优先级高于双目运算符单目运算符的优先级高于双目运算符l双目运算符优先级高于三目运算符双目运算符优先级高于三目运算符l算术运算符高于关系运算符算术运算符高于关系运算符l关系运算符高于逻辑运算符关系运算符高于逻辑运算符l移位运算符高于关系运算符移位运算符高于关系运算符l位逻辑运算符低于关系运算符位逻辑运算符低于关系运算符l( )括号运算符优先级最高)括号运算符优先级最高l逗号运算符优先级最低逗号运算符优先级最低l赋值运算符及复合赋值运算符的优先级仅赋值运算符及复合赋值运算符的优先级仅高于逗号运算符高于逗号运算符.结合性l结合性是指在一个表达式中有多个优结合性是指在一个表达式

42、中有多个优先级相同的运算符之间的运算次序先级相同的运算符之间的运算次序.l右结合性右结合性 右右左左 包括包括 单目、三目和赋值运算符单目、三目和赋值运算符l左结合性左结合性 左左右右 其余运算符其余运算符优先级优先级结合性结合性1515 ( ) - . ( ) - . 左左右右1414 ! + - & ! + - & * * ( (类型名类型名) ) sizeofsizeof右右左左1313 * * / %/ %左左右右1212 + -+ -左左右右1111 左左右右1010 = = 左左右右9 9 = = != = !=左左右右8 8 & &左左右右7 7 左左右右6 6 | |左左右右5

43、 5 &左左右右4 4 |左左右右3 3 ?:?:右右左左2 2= = * *= /= += = /= += = =右右左左1 1 , ,左左右右例如a/b*c%d 即即(a/b)*c)%da+!b+c- 即即 (a+(!b)+(c-)i=k&ij-1 即即 (i)=k)&(i(j-1)a=b=c=5即即a=(b=(c=5)!a!(!a)实际处理方式实际处理方式 a+b+x*d 2.7 2.7 数据输入输出数据输入输出l数据是程序处理的对象;数据是程序处理的对象;l 输入输出操作是程序不可缺少的部分输入输出操作是程序不可缺少的部分l c中输入输出操作都是通过中输入输出操作都是通过函数调用函数调

44、用实现的实现的lc提供了标准提供了标准i/o: stdio.h #include 2.7.1 字符输出函数字符输出函数putchar()和格式输和格式输出函数出函数printf() l字符输出函数字符输出函数putchar( 参数参数)l向终端输出一个字符。参数可以是字符变向终端输出一个字符。参数可以是字符变量、字符常量、字符量、字符常量、字符ascii码。码。l putchar(a);显示大写字母显示大写字母al putchar(97); 显示小写字母显示小写字母al 若若 c=! 则则 putchar(c) ; 显示字符显示字符! 例例#include void main( ) char

45、a,b,c; a=a; b=b; c=007; putchar(a); putchar(b); putchar(n); putchar(c) ; sleep(5); putchar(c) ; putchar(a); putchar(b); putchar(n); putchar(007); sleep(3); putchar(007); 输出输出: ab /*响铃一次响铃一次,隔隔5秒后再响铃一次秒后再响铃一次 ab /*响铃一次响铃一次,隔隔3秒后再响铃一次秒后再响铃一次l基本形式基本形式 printf(“控制字符串控制字符串”,输出项列表输出项列表);l按规定的输出格式按规定的输出格式,把

46、输出项依次输出把输出项依次输出到缺省输出设备(通常为显示器)到缺省输出设备(通常为显示器)l输出项可以是变量、常量、或表达式;输出项可以是变量、常量、或表达式;其间用逗号分隔。其间用逗号分隔。l控制字符串包括格式控制字符串包括格式控制说明符控制说明符和和普通字符普通字符。l控制说明符控制说明符 %格式字符格式字符控制说明符%c按字符型输出按字符型输出%d 或或 %i 按十进制整数输出按十进制整数输出%u按无符号整数输出按无符号整数输出%f按浮点型小数输出按浮点型小数输出%o按八进制整数输出按八进制整数输出%x 按十六进制整数输出按十六进制整数输出%s 按字符串输出按字符串输出%e或或e 按指数

47、形式输出浮点型数按指数形式输出浮点型数 l在格式说明中,在在格式说明中,在%和格式字符间可以插和格式字符间可以插入附加符号(又称入附加符号(又称修饰符修饰符),可以控制输出可以控制输出的宽度、精度、小数位数、对齐方式等。的宽度、精度、小数位数、对齐方式等。l附加字符说明附加字符说明l输出长整型数(与输出长整型数(与d、o、x、u结合用)结合用)lm 指定数据输出的宽度(即域宽)指定数据输出的宽度(即域宽)l.n 对实型数据,指定输出对实型数据,指定输出 n 位小数;对位小数;对字符串,指定左端截取字符串,指定左端截取n 个字符输出个字符输出l+ 使输出的数据无论正负都带符号输出使输出的数据无论

48、正负都带符号输出l 使数据在输出域内按左对齐方式输出使数据在输出域内按左对齐方式输出l普通字符普通字符 可打印字符:直接显示出字符可打印字符:直接显示出字符 不可打印字符:使用转义字符不可打印字符:使用转义字符n, t, a例如例如: m=3; n=12; printf(“num1=%d num2=%dn”,m,n); 显示显示: num1=3 num2=12 printf(“%f%n”,95.6); 显示显示: 95.6% 2.7.2 字符输入函数字符输入函数getchar()和格式输入函数和格式输入函数scanf()字符输入函数字符输入函数getchar()()l无参数无参数, 只能接收一

49、个字符。只能接收一个字符。l从键盘上输入一个可打印字符从键盘上输入一个可打印字符,函数的返回函数的返回值为该字符的值为该字符的ascii码。码。l通常将其通常将其返回值返回值赋于某个字符变量或整型赋于某个字符变量或整型变量。变量。例例#include void main( ) char c; c=getchar( ); putchar(c); 例:输入一个字符,输出其前导字符,例:输入一个字符,输出其前导字符,字符和后续字符字符和后续字符 #include void main( ) char c; int c1, c2; c=getchar( ); c1=c-1; c2=c+1; printf

50、(“%c%c%c ”,c1,c,c2); printf(“%d %d %dn”,c1,c,c2);输入输入: b 输出输出: abc 65 66 67程序可靠性?程序可靠性?格式输入函数格式输入函数scanf()l从键盘输入数据,按指定的输入格式把从键盘输入数据,按指定的输入格式把数据赋给相应的输入项。数据赋给相应的输入项。lscanf(“控制字符串控制字符串”,输入项列表输入项列表);l注意注意:接收数据的变量必须用其地址表示接收数据的变量必须用其地址表示,l输入数据时,在两个数据间用一个或多输入数据时,在两个数据间用一个或多个空格隔开,也可用回车键、跳格键个空格隔开,也可用回车键、跳格键tabscanf()常用的格式字符常用的格式字符%c按字符型输入按字符型输入%d 或或%i 按十进制整数输入按十进制整数输入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论