第3章 基本数据类型、运算符与表达式_第1页
第3章 基本数据类型、运算符与表达式_第2页
第3章 基本数据类型、运算符与表达式_第3页
第3章 基本数据类型、运算符与表达式_第4页
第3章 基本数据类型、运算符与表达式_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

1、安徽三联学院 信息与通信技术系C C语言程序设计语言程序设计主讲人:郑岚 安徽三联学院 信息与通信技术系第三章第三章 基本数据类型、运算符与表达式基本数据类型、运算符与表达式安徽三联学院 信息与通信技术系3.1 C语言的数据类型 C C语言是一种强类型语言,程序在处理语言是一种强类型语言,程序在处理数据之前,要求数据具有明确的数据类型。数据之前,要求数据具有明确的数据类型。所谓数据类型是按被定义变量的性质、表所谓数据类型是按被定义变量的性质、表示形式、占据存储空间的多少、构造特点示形式、占据存储空间的多少、构造特点来划分的。来划分的。C C语言支持的数据类型非常丰富,语言支持的数据类型非常丰富

2、,它包括:它包括:基本数据类型基本数据类型,构造数据类型构造数据类型,指针类型指针类型,空类型空类型及及定义类型定义类型五大类。五大类。安徽三联学院 信息与通信技术系3.1 C语言的数据类型 数据是操作的对象数据是操作的对象 数据类型是指数据的内在表现形式数据类型是指数据的内在表现形式 代码代码 存储存储 运算运算其数据以什么代码存储其数据以什么代码存储怎么存储、按多少字节来存储怎么存储、按多少字节来存储不同类型的数据,可进行的运算也不同不同类型的数据,可进行的运算也不同安徽三联学院 信息与通信技术系3.1 C语言的数据类型 C 语 言数据类型基 本数据类型导 出数据类型double(双精度浮

3、点型)long(长整型)char(字符类型)整 型short(短整型)int(整型)浮点型float(单精度浮点型)long double(长双精度浮点型)void类型用户定制类型T*(指针类型)struct(结构体类型)union(共用体类型)文件类型enum(枚举)函数类型构造类型T(数组类型)安徽三联学院 信息与通信技术系C语言 符号集(字符集)C语言使用的基本符号共有如下语言使用的基本符号共有如下5种:种: 大写字母大写字母AZ 小写字母小写字母az 数字数字09 下划线下划线_ 标点符号和运算符标点符号和运算符安徽三联学院 信息与通信技术系3.2 标识符与关键字1 1、标识符、标识符

4、 用来标识变量名、符号常量名、函数名、数组名、用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。简单地说,标类型名、文件名的有效字符序列。简单地说,标识符就是一个识符就是一个名字名字。规则:规则: 以字母(大小写皆可)或下划线开头以字母(大小写皆可)或下划线开头 随后可跟若干(包括随后可跟若干(包括0 0个)字母、数字、下划线个)字母、数字、下划线 标识符长度各系统不同,最好不要超过标识符长度各系统不同,最好不要超过8 8个字符个字符安徽三联学院 信息与通信技术系下列哪些是合法的标识符下列哪些是合法的标识符? x 、y3、 _imax 、ELSE 、X 、A_to_B7

5、x 、int、#No、bad one、re-input注:注:C语言中区分大小写语言中区分大小写 合法合法不合法不合法数字开头数字开头系统保留字系统保留字非法符号非法符号中间有空格中间有空格非下划线非下划线安徽三联学院 信息与通信技术系标识符使用说明(1 1) 标准标准C C不限制标识符的长度不限制标识符的长度( (字符个字符个数数) ),但它受各种版本的,但它受各种版本的C C 语言编译系统限语言编译系统限制,同时也受到具体机器的限制。例如在制,同时也受到具体机器的限制。例如在某版本某版本C C 中规定标识符前八位有效,当两中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标

6、识符前八位相同时,则被认为是同一个标识符。个标识符。(2 2) 在标识符中,大小写是有区别的。在标识符中,大小写是有区别的。 安徽三联学院 信息与通信技术系(3 3) 标识符虽然可由程序员随意定义,但标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便阅读理解,命名应尽量有相应的意义,以便阅读理解,作到作到“顾名思义顾名思义”。 (4 4) 不能与不能与c c编译系统已经预定义的、具有编译系统已经预定义的、具有特殊用途的保留标识符(即关键字)同名。特殊用途的保留标识符(即关键字)同名。 安徽三联学院 信息与通信技术

7、系2、关键字、关键字 也称保留字。是也称保留字。是C语言中具有特定含义,专门用语言中具有特定含义,专门用作语言特定成份的一类标识符。作语言特定成份的一类标识符。如如:main、int、float、define等等,具有含义后面介绍具有含义后面介绍注:注: 所有关键字都有固定含义,不能用作其他。所有关键字都有固定含义,不能用作其他。 所有的关键字都必须小写所有的关键字都必须小写如:如:else 与与 ELSE关键字关键字用户定义的标识符用户定义的标识符安徽三联学院 信息与通信技术系3.3 常量 C C语言中存在着两种表征数据的形式:常量和变量。语言中存在着两种表征数据的形式:常量和变量。 C C

