《第02章基本数据类型.ppt》由会员分享,可在线阅读,更多相关《第02章基本数据类型.ppt(123页珍藏版)》请在三一文库上搜索。
1、1,第2章 基本数据类型、运算符和表达式本章要点,掌握c语言中的数据类型 掌握常用的表达式形式,以及运算符的优先级和结合性。 X+y/3 X=Y=3,成绩、工资、 平均体重、价格 ,类型?,范围?,精度?,内存结构?,运算?,2,第2章 基本数据类型、运算符和表达式,2. 1变量和常量,22 基本数据类型,23 整型,24 实型,25 字符型,26 运算符和表达式,27 基本的输入输出函数,28总结与提高,3,2.1变量和常量变量,数学中的变量是指其值可以变化的量,程序中的变量是指可多次赋值的量。 变量有三个要素,变量类型、变量名和变量地址。,例2-1 变量的使用 main() int x,
2、y, sum; printf(“nplease input two integers:“); scanf(“%d%d“, /*将和输出*/ ,4,2.1变量和常量变量,不同的数据类型,其占用的内存空间一般不一样,存储格式也可能不一样,表示范围和精度都有区别。 在Turbo c中,命名变量的规则如下: -必须以字母或下划线开头,后面可以是字母、数字或下划线; -ANSI C标准没有规定变量名的长度(字符个数),但各个c编译系统都有自己的规定。为了程序具有较好的可移植性和阅读程序的方便,变量名一般不要超过16个字符; -变量名区分大小写,如变量名abc与变量名ABC是不同的变量; -变量名不能使用
3、系统的关键字(或称保留字),5,2.1变量和常量变量,C语言中的关键字有(共32个): auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while。,6,2.1变量和常量变量,例如:下列是合法的变量名: 下列是不合法的变量名:,SUM,_total,_ch1,em
4、ployee_name,p_1,M.D.John,$876,3D67,ab,int,7,2.1变量和常量常量,相对变量的概念就是常量,也称为常数。在程序运行过程中,其值不能被改变的量称为常量。具体来说有两类:,普通常量,符号常量,3,7.56,a,”I love beijing”,#difine PI 3.14,8,2.1变量和常量常量,例2-2 符号常量的例子 #define PI 3.14 main() float r, area; printf(“nPlease input the radius:“); scanf(“%f“, /*输出该圆的面积*/ ,9,2.1变量和常量常量,问题:使
5、用符号常量有什么好处?,10,22 基本数据类型,C语言数据类型,11,23 整型整型常量,在语言中,使用的整型常量有十进制、八进制和十六进制三种,用不同的前缀来标识不同进制的整型常量,用不同的后缀来标识不同类型的整型常量。 (1)十进制整常量:其各位数为09,但最高位不能为0(除了0这个数字外)。例如,22,0,-56等是合法的十进制整常数;而01、726C不是十进制整常数。 (2)八进制整常量:八进制整常量必须以数字0开头,即以0作为八进制数的前缀。各位数取值为07。,12,23 整型整型常量,以下各数是合法的八进制数: -01 (十进制为1)、0101(十进制为65)、0177777(十
6、进制为65535); 以下各数不是八进制数(Why): -25、07C2。 (3)十六进制整常量:十六进制整常量的前缀为0X或0x。十六进制需要十六个字符来表示各位可能出现的数符,这些字符规定为09,AF或af。,13,23 整型整型常量,以下各数是合法的十六进制整常量: -0X4B(十进制为75)、0X10 (十进制为16)、0XFFFF (十进制为65535); 以下各数不是十六进制整常量: -5A (无前缀0X)、0X5H (含有非十六进制数码)。,14,23 整型整型常量,(4)整型常量的后缀:在16位字长的机器上,基本整型的长度为16位,因此表示的数的范围也是有限定的。 注意:八进制
7、整型常量和十六进制整型常量都只能表示正整数,因此16位取值范围是0+65535,而十进制整型常量可以是负数,取值范围为-32768+32767。如果使用的数超过了上述范围,则要用相应的后缀来标明。,15,23 整型整型常量,超范围的数用长整型数来表示(关于整型数据类型,参考本章2.3.2节)。长整型数是用后缀“L”或“l”来表示的。 例如: 十进制长整型常数:例如32L (十进制为32)、1234567L (十进制为1234567); 八进制长整型常数:例如040L (十进制为32)、0300000L (十进制为98304); 十六进制长整型常数:例如0X20L (十进制为32)、0XFFFF
8、L (十进制为65535)。 注意:整数32L和基本整常数32在数值上并无区别但是在内存中,32L占用4个字节空间,而32只占用2个字节的空间,因此是不相同的。,16,23 整型整型常量,如果要表示一个无符号数,整型常数的后缀为“U”或“u”。 例如: -358u,0x38Au,235Lu均为无符号数。 前缀和后缀可同时使用以表示各种类型的数。如0XB7CLu表示十六进制无符号长整数B7C,其十进制数为2940。,23 整型整型常量,17,23 整型整型常量,例2-3各进制整数的输出。 main() int i; i=167; printf(“ni=167“); printf(“nThe de
9、cimal form is %d“, i); /*以十进制格式显示*/ printf(“nthe octonary form is %o“, i); /*以八进制格式显示*/ printf(“nthe hexadecimal form is %x“, i); /*以十六进制格式显示*/ i=0167;,18,23 整型整型常量,printf(“ni=0167“); printf(“nThe decimal form is %d“, i); printf(“nthe octonary form is %o“, i); printf(“nthe hexadecimal form is %x“, i
10、); i=0x167; printf(“ni=0x167“); printf(“nThe decimal form is %d“, i); printf(“nthe octonary form is %o“, i); printf(“nthe hexadecimal form is %x“, i); ,19,23 整型整型常量,运行该程序后,其结果为:,i=167 The decimal form is 167 The octonary form is 247 The hexadecimal form is a7 i=0167 The decimal form is 119 The octon
11、ary form is 167 The hexadecimal form is 77 i=0x167 the decimal form is 359 the octonary form is 547 the hexadecimal form is 167,20,23 整型整型变量,整型变量分类。 短整型基本整型长整型。在16位字长的机器中,基本整型变量占2个字节。,有无符号位,有符号整型,无符号整型,有无符号位,短整型,长整型,基本整型,2*3=6类,21,23 整型整型变量,1整数的机内表示,如果声明一个整型变量: int i; i=876; 因为876292826252322,所以在机内二
12、进制的表示形式如图2-2所示(共占16位): 图22 876在内存中的表示,22,23 整型整型变量,无符号整型将所有的位均表示为数据,因此只有正数形式。有符号的整型将最高位用做符号位,最高位为“1”表示负数,为“0”表示正数。,数据在内存中是以二进制形式存放的。实际上,数值是以补码表示的。 (1) 对于正数,原码 = 反码 = 补码。 (2) 对于负数,补码 = 反码 + 1。 (3) 引入补码后,使减法统一为加法。,计算正数的补码,口诀:原码 = 反码 = 补码,计算负数的补码,int型 -10; 绝对值: 10,反 码,补 码,请写出20、-20的补码,补 码,27,23 整型整型变量,
13、2整型变量的类型,28,23 整型整型变量,3整型变量的声明和赋值 声明变量的格式为: 变量类型 变量名; 下面是声明整型变量的例子: short int x; 声明了一个短整型的变量x。而 unsigned int 则声明了一个无符号的基本整型变量。,29,23 整型整型变量,声明变量的时候要注意三点:,(1)允许一行声明多个同类型变量,各变量名间用“,”(逗号)隔开; (2)变量必须先声明,然后才能使用 ; (3)在一个语句块中,程序中所有的变量应当一 起声明在开始处,不能重复声明。,30,23 整型整型变量,例2-4整型变量的运用 main() int a, b, c, d;/* 在程序
14、段开始处一起声明变量*/ unsigned u; a=12; b=-24; u=10;/*用常量为变量赋值*/ c=a+u; d=b+u; /* 用一个表达式为变量赋值*/ printf(“na+u=%d,b+u=%d“, c, d); ,31,23 整型整型变量,例2-5一个不正确的例子 main() int x, y; y=x; printf(“ny=%d“, y); ,我错在那?呜呜呜,32,23 整型整型变量,给整型变量赋值有很多方式,(1)声明时立即赋值,称为初始化。例如: int x=3; int y=4, z=5; (2)先声明后赋值。 int x; x=3; (3)通过格式化函
15、数scanf从标准输入设备输入。 int x; scanf(“%d”, ,33,23 整型整型变量,4整型值的输出。,也可以将整型常量或变量的值以十进制、八进制或十六进制的格式输出,例23说明了这一点。 重要提示:数学上的整数可以无限大,但程序设计中整数在机内存储所占的内存有限,因此整型数据表示的范围有限,在平时的编程中,要特别注意不能把一个超过范围的数值赋值给一个整型变量。如果这样做了,那么这个整型变量事实上接受的不是预想中的值,称为“溢出”。,34,23 整型整型变量,例2-6整型数据的溢出。 main() int a, b; a=32767; b=a+1; printf(“%d,%dn“
16、, a, b); 运行后,其结果为: 32767,-32768,35,23 整型整型变量,为什么会出错?,a=32767: 图25 整数溢出,+1,-32768,36,24 实型实型常量,在C语言中,实数只采用十进制。基本的形式为: 整数部分.小数部分 但有两种表达方式: (1)小数方式:由09和小数点组成。例如: 035,167,6736,728.3 等。 (2)指数方式:由十进制实数,加阶码标志“e”或“E”以及阶码(只能为整常量,可以带符号)组成。其一般形式为: aEn或aen (a为十进制数,n为十进制整数表示的阶码) 其值为a10n。,37,24 实型实型常量,实型常量的例子 使用实
17、型常量要注意以下几点: (1)整数部分和小数部分可以省略其中的一个,例如,.36和200.都是合法的实型常量。 (2)用指数方式时,E或e两边都要有数字,但都只能是常量。 (3)实型分为单精度实型和双精度实型,但是实型常数不分单、双精度,都按双精度double型处理。,036e2,表示0.36102; 12.56E12,表示12.561012; 3.89e3,表示3.89103。,38,24 实型实型变量,1实型数据的机内表示 实型数据一般占4个字节(32位)内存空间,按指数形式存储。比如实数3.14159在内存中的存放形式 :,数符,小数部分,阶符,阶数,小数部分占的位数愈多,数的有效数字愈
18、多,精度愈高。 指数部分占的位数愈多,则能表示的数值范围愈大。,39,24 实型实型变量,2实型变量的类型,40,24 实型实型变量,3实型变量的声明和赋值,实型变量定义的格式和书写规则与整型相同。 例如: float x, y; (x,y为单精度实型量) double a, b, c; (a,b,c为双精度实型量),41,24 实型实型变量,实型变量赋值方式与整型变量类似,但是要注意的是从键盘输入时scanf()函数的类型说明符为“%f”: float x; x=scanf(“%f”, 从键盘输入实数时可以用小数的形式或指数的形式输入。,42,24 实型实型变量,4实型值的输出 若用prin
19、tf()函数输出,格式输出符是“%f”,细节请参看本章2.7节。,43,24 实型实型变量,5实型数据的舍入误差,例2-7 实型数据的舍入误差。 main() float a, b; a=123456.789e5; b=a+20; printf(“na=%f,b=%f“,a,b); 该程序的运行结果是: a=12345678848.000000,b=12345678848.000000,44,25 字符型字符常量,字符常量是用单引号括起来的单个字符或转义字符。 例如: a、c、=、+、? 都是合法字符常量。注意,a和A是不同的字符常量。 在语言中,字符常量有以下特点: (1)字符常量只能用单引
20、号括起来,不能用双引号或其它括号。 (2)字符常量只能是单个字符,不能是字符串。 (3)有些字符有特殊含义,如单引号“”、双引号“”等,还有一些字符不能或不方便直接从键盘输入,比如回车换行符、退格符等。这时可使用转义字符来表示。,45,25 字符型字符常量,46,25 字符型字符常量,广义地讲,语言字符集中的任何一个字符均可用转义字符来表示。 表中的ddd和xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码(ASCII表见附录1)。 如101(十进制为65)表示字母A ,012(十进制为10)代表“换行“,376代表图形字符“”,XOA表示换行等。特别注意0或000是代
21、表ASCII码为0的控制字符,即“空操作”。要注意的是,015表示回车,不换行,使得输出的当前位置移到本行开头,而n表示回车换行,使得输出的当前位置跳到了下一行的行首。,47,25 字符型字符常量,例2-8 转义字符的使用。 main() printf(“ ab ct derf012“); printf(“ hi“ 101x61“); 运行后其结果如下(表示空格,本章其它地方出现这个符号,不作特别说明的话也代表空格): fabcde hi” Aa,48,25 字符型字符变量,1字符数据的机内表示,每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量
22、的内存单元之中。 如x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a,b赋予x和y值: a=x; b=y; 实际上是在a,b两个单元内存放120和121的二进制代码,如图2-7所示: a: b:,字符ASCII码表, 5 p $,有效的字符型值,“2“,2,正确,2 + 2 = 4,X,50,25 字符型字符变量,例2-9 把整数赋给字符变量。 main() char a, b; a=x; /*将字符常量赋值给字符变量*/ b=120; /*将整型常量赋值给字符变量*/ printf(“%c,%dn“, a, a); printf(“%c,%dn“, b, b);
23、运行后其结果是: x,120 x,120,51,25 字符型字符变量,例2-10大小写转换 main() char a, b; a=a; b=B; printf(“n%c, %dn%c, %d“, a, a, b, b); a=a-32; b=b+32; printf(“n%c, %dn%c, %d“, a, a, b, b); ,52,25 字符型字符变量,运行后,其结果是: a,97 B,66 A,65 b,98,53,25 字符型字符变量,2字符变量的声明和赋值,字符变量的声明格式为: char 变量名; 例如: char x ,y; 该语句声明了两个字符变量x和y。字符变量声明后就可以
24、赋值,对于声明的变量x可以这样赋值: x=x; 注意,在该语句中,左边的x是变量,而右边的x是字符常量。,54,25 字符型字符变量,字符变量也可用转义字符赋值: x=b; 该语句将退格符赋值给了x。 也可以从标准输入设备输入字符给字符变量,如:scanf(“%c”,&x)。因为scanf函数可以指定输入数据的类型,也称做格式化输入函数。,55,25 字符型字符串常量,在C语言中,没有为字符串定义变量类型,也就是说,没有字符串变量这个概念。但是有字符串常量的概念。日常生活中的人名、书名等,都要用字符串来描述。字符串可以存储在后面将要学到的数组或指针类型变量中。 字符串常量是由一对双引号括起的字
25、符序列。例如: “CHINA”,“C program”,“$12.5” 等都是合法的字符串常量。 如果要将双引号“”作为字符串的一部分,那么就需要使用转义字符。例如:“the number ”5”,该字符串就是平时理解的the number “5”。,56,25 字符型字符串常量,字符串常量和字符常量是不同的量。它们之间主要有以下区别: (1)从书写格式上看,字符常量由单引号括起来,字符串常量由双引号括起来。 (2)从形式上看,字符常量只能是单个字符,字符串常量则可以含一个或多个字符。 (3)从赋值方式上看,可以把一个字符常量赋值给一个字符变量,但不能把一个字符串常量赋值一个字符变量。在语言中
26、没有相应的字符串变量,但是可以用一个字符数组或字符指针变量来存放一个字符串常量。在数组一章内予以介绍。,57,25 字符型字符串常量,(4)从内存格式上看,字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符“0” (ASCII码为0)。这是字符串结束的标志。,例如: 字符串 “C program” 在内存中所占的字节为如图2-8所示。,58,25 字符型字符串常量,字符常量a和字符串常量“a”虽然都只有一个字符,但在内存中的情况是不同的。 思考:语句“printf(“I like 0 c”)”执行的结果是什么? 答案: I like,59,2
27、6 运算符和表达式运算符简介,算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算, %)、自增(+)、自减(-)、强制类型转换共八种。 关系运算符:用于比较运算。包括大于()、小于(=)、小于等于()六种。,60,26 运算符和表达式运算符简介,赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,=,=,=)三类共十一种。 条件运算符:这是一个三目运算符,用于条件求值(?:)。 逗号运算符:用于把若干表达式组合成一个表达式(,)。 指针运算符:用于取内容(*)和取地址(&)二种运算。 求
28、字节数运算符:用于计算数据类型所占的字节数(sizeof)。 特殊运算符:有括号(),下标,成员(,.)等几种。,61,26 运算符和表达式算术运算符和算术表达式,1基本的算术运算符 加法运算符“+”:加法运算符为双目运算符,即应有两个量参与加法运算。如a+b,4+8等。 减法运算符“-”:减法运算符为双目运算符。但“-”也可作负值运算符,此时为单目运算。 乘法运算符“*”:双目运算符。 除法运算符“/”:双目运算符。参与运算的量均为整型时,结果为舍去小数整型数;如果运算量中有一个是实型,则结果为双精度实型数。 求余运算符(也称模运算符)“%”:双目运算符。要求参与运算的量均为整型。求余运算的
29、结果等于两数相除后的余数。,62,26 运算符和表达式算术运算符和算术表达式,例2-11两数相除。 main() printf(“n%d, %d“, 20/7, -20/7); printf(“n%f, %f“, 20.0/7, -20.0/7); 该程序的运行结果为: 2,-2 2.857143,-2.857143,“/”两个操作数如果都为整形,结果为整形,如果有一个为实型,结果即为实型。,63,26 运算符和表达式算术运算符和算术表达式,例2-12除法与求余。 main() printf(“n%d, %d“, 100/3, 100%3); 该程序运行后的输出为: 33,1,64,26 运算
30、符和表达式算术运算符和算术表达式,2算术表达式和运算符的优先级和结合性 表达式是由常量、变量、函数和运算符组合起来的式子。表达式有相应类型的值,它们等于计算表达式所得结果。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看作是表达式的特例。,65,26 运算符和表达式算术运算符和算术表达式,算术表达式:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,例如(a+b)*3+c/2。,例2-13表达式的值 main() int a, b; a=5; b=7; printf(“n(a*2)/b=%d“, (a*2)/b); 其运行结果为: (a*
31、2)/b=1,66,26 运算符和表达式算术运算符和算术表达式,(2)运算符的优先级和结合性,在表达式求值的时候,先按运算符的优先级别从高到低进行,若运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理(优先级相同的所有运算符结合方向相同,因此不会有矛盾)。 算术运算符的优先级别从小到大是:先乘除(*、/和%的等级相同),后加减(和的等级相同)。 若有a+b/c ,因为除运算比加运算优先级高,因此先算除法,再将其结果与a相加。,67,26 运算符和表达式算术运算符和算术表达式,语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。 例如算术运算符的结合
32、性是自左至右。如有表达式a+b-c,则b应先与“+”号结合,执行a+b运算,然后再执行-c的运算。 C语言中各种运算符及其优先级和结合性请参看附录3,理解运算符的优先级和结合性才能真正理解表达式的合法性和运算过程。,68,26 运算符和表达式算术运算符和算术表达式,3强制类型转换运算,其一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。 例如: (float) a 把a转换为实型 (int)(x+y) 把x+y的结果转换为整型,69,26 运算符和表达式算术运算符和算术表达式,如果有下述语句: int i; float x=3.6; i=(i
33、nt)x;/*不能省略括号*/ 则i的值为3。注意:x本身的值还是3.6。 类型转换还有一种,就是自动转换,请看下面的语句: int i=3; float x; x=i; 在这里, 语句x=i不需要写成x=(float)i,其转换是自动完成的。,70,26 运算符和表达式算术运算符和算术表达式,4自增、自减运算符,自增1运算符记为“+”,其功能是使变量的值自增1。自减1运算符记为“-”,其功能是使变量值自减1。 自增1,自减1运算符均为单目运算,都具有右结合性。可有以下几种形式:,71,26 运算符和表达式算术运算符和算术表达式,(1)+i i自增1后再参与其它运算。例如,假设i和j为已经声明
34、好的整型变量: j=+i 相当于(注意两个语句的先后顺序,不能颠倒): i=i+1; j=i; (2)-i i自减1后再参与其它运算。例如: j=-i; 相当于: i=i-1; j=i;,72,26 运算符和表达式算术运算符和算术表达式,(3)i+ i参与运算后,i的值再自增1。例如: j=i+; 相当于: j=i; i=i+1; (4)i- i参与运算后,i的值再自减1。例如: j=i-; 相当于: j=i; i=i-1;,例: j = 3; k = +j; j = 3; k = j+; j = 3; printf (“%d”, +j); j = 3; printf(“%d”, j+); a
35、 = 3; b = 5; c = (+a) * b; a = 3; b = 5; c = (a+) * b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,73,26 运算符和表达式算术运算符和算术表达式,自加自减运算用法灵活,出现在较复杂的表达式或语句中时,常常难以弄清,因此应仔细分析。 例如,设i,j都为整型,j=i+合法,而j=(i+)+却不合法,因为(i+)是表达式,不能在用+运算了。另外,碰到繁难的表达式,必要的时候可以编写程序运行,通过结果反推其运算过程。,74,26 运算符和表达式算术运算符和算术表达式,例2-14 自加自减运算 main
36、() int i=5; printf(“n%d“, -i+); printf(“n%d“, -+i); 其运行的结果为: -5 -7,75,26 运算符和表达式算术运算符和算术表达式,例2-15 复杂的自加自减运算 main() int i=5, j=5, k=5, p, q, r; p=(i+)+(i+)+(i+); q=(+j)+(+j)+(+j); r=k+1; printf(“ni=%d, p=%d“, i, p); printf(“nj=%d, q=%d“, j, q); printf(“nk=%d, r=%d“, k, r); ,76,26 运算符和表达式算术运算符和算术表达式,该
37、程序运行结果为: i=8, p=15 j=8, q=24 k=6, r=6,77,26 运算符和表达式算术运算符和算术表达式,5各数值类型数据间的混合运算,整型、字符型和实型之间可以混合运算,但在运算的时候,不同类型的数据需要进行自动转换,其规律是: (1)字符型(char)和短整型(short)必定先转换为整型(int); (2)float型一律转换为double型(可以提高运算精度);,78,26 运算符和表达式算术运算符和算术表达式,(3)当运算对象为不同类型时,转换方向是: intunsignedlongdouble 例如:int型与double型运算,先将int型对象转换为doubl
38、e型后运算。,79,26 运算符和表达式赋值运算符和赋值表达式,1简单赋值运算符,简单赋值运算用“”表示,基本格式为: 变量表达式 其含义是把右边的表达式的值赋给左边的变量。也可以用连等的形式: 变量1变量2变量n=表达式。例如: i=j=5(设i和j为整型变量); 注意赋值运算是右结合的,因此连等相当于: 变量n= 表达式; 变量n-1=变量n; ; 变量1变量2;,80,26 运算符和表达式赋值运算符和赋值表达式,下面给出一些赋值表达式的例子: x=a+b w=sin(a)+sin(b) y=i+ + + - -j a=b=c=5可理解为a=(b=(c=5) 可以说,凡是表达式可以出现的地
39、方均可出现赋值表达式。 例如,式子: x=(a=5)+(b=8),81,26 运算符和表达式赋值运算符和赋值表达式,2复合赋值表达式,赋值符“=”之前加上其它一些运算符可构成复合赋值符。如+=,-=,*=,=,%=,=,&=,=,|=。 构成复合赋值表达式的一般形式为: 变量 双目运算符=表达式 它等效于 变量=变量 运算符 (表达式) 例如: a+=5 等价于a=a+5 x*=y+7 等价于x=x*(y+7) r%=p 等价于r=r%p,注意有个括号,82,26 运算符和表达式赋值运算符和赋值表达式,3赋值运算中的类型转换,(1)实型赋予整型,舍去小数部分。 (2)整型赋予实型,数值不变,但
40、将以浮点形式存放,即增加小数部分(小数部分的值为0)。 (3)字符型赋予基本整型,由于字符型为只占一个字节,而整型占二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位的值根据不同的系统确定是否进行符号扩展。 (4)短整型(基本整型)赋予长整型,与字符型赋予基本整型类似,将整个数据写入长整型的低16位,高16位的值也根据系统来确定是否进行符号扩展。 (5)整型赋予字符型,只把低八位赋予字符量。,83,26 运算符和表达式赋值运算符和赋值表达式,例2-16 类型转换程序之一。 main() int a; long int b=112768; a=b; printf(“n%d“, a);
41、 其运行结果为: 18304,84,26 运算符和表达式赋值运算符和赋值表达式,例2-17类型转换程序之二。 main() int a, b=322,c; char c1=a, c2; float x, y=35600.35; a=y; x=b; c=c1; c2=b; printf(“na=%d, x=%f, c=%d, c2=%d“, a, x, c, c2); 该程序运行的结果是: a=29936,,x=322.000000,c=97,c2=66,85,26 运算符和表达式关系运算符和关系表达式,关系运算符是用于两两之间比较大小,C语言提供了6种关系运算符: (大于)、=(大于或等于)、
42、=(等于)、!=(不等于)。 关系表达式的格式为: 表达式1 关系运算符 表达式2 例如: a9,86,26 运算符和表达式关系运算符和关系表达式,可以认为关系表达式的值为“真(True)”或“假(false)”,但是C语言中没有逻辑量。关系表达式的值要么是1,要么是0。如果关系成立,则关系表达式的值为1,否则为0。 表达式的值(3+4)9的值为0,可以用printf(“%d”,(3+4)9)语句来验证。第三章中将进一步讲述关系表达式的使用。,87,26 运算符和表达式逻辑运算符和逻辑表达式,C语言提供三种逻辑运算符: &(逻辑与)、|(逻辑或)、!(逻辑非)。 由逻辑运算符构成的表达式为逻辑
43、表达式。 &运算要求两个操作数,当两个操作数都为“真”时表达式的值为“真”,否则为假; |运算也需要两个操作数,当其中之一为“真”时,整个表达式就为“真”,否则为假; !为单目运算符,若操作数为“真”,则其逻辑非为“假”,若操作数为“假”,则其逻辑非为“真”。 第三章进一步讲述关系表达式的使用。,88,26 运算符和表达式逗号运算符和逗号表达式,在语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。 其一般形式为: 表达式1,表达式2,表达式n(n=2)。 其求值过程是分别求各个表达式的值,并以表达式n的值作为整个逗号表达式的值。,8
44、9,26 运算符和表达式逗号运算符和逗号表达式,例2-18 逗号表达式的值 main() int a=2, b=4, c=6, x, y, z; y=(x=a+b), (b+c); z=(x=a+b), (b+c); printf(“ny=%d, x=%d, z=%d“, y, x, z); 本程序的结果为: y=6,x=6,z=10,90,26 运算符和表达式逗号运算符和逗号表达式,逗号表达式一般形式中的表达式也可以又是逗号表达式。 例如: 表达式1,(表达式2,表达式3) 形成了嵌套情形。上面整个表达式的值就是表达 式3的值。 程序中使用逗号表达式,则分别求逗号表达式内各表达式的值,并不一
45、定需要将整个逗号表达式的值赋给某一变量。,91,27 基本的输入输出函数printf函数,两种调用形式 格式控制字符串的一般形式为:,printf(“字符串”);,printf(“格式控制字符串”,输出表列);,%flagwidth.prechlL输出格式字符,92,27 基本的输入输出函数printf函数,printf的格式字符,93,27 基本的输入输出函数printf函数,94,27 基本的输入输出函数printf函数,对上表的格式控制符说明如下: (1)%d格式符:用来输出十进制整数,有以下几种用法: %d:按数据实际长度输出。 %md:m为指定的输出字段的宽度。m0时,如果数据的位数
46、小于|m|,则左端补以空格;如果m0,当数据的位数小于|m|,则右端补空格。若数据位数大于|m|,则按实际位数输出。 %ld:输出长整型数据,如 long a=123560; printf(“%ld”,a); 如用%d输出长整型数据,就会发生错误,因此long型数据应该用%ld格式输出。对长整型数据也可指定字段宽度,如用“printf(“%9ld”,a);”语句,其结果为: 123560 共9列。,95,27 基本的输入输出函数printf函数,(2)%o格式符:以8进制形式输出整数。例如: int a=-1; printf(“%d, %o” , a, a); 输出结果为: -1,377777
47、77777 %lo用于输出八进制长整型。,96,27 基本的输入输出函数printf函数,(3)%x格式符:以16进制形式输出整数。例如: int a=-1; printf(“%x, %o, %d” , a, a, a); 输出结果为: ffffffff,37777777777,-1 %lx含义是以16进制形式输出长整型数据。 (4)%u格式符:以十进制形式输出无符号数,例如地址值。,97,27 基本的输入输出函数printf函数,(5)%f格式符:用来以小数形式输出实数(包括单、双精度),有以下几种用法:,%f:不指定字段宽度,由系统自动指定,使整数部分原样输出,并输出6位小数。单精度实数的有效位数一般为7位。双精度数也可用%f格式输出,它的有效位数一般为16位,小数部分为6位。,98,27 基本的输入输出函数printf函数,例2-19 %f的用法。 #include main() float x, y; double u, v; x=111111.111; y=222222.222; u=1111111111111.111111111; v=2222222222222.222222222; p
链接地址:https://www.31doc.com/p-2250332.html