第2章C语言程序设计的初步知识_第1页
第2章C语言程序设计的初步知识_第2页
第2章C语言程序设计的初步知识_第3页
第2章C语言程序设计的初步知识_第4页
第2章C语言程序设计的初步知识_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第2 2章章 c c语言程序设计的初步知识语言程序设计的初步知识本章要点本章要点:标识符命名规则标识符命名规则常量和变量常量和变量基本数据类型基本数据类型常用运算符及表达式常用运算符及表达式运算符的优先级及结合性运算符的优先级及结合性本章难点本章难点:不同类型数据间的混合运算不同类型数据间的混合运算运算符的优先级运算符的优先级自增自增(+)自减自减(-)运算符的使用运算符的使用22.1 c语言的数据类型语言的数据类型整型整型字符型字符型实型实型(浮点型浮点型)枚举类型枚举类型单精度型单精度型双精度型双精度型数组类型数组类型结构体类型结构体类型共用体类型共用体类型构造类型构造类型基本类型基本

2、类型指针类型指针类型空类型空类型数据类型数据类型32.2 2.2 常量、变量和标识符常量、变量和标识符2.2.1标识符标识符c语言中的标识符可以分为系统定义标识符和用户定义标语言中的标识符可以分为系统定义标识符和用户定义标识符。识符。1.系统定义标识符系统定义标识符1)关键字关键字 关键字是关键字是c语言系统使用的具有特定含义的标识符,语言系统使用的具有特定含义的标识符,不能作为预定义标识符和用户定义标识符使用。不能作为预定义标识符和用户定义标识符使用。c语语言定义了言定义了32个关键字,如表个关键字,如表2.1所示。所示。2)预定义标识符预定义标识符 预定义标识符也是具有特定含义的标识符,包

3、括系统预定义标识符也是具有特定含义的标识符,包括系统标准函数名和编译预处理命令等,如标准函数名和编译预处理命令等,如scanf、printf、define和和 include等都是预定义标识符。等都是预定义标识符。 4表表2.1 c语言中的关键字语言中的关键字auto breakcasecharconstcontinue defaultdo doubleelseenumexternfloatforgotoif intlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsigned unionvoidvolatilewhil

4、e关键字必须用小写字母;不允许使用关键字为变量、数组和函数等操作对象关键字必须用小写字母;不允许使用关键字为变量、数组和函数等操作对象命名。命名。 5 2. 2. 用户定义标识符用户定义标识符 用户定义标识符用于对用户使用的变量、数组和函用户定义标识符用于对用户使用的变量、数组和函数等操作对象进行命名。例如将一个变量命名为数等操作对象进行命名。例如将一个变量命名为a,将一,将一个数组命名为个数组命名为date,将一个函数命名为,将一个函数命名为fun等。等。 用户标识符命名时要注意:用户标识符命名时要注意: (1)c语言对英文字母的大小写敏感,即同一字母的大小语言对英文字母的大小写敏感,即同一

5、字母的大小写被认为是两个不同的字符。例如写被认为是两个不同的字符。例如total与与total是不同是不同的标识符。的标识符。 (2)标识符必须由字母或下划线开头,并且除了标识符必须由字母或下划线开头,并且除了字母字母、数字数字和和下划线下划线外,不能含有其他字符。外,不能含有其他字符。 (3)标识符的命名要见名知意,即通过变量名就知道变标识符的命名要见名知意,即通过变量名就知道变量值的含义。量值的含义。 (4)标识符的有效长度随系统而异,但至少前标识符的有效长度随系统而异,但至少前8个字符有个字符有效。如果超长,则超长部分被舍弃。效。如果超长,则超长部分被舍弃。 62.2.2 常量常量1.定