8、语言中,语言中,值不能被改变值不能被改变并且并且不用存放在内存中的不用存放在内存中的量量称为称为常量常量。 常量区分为不同类型(书写形式或表现形式)常量区分为不同类型(书写形式或表现形式) 如:如:12 12 整型常量整型常量 3.2 3.2 实型常量实型常量 a a 字符常量字符常量安徽三联学院 信息与通信技术系3.3.1 整型常量 1 1整型常量即整常数整型常量即整常数l 十进制整常数:无前缀,数码为十进制整常数:无前缀,数码为0 09 9。如:如:123123、456456l 八进制整常数:必须以八进制整常数:必须以0 0开头,即以开头,即以0 0作前缀,数作前缀,数码取值为码取值为0

9、07 7。八进制数通常是无符号数。八进制数通常是无符号数。如:如:015015、01010101、236236( )、032A032A( )l 十六进制整常数:前缀为十六进制整常数:前缀为0X0X或或0 x0 x。其数码取值为。其数码取值为0-90-9,A-FA-F或或a-fa-f(不区分大小写)。(不区分大小写)。如:如:0 x120 x12、-0 x5B-0 x5B、 5A5A()、0X3H0X3H()注:程序中根据前缀来区分各种进制数注:程序中根据前缀来区分各种进制数安徽三联学院 信息与通信技术系2 2整型常数的后缀整型常数的后缀 基本整型的长度为基本整型的长度为1616位。如果使用的数

10、超过位。如果使用的数超过了了1616位基本整型数据的数值表示范围,就必须用位基本整型数据的数值表示范围,就必须用长整型长整型数表示。数表示。l 长整型数是用后缀长整型数是用后缀“L L”或或“l l” l 整型的无符号数的后缀为整型的无符号数的后缀为“U U”或或“u u” 如:如:158L158L、158LU158LU(长整型无符号整常数)(长整型无符号整常数)注:注:158L158L和和158158在数值上无区别,但对在数值上无区别,但对158L158L,系统,系统将为其分配将为其分配4 4个字节的存储空间,而对个字节的存储空间,而对158158,只分,只分配配2 2个字节的存储空间个字节

11、的存储空间。安徽三联学院 信息与通信技术系3.3.2 实型常量 实型常量即值为实数的常量,又称浮点数。实型常量即值为实数的常量,又称浮点数。表示方法有两种:表示方法有两种:l 十进制数形式:数码十进制数形式:数码0-90-9和小数点组成和小数点组成( (必须有小必须有小数点数点) )。 如:如:123.45123.45、0.00.0、0.130.13、-123.45-123.45注意注意300300和和300.0300.0的区别的区别整型整型实型实型安徽三联学院 信息与通信技术系l 指数形式:指数表示法又称科学记数法。该表示指数形式:指数表示法又称科学记数法。该表示形式由十进制数,加阶码标志形

12、式由十进制数,加阶码标志“e e”或或“E E”组成。组成。如:如:.12345e2.12345e2、12345.0e-312345.0e-3 值均为值均为12.34512.345例:例:1 1的表示法可以为的表示法可以为1e01e0、0.1e10.1e1、10e-110e-1注:注: “e e”或或“E E”之前后必须有数字,之后的指数必之前后必须有数字,之后的指数必须为整数,且不能插入空格。须为整数,且不能插入空格。 .3e3.3e3、3e33e3、3.e33.e3(合法)(合法) 3e3e、e3e3、e0.3e0.3(不合法)(不合法)0.1234510212345.010-3安徽三联学

13、院 信息与通信技术系3.3.3 字符型常量 1 1一般字符型常量一般字符型常量字符常量是用单引号括起来的一个字符(可打印)。字符常量是用单引号括起来的一个字符(可打印)。特点:(1 1)字符常量只能用单引号括起来,不能用双引号)字符常量只能用单引号括起来,不能用双引号或其它括号。或其它括号。 (2 2)字符常量只能是单个字符,不能是字符串。)字符常量只能是单个字符,不能是字符串。(3 3)字符可以是字符集中任意字符。)字符可以是字符集中任意字符。 如:如:x x、a a、# #、A A 安徽三联学院 信息与通信技术系 2 2转义字符转义字符 转义字符是一种特殊的字符常量。转义字符以转义字符是一

14、种特殊的字符常量。转义字符以反斜线反斜线“ ”开头,后跟特定的一个或几个字符。开头,后跟特定的一个或几个字符。 转义字符具有特定的含义,不同于字符原有的转义字符具有特定的含义,不同于字符原有的意义,故称意义,故称“转义转义”字符。字符。 安徽三联学院 信息与通信技术系常用的转义字符及其含义转义字符转义字符转义字符的意义转义字符的意义ASCIIASCII代码代码nn回车换行回车换行1010tt横向跳到下一制表位置横向跳到下一制表位置9 9bb退格退格8 8rr回车回车1313ff走纸换页走纸换页1212反斜线符反斜线符9292单引号符单引号符3939 ”双引号符双引号符3434dddddd1 1

