《C语言PPT(2).ppt》由会员分享,可在线阅读,更多相关《C语言PPT(2).ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第第2章章 基本数据类型、运算符与表达式基本数据类型、运算符与表达式&主要内容主要内容l语言的数据类型l语言的常量、变量l整型数据、实型数据和字符型型数据l各种类型数据之间的混合运算lC语言的运算符及其表达式l运算符的优先级及其结合性&核心知识点核心知识点lC语言的运算符及表达式l各类数值型数据间的混合运算规则l运算符优先级与结合性1/21/20231C语言程序设计 第第2章章 基本数据类型、运算符与表达式基本数据类型、运算符与表达式&重点难点重点难点lC语言的运算符及其表达式的使用l各类数值型数据间的混合运算&学习目标学习目标l了解C语言的数据类型l掌握常量和变量概念、分类及变量初始化方法
2、l掌握整型、实型和字符型数据的形式l掌握各类数值型数据间的混合运算规则l掌握常见的各种运算符及其表达式l理解运算符优先级与结合性1/21/20232C语言程序设计2.1C语言的数据类型语言的数据类型2.2常量和变量常量和变量2.3整型数据整型数据2.4实型数据实型数据2.5字符型数据字符型数据2.6各类数据混合运算各类数据混合运算2.7运算符与表达式运算符与表达式2.8运算符的优先级及其结合性运算符的优先级及其结合性1/21/20233C语言程序设计2.1 C语言的数据类型C语言提供的数据结构,是以数据类型形式出现的。具体分类如下:1.基本类型分为整型、实型(又称浮点型)和字符型。2.构造类型
3、分为数组类型、结构类型和共用类型,分别在第6章和第10章介绍。3.指针类型(*)在第9章中介绍。4.空类型(void)本章将介绍基本类型中的整型、实型和字符型三种数据。1/21/20234C语言程序设计2.2 常量和变量2.2.1 2.2.1 常量常量 1.常量的概念在程序运行过程中,其值不能被改变的量称为常量。2.常量的分类常量的类型,可通过书写形式来判别。(1)整型常量:如:123,-123。(2)实型常量:如:123.12,-12.34。(3)字符常量:如:a,k。(4)字符串常量:如:“China”。(5)符号常量:为代表常量的标识符(符号),一般用大写字母表示,如:在程序开头有:#d
4、efine PI=3.14,则之后就可使用标识符PI代表常量3.14。(关于#define的用法可参看8.1节)1/21/20235C语言程序设计2.2.2 2.2.2 变量变量 1.变量的概念 在程序运行过程中,其值可以被改变的量称为变量。2.变量的两个要素(1)变量名。每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。3.3.变量的定义与初始化变量的定义与初始化 C C语言要求对所有用到的变量语言要求对所有用到的变量“先定义,后使用先定义,后使用”。(1 1)变量的定义)变量的定义数据类型标识
5、符数据类型标识符 1/21/20236C语言程序设计 类型标识符必须是C语言的有效数据类型符,如:int、char、float、double等。变量名列表是一个或多个标识符名,当变量名多于两个以上时,每个标识符之间用,分隔。例如:int i,j,k;char c,str5;(2 2)变量初始化)变量初始化数据类型 变量名=初值1,变量名2=初值2;例如:int x=3;/*指定整型变量x的初值为3*/float f=3.56;/*指定单精度实型变量f的初值为3.56*/char ch=a;/*指定字符型变量ch的初值为a*/int a,b,c=5;/*指定整型变量c的初值为5,未指定整型变量a
6、、b的初值*/1/21/20237C语言程序设计 在定义变量时不允许用连等的方式同时给多个变量指定相同的初值。如:int a=b=c=3;是不合法的。应该写成:int a=3,b=3,c=3;1/21/20238C语言程序设计2.3 整型数据2.3.1 2.3.1 整型常量整型常量1 1整型常数的表示整型常数的表示按不同的进制区分,整型常数有三种表示方法:(1)十进制(以非0开始的数),例如:123、-123。(2)八进制(以数字开头),例如:0123(表示十进制数83)、06(表示十进制数6)。(3)十六进制(以数字+小写字母x开头或以数字+大写字母X开头),例如:0 x123(表示十进制数
7、291)、0XFF(表示十进制数255)。另外,可在整型常数后添加一个L或l字母表示该数为长整型数,例如:22L,-773l。1/21/20239C语言程序设计2 2整型常量的类型整型常量的类型 加上不同的修饰符,整型常量可分为如下几种类型:(1)基本整型,值范围:-32768 32767。(2)短整型,与基本整形相同。(3)长整型,在数值后面加“L(l)”。对超出基本整型值域的整型常量,可使用长整型常量表示,其取值范围可达-(-)。例如,123l、315等。(4)无符号整型,在数值后面加“U(u)”。如:12345u,在内存中按unsigned int方式存放,而-12345u则先转换成其补
8、码53191,然后再以无符号数方式存放。想一想:-10u在内存中的存放形式(值)是多少?(即求-10的补码)1/21/202310C语言程序设计 上述各类型整型常量占用的内存字节数,随系统而异。在16位操作系统中,一般用字节表示一个int型常量,用4字节表示一个long型常量。2.3.2 2.3.2 整型变量整型变量1 1整型变量的分类整型变量的分类根据占用内存字节数的不同,整型变量又分为类:(1)基本整型包括:有符号基本整型(简称为基本整型),其类型标识符为int,用来存储有符号基本整数。无符号基本整型,其类型标识符为unsigned int,用来存储无符号的基本整数。1/21/202311
9、C语言程序设计(2)短整型 包括:有符号短整型(简称为短整型),其类型标识符为short或short int,用来存储有符号的短整数。无符号短整型,其类型标识符为unsigned short,用来存储无符号的短整数。(3)长整型包括:有符号长整型(简称为长整型),其类型标识符为long或long int,用来存储有符号的长整数。无符号长整型,其类型标识符为unsigned long,用来存储无符号的长整数。1/21/202312C语言程序设计2 2整形变量占用内存字节数与取值范围整形变量占用内存字节数与取值范围 C语言标准没有规定整型变量在计算机内存中所占的字节数,它与具体的机器和操作系统有关
10、,例如,在位的计算机中,一个整形变量一般占个字节,而在位的计算机中,一个整形一般占个字节。而且不同类型的整型变量,其取值范围是不同的。占用内存字节数为n的(有符号)整型变量,其值域为:-2n*8-1(2n*8-1-1);无符号整型变量的值域为:02n*8-1。例如,PC机中的一个int型变量占2字节,其值域为-22*8-1(22*8-1-1),即-32768 32767;一个unsigned型变量的值域为:0(22*8-1),即065535。1/21/202313C语言程序设计3 3整型变量定义整型变量定义可以用上面几种整形类型定义整型变量,如:int a,b;/*指定变量a、b为整型*/un
11、signed short c,d;/*指定变量c、d为无符号短整型*/long e,f;/*指定变量e、f为长整型*/unsigned long g;/*指定变量g为无符号长整型*/想一想:若有int a,b;a=32767;b=a+1;此时b的值为多少?为什么?注意整形数据类型匹配规则为:一个整型常量可以赋给能容纳下其值的整型变量。1/21/202314C语言程序设计2.5 实型数据实型数据2.4.1 2.4.1 实型常量实型常量 1.1.表示形式表示形式 实型常量即实数,又称浮点数,其值有两种表示形式:(1)十进制形式:必须有小数点。例如3.14、9.8、0.123、.123、-123.0
12、等。(2)指数形式:E(或e)。例如3.0+5、123E-2、-6.8e-18、123e3或123E3等。.说明说明:(1)实型常量均为有符号浮点数,没有无符号浮点数。(2)实型常量只能用十进制形式表示,而无其它进制表示形式。(3)按默认格式输出实型常量时,最多只保留小数点后六位。1/21/202315C语言程序设计2.4.2 2.4.2 实型变量实型变量1.1.实型变量的分类实型变量的分类实型变量分为两种:(1)单精度型。类型标识符为float,占4字节(共32位二进制数)、提供7位有效数字,数的取值范围是3.4E-383.4E+38。(2)双精度型。类型标识符为double,占8个字节(共
13、64位二进制数)、提供1516位有效数字,数的取值范围是1.7E-3081.7E+308。2.2.实型变量的定义实型变量的定义可以用下列语句定义浮点型变量:float x,y;/*指定x、y为单精度实型变量*/double z;/*指定z为双精度实型变量*/1/21/202316C语言程序设计2.5 2.5 字符型数据字符型数据2.5.1 2.5.1 字符常量字符常量1.字符常量的定义用一对单引号括起来的单个字符,称为字符常量。例如,A、等。字符常量也可以用该字符的ASCII码值表示,例如:可用十进制数65表示大写字母A、十进制数10 表示换行,另外C语言还有一种特殊的字符常量转义字符。2.转
14、义字符(看书表2-3)转义字符是以反斜杠“”开头,后面跟一个字符,或者一组八进制整常数或十六进制整常数的一种特殊形式的字符常量。其功能是将反斜杠“”后面的字符转换成另一种含义。1/21/202317C语言程序设计 例如:102表示B,x4F代表字符O,x4B代表字符K,x21代表字符!。转义字符主要用来控制打印机和屏幕输出。例如:printf(n sum is%dnn,sum);注注意意:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:、。想一想:若有char a=1;printf(“%c%c%c”,a,a,a)输出结果是什么?1/21/202318C语言程序设计2.5.2 2.5.2
15、字符变量字符变量字符变量的类型关键字为char,一般占用1字节内存单元。1.变量值的存储 字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。例如,char ch1,ch2;/*定义两个字符变量:ch1,ch2*/ch1=a;ch2=b;/*给字符变量赋值*/1/21/202319C语言程序设计2.2.特性特性字符数据在内存中存储的是字符的ASCII码 一个无符号整数,其形式与整数的存储形式一样。(1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。(2)字符型数据与整型数据之间可通用。C语言允许对字符数据进行算
16、术运算,此时就是对它们的ASCII码进行算术运算。注注意意:C语言不允许用字符形式输出一个大于255的数值,否则会出错。1/21/202320C语言程序设计main()char c1,c2;/*定义字符变量c1,c2*/c1=97;c2=98;/*给字符变量c1,c2赋初值*/printf(%c%cn,c1,c2);/*以字符形式输出*/printf(%d%dn,c1,c2);/*以整数形式输出*/c1=c1-32;c2=c2-32;/*将小写字母转换为大写字母*/printf(%c%cn,c1,c2);/*以字符形式输出*/printf(%d%dn,c1,c2);/*以整数形式输出*/【例例
17、2-12-1】观察下面程序的运行结果。1/21/202321C语言程序设计2.5.3 2.5.3 字符串常量字符串常量1.字符串常量的概念和字符串长度字符串常量是用一对双引号括起来的若干字符序列。字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为“”(一对紧连的双引号)。例如,“How do you do.”、“Good morning.”等,都是字符串常量,其长度分别为14和13(空格也是一个字符)。1/21/202322C语言程序设计 如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。例如:(1)C:msdosv6.22 C:msdo
18、sv6.22 (2)I say:Goodbye!I say:Goodbye!2.2.字符串的存储字符串的存储C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。注意注意:在源程序中书写字符串常量时,不必加结束字符0,否则画蛇添足。如果有一个字符串为“CHINA”,则它在内存中的实际存储如下所示:最后一个字符0是系统自动加上的,它占用字节而非字节内存空间。CHINA01/21/202323C语言程序设计注意:字符常量A与字符串常量A是两回事:(1)定界符不同:字符常量使用单引号,而字符串常量使用双引号;(2)长度不同:字符常量的长度固定为1,而字符串常量的长度,
19、可以是0,也可以是某个整数;(3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。1/21/202324C语言程序设计2.6 各类数据混合运算各类数据混合运算 整型、实型(包括单、双精度)、字符型数据可以混合运算。例如:10+a+1.5-8765.1234*b 各类数据混合运算时,先转换成同一种类型,然后进行运算。转换规则如图2-2所示。图2-2数据混合运算转换规则1/21/202325C语言程序设计1.1.自动转换自动转换 整型、实型和字符型数据间进行混合运算,系统可自动进行数据类型转换。如果一个运算符两侧的操作数的数据类型不
20、同,则系统按“先转换、后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。转换规则如图2-2所示。(1)横向向左的箭头,表示必须的转换。char和short 型必须转换成 int 型,float型必须转换成double型。(2)纵向向上的箭头,表示不同类型的转换方向。例如,int型与double型数据进行混合运算,则先将int型数据转换成double型,然后在两个同类型的数据间进行运算,结果为double型。1/21/202326C语言程序设计例如:若已定义以下变量int i;float f;double d;long e;则计算式:100+a+i*f-d/e的运算次序
21、是:a.进行100+a运算。先将a转换为整数97,运算结果为整数197。b.进行i*f运算。先将i和f均转换为double类型(实运算过程总是使用double类型,仅在把结果存入存储器时,才可能使用float类型),运算结果是double类型。c.整数197与i*f的积相加。先将整数197转换为double类型(197.0),运算结果是double类型(假设值为A)。d.进行d/e运算。先将long e转换为double类型,运算结果是double类型(假设值为B)。e.最后进行A-B的运算,结果为double类型。1/21/202327C语言程序设计2.2.除自动转换外,语言也允许强制转换。
22、除自动转换外,语言也允许强制转换。数据类型强制转换的一般格式为:(要转换成的数据类型标识符)(被转换的表达式)例如:(double)a(等价于(double)(a))/*将变量a的值转换成double型*/(int)(x+y)/*将x+y的结果转换成int型*/(float)5/2(等价于:(float)(5)/2)/*将5转换成实型,再除以2,等于2.5*/(float)(5/2)/*将5整除2的结果(2)转换成实型(2.0)*/(float)(5%3)/*将5%3的值转换为float类型*/1/21/202328C语言程序设计说明:(1)强制类型转换时,得到一个所需类型的中间变量,原来变量
23、的类型不发生变化。例如:(int)x只是将变量x的值转换成一个int型的中间量,其数据类型并未转换成int型,即变量x的类型不发生变化。(2)当被转换的表达式是一个简单表达式时,外面的一对圆括号可以省略不写。1/21/202329C语言程序设计2.7 2.7 运算符与表达式运算符与表达式运算符类别运算符类别举例举例自增、自减运算符自增、自减运算符+、-算术运算符算术运算符+、-、*、/、%关系运算符关系运算符、=、=、!=!=逻辑运算符逻辑运算符!、&、|位运算符位运算符、|、&赋值运算符赋值运算符=条件运算符条件运算符?、:逗号运算符逗号运算符,指针运算符指针运算符*、&(在第(在第8 8章
24、介绍)章介绍)其他其他sizeofsizeof、.、-(在第在第9 9章后介绍)章后介绍)C语言的运算符非常丰富,主要有:算术运算符、关系运算符、逻辑运算符与按位运算符,除此之外,还有一些用于完成特殊任务的运算符。如表2-5所示。1/21/202330C语言程序设计2.7.1 2.7.1 算术运算符和算术表达式算术运算符和算术表达式1 1算术运算符算术运算符算术运算符共有5种,如表2-6所示。运算符号运算符号作作 用用+加法运算符,如:加法运算符,如:3+53+5正值运算符,如:正值运算符,如:+3+3-减法运算符,如:减法运算符,如:5-25-2负值运算符,如:负值运算符,如:-3-3*乘法
25、运算符,如:乘法运算符,如:3*53*5/除除法法运运算算符符,如如:15 15/2 2表表示示求求1515除除以以2 2的的商商,结果(结果(“向零取整向零取整”)为商的整数部分)为商的整数部分7 7%求求模模运运算算符符(又又称称求求余余运运算算符符),如如:15 15%2 2表示求表示求1515除以除以2 2的余数部分的余数部分1 11/21/202331C语言程序设计2 2算术表达式算术表达式 表达式的概念用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子,称为表达式。单个常量、变量或函数,可以看作是表达式的一种特例。将单个常量、变量或函数构成的表达式称为
26、简单表达式,把其它的表达式称为复杂表达式。算术表达式的概念运算符全部是算术运算符的表达式。如:8+6*5、(x+y)/2-z等,都是算术表达式。1/21/202332C语言程序设计3 3算术运算符的优先级与结合性算术运算符的优先级与结合性 运算符的结合性所谓结合性是指当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合,自左向右的结合方向,称为左结合性。反之,称为右结合性。除求负、逻辑非运算符、赋值运算符和条件运算符是“右结合性”外,其它运算符都是“左结合性”。运算符的优先级所谓优先级是指运算符在进行计算时的先后顺序。如果在一个运算对象(或称操作
27、数)两侧的运算符的优先级相同,则按运算符结合性规定的结合方向进行运算。1/21/202333C语言程序设计算术表达式中运算符的优先级与结合性优先级:先乘除(乘与除为同级运算)、后加减(加与减为同级运算);若有括号,则先算括号内的。结合性:为左结合(即:先左后右)。例如,在执行“ab+c”时,变量b先与减号结合,执行“a-b”;然后再执行加c的运算。2.7.2 2.7.2 自增与自减运算符自增与自减运算符自增与自减运算符是C语言特有的两种非常有用的运算符。其中:自增运算符为+,表示操作数加1;自减运算符为-,表示操作数减1。1/21/202334C语言程序设计1.1.功能功能自增运算使单个变量的
28、值增,自减运算使单个变量的值减。有以下四种形式:+i;/*在使用i之前使i加1*/-i;/*在使用i之前使i减1*/i+;/*在使用i之后使i加1*/i-;/*在使用i之后使i减1*/例如:x=m+表示将m的值赋给x后,m加1。x=+m 表示m先加1后,再将新值赋给x。从上例可知:x=m+和x=+m有很大差别。1/21/202335C语言程序设计2.2.用法用法自增、自减运算符都有两种用法:(1)前置运算运算符放在变量之前:+变量、-变量,先使变量的值增(或减),然后再以变化后的值参与其它运算,即:先增减、后运算。例如:i=3;j=+i;/*先使i加1,再赋给j。执行完语句后:j=4,i=4*
29、/(2)后置运算运算符放在变量之后:变量+、变量-,变量先参与其它运算,然后再使变量的值增(或减),即:先运算、后增减。例如:i=3;k=(i+)+(i+)+(i+);/*i+:先使用i,再加1。执行后:k=3+3+3=9,i=6*/1/21/202336C语言程序设计想一想:执行完以下语句后i,j,k的值是多少?为什么?i=3;j=i+;k=(+i)+(+i)+(+i);注注意意:+和-的结合方向为“右结合”。例:-i+等价于:-(i+),而不是等价于:(-i)+,因为负值运算符“-”和自增运算符优先级相同。1/21/202337C语言程序设计【例例2-22-2】自增、自减运算符的用法示例。
30、main()int x=6,y;printf(x=%dn,x);/*输出x的初值*/y=+x;/*前置运算*/printf(y=+x:x=%d,y=%dn,x,y);y=x-;/*后置运算*/printf(y=x-:x=%d,y=%dn,x,y);程序运行结果:x=6y=+x:x=7,y=7y=x-:x=6,y=7 想一想:若将“y=+x;”改为 (y=x+;),“y=x-;”改为 (y=-x;),结果会如何?1/21/202338C语言程序设计3.3.说明说明(1)自增、自减运算,常用于循环语句中,使循环控制变量加(或减),以及用于指针变量中,使指针指向下(或上)一个地址。(2)自增、自减运
31、算符,只能用于变量,不能用于常量和表达式。例如,5+、-5、-(a+b)、(a+b)-等都是非法的。又如:#define ONE 1;ONE+;也是错误的写法。(3)出现多个运算符时,编译器在处理时尽可能多的(从左到右)将若干个字符组合成一个运算符。例:i+j等价于(i+)+j;而不是i+(+j)(4)在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。1/21/202339C语言程序设计2.7.3 2.7.3 赋值运算符和赋值表达式赋值运算符和赋值表达式 1.1.赋值运算赋值运算赋值符号“=”就是赋值运算符。构成赋值表达式的一般形式:变量=表达式 功功能能:是构
32、成一个赋值表达式,将“=”右边的表达式的值赋给“=”右边的变量。例如:x=3 /*将常数3赋值给变量x。常数是特殊的表达式*/y=(float)5/2 /*将5.0/2的结果赋值给变量y*/a=b+c+1 /*将b+c+1的结果赋值给变量a*/注注意意:如果赋值号右边的表达式值的类型与被赋值变量的类型不一致,但都是数值型或字符型时,则系统会自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。1/21/202340C语言程序设计2.2.复合赋值运算复合赋值运算复合赋值运算符是由赋值运算符之前再加一个双目运算符(如:算术运算符或位运算符)构成的。复合赋值运算的一般格式:变量变量 双目运
33、算符双目运算符 =表达式表达式 复合赋值运算符它等价于:变量=变量 双目运算符(表达式)。常见的复合赋值运算符共10种,如表2-7所示。1/21/202341C语言程序设计复合赋值运算符复合赋值运算符例子语句例子语句等价语句等价语句复合算术运复合算术运算符算符+=+=a+=3;a+=3;a=a+3;a=a+3;-=-=a-=3;a-=3;a=a a=a 3;3;*=x*=y+8;x*=y+8;x=x*(y+8);x=x*(y+8);而不是而不是 x=x*y+8;x=x*y+8;/=/=x/=3;x/=3;x=x/3;x=x/3;%=%=x%=3;x%=3;x=x%3;x=x%3;复合位运算复合
34、位运算符符&=&=x&=2x&=2x=x&2x=x&2=x=2x=2x=x 2x=x 2|=|=x|=2x|=2x=x|2x=x|2=x=2x=2x=x 2x=x=x=2x=2x=x 2x=x 2表2-7复合赋值运算符1/21/202342C语言程序设计3.3.赋值表达式赋值表达式由赋值运算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。(1)一般格式:例如:x=100(2)赋值表达式的值:被赋值变量的值例如,“x=100”这个赋值表达式,变量x的值“100”就是它的值。(3)说明 赋值表达式与赋值语句的区别在于赋值语句的最后一个字符之后必须有分号(;)。例如:a=
35、5 为赋值表达式,a=5;为赋值语句。赋值表达式中的“表达式”也可以是赋值表达式。例如:a=(b=5)/*b的值等于5,表达式b=5的值等于5,因此a的值等于5*/等价于:a=b=5 例如:a+=a-=a*a/*先计算a=a-a*a,再计算a=a+a*/1/21/202343C语言程序设计4 4 赋值语句中的数据类型转换赋值语句中的数据类型转换类类型型转转换换是是指指不不同同类类型型的的变变量量混混用用时时的的类类型型改改变变。当当赋赋值值运运算算符符两两侧的类型不同时,在赋值前必须进行类型转换。侧的类型不同时,在赋值前必须进行类型转换。在在赋赋值值语语句句中中,类类型型转转换换规规则则是是:
36、等等号号右右边边的的值值转转换换为为等等号号左左边边变变量所属的类型。量所属的类型。(1)(1)、floatfloat、doubledouble转换为转换为intint:舍弃(或截断)小数。舍弃(或截断)小数。(2)(2)、intint转换为转换为floatfloat、doubledouble:值不变。值不变。例如例如:main()main()intint i=15,j=2;/*i=15,j=2;/*定义整型变量定义整型变量*/float f,g=2.58;/*float f,g=2.58;/*定义浮点型变量定义浮点型变量*/f=i*j;f=i*j;/*i/*i与与j j的的乘乘积积是是整整型
37、型数数3030,被被转转换换成成为为浮浮点点数数赋赋给给f*/f*/i=g;i=g;/*g/*g中的浮点型数转换成为整型数赋给中的浮点型数转换成为整型数赋给i*/i*/f=i/2;f=i/2;/*i/2/*i/2的的商商是是整整型型数数7 7,被被转转换换成成为为浮浮点点数数赋赋给给f*/f*/f=i/2.0;/*i/2.0f=i/2.0;/*i/2.0的商是浮点数的商是浮点数7.57.5,被直接赋给,被直接赋给f*/f*/.1/21/202344C语言程序设计2.7.4 2.7.4 关系运算符及其表达式关系运算符及其表达式1.关系运算符“关系运算”实际上就是“比较运算”,即将两个数据进行比较
38、,判定两个数据是否符合给定的关系。如:102成立,我们认为其结果为真。C语言提供6种关系运算符,如表2-8所示。关系运算符关系运算符作作 用用 大于大于=大于等于大于等于 小于小于=a+b 等效于 c(a+b)ab!=c 等效于(ab)!=c a=bc 等效于a=(bc 等效于a=(bc)1/21/202346C语言程序设计3.3.关系表达式关系表达式(1)关系表达式的概念关系表达式是指用关系运算符将两个表达式连接起来,进行比较运算的式子。例 如:ab,a+bc-d,(a=3)=b,(ab)=(bc)均为合法的关系表达式。(2)关系表达式的值逻辑值,即为:真(true)或假(false)。若表
39、达式为真(即true)则返回1,否则,表达式为假(即false),返回0。例如:210=99 返回1 10=0”。如果需要描述“x=0”且“x=0)&(x10)的值为“真”;(x5)的值为“假”。在一个逻辑表达式中,可包含多个逻辑运算符,如:!a&b|xy&c1/21/202349C语言程序设计3.逻辑运算符的运算优先级 逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非)&(与)|(或)与其它种类运算符的优先关系!算术运算 关系运算&|赋值运算例如:(ab)&(xy)可以写为:ab&xy(a=b)|(x=y)可以写为:a=b|x=y(!a)|(ab)可以写为:!a|ab1/21/2023
40、50C语言程序设计4.4.逻辑表达式逻辑表达式(1)逻辑表达式的概念 逻辑表达式是指用逻辑运算符将一个或多个表达式连接起来,进行逻辑运算的式子。逻辑表达式常用于表示多个条件的组合。例如:判断一个字符是否是英文字母的逻辑表达式为(ch=65)&(ch=97)&(chn2)&(y=n3n4)”后,x的值变为,而y的值不变,仍等于1。1/21/202352C语言程序设计2.7.6 2.7.6 逗号运算(,)及其表达式逗号运算(,)及其表达式逗号运算符即“,”又称顺序求值运算符,常用于将多个表达式串在一起,构成逗号表达式。“,”运算符的左边的表达式总不返回值,而最右边表达式的值才是整个逗号表达式的结果
41、。逗号运算符在所有运算符中优先级最低。1.1.逗号表达式一般形式逗号表达式一般形式 表达式,表达式,表达式n例如:3+5,21,6+8 /*是一个逗号表达式*/2.2.功能功能自左向右,依次计算各表达式的值,“表达式n”的值即为整个逗号表达式的结果。例如:“(a=3*5,a*4),a+5”的值是20:先求解a=3*5,得a=15;再求a*4=60;最后求解a+5=20,所以逗号表达式的值等于20。1/21/202353C语言程序设计2.7.7 2.7.7 位运算符及其表达式位运算符及其表达式为了节省内存空间,语言提供了将标志状态从标志字节中分离出来的位运算功能。所谓位运算是指按二进制位进行的运
42、算。1.1.位运算符及其表达式位运算符及其表达式 C语言和其它高级语言不同的是它完全支持位运算符。这与汇编语言的位操作有些相似。常用的位运算符如表2-11所示。位运算符位运算符作作 用用&按位与按位与|按位或按位或 按位异或按位异或-按位取反按位取反右移右移左移左移1/21/202354C语言程序设计位运算是对字节或字中的二进制位进行检测、设置或移位,它只适用于字符型和整数型变量以及它们的变形体,对其它数据类型不适用。(1 1)按位与)按位与&格式:x&y 规则:对应位均为1时才为1,否则为0。例如,3&9=1:主要用途:取(或保留)1个数的某(些)位,其余各位置0。0011&1001 000
43、1=11/21/202355C语言程序设计(2 2)按位或)按位或|格式:x|y 规则:对应位均为0时才为0,否则为1。例如,3|9=11主要用途:将1个数的某(些)位置1,其余各位不变。0011|1001 1011=111/21/202356C语言程序设计(3 3)按位异或)按位异或 格式:xy 规则:对应位相同时为0,不同时为1。如:39=10。主要用途:使1个数的某(些)位翻转(即原来为1的位变为0,为0的变为1),其余各位不变。(4 4)按位取反)按位取反 格式:x 规则:各位翻转,即原来为1的位变成0,原来为0的位变成1:在IBM-PC机中,00 xffff,9=0 xfff6。主要
44、用途:间接地构造一个数,以增强程序的可移植性。1/21/202357C语言程序设计(5 5)按位左移)按位左移 格式:x 位数 规则:使操作数的各位左移,低位补0,高位溢出:5 格式:x位数 规则:使操作数的各位右移,移出的低位舍弃,对无符号数和有符号中的正数,高位补0;对于有符号数中的负数,取决于所使用的系统:高位补0的称为“逻辑右移”,高位补1的称为“算术右移”。例如,20 2=5。1/21/202358C语言程序设计【例例2-32-3】从键盘上输入1个正整数给int变量num,输出由811位构成的数(从低位、0号开始编号)。【分析分析】可分以下3步进行:(1)使变量num右移8位,将81
45、1位移到低4位上。(2)构造1个低4位为1、其余各位为0的整数mask。(3)将mask与num进行按位与运算。注注意意:位运算中的操作数,只能是整型或字符型数据。除按位取反为单目运算符外,其余均为双目运算符。1/21/202359C语言程序设计main()int num,mask;printf(Input a integer number:);scanf(%d,&num);num=8;/*右移8位,将811位移到低4位上*/mask=(04);/*间接构造1个低4位为1、其余各位为0的整数*/printf(result=0 x%xn,num&mask);程序如下:程序运行情况:Input a
46、 integer number:2000 result=0 x71/21/202360C语言程序设计【例例2-42-4】从键盘上输入1个正整数给int变量num,按二进制位输出该数。#include#include stdio.hstdio.h main()main()intint num,mask,i;num,mask,i;printf(Inputprintf(Input a integer number:);a integer number:);scanf(%d,&numscanf(%d,&num););mask=115;/*mask=115;/*构造构造1 1个最高位为个最高位为1 1、
47、其余各位为、其余各位为0 0的整数的整数*/printf(%dprintf(%d=,num);=,num);for(i=1;i=16;i+)for(i=1;i=16;i+)putchar(num&maskputchar(num&mask?1 1:0 0);/*);/*输出最高位的值输出最高位的值*/num=1;/*num=1;/*将次高位移到最高位上将次高位移到最高位上*/if(if(i%4=0 i%4=0)putcharputchar(,);/*);/*四四位位一一组组,用用逗逗号号分分开开*/printf(bBnprintf(bBn););程序如下:1/21/202361C语言程序设计2.8 2.8 运算符的优先级及其结合性运算符的优先级及其结合性 C语言规定了运算符的优先次序即优先级。当一个表达式中有多个运算符参加运算时,将按如表2-12所示的运算符的优先次序、结合性进行运算。表2-12中优先级从上往下逐渐降低,同一行优先级相同。除求负、逻辑非运算符、赋值运算符和条件运算符等是“右结合性”(自右向左)外,其它大部分运算符都是“左结合性”(自左向右)。1/21/202362C语言程序设计