6、义:在程序执行期间,其值不可改变的量称为常量定义:在程序执行期间,其值不可改变的量称为常量2.类型:类型:数值常量数值常量 例如:例如:5,-10 , 3.14等等符号常量符号常量 即用一个符号代表一个常量即用一个符号代表一个常量例例2.1 用标识符代表常量。用标识符代表常量。#define pi 3.1415926main() float s,r; r=5; s=pi*r*r; printf(%f,s);7说明说明:符号常量必须符号常量必须先定义先定义后才能用它表示一个数值。后才能用它表示一个数值。符号常量的值在其作用域内不能改变,也不能再符号常量的值在其作用域内不能改变,也不能再被赋值。被

7、赋值。符号常量名习惯用符号常量名习惯用大写大写字母表示。字母表示。82.2.3 变量变量1. 变量概念变量概念:程序执行期间值可以改变的量。程序执行期间值可以改变的量。 命名规则命名规则: 变量名由标识符表示,只能由变量名由标识符表示,只能由字母字母、数字数字和和下划下划线线三种字符组成,且三种字符组成,且第一个字符必须为字母或下第一个字符必须为字母或下划线。划线。 例如:以下为不合法的变量名:例如:以下为不合法的变量名: m.d.jess , 1add ,age& , 5th, lotus-1-2-3 , cd*ef , int2. 变量的定义变量的定义要使用变量,必须为变量命名。变量名是用

8、户自己定义的标识要使用变量,必须为变量命名。变量名是用户自己定义的标识符,习惯上由小写字母组成。符,习惯上由小写字母组成。变量定义的一般格式为:变量定义的一般格式为:数据类型标识符数据类型标识符 变量名变量名1,变量名变量名2,变量名变量名n; int a;/*定义了整型变量定义了整型变量a*/93. 变量的初始化变量的初始化c语言允许在定义变量的同时给变量赋值,这称为变量的语言允许在定义变量的同时给变量赋值,这称为变量的初始化。变量初始化的一般格式为:初始化。变量初始化的一般格式为:数据类型标识符数据类型标识符 变量名变量名1=初值初值1,变量名变量名2=初值初值2,变量变量名名n=初值初值

9、n;c语言允许在定义变量的同时初始化变量,如:语言允许在定义变量的同时初始化变量,如:int a=2; /*指定指定a为整型变量为整型变量,初值为初值为2*/float f=3.45; /*指定指定f为实型变量为实型变量,初值为初值为3.45*/char c=a; /*指定指定c为字符变量为字符变量,初值初值a*/也可以使被定义的变量的一部分赋初值,如:也可以使被定义的变量的一部分赋初值,如:int a=1, b=-3,c;10在在c c语言中,变量必须强制定义,其目的是:语言中,变量必须强制定义,其目的是:1、凡未被事先定义的,不作为变量名。、凡未被事先定义的,不作为变量名。2、每一个变量被

10、指定为一确定的类型,在编译时就能为、每一个变量被指定为一确定的类型,在编译时就能为 其分配相应的存储单元。其分配相应的存储单元。3、指定每一个变量为一确定的类型,在编译时据此检查、指定每一个变量为一确定的类型,在编译时据此检查 该变量所进行的运算是否合法。该变量所进行的运算是否合法。* 选变量名时,要做到选变量名时,要做到“见名知意见名知意” 例如:例如:name st_age xm nl class sum* 大小写字母是两个不同的字符,大小写字母是两个不同的字符,c变量名习惯变量名习惯 用用小写小写字母表示。字母表示。* 建议变量名的长度不要超过建议变量名的长度不要超过8个字符。个字符。注