15、3 3位八进制数所代表的字符位八进制数所代表的字符xhhxhh1 12 2位十六进制数所代表的字符位十六进制数所代表的字符输出输出格式格式控制控制输出输出字符字符安徽三联学院 信息与通信技术系注:转义字符实际上作为一个字符来对待,但如果注:转义字符实际上作为一个字符来对待,但如果反斜线反斜线“ ”后的字符和它不构成转义字符,则后的字符和它不构成转义字符,则“ ”不起转义作用而将被忽略。不起转义作用而将被忽略。例:(例:(1) printf(“ANbcnDEFn”) (2) printf(“tabrcdnefghx”)ANbcDEFcd abefghx安徽三联学院 信息与通信技术系3.3.4 字

16、符串常量 字符串常量是由一对双引号括起来的字符序列。字符串常量是由一对双引号括起来的字符序列。如:如:“I am a studentI am a student”、 “X X”、“ ”注:双引号注:双引号( (“ ”) )只充当字符串的界定符,而不是字只充当字符串的界定符,而不是字符串的一部分,所以,如果要在字符串中表示符串的一部分,所以,如果要在字符串中表示双引号,则应使用转义字符双引号,则应使用转义字符 ”来表示。来表示。安徽三联学院 信息与通信技术系字符串常量和字符常量的区别:(1 1)字符常量由单引号括起来,字符串常量由双引)字符常量由单引号括起来,字符串常量由双引号括起来。号括起来。

17、(2 2)字符常量只能是单个字符,字符串常量则可以)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。含一个或多个字符。 (3 3)可以把一个字符常量赋予一个字符变量,但不)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。能把一个字符串常量赋予一个字符变量。 (4 4)字符常量占一个字节的内存空间。字符串常量)字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加占的内存字节数等于字符串中字节数加1 1。安徽三联学院 信息与通信技术系3.3.5 符号常量 用一个标识符来表示一个常量,称之为符号常量。用一个标识符来表示一个常量,称之为符号常

18、量。符号常量在使用之前必须先定义,其一般形式为:符号常量在使用之前必须先定义,其一般形式为: #define 注:符号常量与变量不同,它的值在其作用域内不注:符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。能改变,也不能再被赋值。安徽三联学院 信息与通信技术系#include #define PRICE 30main() int num,total; num=10; total=num* PRICE; printf(“total=%d”,total); 程序运行结果:total=300 安徽三联学院 信息与通信技术系 printf函数简单介绍 printfprintf首先对格式

19、串从左向右扫描,当遇到首先对格式串从左向右扫描,当遇到可显示字符时就在终端上原样输出,当遇到控制可显示字符时就在终端上原样输出,当遇到控制字符(如字符(如nn、响铃符等)就产生相应的动作,、响铃符等)就产生相应的动作,(换行、响铃等)当遇到转换符时,就将后面的(换行、响铃等)当遇到转换符时,就将后面的实参依次换转换符的要求转换并输出。实参依次换转换符的要求转换并输出。 常用转换符(格式说明符):常用转换符(格式说明符):%d %d 十进制整十进制整型、型、%c %c 字符型、字符型、%f %f 浮点型、浮点型、%s %s 字符串型。字符串型。安徽三联学院 信息与通信技术系3.4 变量 其值可以

20、改变的量称为变量。其值可以改变的量称为变量。用标识符(变量名)表示用标识符(变量名)表示,在内存中占一定存储单元在内存中占一定存储单元变量具有三要素:名字、类型和值。变量具有三要素:名字、类型和值。安徽三联学院 信息与通信技术系3.4.1 变量的定义 变量在使用之前必须进行定义变量在使用之前必须进行定义即为每个变即为每个变量取一个名称(变量名),同时规定它的数据量取一个名称(变量名),同时规定它的数据类型,以便编译时根据数据类型分配存储空间。类型,以便编译时根据数据类型分配存储空间。变量定义的一般格式:变量定义的一般格式: 如:如:int i,j,imax int i,j,imax char

21、c1,c2,s char c1,c2,s注:见名知意注:见名知意 先定义后使用先定义后使用 习惯上,符号常量名用大写,变量名用小写,习惯上,符号常量名用大写,变量名用小写,以示区别以示区别安徽三联学院 信息与通信技术系变量的类型1.整型变量整型变量 例:例:int a , b编译系统为编译系统为a和和b各分配两个字节,按整数方式存放各分配两个字节,按整数方式存放数据在内存中以二进制数据在内存中以二进制补码补码表示:表示:00 00 00 00 00 00 10 10-327683276711 11 11 11 11 11 01 10符号位+10-10补码安徽三联学院 信息与通信技术系 整型变量

