




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据数据是算法的处理对象,在程序中准确有效地描是算法的处理对象,在程序中准确有效地描述数据的类型、表示方法、处理方式是至关重要述数据的类型、表示方法、处理方式是至关重要的。准确有效的数据描述是编程的基础。的。准确有效的数据描述是编程的基础。本章重点是本章重点是基本数据类型基本数据类型及其及其运算规则运算规则。包括:。包括:n常量的表示方法。常量的表示方法。n转义字符的含义和表示方法。转义字符的含义和表示方法。n变量(包括指针变量)的定义方式和运算规则。变量(包括指针变量)的定义方式和运算规则。n主要运算符的使用方法。主要运算符的使用方法。n运算表达式的书写方式。运算表达式的书写方式。n著名的著
2、名的+、- -运算符等。运算符等。n不同的数据在计算机中的表示方法是不同的(如:不同的数据在计算机中的表示方法是不同的(如:定点数、浮点数、字符数据等不同类型),这是由定点数、浮点数、字符数据等不同类型),这是由计算机的二进制存储特性所决定的。在程序中要指计算机的二进制存储特性所决定的。在程序中要指定数据的类型,以便编译系统能够按指定类型确定定数据的类型,以便编译系统能够按指定类型确定其表示方法、字节个数、以及运算方式。其表示方法、字节个数、以及运算方式。n C语言中基本数据类型很多,短的、长的、有符的、语言中基本数据类型很多,短的、长的、有符的、无符的,变化丰富。初学者可能感到比较困难,其无
3、符的,变化丰富。初学者可能感到比较困难,其实从数据的存储形式上来看,归纳起来实质上只有实从数据的存储形式上来看,归纳起来实质上只有两大类型的数据两大类型的数据 整型数据整型数据和和实型数据实型数据,即定点整,即定点整数和浮点数。数和浮点数。在在C语言的数据类型中,指针类型和构造类型又称为导出类型语言的数据类型中,指针类型和构造类型又称为导出类型(Derived Tupe),定,定义这类数据时要用到基本类型义这类数据时要用到基本类型(Basic Type)。枚举类型(。枚举类型(Enumerated Type)用于定用于定义有一定取值范围的数据。空类型义有一定取值范围的数据。空类型(The Ty
4、pe Void)表示所定义的对象没有任何值。表示所定义的对象没有任何值。在在C语言的程序中,对于所用到的数据必须事先进行定义,即语言的程序中,对于所用到的数据必须事先进行定义,即“先定义,后使先定义,后使用用”。整型整型单精度型单精度型基本类型基本类型实型实型字符型字符型双精度型双精度型枚举型枚举型数据类型数据类型空类型空类型指针类型指针类型 数数 组类型组类型构造类型构造类型 结构体类型结构体类型 共用体类型共用体类型类型定义符类型定义符类型名类型名长度长度( (字节数字节数) )有效值范围有效值范围charchar有符字符型有符字符型1 1有符数:有符数:- -128128 127127,
5、- -2 27 7 (2(27 7- -1)1)unsigned charunsigned char无符字符型无符字符型1 1无符数:无符数:0 0 255255,0 0 (2(28 8- -1)1)short short 有符短整型有符短整型2 2有符数:有符数:- -3232768768 3232767767,- -2 21515 (2(21515- -1)1)unsigned shortunsigned short无符短整型无符短整型2 2无符数:无符数:0 0 6565535535,0 0 (2(21616- -1)1)intint有符整型有符整型4 4有符数:约有符数:约- -212
6、1亿亿 2121亿,亿,- -2 23131 (2(23131- -1)1)unsignedunsigned无符整型无符整型4 4无符数:约无符数:约0 0 4242亿,亿,0 0 (2(23232- -1)1)long long (同(同 intint)有符长整型有符长整型4 4有符数:约有符数:约- -2121亿亿 2121亿,亿,- -2 23131 (2(23131- -1)1)unsigned long unsigned long (同(同 unsignedunsigned)无符长整型无符长整型4 4无符数:约无符数:约0 0 4242亿,亿,0 0 (2(23232- -1)1)f
7、loatfloat单精度实型单精度实型4 4约约3.43.4 1010- -3838 3.43.4 1010 3838(7(7位有效位位有效位) )double double 或或 long doublelong double双精度实型双精度实型8 8约约1.71.7 1010- -307307 1.71.7 1010 308308(16(16位有效位位有效位) )The value of a constant is given at COMPILE time, and (of course) cannot be changed.C语言中的常量有整型常量、实型常量、字符型常量、字符串常量、符号
8、常量、枚举常量等。Integer constants,floating point constants,character constants,character string constants and enumeration constants are all constants. 基本类型常量是通过书写形式隐式说明的,即由其书写格式确定数据的类型是实数、十进制整数、八进制整数、十六进制整数、字符还是字符串。整型常量有三种形式:十进制、八进制和十六进制整数。整型常量有三种形式:十进制、八进制和十六进制整数。n 十进制整数十进制整数: 十进制整数由十进制整数由0-9这这10个数字和正负号组成
9、个数字和正负号组成,正负号只能,正负号只能出现在最左边。表示一个正数时,正号可以省略;当一出现在最左边。表示一个正数时,正号可以省略;当一个整数是两位或大于两位数时,其个整数是两位或大于两位数时,其最左边的数字不能为最左边的数字不能为0。 例如:例如:123 597 -425 0 -0是合法的整数。而是合法的整数。而0932是非法的是非法的整数表示方法。整数表示方法。n 八进制整数八进制整数: 八进制整数必须以八进制整数必须以0(零零)开头开头并由并由0-7这这8个数字和正负号个数字和正负号组成,正负号只能出现在最左边。正数正号可以省。组成,正负号只能出现在最左边。正数正号可以省。例如:例如:
10、0123 0404 -0453 -00是合法的八进制整数,而是合法的八进制整数,而0128是非法的。是非法的。 n十六进制整数。十六进制整数。十六进制整数必须以十六进制整数必须以0 x(0X)开头开头,由,由0-9,a,b,c,d,e,f(或或A,B,C,D,E,F)这这16个符号个符号和正负号组成,正负号只能出现在最左边。表示一个正和正负号组成,正负号只能出现在最左边。表示一个正数时,正号可以省略。数时,正号可以省略。 例如:例如:0 x123 0Xfa1 -0 x9a12 -0 x0是合法的十六进制数。是合法的十六进制数。0 x12g -x897a 25b 是非法的十六进制数。是非法的十六
11、进制数。n U U和和L L分别是分别是unsignedunsigned和和longlong的第一个字母,可以跟的第一个字母,可以跟在整型常量的后面,以指明该整数为无符整型常量在整型常量的后面,以指明该整数为无符整型常量(unsigned(unsigned型型) )、长整型常量、长整型常量(long(long型型) )以及无符长整型常以及无符长整型常量量(unsigned long(unsigned long型型) )。使用时。使用时U U和和L L可以小写。可以小写。如:如:长整型数:长整型数: 32768l32768l0761L0761L 0 xd1dL 0 xd1dL无符整型数:无符整型
12、数:32768u32768u0 x2a7U 0277U0 x2a7U 0277U无符长整型数:无符长整型数:555ul555ul0 xabcUL 0722ul0 xabcUL 0722ul实型常量又称浮点型常量,有两种表示方法:实型常量又称浮点型常量,有两种表示方法:十进制小数形式十进制小数形式 和和 指数形式。指数形式。 n十进制小数形式十进制小数形式: :十进制小数由十进制小数由0-90-9十个数字、小数点、正号、十个数字、小数点、正号、负号组成,正负号只能出现在最左边。表示一个正数时,正负号组成,正负号只能出现在最左边。表示一个正数时,正号可以省略。如:号可以省略。如:123.5123.
13、5 032.45 032.45 .0 .00. 0. 是正确的书写方式。是正确的书写方式。n指数形式指数形式。指数的一般形式如下:指数的一般形式如下: 整数部分整数部分 . .小数部分小数部分een n “整数部分整数部分”和和“小数部分小数部分”不可全无。不可全无。e en n为指数部分,为指数部分,e e可大写,可大写,n n是一个是一个1 13 3位的十进制整数位的十进制整数(第一位可为(第一位可为0 0),),2e22e2表示表示2 210102 2 。例如:例如:123.5E3,-0.45e-4,1E+012,0e5是合法的指数形式。是合法的指数形式。 -E5,-1E2.05,.e5
14、,0.8E+k是非法的指数形式。是非法的指数形式。n实型常量缺省的类型为实型常量缺省的类型为doubledouble型。为满足实型常量的型。为满足实型常量的存储形式、数据精度上的特定需要,可用后缀存储形式、数据精度上的特定需要,可用后缀F F和和L L对实型常量进行类型转换。对实型常量进行类型转换。n F F和和L L可跟在实型常量的后面,以指明该实数为单精可跟在实型常量的后面,以指明该实数为单精度实数度实数(float(float型型) )或长双精度实数或长双精度实数(long double(long double型型) )。使用。使用时时F F和和L L可以小写。可以小写。 如:如: 单精
15、度实数:单精度实数: 32.768f32.768f1F1F 1.2e3F 1.2e3F 长双精度实数:长双精度实数:1.2e309L1.2e309L 0.1L0.1L 5.0L 5.0Ln 字符常量字符常量是用一对单引号括起来的一个字符,如:a、A、$等。 空字符空字符也是字符,它包含0个字符,值为0,可以表示为,也可以表示为0,程序中总是用0表示空字符。 n在C语言中还有另外一种字符常量,称为转义字符转义字符。Escape Sequences, a combination of two characters that produces a special effect within a te
16、xt string. The 1st character is always a backslash().n转义字符是以反斜线转义字符是以反斜线()开头的字符串开头的字符串,也称为控制字符。因为它们中的大多数具有控制功能,如n代表换行符,在printf()函数中使用它可以实现换行的功能。 转义字符转义字符含义含义注释注释00空字符空字符nullnullaa响铃响铃alarmalarmbb退格,从当前位置向前移动一格退格,从当前位置向前移动一格backbackff换页,从当前位置换到下一页开头换页,从当前位置换到下一页开头feedfeednn换行,从当前位置换到下一行开头换行,从当前位置换到下一
17、行开头new linenew linerr回车,从当前位置换到本行的开头回车,从当前位置换到本行的开头returnreturntt水平制表,水平换到下一水平制表,水平换到下一tabtab位置位置tab keytab key反斜线字符反斜线字符 back slashback slash 单引号字符单引号字符 single quotesingle quote 双引号字符双引号字符 double quotedouble quotedddddd1 1 3 3位八进制数对应的字符位八进制数对应的字符000000377377范围里范围里1 1到到3 3位位8 8进制数字对应的进制数字对应的ASCIIASC
18、II字符字符xhhxhh1 1 2 2位十六进制数对应的字符位十六进制数对应的字符0000ffff范围里范围里1 1到到2 2位位1616进制数字对应的进制数字对应的ASCIIASCII字符字符Hello, C Hello, C 12/4=3 is a string #include #include main( ) printf(Hello,Cn); printf(110145154x6c15754C12); printf(12/4=3tis a stringn); getch();#include #include main() printf(abctderxn);printf(ftbbg
19、); 运行结果:运行结果:xbcdefg转义字符的应用转义字符的应用 字符串常量是用双引号括起来的。字符串常量是用双引号括起来的。如如: a a 是字符常量是字符常量,而而 a a 是字符串常量是字符串常量。 空串表示为空串表示为。C C语言规定:语言规定:在每一个字符串后,系统自动加一个空字在每一个字符串后,系统自动加一个空字符符 00 作为字符串的结束标志符作为字符串的结束标志符,以判断字符串的长度。,以判断字符串的长度。 字符串的长度比实际长度大字符串的长度比实际长度大1 1。空串的长度为。空串的长度为1 1,而不是,而不是0 0。String literals or constants
20、 are enclosed in double quotes ( ) .在使用字符串时,应当注意以下情况:一个字符串如果要分两行书写,可在前一行的字符串尾部加反斜线 或者把不同行上的字符串分别用双引号括起来。 如: printf(C programming language is powerful.n); 或者,printf(C programming language is powerful n);符号常量是代表一个字符序列的标识符符号常量是代表一个字符序列的标识符(又称宏名又称宏名)。一旦定义了一个符号常量,则它就与该字符序列是一旦定义了一个符号常量,则它就与该字符序列是等价的。等价的。在
21、在C语言中,定义符号常量的方法有三种:语言中,定义符号常量的方法有三种:使用编译预处理的宏替换功能使用编译预处理的宏替换功能#define;使用类型限定符使用类型限定符const说明并初始化;说明并初始化;使用枚举类型(使用枚举类型(enumeration constants)来定义。)来定义。#define 标识符标识符 字符序列字符序列 字符序列可以由任意字符组成,还可以是已经定义过的字符序列可以由任意字符组成,还可以是已经定义过的符号常量。符号常量应符号常量。符号常量应先定义后使用先定义后使用,可以出现在程序,可以出现在程序中的任何位置,习惯上中的任何位置,习惯上尽量放在程序的前面尽量放
22、在程序的前面。符号常量。符号常量(宏名宏名)通常用大写字母书写通常用大写字母书写,以示与其他标识符的区别。,以示与其他标识符的区别。在一个源程序中,当一个标识符被定义成符号常量,则在一个源程序中,当一个标识符被定义成符号常量,则在编译时,编译程序预先在编译时,编译程序预先将源程序中所有已经定义的符将源程序中所有已经定义的符号常量用相应的字符序列来替换号常量用相应的字符序列来替换,然后再进行后续的编,然后再进行后续的编译处理。译处理。 如:如:#define PI 3.14159#define SPACE This is a joke #include #define STR1 This is
23、a main( ) #define STR2 joke #define M STR1 STR2 printf(M); /或者或者printf(STR1 STR2); getch(); 另外,需要时还可使用另外,需要时还可使用#undef#undef来取消已经定义了的符号来取消已经定义了的符号常量,取消定义后,该符号常量常量,取消定义后,该符号常量( (宏名宏名) )还可再定义并使还可再定义并使用。用。 This is not a joke #include #define STR1 Thisisa main( ) #undef STR1 #define STR1 Thisisnota #def
24、ine STR2 joke #define M STR1 STR2 printf(M); /或者或者printf(STR1 STR2); getch();在定义变量时,如果加上关键字在定义变量时,如果加上关键字constconst, , 则变量的值在程序则变量的值在程序运行期间不能改变,这种变量称为运行期间不能改变,这种变量称为常变量常变量( (也称为定义符也称为定义符号常量)。定义常变量的一般格式为:号常量)。定义常变量的一般格式为:const const 类型说明符常变量名类型说明符常变量名 常量值常量值; ;例如:例如:const int PASS_MARK=50;常变量名应使用大写字母
25、,以便与变量名区别。常变量名应使用大写字母,以便与变量名区别。 const int PASS_MARK=50;main() printf(%d,PASS_MARK+1); getch(); 变量变量(variable)(variable)是指在程序运行过程中,其值可以被改变的量。是指在程序运行过程中,其值可以被改变的量。变量用变量用变量名变量名来表示,当程序运行时,系统为每一个变量分来表示,当程序运行时,系统为每一个变量分配一个内存单元并在变量名和该内存单元地址间建立一一对配一个内存单元并在变量名和该内存单元地址间建立一一对应的关系,引用该变量名时,实际上就是应的关系,引用该变量名时,实际上就
26、是引用该变量名所对引用该变量名所对应地址单元的内容应地址单元的内容。 34b变量名变量名变量值变量值地址地址2002内存单元内存单元图图2-2 变量的存储变量的存储在在C C语言中,有各种类型的数据。为语言中,有各种类型的数据。为了准确有效地保存这些数据,并参加了准确有效地保存这些数据,并参加运算,变量也应有不同的类型。运算,变量也应有不同的类型。常量的类型是隐式说明的,即通过书常量的类型是隐式说明的,即通过书写形式确定。变量的类型则是显式说写形式确定。变量的类型则是显式说明的,通过定义语句确定变量名及其明的,通过定义语句确定变量名及其类型。类型。变量名及其类型需要变量名及其类型需要先定义,后
27、使用先定义,后使用。 n变量定义的格式:变量定义的格式: 类型定义符类型定义符 变量名表;变量名表; 其中,类型定义符其中,类型定义符( (表表2-1)2-1)定义变量名表中所列变量定义变量名表中所列变量的类型,变量名表由一个或多个变量名组成,其间的类型,变量名表由一个或多个变量名组成,其间用逗号用逗号“,”分隔,变量名的命名应符合分隔,变量名的命名应符合C C语言标识语言标识符的规定。符的规定。int student_num ; float student_score , aver ; n在程序执行时,系统为已经定义的不同类型的各个变量逐一在程序执行时,系统为已经定义的不同类型的各个变量逐一
28、分配存储单元,如为一个分配存储单元,如为一个char型变量分配一个型变量分配一个1字节的存储字节的存储单元,为一个单元,为一个float型变量分配一个型变量分配一个4字节的存储单元等,并字节的存储单元等,并根据各变量的定义类型,确定数据在存储单元的存储格式根据各变量的定义类型,确定数据在存储单元的存储格式(有有符定点整型、浮点型格式等符定点整型、浮点型格式等)。 n定义的同时对变量进行初始化定义的同时对变量进行初始化( (赋初值赋初值) ),其格式如下:,其格式如下:类型定义符类型定义符 变量名变量名= =表达式,表达式,;如:如: long distance=700000, height;
29、double area=9.6e7; float s=3*distance; 其中,其中,“变量名变量名= =表达式表达式”中的中的“= =”称为赋值号,其含义是称为赋值号,其含义是将将“= =”右边表达式的值赋给其左边的变量。表达式中的变量右边表达式的值赋给其左边的变量。表达式中的变量名应是预先定义并且已经赋过初值的。名应是预先定义并且已经赋过初值的。注意要点:注意要点:n在使用变量时,应注意在使用变量时,应注意“先定义,后使用先定义,后使用”的原则。的原则。 n一般在一个函数中,变量名不能重复定义。一般在一个函数中,变量名不能重复定义。n除非有特定的需要,通常把定义变量的语句集中放在函数的
30、除非有特定的需要,通常把定义变量的语句集中放在函数的开始处。开始处。n通常,在函数中定义变量时,若没有赋初值,则该变量的值通常,在函数中定义变量时,若没有赋初值,则该变量的值不确定。不确定。 指针(指针(pointerpointer)是)是C C语言最具特色的语言成分。简语言最具特色的语言成分。简单地说,指针就是单地说,指针就是地址地址。存放地址的变量叫做指针变量。存放地址的变量叫做指针变量。与其他类型的变量一样,使用指针变量之前必须定与其他类型的变量一样,使用指针变量之前必须定义义. . 定义指针变量的一般形式是:定义指针变量的一般形式是:类型标识符类型标识符 * *指针变量名指针变量名如:
31、如:int *p; 定义了一个指向整型变量的指针变量定义了一个指向整型变量的指针变量 p p。 其中的其中的* *不是指针变量名的一部分,在指针的定义中,不是指针变量名的一部分,在指针的定义中,* *的存的存在告诉在告诉C C语言这个变量是一个指针而不是普通变量。语言这个变量是一个指针而不是普通变量。也可以写作也可以写作 int* p; p;,其中的,其中的int*就是指针变量就是指针变量p p的类型:的类型:指向整型变量。指向整型变量。 在有指针变量的表达式中,可以使用以下两个运算符:在有指针变量的表达式中,可以使用以下两个运算符:& 取地址运算符(取址运算符)取地址运算符(取址运算符) 如
32、:m=&a 将a的地址送入m* 取指针指向对象运算符(取值运算符)取指针指向对象运算符(取值运算符) 如:*m就是指针变量m所指向的变量,也就是a。因此,有了m=&a 后,就有了*m等价a 。n通常,将指针和被指变量一起定义: int x,*p=&x; 等价于 int x,*p; p=&x;n在把一个变量的地址赋给一个指针之前,指针未被初始化,在把一个变量的地址赋给一个指针之前,指针未被初始化,而且不能用它们做任何事。在一个指针变量中只能存放同而且不能用它们做任何事。在一个指针变量中只能存放同一类型变量的地址,否则造成数据提取的错误。一类型变量的地址,否则造成数据提取的错误。#include
33、#include main() int x=3,*p=&x; printf(%dn,p); printf(%dn,&(*p); printf(%dn,x); printf(%dn,*(&x); getch(); 加强对不同类型数据的书写方式、编码方法以及存加强对不同类型数据的书写方式、编码方法以及存储形式的理解。储形式的理解。 如:如: int a; 语句定义了一个什么类型的变量,变量名语句定义了一个什么类型的变量,变量名是什么?该变量所对应的内存单元有几个字节?是是什么?该变量所对应的内存单元有几个字节?是有符还是无符的?有符还是无符的? float a; 或或 double a; 或或 l
34、ong a; 呢?呢?C C语言的运算符语言的运算符(operator)(operator)多,涉及的运算范围广,可多,涉及的运算范围广,可以根据运算符的功能进行分类以根据运算符的功能进行分类( (表表2-3)2-3),也可以根据,也可以根据运算符所需操作对象运算符所需操作对象操作数操作数(operand)(operand)的个数分类。的个数分类。如:单目运算符、双目运算符、三目运算符等。如:单目运算符、双目运算符、三目运算符等。 用运算符将若干个操作数连接起来构成的式子称为用运算符将若干个操作数连接起来构成的式子称为表达式。表达式。单个的常量、变量、有返回值的函数调用单个的常量、变量、有返回
35、值的函数调用也是表达式。也是表达式。 表达式运算的结果是一个值,称为表达式的值。表达式运算的结果是一个值,称为表达式的值。表达式结果值的类型称为表达式的类型。表达式结果值的类型称为表达式的类型。 运算符的优先级别和运算符的结合方向,它是决定运算符的优先级别和运算符的结合方向,它是决定表达式的运算规则的重要因素。表达式的运算规则的重要因素。 类别类别名称名称 运算符运算符1 1算术运算符算术运算符 - - * * / / %2 2自增、自减运算符自增、自减运算符 -3 3关系运算符关系运算符 = = != =4 4逻辑运算符逻辑运算符! ! & & & & |5 5位运算符位运算符 | | &
36、&6 6赋值运算符赋值运算符= = 及其扩展赋值运算符及其扩展赋值运算符7 7条件运算符条件运算符? :8 8逗号运算符逗号运算符,9 9指针运算符指针运算符* * & &1010求字节数运算符求字节数运算符sizeofsizeof1111强制类型转换运算符强制类型转换运算符( (类型类型) )1212结构体成员运算符结构体成员运算符. -1313下标运算符下标运算符 1414其他其他如:函数调用运算符如:函数调用运算符( )( )运算符运算符名称名称表达式表达式结果及类型结果及类型 加法运算符或正值运算符加法运算符或正值运算符( (双目双目) )1 1 2 2.6 63.6 3.6 实实型型
37、- -减法运算符或负值运算符减法运算符或负值运算符( (双目双目) )3 3- -1 12 2 整型整型* *乘法运算符乘法运算符( (双目双目) )4 4* *3 312 12 整型整型/ /除法运算符除法运算符( (双目双目) )4/34/31 1 整型整型%模运算符或称求余运算符模运算符或称求余运算符( (双目双目) )8 8%-%-5 53 3 整型整型 正号运算符正号运算符( (单目单目) ) 2 2.6 6 2.6 2.6 实实型型- -负号运算符负号运算符( (单目单目) )- -3 3- -3 3 整型整型算术运算符是有两个运算对象的双目运算符。用算术运算符将操作数算术运算符是
38、有两个运算对象的双目运算符。用算术运算符将操作数连接起来的式子称为连接起来的式子称为算术表达式算术表达式。优先级别:优先级别:单目运算符单目运算符+ +和和- - 双目运算符双目运算符* *、/ /、% % 双目运算符双目运算符+ +和和- -单目运算符单目运算符+ +和和- -的结合方向为从右至左,其他双目运算符的结合方向的结合方向为从右至左,其他双目运算符的结合方向是从左至右。同级运算时,按结合方向先后次序进行运算。是从左至右。同级运算时,按结合方向先后次序进行运算。求余运算符求余运算符%只能用于整型量只能用于整型量之间,且以之间,且以被除数的符号被除数的符号作为余数符号。作为余数符号。算
39、术运算符是有两个运算对象的双目运算符。算术运算符是有两个运算对象的双目运算符。用算术运算符将操作数连接起来的式子称为用算术运算符将操作数连接起来的式子称为算术表达式算术表达式。优先级别:单目运算符优先级别:单目运算符+ +和和- - 双目运算符双目运算符* *、/ /、% % 双目运算符双目运算符+ +和和- -。单目运算符单目运算符+ +和和- -的结合方向为从右至左,其的结合方向为从右至左,其他双目运算符的结合方向是从左至右。同级他双目运算符的结合方向是从左至右。同级运算时,按结合方向先后次序进行运算。运算时,按结合方向先后次序进行运算。求余运算符求余运算符%只能用于整型量只能用于整型量之
40、间,且以之间,且以被除被除数的符号数的符号作为余数的符号。作为余数的符号。可以使用一对或多对可以使用一对或多对( )( )运算符,运算符,( )( )的优先级别的优先级别最高,其中的表达式优先运算。最高,其中的表达式优先运算。指针变量的值是地址。指针的算术运算只能指针变量的值是地址。指针的算术运算只能地址值的加或减,其结果仍是地址值。新地地址值的加或减,其结果仍是地址值。新地址值是相对原地址值加上或减去址值是相对原地址值加上或减去n n个存储单元个存储单元的地址。的地址。 如:如:q和和p都是指向都是指向float型数据的指针变量,型数据的指针变量,其值分别为其值分别为65500和和65496
41、,那么,那么q-p的值为的值为1,两指针相差,两指针相差1个存储单元。个存储单元。对于单精度实型操作数,系统先将表达式中的所有对于单精度实型操作数,系统先将表达式中的所有float型型操作数操作数(常量或变量常量或变量)转换成转换成double型,再参与运算。型,再参与运算。对于字符型操作数,系统先将表达式中的所有字符型操作数对于字符型操作数,系统先将表达式中的所有字符型操作数(常量或变量常量或变量)转成转成int型,并以其型,并以其ASCII码值参加算术运算。码值参加算术运算。 如:如: a +3的结果是整型数的结果是整型数100。当操作数的类型相同时,其结果类型不变。当操作数的类型相同时,
42、其结果类型不变。 如:如:5/2的结果是的结果是2。 当操作数的类型不同时,一般情况下,其结果类型与操作数当操作数的类型不同时,一般情况下,其结果类型与操作数中字节数多的类型一致。中字节数多的类型一致。 如:如:2*2.5的结果是的结果是5.0,double型。型。要注意函数返回值的类型对表达式类型的影响,要注意函数返回值的类型对表达式类型的影响,如:表达式如:表达式6*fabs(-4)的结果类型是双精度。的结果类型是双精度。 赋值运算符赋值运算符“= =”将变量和表达式连接起来就组成赋将变量和表达式连接起来就组成赋值表达式。其格式如下:值表达式。其格式如下: 变量变量= =表达式表达式 赋值
43、运算符赋值运算符“= =”的右边是表达式,而左边只能是一个变量。的右边是表达式,而左边只能是一个变量。一个变量可以先后被多次赋值,变量仅保存最后一次赋值。一个变量可以先后被多次赋值,变量仅保存最后一次赋值。赋值运算符不同于数学上的赋值运算符不同于数学上的“等号等号” 。运算符运算符名称名称表达式表达式等价于等价于=赋值运算符赋值运算符( (双目双目) )a=6+2+=加赋值运算符加赋值运算符( (双目双目) )a+=3a=a+3-=减赋值运算符减赋值运算符( (双目双目) )a-=4a=a-4*=乘赋值运算符乘赋值运算符( (双目双目) )a*=9a=a*9/=除赋值运算符除赋值运算符( (双
44、目双目) )a/=5a=a/5%=运算符运算符( (双目双目) )a%=6a=a%6赋值运算符是双目运算符,所有赋值运算符赋值运算符是双目运算符,所有赋值运算符( (包括复合赋值运包括复合赋值运算符算符) )的优先级别相同,其结合方向为从右至左。算术运算符的优先级别相同,其结合方向为从右至左。算术运算符的优先级高于赋值运算符。的优先级高于赋值运算符。a=3+2a=3+2。先算。先算+ +,“+ +”的优先级高于的优先级高于“= =”;然后将;然后将5 5赋值给赋值给a a。运算完,变量运算完,变量a a的值为的值为5 5,表达式的值为,表达式的值为5 5。有有int a=2;int a=2;,
45、则表达式,则表达式a a* *=3+2=3+2的值是的值是1010,a a的值是的值是1010。因为。因为a a* *=3+2=3+2等价于等价于a=aa=a* *(3+2)(3+2),“+ +”的优先级高于的优先级高于“* *= =”,先,先“+ +”,再再“* *= =”。一定不要将。一定不要将a a* *=3+2=3+2理解成理解成a=aa=a* *3+23+2。a=(b=5)/(c=2)a=(b=5)/(c=2)。先算。先算(b=5)(b=5),再算,再算(c=2)(c=2),然后进行除法运算结,然后进行除法运算结果为果为2 2,最终将,最终将2 2赋给赋给a a。运算完,。运算完,b
46、 b的值为的值为5 5,c c的值为的值为2 2,a a的的值为值为2 2,整个表达式的值为,整个表达式的值为2 2。在赋值表达式中的在赋值表达式中的“表达式表达式”又可以是一个赋值表达式。又可以是一个赋值表达式。 例如,例如,a=b=7a=b=7。先算。先算b=7b=7,因为,因为= =的结合方向为右结合。赋值的结合方向为右结合。赋值表达式表达式b=7b=7的值为的值为7 7,再将,再将7 7赋给赋给a a。运算完成后,变量。运算完成后,变量a a和和b b的的值为值为7 7,整个表达式的值为,整个表达式的值为7 7。 赋值号左右两边类型不一致时,类型会发生变化,简单地说,赋值号左右两边类型
47、不一致时,类型会发生变化,简单地说,是以左边变量的类型为准:是以左边变量的类型为准:n将整型数据赋给实型变量时,数据以浮点数形式存储到实型将整型数据赋给实型变量时,数据以浮点数形式存储到实型变量中去,值不变。变量中去,值不变。n将实型数据赋给整型变量时,将实型数据赋给整型变量时,舍去小数部分舍去小数部分后,再赋给整型后,再赋给整型变量。变量。n将将floatfloat型数据赋给型数据赋给doubledouble型变量时值不变,有效位数扩展至型变量时值不变,有效位数扩展至1616位位( (小数点后补小数点后补0) 0);n将将doubledouble型数据赋给型数据赋给floatfloat型变量
48、时,截取型变量时,截取doubledouble型数据的前型数据的前7 7位位有效位,再赋给有效位,再赋给floatfloat型变量。型变量。n将字节数多的整型数据赋给字节数少的整型变量时,采取截将字节数多的整型数据赋给字节数少的整型变量时,采取截断的方法处理,按照短变量的字节数截取长数据相应的低字断的方法处理,按照短变量的字节数截取长数据相应的低字节并按位赋给短的变量,截断时不考虑符号类型。节并按位赋给短的变量,截断时不考虑符号类型。运算符运算符名名 称称表达式表达式含含 义义 +自增运算符自增运算符(单目单目)a+后置自增,使用后置自增,使用a的值后,的值后,a的值增的值增1+a前置自增,使
49、用前置自增,使用a的值前,的值前,a的值增的值增1-自减运算符自减运算符(单目单目)a-后置自减,使用后置自减,使用a的值后,的值后,a的值减的值减1-a前置自减,使用前置自减,使用a的值前,的值前,a的值减的值减1n自增、自减运算符只能用于变量自增、自减运算符只能用于变量( (最好不要用于实型变量最好不要用于实型变量) ) n表达式表达式+x+x表示使用表示使用x x的值之前,的值之前,x x的值自增的值自增1 1,表达式表达式x+x+表示使用表示使用x x的值之后,的值之后,x x的值自增的值自增1 1。n如:如:int i=3, x, y ;x=i+; / 等同于等同于x=i;i=i+1
50、; y=+i; / 等同于等同于i=i+1;y=i; printf( %d %d %d n , x, y, i);3 5 5 指针变量指针变量p可以进行加减运算,可以进行加减运算,p=p+1或或p=p-1就可就可以看成指针变量的自增、自减运算。以看成指针变量的自增、自减运算。如:若有如:若有int a1=3,a2=6,a3=9,*p=&a2;,;, a1,a2,a3的地址依次是的地址依次是65496,65500和和65504。则:则:表达式表达式*(+p)的值是的值是9,运算后,运算后p的值是的值是65504,a1、a2、a3的值不变。的值不变。表达式表达式*(p+)的值是的值是6,运算后,运
51、算后p的值是的值是65504,a1、a2、a3的值不变。的值不变。表达式表达式(*p)+的值是的值是6,运算后,运算后p的值是的值是65500, a2的值是的值是7.表达式表达式+(*p)的值是的值是7,运算后,运算后p的值是的值是65500,a2的值是的值是7。使用逗号运算符使用逗号运算符“,”将两个或多个表达式连接起将两个或多个表达式连接起来,就组成逗号表达式。来,就组成逗号表达式。逗号运算符的优先级别是所有运算符中最低的,其结合方向逗号运算符的优先级别是所有运算符中最低的,其结合方向为从左至右。为从左至右。逗号运算符是顺序运算符,在执行时,依次计算各表达式的逗号运算符是顺序运算符,在执行
52、时,依次计算各表达式的值。值。“表达式表达式n”n”的值就是整个逗号表达式的值,其类型就的值就是整个逗号表达式的值,其类型就是整个逗号表达式的类型是整个逗号表达式的类型 逗号表达式通常用于将多条语句连接在一起,形成一条语句,逗号表达式通常用于将多条语句连接在一起,形成一条语句,以简化程序的书写,提高程序的运行效率。以简化程序的书写,提高程序的运行效率。 运算符运算符名称名称格式格式,逗号运算符逗号运算符(双目双目) 表达式表达式1,表达式,表达式2,表达式,表达式n#include #include main() int x,y=7; float z=4; x=(y=y+6,y/z); pri
53、ntf(x=%dn,x); getch(); x=3n强制类型转换运算符强制类型转换运算符 一般格式:一般格式:(类型名类型名)(表达式表达式) 利用强制类型转换运算可以将一个表达式的类型转换成所利用强制类型转换运算可以将一个表达式的类型转换成所需类型。如:需类型。如:(int)(x+7.4)将将x+7.4的值转换成整型的值转换成整型. .如:如:(int)(x+7.4)与与(int)x+7.4是具有不同含义的强是具有不同含义的强制类型转换表达式。制类型转换表达式。强制类型转换只是对表达式的值进行类型转换,而不改变强制类型转换只是对表达式的值进行类型转换,而不改变表达式中变量的类型。表达式中变
54、量的类型。nsizeof()运算符运算符 nsizeof()运算符运算符有以下两种格式有以下两种格式: sizeof(类型定义符类型定义符)或或sizeof(表达式表达式)nsizeof()函数的功能函数的功能:返回各种数据类型或表达式所占的返回各种数据类型或表达式所占的字节数。字节数。n如:若变量如:若变量f是是float型,则型,则sizeof(f)的值是的值是4;sizeof (char)的值是的值是1;sizeof ( a +2)的值是的值是4。不同类型的数据在进行运算时,不同类型的数据在进行运算时,首先进行类型转首先进行类型转换,使之成为同类型数据,然后再运算。这种转换,使之成为同类型数据,然后再运算。这种转换称为自动类型转换换称为自
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人员招聘与面试流程标准模板
- (正式版)DB15∕T 3239-2023 《A2C飞机防治草原害虫技术规程》
- 地产圈考试题及答案
- 农业产业链资源整合方案与合同书
- 单招综评护理面试题库及答案
- 人力资源招聘与配置管理工具包
- 动物们的森林大会童话类作文11篇范文
- 项目管理团队周报及会议纪要撰写指南
- 医疗安全培训演练方案课件
- 跨境电商2025年用户增长:跨境电商平台用户流失原因分析
- 新生儿常见感染诊断治疗
- JTG F90-2015 公路工程施工安全技术规范
- 分家山林权协议书
- 基层工会经费收支管理政策解读
- 眩晕的中医辨证治疗
- 2023年公共科考试:社区治理真题模拟汇编(共142题)
- 新版出口报关单模板
- 众辰变频器z2400t-15gy-1说明书
- ov属性分析技术在地震数据采集中的应用
- GB 4287-1992纺织染整工业水污染物排放标准
- 10室外配电线路工程定额套用及项目设置
评论
0/150
提交评论