11、意注意: :112.3 2.3 整型数据整型数据2.3.1整型常量整型常量1.1.整型常量的形式整型常量的形式十进制整数十进制整数 :由数字(:由数字(0-9)和正负号表示)和正负号表示 例如:例如:123、-456、0 等等八进制整数:以八进制整数:以0开头数是八进制数开头数是八进制数 例如:例如: 0123 即(即(123)8 =( 83) 10 (123) 8=1 82+2 81+3 80 =( 83) 10十六进制整数:以十六进制整数:以0 x或或0x开头,开头, 例如:例如: 0 x123 即即 (123) 16 =( 291) 10main()int a=0123;b=0 x123

12、; /*0123是八进制数是八进制数,0 x123是十六进制是十六进制*/printf(a=%d,b=%d,a,b); 程序运行结果为:程序运行结果为:a=83,b=29112n进制数十进制乘权求和,顺序输出除基数取余,逆序输出二进制八进制(十六进制)三(四)位变一位一位变三(四)位 原码、反码、补码 正数的原码、反码、补码相同 负数的原码为该数二进制最高位为1 负数的反码:除符号位外,按位取反 负数的补码:反码加一13142. 2. 整型常量的类型整型常量的类型 我们已知整型变量可分为我们已知整型变量可分为int、short int、1ong int和和unsigned int、unsign

13、ed short、unsigned long等类别。等类别。(1) 一个整常量,如果其值在一个整常量,如果其值在-32 768+32 767范围内,则认为范围内,则认为它是它是int型。可以将它赋值给型。可以将它赋值给int型和型和1ong int型变量。型变量。(2) 一个整常量,如果其值超过了上述范围,而在一个整常量,如果其值超过了上述范围,而在-2 147 483 6482 147 483 647范围内,则认为它是范围内,则认为它是1ong int型。型。 (3) 如果某一计算机系统的如果某一计算机系统的c版本确定的版本确定的short int 与与int型数据型数据在内存中占据的长度相

14、同,则它的表示范围与在内存中占据的长度相同,则它的表示范围与int型相同。型相同。(4) 常量中无常量中无unsigned型,但一个非负值的整常量可以赋值给型,但一个非负值的整常量可以赋值给unsigned型整变量,只要它的范围不超过变量的表示范围型整变量,只要它的范围不超过变量的表示范围即可。即可。(5) 在一个整常量后面加一个字母在一个整常量后面加一个字母l或或l则认为是则认为是1ong int型常量,型常量,例如例如123l、432l,这往往用于函数调用中。,这往往用于函数调用中。152.3.2整型变量的分类整型变量的分类 基本型:以 intint 表示 短整型:以 short ints

15、hort int 或 shortshort 表示 1.类型 长整型:以 long intlong int 或 longlong 表示 (123l、 123l) 无符号基本型(unsigned intunsigned int) 无符号型 无符号短整型(unsigned shortunsigned short) 无符号长整型(unsigned longunsigned long)(-3276832767)一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。int i; /* 变量i 的数值范围: -3276832768 */unsigned int j; /* 变量j的数值

16、范围:065535 */1.1.整型变量的类型整型变量的类型16 整整型变量的字长型变量的字长short型型 字长字长16位(位(2个字节)。个字节)。long 型型 字长字长32位(位(4个字节)。个字节)。 int 型型 随编译程序而定(可以是随编译程序而定(可以是2个字节,也可以是个字节,也可以是4个字节)个字节)c要求要求 long型数据长度不短于型数据长度不短于int型,型, short型不长于型不长于int型。型。( short=int=long)long 型可以得到大范围的数据型可以得到大范围的数据,但同时会降低运算但同时会降低运算速度速度,因此除非不得已因此除非不得已,不要随便

17、使用不要随便使用long型。型。17整型数据的溢出:整型数据的溢出:main()main() int a,b; int a,b;a=32767; b=a+1;a=32767; b=a+1;printf(“”%d,%d”,a,b);printf(“”%d,%d”,a,b); 运行结果:运行结果:32767,-3276732767,-32767改进:将变量改进:将变量a a和和b b改成改成longlong型,型,并按并按 %ld %ld 格式输出。格式输出。182. 2. 整型变量的定义整型变量的定义 前面已提到,前面已提到,c规定在程序中所有用到的变量都必须规定在程序中所有用到的变量都必须在程

18、序中指定其类型,即在程序中指定其类型,即“定义定义”。这是和。这是和basic、fortran不同的,而和不同的,而和pascal相类似。例如:相类似。例如:int a,b; /*指定变量指定变量a,b为整型为整型*/unsigned short c,d; /*指定变量指定变量c,d为无符号短整型为无符号短整型*/1ong e,f; /*指定变量指定变量e,f为长整型为长整型*/对变量的定义,一般是放在一个函数的开头部分对变量的定义,一般是放在一个函数的开头部分(也可以放在也可以放在程序中间,但作用域只限于某一部分程序程序中间,但作用域只限于某一部分程序)。 例例2.4 整型变量的定义与使用。

19、整型变量的定义与使用。main()int a,b,c,d; /*指定指定a,b,c,d为整型变量为整型变量*/unsigned u; /*指定为无符号整型变量指定为无符号整型变量*/a=20;b=-40;u=10;c=a+u;d=b+u;printf(c=%d d=%d,c,d);运行结果为:运行结果为:c30,d= -30192.42.4实型数据实型数据2.4.1实型常量实型常量1.1.实型常量实型常量的形式的形式( (两种两种): 十进制数形式:十进制数形式:由数字和小数点及正负号组成。由数字和小数点及正负号组成。 (注意:必须有小数点)(注意:必须有小数点) 例如:例如:3.14 8.6

20、 -23.3.14 8.6 -23. 指数形式:指数形式:由由数字、小数点、字母数字、小数点、字母e e或或e e及及正负号正负号组成。组成。 (注:(注:e e或或e e之前必须有数字,且后指数必须为整数)之前必须有数字,且后指数必须为整数) 例如:正确例如:正确:3.5e-5 2e3 :3.5e-5 2e3 错误:错误:e2 3.6e3.5 .e6e2 3.6e3.5 .e62. 2. 实型常量的类型实型常量的类型 多数多数c c编译系统对实型常量按双精度编译系统对实型常量按双精度(double)(double)类型处理,以类型处理,以提高运算精度。此时系统为实型常量分配提高运算精度。此时

21、系统为实型常量分配8 8个字节的存储空间。个字节的存储空间。 如果在实型常量后加字母如果在实型常量后加字母f f或或f f,则强调表示该数是,则强调表示该数是floatfloat型型常量,这时系统会为其分配常量,这时系统会为其分配4 4个字节的存储空间。个字节的存储空间。202.4.2 实型变量实型变量实型变量可分为:实型变量可分为: 单精度单精度(float型)型) 如:如: float x , y ; 双精度型双精度型(double型)型) 如:如:double a , b , c ;说明:说明:1. float 型变量在内存中占型变量在内存中占4个字节;个字节;double 型变量在内存