22、根据其数值范围,可分为三类:整型变量根据其数值范围,可分为三类: 基本整型(基本整型(int)2字节字节 短整型(短整型(short int)2字节字节 长整型(长整型(long int)4字节字节 为了充分利用变量的表示范围,又可分为:为了充分利用变量的表示范围,又可分为: 有符号数(有符号数(signed)可省略)可省略 无符号数(无符号数(unsigned) 两种分类结合后,一共有六种整型变量。两种分类结合后,一共有六种整型变量。例:例: int i,sumint i,sum;基本整型;基本整型 short s,sum;short s,sum;短整型短整型 long x,ylong x,

23、y;长整型;长整型 unsigned u,sumunsigned u,sum;无符号整型;无符号整型 unsigned short u,sumunsigned short u,sum;无符号短整型;无符号短整型在微型机中int、short int长度相同。安徽三联学院 信息与通信技术系2.2.实型变量(取值范围和值的精度与机器有关)实型变量(取值范围和值的精度与机器有关) 单精度(单精度(floatfloat)占)占4 4个字节,个字节,7 7位有效数字位有效数字 双精度(双精度(doubledouble)占)占8 8个字节,个字节,15151616位有效数位有效数字字定义方法:定义方法:fl

24、oat x, yfloat x, y; double a ,b ,cdouble a ,b ,c;注:实型,缺省为注:实型,缺省为doubledouble; 后缀后缀f f 或或F F,为,为floatfloat型;型; 后缀后缀l l 或或L L,为,为long doublelong double型(使用很少)。型(使用很少)。安徽三联学院 信息与通信技术系3.3.字符变量字符变量 用来存放字符,且只能存放一个字符。用来存放字符,且只能存放一个字符。定义方法:定义方法:char c1,c2char c1,c2; unsigned char c3,c4unsigned char c3,c4;赋

25、值方法:赋值方法:c1=c1=a a; c2=c2=101101; c3=0 xffc3=0 xff; c4=c4=377377;安徽三联学院 信息与通信技术系(3 3)存储)存储将一个字符常量存放到一个字符变量中是将该字符的相应将一个字符常量存放到一个字符变量中是将该字符的相应的的ASCASC码存放到存储单元中码存放到存储单元中如下例,内存中如下例,内存中c1、c2的存放形式为:的存放形式为:c1c2字符数据与整型数据可以相互赋值字符数据与整型数据可以相互赋值 字符数据可以用字符形式输出,字符数据可以用字符形式输出,也可以用整型数形式输出。也可以用整型数形式输出。0 1 1 0 0 0 0

26、1#includevoid main()char c1,c2; c1=a;c2=b; printf(“%c %cn”,c1,c2); c1=97;c2=98; printf(“%c %cn”,c1,c2);输出结果:a ba b0 1 1 0 0 0 1 0#includevoid main()int i; char c; i=a; c=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i);输出结果:a,97a,97安徽三联学院 信息与通信技术系3.4.2 变量的初始化 1 1变量初始化变量初始化 在程序中常常需要对变量赋初值,以便使用在程序中常常需要对

27、变量赋初值,以便使用变量。语言程序中可有多种方法为变量提供初变量。语言程序中可有多种方法为变量提供初值。本小节先介绍在作变量定义的同时给变量值。本小节先介绍在作变量定义的同时给变量赋以初值的方法。这种方法称为初始化。在变赋以初值的方法。这种方法称为初始化。在变量定义中赋初值的一般形式为:量定义中赋初值的一般形式为: 类型说明符 变量1=值1,变量2=值2,;安徽三联学院 信息与通信技术系【例例】 int a=68 int a=68;/ /* *指定指定a a为整型变量,初值为为整型变量,初值为6868* */ / float b,c,d=7.9 float b,c,d=7.9; / /* *b

28、 b,c c,d d为单精度实型变为单精度实型变量,只对量,只对d d初始化,其值为初始化,其值为7.97.9* */ / char c= char c=a a; int i,j,k=5int i,j,k=5; / /* *只对只对k k赋值,赋值,i i、j j 值不确定值不确定* */ / int x=1,y=1,z=1 int x=1,y=1,z=1;/ /* *对几个变量赋相同值对几个变量赋相同值* */ / 安徽三联学院 信息与通信技术系2 2变量的赋值变量的赋值 赋值是将一个数值送给一个变量,改变这赋值是将一个数值送给一个变量,改变这个变量已有的值为所赋的值,变量内保存的是个变量已

29、有的值为所赋的值,变量内保存的是最后一次赋的值。最后一次赋的值。 赋值是使用赋值表达式进行的。赋初值是赋值是使用赋值表达式进行的。赋初值是在定义或说明变量时,将一个数值送给变量的,在定义或说明变量时,将一个数值送给变量的,使变量被定义后便有值,直到被改变为止。使变量被定义后便有值,直到被改变为止。安徽三联学院 信息与通信技术系【例例】: 变量的定义和赋值变量的定义和赋值#include #include main()main() int a; char c= int a; char c=b b,bell=,bell=007007; ; float x=3.25; a=65; float x=3

30、.25; a=65; printf( printf(“%c,%cn%c,%cn”,c,c-1); ,c,c-1); printf( printf(“%d,%c,%cn%d,%c,%cn”,c,a,bell);,c,a,bell); printf( printf(“%.2f,%fn%.2f,%fn”,x,x+x);,x,x+x);安徽三联学院 信息与通信技术系3.4.2 变量的初始化 3 3变量的地址变量的地址 在使用一个变量之前,要先对它进行定义,在使用一个变量之前,要先对它进行定义,以便编译程序为其分配内存单元。也就是说,以便编译程序为其分配内存单元。也就是说,在定义了一个变量后,在内存中会

31、分配相应的在定义了一个变量后,在内存中会分配相应的存储单元,将变量的值存储到该单元中。存储单元,将变量的值存储到该单元中。 注意区分注意区分变量名变量名与与变量值变量值的概念。的概念。安徽三联学院 信息与通信技术系 int x; float y; x=3; y=3.14159 经编译后它们在内存中的存放如图所示。图经编译后它们在内存中的存放如图所示。图中,右侧是中,右侧是变量的名称变量的名称;中间是;中间是变量的值变量的值,也就,也就是内存单元中的内容;左侧是内存单元的编号,是内存单元中的内容;左侧是内存单元的编号,也就是内存单元的地址,即也就是内存单元的地址,即变量的地址变量的地址。安徽三联

32、学院 信息与通信技术系3.5 运算符及其表达式 语言中运算符和表达式数量之多,丰富语言中运算符和表达式数量之多,丰富的运算符和表达式使语言功能十分完善。除的运算符和表达式使语言功能十分完善。除了控制语句和输入输出以外的几乎所有的基本了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理操作都作为运算符处理 。安徽三联学院 信息与通信技术系3.5 运算符及其表达式 运算符运算符 用来表示各种运算的符号用来表示各种运算的符号 表达式表达式 使用运算符把使用运算符把运算对象运算对象连接起来组成的句子连接起来组成的句子 简单语句简单语句 C C语言中,在表达式的末尾加上一个分号语言中,在表达式的

33、末尾加上一个分号“; ;”就构成了简单语句。就构成了简单语句。包括常量、变量、包括常量、变量、函数等函数等安徽三联学院 信息与通信技术系运算符的特点 优先级优先级 在表达式求值时,先按运算符的优先级别高低次序执在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。行,例如先乘除后加减。 结合性结合性 在表达式中,各运算量参与运算的先后顺序不仅要遵在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,守运算符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算,还是自右向左进行运算。以便确定是自左向右进行运算,还是自右向左进

34、行运算。安徽三联学院 信息与通信技术系3.5.13.5.1算术运算符和算术表达式算术运算符和算术表达式 基本的算术运算符基本的算术运算符操作符操作符作用作用运算目数运算目数结合方向结合方向例子例子+ +加加双目加法,双目加法,一目取正一目取正加自左至右,取正自右至左加自左至右,取正自右至左a+ba+b,5+25+2,+5+5减减双目减法,双目减法,一目取负一目取负减自左至右,取负自右至左减自左至右,取负自右至左5-35-3,x-yx-y,-5-5* *乘乘双目运算双目运算自左至右自左至右x x* *y y,3 3* *5 5/ /除除双目运算双目运算自左至右自左至右x/yx/y,20/520/

35、5% %取模取模双目运算双目运算自左至右自左至右5%35%3,-7%3-7%3-减减1 1单目运算单目运算自右至左自右至左+i+i,i+i+加加1 1单目运算单目运算自右至左自右至左-i,i-i,i-安徽三联学院 信息与通信技术系使用算术运算符要注意几点使用算术运算符要注意几点(1 1)两整数相除,结果为整数,如)两整数相除,结果为整数,如5/35/3结果为结果为1 1;若除数、被除数中有一个是负数,则若除数、被除数中有一个是负数,则“向零取整向零取整”,如如 -7/4= -1-7/4= -1(2 2)除数、被除数中有一个是实数()除数、被除数中有一个是实数(floatfloat、double

36、double)结果为结果为doubledouble型。型。#include void main() printf(nn%d,%dn,20/7,-20/7); printf(%f,%fn,20.0/7,-20.0/7); 程序运行结果:程序运行结果:2,-22.857143,-2.857143安徽三联学院 信息与通信技术系(3 3)取模运算要求两个操作数均为整型,运算结果)取模运算要求两个操作数均为整型,运算结果的符号同被除数。的符号同被除数。#include void main() printf(%dn,100%3); printf(%dn”,-100%3); 程序运行结果:程序运行结果:1-

37、1安徽三联学院 信息与通信技术系(4 4)自增、自减运算符只能用于变量,结合方向为自右至)自增、自减运算符只能用于变量,结合方向为自右至左,优先级高于基本算术运算符。如:左,优先级高于基本算术运算符。如:-i+-i+相当于相当于-(i+)-(i+)#includevoid main() int i=8; printf(%dn,+i); printf(%dn,-i); printf(%dn,i+); printf(%dn,i-); printf(%dn,-i+); printf(%dn,-i-); 程序运行结果:程序运行结果:9889-8-9 输出值输出值 i变量值变量值 9 9 8 8 8 9

38、 9 8 -8 9 -9 8安徽三联学院 信息与通信技术系#includevoid main() int i=0,j; j=i+; printf(%d,%dn, i,j); i=0; j=+i; printf(%d ,%dn, i,j); 程序运行结果:程序运行结果:1,01,1注意区分:注意区分:j=i+1;j=+i;安徽三联学院 信息与通信技术系 C C编译程序在处理时尽可能多的自左至右将若干个编译程序在处理时尽可能多的自左至右将若干个字符组成一个运算符(在处理标识符、关键字也字符组成一个运算符(在处理标识符、关键字也按同一原则处理),如,按同一原则处理),如,a+ba+b,将解释为(,将

39、解释为(a+a+)+b+b。为避免误解,最好不要写成前一种,而写成。为避免误解,最好不要写成前一种,而写成后一种带括号的形式。后一种带括号的形式。安徽三联学院 信息与通信技术系3.5.2 赋值运算符和赋值表达式 1.1.赋值运算符赋值运算符 程序设计中,赋值运算符是使用频繁的运算程序设计中,赋值运算符是使用频繁的运算符。所谓,赋值就是将一个数据值存储到一个符。所谓,赋值就是将一个数据值存储到一个变量中,赋值运算符记为变量中,赋值运算符记为“= =”。 2.2.赋值表达式赋值表达式 由赋值运算符由赋值运算符“= = ”将一个变量和表达式连将一个变量和表达式连接的式子称为赋值表达式。接的式子称为赋

40、值表达式。 其一般形式为:其一般形式为:变量表达式安徽三联学院 信息与通信技术系3.5.2 赋值运算符和赋值表达式说明:(1 1)不同于数学中的等式,如)不同于数学中的等式,如x=yx=y和和y=x;y=x; “= =”左边必须是变量。左边必须是变量。 (2 2)赋值表达式也应该有值,它的值就是被赋值)赋值表达式也应该有值,它的值就是被赋值的变量的值,其结果类型由赋值运算符的变量的值,其结果类型由赋值运算符“左值左值”的类型决定。的类型决定。(3 3)赋值运算符具有)赋值运算符具有右结合性右结合性赋值运算可以连续赋值运算可以连续进行。进行。 安徽三联学院 信息与通信技术系(4 4)赋值运算符的

41、优先级低于算术运算符的优先级。)赋值运算符的优先级低于算术运算符的优先级。例:例:a=(b=4)+(c=6) a=(b=4)+(c=6) 结果结果a a值为值为1010 a=(b=10)/(c=2) a=(b=10)/(c=2) 结果结果a a值为值为5 5 (5 5)将赋值表达式作为表达式的一种,不仅可以出)将赋值表达式作为表达式的一种,不仅可以出现在赋值语句中,而且可以出现在其他语句(输现在赋值语句中,而且可以出现在其他语句(输出语句,循环语句)中。出语句,循环语句)中。(6 6)或赋值类型与变量类型不符,依变量类型强制)或赋值类型与变量类型不符,依变量类型强制转换,如:实型数据赋值给整型

42、变量时,舍去实转换,如:实型数据赋值给整型变量时,舍去实数的小数部分。数的小数部分。 具体见具体见3.7。安徽三联学院 信息与通信技术系3.5.2 赋值运算符和赋值表达式 3.3.复合赋值运算符复合赋值运算符 在赋值符在赋值符“= =”之前加上其它二目运算符可构之前加上其它二目运算符可构成复合赋值符。成复合赋值符。 如:如:a+=3 a+=3 等价于等价于 a=a+3a=a+3 x x* *=y+38 =y+38 等价于等价于 x=xx=x* *(y+38) (y+38) 注:有小括号注:有小括号 把把“运算运算”和和“赋值赋值”两个操作结合在一起,两个操作结合在一起,作为一个复合运算符来使用