22、中占型变量在内存中占8个字节。个字节。2. 单精度实数提供单精度实数提供7位有效数字;双精度实数提供位有效数字;双精度实数提供1516位有效位有效数字。数字。3. 一个实型常量不分一个实型常量不分float 和和 double 型,型, 一个实型常量一个实型常量 可以赋给一个可以赋给一个float 型或型或 double 型变量,并根据变量的类型型变量,并根据变量的类型截取实型常量中相应的有效位数字。截取实型常量中相应的有效位数字。 例如:例如: float a; double b; a=123456.789e5 ; b=123456.789 ; 213.5 3.5 字符型数据字符型数据3.5

23、.13.5.1字符常量字符常量 1.1.字符常量:用字符常量:用单引号单引号括起来的一个字符。括起来的一个字符。 例如:例如: a b # ! a b # ! 2 2. 转义字符转义字符 :指不能用符号直接表示的字符常量。:指不能用符号直接表示的字符常量。 将反斜杠(将反斜杠()后面的字符转变成另外的意义。后面的字符转变成另外的意义。 如如n中的中的“n”不代表字母不代表字母n而作为而作为“换行换行”符。符。 例如:例如: n 换行换行 t 横向跳格(水平制表)横向跳格(水平制表) b 退格退格 反斜杠字符反斜杠字符 r 回车回车 f 换页换页 a 报警报警 0 空字符空字符main()pri