43、。作为一个复合运算符来使用。变量变量 双目运算符双目运算符 表达式表达式变量变量 变量变量 双目运算符双目运算符 表达式表达式等价于等价于安徽三联学院 信息与通信技术系例:例:a+=a-=aa+=a-=a* *a a(假设(假设a a初值为初值为3 3 )计算步骤:计算步骤: (1 1)自右至左,先进行)自右至左,先进行a-=aa-=a* *a a的计算,结果的计算,结果a=-6a=-6 (2 2) 再计算再计算 a+=a+=6 6,结果,结果a=-12a=-12思考:思考: a+=a+=(a-aa-a* *a a)结果)结果a a值为值为3 3,注意区别,注意区别安徽三联学院 信息与通信技术

44、系3.5.3 3.5.3 关系运算符和关系表达式关系运算符和关系表达式 1 1关系运算符及其优先次序关系运算符及其优先次序操作符操作符作用作用运算目数运算目数结合方向结合方向 小于小于双目加法双目加法自左至右自左至右= 大于大于双目运算双目运算自左至右自左至右=大于或等于大于或等于双目运算双目运算自左至右自左至右=等于等于双目运算双目运算自左至右自左至右!=!=不等于不等于双目运算双目运算自左至右自左至右安徽三联学院 信息与通信技术系3.5.3 3.5.3 关系运算符和关系表达式关系运算符和关系表达式 2.2.关系表达式关系表达式 表达式表达式 关系运算符关系运算符 表达式表达式 关系表达式的