24、ntf(yb=n);运行结果:运行结果:程序运行时在屏幕上显示结果:程序运行时在屏幕上显示结果:=程序运行时在打印机上输出结果:程序运行时在打印机上输出结果: 22 注意:注意: 字符常量首尾的单引号是定界符,不占存储空间。字符常量首尾的单引号是定界符,不占存储空间。 在在c语言中,语言中,a和和a是不同的。前者代表字符常量,后是不同的。前者代表字符常量,后者代表一个标识符。者代表一个标识符。 a和和a是不同的字符常量。前者存储的是小写字母是不同的字符常量。前者存储的是小写字母a的的ascii码值为码值为97,后者存储的是大写字母,后者存储的是大写字母a的的ascii码码值为值为65。 转义字

25、符代表一个字符,在内存中只占一个字节的存储转义字符代表一个字符,在内存中只占一个字节的存储空间。空间。 转义字符转义字符0就是就是ascii码值为码值为0的字符,常用于表示字的字符,常用于表示字符串结束的标志符。符串结束的标志符。 ddd形式的转义字符是用形式的转义字符是用ascii码码(八进制数八进制数)表示的表示的一个字符,例如一个字符,例如101代表字符代表字符a,012代表代表“换换行行”。 xhh形式的转义字符也代表一个字符,反斜杠后必须形式的转义字符也代表一个字符,反斜杠后必须以小写字母以小写字母x开头,后面的两位数字为十六进制数。例如,开头,后面的两位数字为十六进制数。例如,x

26、a和和x a都代表回车换行符,等价于转义字符都代表回车换行符,等价于转义字符 n 。233.5.23.5.2字符变量字符变量定义形式:定义形式: charchar 标识符标识符1 1,标识符,标识符2 2, ,标识符,标识符n n 例如:例如: charchar c1, c2, c3, ch ; c1, c2, c3, ch ; c1=a ; c2=b ; c1=a ; c2=b ; c3=c ; ch= d; c3=c ; ch= d;说明:说明:1 1、字符变量在内存中占一个字节。、字符变量在内存中占一个字节。2 2、在内存中、在内存中, ,是把字符对应的是把字符对应的asciiascii

27、码值放到存储单元中码值放到存储单元中. .3 3、字符型数据与整型数据之间可以通用、字符型数据与整型数据之间可以通用. .24main() char c1,c2; c1=97;c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2);输出结果:a b97 98main() int i; char c; i=a; c=97; printf(“%c,%dn”,c,c);printf(“%c,%dn”,i,i);输出结果:a, 97a, 97252.5.3字符串常量字符串常量1.定义:括在一对双引号双引号之内的字符序列或转义字符序列称为字符串常量。

28、例如:“how are you!” “a” “*abcnt”2.存储:字符串中的字符依次存储在内存中一块连续的区域内,并且把空操作字符 0自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占n+1个字节。 例:c=“china” c h i n a 026b 与与b是否相同?是否相同?b 与与“b”是否相同?是否相同?b为为98,b为为66b是字符常量,是字符常量,“b是字是字符串常量符串常量思考?思考?注意注意:字符串常量首尾的双引号是定界符,不属于字符串的内容。如字符串常量首尾的双引号是定界符,不属于字符串的内容。如果字符串本身包括了双引号或反斜杠,必须使用转义字

29、符。果字符串本身包括了双引号或反斜杠,必须使用转义字符。不要将字符常量与字符串常量混淆不要将字符常量与字符串常量混淆,a是字符常量是字符常量,“a”是字符串是字符串常量,二者不同。前者只占一个字节的存储空间,存放字符常量,二者不同。前者只占一个字节的存储空间,存放字符a的的ascii码值;后者占两个字节的存储空间,分别存放字符码值;后者占两个字节的存储空间,分别存放字符a和字符串结束标志和字符串结束标志0。字符串常量中包含转义字符时,一定要注意其长度的计算。字符串常量中包含转义字符时,一定要注意其长度的计算。在写字符串时不必加在写字符串时不必加0,字符,字符0是系统自动加上的。是系统自动加上的