45、值是真和假,分别用关系表达式的值是真和假,分别用“1 1”和和“0 0”表示。表示。 结合性:结合性:左结合左结合 优先级:优先级: 关系运算符优先级低于算术运算符,高于赋值运算符。关系运算符优先级低于算术运算符,高于赋值运算符。 、= 、=的优先级相同,高于的优先级相同,高于=和和!=!=,=和和!=!=的的优先级相同。优先级相同。安徽三联学院 信息与通信技术系例:若例:若a=1,b=-5,c=a(1)ca+b c(a+b) 结果为真,关系表达式值为结果为真,关系表达式值为1(2)a=bc a=(bc) 结果为真,关系表达式值为结果为真,关系表达式值为1(3)a=bc a=(bb&b

46、c (ab )&(bc),表达式值为表达式值为1 1(2)a!=b&c!=0 (a!=b )&(c!=0) ,表达式值为表达式值为1 1(3)!a|ab (!a)|(ab) ,表达式值为表达式值为1 1例:计算表达式例:计算表达式53&2|!83&2|(!8)3&2|(!8)3) &2| ( (!8)3) &2 ) | ( (!8)b?a:bab?a:b计算过程:计算过程:求解表达式求解表达式1 1; 若若表达式表达式1 1的值为真(非的值为真(非0 0),计算并返回表达),计算并返回表达式式2 2的值,否则计算并返回表达式的值,

47、否则计算并返回表达式3 3的值。的值。安徽三联学院 信息与通信技术系 运算顺序:运算顺序: 高于赋值运算符,低于算术、关系、逻辑运算符高于赋值运算符,低于算术、关系、逻辑运算符 如:如:y=x=0?1:sin(x)/xy=x=0?1:sin(x)/x 等价于等价于 if(x=0) y=1;else y=sin(x)/xif(x=0) y=1;else y=sin(x)/x 结合方向:结合方向:右结合右结合 如:如:ab?a:cd?c:dab?a:cd?c:d 等价于等价于 ab?a:ab?a:(cd?c:dcd?c:d)安徽三联学院 信息与通信技术系#includemain() int a,b

48、,max; printf(n input two numbers: ); scanf(%d%d,&a,&b); printf(max=%d,ab?a:b); 程序运行结果:程序运行结果: input two numbers: 3 5 max=5安徽三联学院 信息与通信技术系3.5.6 逗号运算符和逗号表达式 逗号表达式逗号表达式 表达式表达式1 1,表达式,表达式2 2,表达式,表达式i i 作用:作用:用于连接各个表达式用于连接各个表达式如:如:3+53+5,6+86+8 过程:过程:求解表达式求解表达式1 再求解表达式再求解表达式2,表达式,表达式i 整个逗号表达式的值是表

49、达式整个逗号表达式的值是表达式i i的值的值 逗号运算符是所有运算中级别最低的。逗号运算符是所有运算中级别最低的。安徽三联学院 信息与通信技术系 一个逗号表达式又可与另一个表达式组成一一个逗号表达式又可与另一个表达式组成一个新的逗号表达式。个新的逗号表达式。 例:若例:若a=5,求下列逗号表达式的值,求下列逗号表达式的值 (a=3*5,a*4),),a+5计算过程:计算过程:赋值运算最先运算,赋值运算最先运算,a=15a=15,表达式表达式a a* *4 4的值并非赋值于的值并非赋值于a aaa的值为的值为1515,再计算,再计算a+5a+5,整个表达式值为,整个表达式值为2020例:例: (

50、1 1)x=(a=3,6x=(a=3,6* *3) 3) 结果结果x=18x=18 (2 2)y=a=3,6y=a=3,6* *a a 结果结果y=3y=3注:并不是任何地方出现的逗号都是逗号运算符注:并不是任何地方出现的逗号都是逗号运算符如:如:printf(printf(“%d,%d%d,%d”,a,b),a,b); 这里的逗号为这里的逗号为分隔符分隔符安徽三联学院 信息与通信技术系3.5.7 3.5.7 位运算位运算 操作符操作符作用作用位逻辑与位逻辑与位逻辑或位逻辑或 位逻辑异或位逻辑异或 位逻辑反位逻辑反右移右移安徽三联学院 信息与通信技术系 位运算符的运算对象只能是位运算符的运算对

51、象只能是整型整型或或字符型字符型数据数据(1 1)左移)左移如:如:a=a2a=a2a2,将,将a a的二进制数右移的二进制数右移2 2位位注:移到右端的低位被舍弃,对无符号数,高位补注:移到右端的低位被舍弃,对无符号数,高位补0 0若若a=15a=15,右移得,右移得0000001100000011 若若b=-3,b=-3,即二进制数即二进制数1111110111111101(补码)(补码) b1b1后得后得1111111011111110(大多数机器使用算术右移)(大多数机器使用算术右移) 结果变结果变-2-2补最高有效位,移几位补几位补最高有效位,移几位补几位参与位运算的数以补码方式出现

52、参与位运算的数以补码方式出现故右移需注意符号问题故右移需注意符号问题安徽三联学院 信息与通信技术系(3 3)按位与运算)按位与运算 参与运算的两数各对应的二进位进行相与参与运算的两数各对应的二进位进行相与运算规则:有运算规则:有0 0则为则为0 0,全,全1 1才为才为1 1即即1&1=11&1=1、1&0=01&0=0、0&1=00&1=0、0&0=00&0=0按位与运算通常用来对某些位清按位与运算通常用来对某些位清0 0或保留某些位。或保留某些位。例如把例如把x的高八位清的高八位清 0 ,保留低八位,可作,保留低八位,可作x&