30、。 272.6 算术运算符和算术表达式算术运算符和算术表达式 2.6.1 基本的算术运算符和算术表达式基本的算术运算符和算术表达式1. 1. 基本的算术运算符基本的算术运算符 在在c语言中,基本的算术运算符有语言中,基本的算术运算符有5个:个: +(加法运算符,正值运算符加法运算符,正值运算符),-(减法运算符,负值运算符减法运算符,负值运算符),*(乘法运算符乘法运算符),/(除法运算符除法运算符),%(模运算符模运算符) 注意:注意: 除法运算符除法运算符“/”的运算对象可以是各种类型的数据,但的运算对象可以是各种类型的数据,但是当进行两个整型数据相除时,运算结果也是整型数据,是当进行两个

31、整型数据相除时,运算结果也是整型数据,即只取商的整数部分;而操作数中有一个为实型数据时,即只取商的整数部分;而操作数中有一个为实型数据时,则结果为双精度实型数据,即则结果为双精度实型数据,即double型。例如,型。例如,5.0/10的运的运算结果是算结果是0.5,5/10的运算结果是的运算结果是0,而不是,而不是0.5,10/4的运算的运算结果是结果是2。 求余运算符求余运算符“%”要求运算对象必须是整型操作数,它要求运算对象必须是整型操作数,它的功能是求两个操作数相除的余数,余数的符号与被除数的功能是求两个操作数相除的余数,余数的符号与被除数的符号相同。例如,的符号相同。例如,11%3的值

32、为的值为2,-11%3的值为的值为-2,2%-5的值为的值为2。282. 2. 算术表达式算术表达式 算术表达式是指用算术运算符和括号将运算对象算术表达式是指用算术运算符和括号将运算对象(也称也称操作数,如常量、变量、函数等操作数,如常量、变量、函数等)连接起来、符合连接起来、符合c语法规语法规则的式子,如:则的式子,如: a*b/c-1.5+a 在算术表达式中,运算对象可以是各种类型的数据,包括在算术表达式中,运算对象可以是各种类型的数据,包括整型、实型或字符型的常量、变量及函数调用。整型、实型或字符型的常量、变量及函数调用。2.6.2 2.6.2 算术运算符的优先级、结合性算术运算符的优先