53、amp;255运算运算( 255 的二进制数为的二进制数为0000000011111111)。安徽三联学院 信息与通信技术系(4 4)按位或运算)按位或运算 参与运算的两数各对应的二进位进行相或参与运算的两数各对应的二进位进行相或运算规则:有运算规则:有1 1则为则为1 1,全,全0 0才为才为0 0即即1|1=11|1=1,1|0=11|0=1,0|1=1,0|00|1=1,0|00 0安徽三联学院 信息与通信技术系(5 5)异或运算)异或运算 参与运算的两数各对应的二进位进行相异或参与运算的两数各对应的二进位进行相异或运算规则:相同为运算规则:相同为0 0,不同为,不同为1 1即即11=0

54、11=0, 00=000=0,10=110=1,01=101=1。 安徽三联学院 信息与通信技术系(6 6)非运算)非运算 参与运算的数的各二进位按位求反。参与运算的数的各二进位按位求反。安徽三联学院 信息与通信技术系3.5.83.5.8指针运算符、指针运算符、sizeofsizeof运算符运算符 指针运算符指针运算符(单目运算符)(单目运算符) 取内容取内容( (* *) )和取地址和取地址(&)(&)& &运算符运算符用来取出其运算分量的地址。用来取出其运算分量的地址。* *运算符运算符是是& &的逆运算,它把运算分量(即指针量)所的逆运算,

55、它把运算分量(即指针量)所指向的内存单元中的内容取出来。指向的内存单元中的内容取出来。 int a,b,*p;p=&a;/*把变量把变量a所在内存单元的地址送给所在内存单元的地址送给p(指针变量)(指针变量)*/b=*p;/*把把p所指单元的内容(即所指单元的内容(即a的值)赋给变量的值)赋给变量b*/安徽三联学院 信息与通信技术系 sizeof sizeof (单目运算符)(单目运算符) 用来计算某种类型的变量或某种数据类型在计算用来计算某种类型的变量或某种数据类型在计算机内部表示时所占用的字节数。机内部表示时所占用的字节数。 例如:例如: sizeofsizeof(floatflo

56、at)的值为)的值为4 4,表示,表示floatfloat型占型占用用4 4个字节。个字节。 sizeofsizeof常用来计算数组或结构所需空间大小,以常用来计算数组或结构所需空间大小,以便进行动态存储空间分配。便进行动态存储空间分配。安徽三联学院 信息与通信技术系3.6 3.6 运算符的优先级和结合性运算符的优先级和结合性 C C语言允许各种运算符组合在一起进行混合运语言允许各种运算符组合在一起进行混合运算操作。因此,必须知道运算符的优先级。所谓算操作。因此,必须知道运算符的优先级。所谓“运算符的优先级运算符的优先级”是指不同的运算符运算的先后是指不同的运算符运算的先后顺序。详见下页表格所

57、示。顺序。详见下页表格所示。说明:说明:运算符的优先级在表中从上到下依次递减。所有运运算符的优先级在表中从上到下依次递减。所有运算符的优先级共分算符的优先级共分1515级。基本运算符的优先级最高级。基本运算符的优先级最高(为(为1 1级),逗号运算符的优先级最低(为级),逗号运算符的优先级最低(为1515级)。级)。安徽三联学院 信息与通信技术系优先级运算符运算符类型运算对象的个数结合性1 1( ) - .( ) - .基本基本1 1个个 单目运算符单目运算符自左至右自左至右2 2! + & ! + & * * sizeof ( sizeof (类型类型名名) +) +(正)(

58、负)(正)(负)单目单目2 2个个 双目运算符双目运算符自右至左3 3* * / % / %算术算术2 2个个 双目运算符双目运算符自左至右自左至右4 4+ -+ -5 5移位移位2 2个个 双目运算符双目运算符自左至右自左至右6 6 = = 关系关系2 2个个 双目运算符双目运算符自左至右自左至右7 7= = != = !=8 8& &位逻辑位逻辑2 2个个 双目运算符双目运算符自左至右自左至右9 9 1010| |1111&逻辑逻辑2 2个个 双目运算符双目运算符自左至右自左至右1212|1313?:?:条件条件3 3个个 三目运算符三目运算符自右至左1414= = * *= /= += -= %= = &= = /= += -= %= = &= = |= |=赋值赋值2 2个个 双目运算符双目运算符自右至左1515, ,逗号逗号n n个个自左至右自左至右安徽三联学院 信息与通信技术系 在分析在分析C C程序或编写程序时,要注意运算符的程序或编写程序时,要注意运算符的作用及其运算分量的个数。因为有些运算符虽作用及其运算分量的个数。因为有些运算符虽“外表外表”一样,但却属于不同类型的运算符,例一样,但却属于不同类型的运

温馨提示

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

评论

0/150

提交评论