33、级、结合性 在在5个算术运算符中,个算术运算符中,*、/和和%的优先级相同且高于的优先级相同且高于+、-。 当运算符的优先级相同的情况下,这当运算符的优先级相同的情况下,这5个运算符的结合方向个运算符的结合方向为从左至右为从左至右(先左后右,简称左结合先左后右,简称左结合)。例:。例: a - b + c 由于算术运算符为左结合,故先执行由于算术运算符为左结合,故先执行a-b,再执行加,再执行加c的运算。的运算。 292.7 2.7 赋值运算符和赋值表达式赋值运算符和赋值表达式2.7.1 基本赋值运算符(基本赋值运算符(=)形式:变量名形式:变量名=常量或表达式常量或表达式作用:将右边常量或表

34、达式的值赋给左边的变量作用:将右边常量或表达式的值赋给左边的变量例如例如: b=c+d 赋值符号赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给就是赋值运算符,它的作用是将一个数据赋给一个变量。如一个变量。如x=5的作用是执行一次赋值操作,将常量的作用是执行一次赋值操作,将常量5赋给赋给变量变量x。结合方向:从右向左。结合方向:从右向左。例如例如:“a=b=c=10;”等价于等价于“a=(b=(c=10);”即先将常量即先将常量10赋给赋给变量变量c,然后再将,然后再将10赋给变量赋给变量b,最后将,最后将10赋给变量赋给变量a。注意注意:如果表达式类型与左边的变量的类型不匹配,自动进:

35、如果表达式类型与左边的变量的类型不匹配,自动进行类型转换。行类型转换。 302.7.2 2.7.2 复合赋值运算符复合赋值运算符复合赋值运算符:在赋值符复合赋值运算符:在赋值符“=”=”之前加上其它运算符之前加上其它运算符共有共有1010种复合赋值运算符种复合赋值运算符 +=,-=,*=,/=,%= /*复合算术运算符复合算术运算符5个个*/ &=,=,|=,= /*复合位运算符复合位运算符5个个*/例如例如:a+=3 a=a+3a+=3 a=a+3 x x* *=y+3 x=x=y+3 x=x* *(y+3)(y+3)注意,注意,a=a+ba=a+b如果如果b b是包含若干项的表达式,则相当

36、于它有括是包含若干项的表达式,则相当于它有括号。如:号。如:x x=y+3=y+3x x=(y+3)=(y+3)x=x%(y+3) x=x%(y+3) / /* *不要写成不要写成x=xx=xy+3y+3* */ / 312.8 2.8 逗号运算符和逗号表达式逗号运算符和逗号表达式1 1. .逗号运算符:即逗号运算符:即“,” 优先级:为所有运算符中级别优先级:为所有运算符中级别最低最低的。的。2.2.逗号表达式逗号表达式 形式:形式:表达式表达式1 1,表达式,表达式2 2,表达式,表达式n n 求解过程:顺次求解表达式求解过程:顺次求解表达式1 1,表达式,表达式22 最后求解表达式最后求

37、解表达式n n。 逗号表达式的值为逗号表达式的值为表达式表达式n n的值。的值。 例如:例如:a=3a=3* *4 4,a,a* *5 5 a=3 a=3* *4 4,a,a* *5 5,a+5,a+5注意注意: :并不是任何地方出现的逗号都是作为逗号运算符,函数并不是任何地方出现的逗号都是作为逗号运算符,函数参数也是用逗号来间隔的参数也是用逗号来间隔的6017322.9 自增运算符、自减运算符及自增运算符、自减运算符及c语言语言运算符的优先级运算符的优先级 2.9.1 自增运算符自增运算符 自增运算符自增运算符(+)是单目运算符,其作用是使单个变是单目运算符,其作用是使单个变量的值增量的值增

38、1。自增运算符种类有两种:。自增运算符种类有两种: 前置前置 +i,先执行,先执行i+1,再使用,再使用i值;值; 后置后置 i+,先使用,先使用i值,再执行值,再执行i+1。 例如:例如: j=3; k=+j;则;则k=4,j=4; j=3; k=j+;则;则k=3,j=4。332.9.2 2.9.2 自减运算符自减运算符 自减运算符自减运算符(-)(-)是单目运算符,其作用是使单个变量是单目运算符,其作用是使单个变量的值减的值减1 1。自减运算符种类也有。自减运算符种类也有 两种:两种: 前置前置 -i-i,先执行,先执行i-1i-1,再使用,再使用i i值;值; 后置后置 i-i-,先使

39、用,先使用i i值,再执行值,再执行i-1i-1。 例如:例如: j=3j=3; k=-jk=-j;则;则k=2k=2,j=2j=2; j=3j=3; k=j-k=j-;则;则k=3k=3,j=2j=2。注意注意: 自增运算符自增运算符(+)(+)、自减运算符、自减运算符(-)(-),只能用于变量,不能,只能用于变量,不能用于常量和表达式。例如,用于常量和表达式。例如,5+5+、- (a+b)- (a+b)等都是非法的。等都是非法的。 +和和-的结合方向是的结合方向是“自右至左自右至左”,其优先级高于算术运,其优先级高于算术运算符。例如算符。例如i=3, -i+i=3, -i+相当于相当于-(

40、i+)-(i+),因此表达式的值为,因此表达式的值为-3-3,i=4i=4。 自增运算符、自减运算符,常用于循环语句中,使循环控自增运算符、自减运算符,常用于循环语句中,使循环控制变量加制变量加( (或减或减)1)1,以及指针变量中,使指针指向下,以及指针变量中,使指针指向下( (或向或向上上) )一个地址。一个地址。342.9.3 c语言运算符的优先级与结合性 c c的运算符有以下几类。的运算符有以下几类。(1)算术运算符算术运算符 ( + - * / %)(2)关系运算符关系运算符 ( = = !=)(3)逻辑运算符逻辑运算符 (! |)(4)位运算符位运算符 ( | &)(5)赋值运算符

41、赋值运算符 (= 及其扩展赋值运算符及其扩展赋值运算符)(6)条件运算符条件运算符 (? :)(7)逗号运算符逗号运算符 (,)(8)指针运算符指针运算符 (* 和和 &)(9)求字节数运算符求字节数运算符 (sizeof)(10)强制类型转换运算符强制类型转换运算符 (类型类型)(11)分量运算符分量运算符 ( -)(12)下标运算符下标运算符 ( )(13)其他其他 (如函数调用运算符如函数调用运算符() 35 c语言规定了运算符的优先级和结合性。语言规定了运算符的优先级和结合性。 运算符的优先级别运算符的优先级别从高到低从高到低依次为:依次为: 初等运算符,如初等运算符,如()、 、 -

42、、.; 单目运算符,如单目运算符,如 !、!、+、-、*(指针指针)、&、(类型类型); 算术运算符算术运算符(先乘除,后加减先乘除,后加减); 关系运算符;关系运算符; 逻辑运算符逻辑运算符(不包括!不包括!); 条件运算符;条件运算符; 赋值运算符;赋值运算符; 逗号运算符。逗号运算符。 所谓所谓结合性结合性是指,当一个操作数两侧的运算符具有相是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结先与右边的运算符结合。自左至右的结合方向,称为左结合性;反之,称

43、为右结合性。结合性是合性;反之,称为右结合性。结合性是c语言的独有概念。语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,除单目运算符、赋值运算符和条件运算符是右结合性外,其他运算符都是左结合性。其他运算符都是左结合性。362.10 不同类型数据间的混合运算不同类型数据间的混合运算 1. 隐式类型转换 隐式类型转换主要又可分为两类:算术转换和赋值转换。隐式类型转换主要又可分为两类:算术转换和赋值转换。 (1)(1)算术转换算术转换 当表达式中的运算对象不同时,系统会进行类型的自当表达式中的运算对象不同时,系统会进行类型的自动转换。转换的基本原则是:自动将精度低、表示范围小动转换

44、。转换的基本原则是:自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算对象转换。的运算对象类型向精度高、表示范围大的运算对象转换。 (2)(2)赋值转换赋值转换 赋值转换主要出现在赋值表达式中,不管赋值运算符赋值转换主要出现在赋值表达式中,不管赋值运算符右边是什么类型,都要转换为赋值运算符左边的类型。若右边是什么类型,都要转换为赋值运算符左边的类型。若赋值运算符右边的值表示范围更大,则左边赋值所得到的赋值运算符右边的值表示范围更大,则左边赋值所得到的值将失去右边数据的精度。值将失去右边数据的精度。372. 2. 强制类型转换强制类型转换c c语言提供了强制类型转换运算符来实现强制

45、类型转换。语言提供了强制类型转换运算符来实现强制类型转换。 格式:格式: ( (类型类型) )表达式表达式 例如例如: ( (intint) )3.53.5注意:注意:在进行类型转换时,操作数的值并不发生改变,改变在进行类型转换时,操作数的值并不发生改变,改变的只是表达式值的类型。的只是表达式值的类型。例如:例如:float x=3.5;i=(int)x; float x=3.5;i=(int)x; / /* * i i的值为的值为3 3* */ /使用强制转换类型得到的是一个所需类型的中间量,原表达使用强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,式类型并不发生变化。例如,(double)a(double)a只是将变量只是将变量a a的值的值转换成一个转换成一个doubledouble型的中间量,其数据类型并未转换成型的中间量,其数据类型并未转换成doubledouble型。型。(int)(x+y); (int)(x+y); / /* * 将将x+yx+y

温馨提示

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

评论

0/150

提交评论