《第2章C语言基础知识.ppt》由会员分享,可在线阅读,更多相关《第2章C语言基础知识.ppt(123页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、,C语言程序设计,第2章语言的基本知识,2.1 数据类型2.2 标识符和关键字2.3 常量2.4 变量2.5 运算符和表达式2.6 运算符的优先级2.7 不同数据类型数据间的混合运算,课程回顾,1、C语言的基本语法结构?2、C语言有哪些语法特点呢?3、想一想,下面程序有哪些错误?,C语言基本语句结构 #include “stdio.h” int main() 语句1; 语句2; ,思考?想在屏幕上输出Hello,word 如何编写?,课程回顾,C语言语法特点,1、C程序有且只有一个main()函数,而且程序总是从main函数开始执行,无论其位置在哪, 习惯将main()函数写在程序开始。2、C
2、语言每条语句都以“;”结束3、C程序书写自由,一行内可以写多个语句,一个语句也可以分写多行4、C语言本身没有输入输出语句 库函数输入scanf()和输出printf()5、C语言注释符号/*/, /6、C语言区别大小写,习惯用小写,课程回顾,#include main( )int x,y,sum; /定义3个整型变量x,y,sumx=100, /把100赋给xy=200; /把200赋给ySum=x+y; /把x+y的值赋给变量sumPrintf(x+y的和sum=%dn,sum);/输出sum的值return 0;,课程回顾,2.1 数据类型,学习目标,了解语言的数据类型,掌握语言中的基本数
3、据类型,为什么要讨论数据类型【例】计算并输出两个数的和。#include “stdio.h”void main() int a=100000,b=200000; printf(“a+b=%dn”,a+b);,运行结果:a+b=-67280,2.1 数据类型,【例】计算并输出两个数的和。,#include “stdio.h”void main() long int a=100000,b=200000; printf(“a+b=%ldn”,a+b);,运行结果:a+b=300000,2.1 数据类型,C语言的数据类型,在程序中对用到的所有数据都必须指定其数据类型.,?,不同类型的数据,所占内存的字
4、节数不同, 对应的操作也不相同。,float,double,2.1 数据类型,基本数据类型,ANSI C标准规定,简单类型的前面还可以加上修饰符,使简单类型的语义更加丰富,方便C编程人员选用恰当的数据类型。这样的修饰符共有4种:(1)signed:有符号;(2)unsigned:无符号;(3)long:长型;(4)short:短型。,2.1 数据类型,12,在线保险单年龄:_保险总额:_性别:_,23,28340, M ,数值型,字符型,int/float,char,2.1 数据类型,如何正确恰当的定义数据类型: 1: 表示”学生成绩” 2: 表示年龄 3: 表示日常数值计算 4: 定义中国人
5、口的数量 5: 表示“金额”(钱),”工资” 6: 表示”男”,”女”,2.1 数据类型,思考,学习目标,对照了解自然语言和语言的组成要素,掌握语言中的字符集,掌握语言中标识的概念及用户定义标识的规则,2.2 标识符和关键字,熟记语言中的关键字,自然语言与语言组成要素对比,按照“字-词-句-段-章”的自然语言的学习顺序学习C语言是一种非常有效的学习方法。,2.2 标识符和关键字,字符集,2.1 标识符和关键字,字符是组成语言的最基本的元素,国际上使用最广泛的计算机字符编码是ASCII码,标准的ASCII码字符集包括128个字符。,2.2 标识符和关键字,标识符,所谓标识符就是用来标识在语言程序
6、中出现的符号常量、变量、数据类型、函数和语句的字符序列,C语言中的标识符是由字符组成,满足一定的构成规则。,C语言规定,标识符由字母、数字、下划线组成,且第一个字符不能使用数字字符。例如: a、_3x、BOOK1、sum5、student_1都是合法的标识符 -3x、3Student、$Map、SumMul、ab等不合法,2.1 标识符和关键字,关键字,关键字是系统定义的、具有特定含义、专门用作特定用途的C语言标识符,也称为保留字。标准C语言中共有32个关键字。 根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。,2.1 标识符和关键字,关键字,(1)数
7、据类型关键字(12个):char, double, float, int, long, short, signed, unsigned, struct, union, enum, void(2)控制语句关键字(12个):break, continue, if, else, switch, case, default,while ,do, for, goto, return, (3)存储类型关键字(4个):auto, extern, register, static(4)其它关键字(4个):const, sizeof, typedef, volatile,特定字是具有特殊含义的标识符,虽然不是关
8、键字,但习惯上把它们看成关键字 define endif line include 等,2.1 标识符和关键字,特定字,2.1 标识符和关键字,关键字,需要注意以下几点:1、标识符的有效长度随系统而异,建议标识符不要超过8个 字符 如:student_num student_name 2、标识符命名的良好习惯见名知意 例如,name(姓名)、age(年龄)3、C语言的关键字和特定标识符不能用作用户自定义的标识符。4、C语言区分大小写。如:Name和name是不同的标识符5、C语言有许多库函数,尽量不要与库函数同名,2.1 标识符和关键字,思考,下列标识符是否合法,为什么?sum a1 b2 s
9、_name123 #ss a.b.c float,合法,不合法,2.3 常量,学习目标,理解常量的概念,熟练掌握整型、实型及字符型常量的使用,字面常量(直接常量): 12 -44.6 a Hello! 符号常量:用一个标识符代表一个常量。,字符串常量,格式:#define 常量名 字面常量 举例: #define PRICE 100 #define PI 3.14 #define C1 a,习惯上常量名用大写,变量名用小写。,意义,1、含义清楚。2、在需要改变一个常量时,能够做到“一改全改”。,符号常量的定义放在函数外面。,整型常量,字符型常量,2.3常量,常量,在程序运行过程中其值保持不变的
10、量称为常量。常量可以分为符号常量和直接常量两种。,分类,符号常量的定义,#include #define PI 3.14main()float r,s,c;r=3;c=2*PI*r;s=PI*r*r;printf(圆的周长c=%fn圆的面积s=%fn,c,s);,思考,编写一C程序,实现输出圆的周长及面积。,2.3 常量,(1)十进制整型常量其形式是:d其中,d可以是从09的一个或多个十进制数位,第一位不能是0。进位规则为:逢十进一。 如: 123, -456(2)八进制整型常量 其形式是: 0d 其中,d可以是一个或多个八进制数(07之间),起始0是必须的引导符。进位规则为:逢八进一。 如:
11、0123, -0456,,整型常量,在C语言中整型常量可以表示为十进制、八进制和十六进制三种形式。,以数字0开头,2.3.1 整型常量,(3)十六进制整型常量其形式是: 0xd其中,d可以是一个或多个十六进制数(从09的数字,或是从a到f的字母)。引导符0是必须的,字母X可以用大写或小写,进位规则为:逢十六进一。,整型常量,以0x开头,分类,类型匹配规则,一个整型常量,可以赋给能容纳下其值的整型变量,基本整型(数据范围与int型一样)长整型 (在数值后面加“L(l)”, 数据范围与long int型一样),如123l,315L,2.3.1 整型常量,按权展开:1)二进制转化十进制如:1101
12、=1*23+1*22+0*21+1*20 =8+4+0+1=13求: 0170转换成十进制 0x1A2转换成十进制,非十进制数转化成十进制数,2.3.1 整型常量,取余倒排序法:1)十进制转化二进制如:将6转化成二进制求:将180转化成八进制、 十六进制,十进制数转化成非十进制数,2.3.1 整型常量,非十进制数间相互转换,当给出一个二进制数,要将它转换为八进制数和十六进制数时,方法如下:1、二进制转换成八进制:将一个二进制数从右到左每三位分成一组,如果最左边剩余的数字不够三位,那么用零补足成一组,找出每组二进制数所对应的八进制数字。最后将八进制数字从左到右依次写出的一个数即为八进制数。如:二
13、进制数 1110 001(1),110(6) 八进制数 :016,2.3.1 整型常量,非十进制数间相互转换,2、二进制转换成十六进制:将一个二进制数从右到左每四位分成一组,如果最左边剩余的数字不够四位,那么用零补足成一组,找出每组二进制数所对应的十六进制数字。最后将十六进制数字从左到右依次写出的一个数即为十六进制数。如:二进制数 1010110110 0010(2),1011(B),0110(6) 十六进制:0X2B6,2.3.1 整型常量,#include main() int a=252; printf(a=%o, a=%#on,a,a); printf(a=%x, a=%#xn,a,a
14、); getch();,程序运行结果:,思考,2.3.1 整型常量,整型数据在内存中是以二进制方式存放的,最高位为符号位,并以补码表示。将一个十进制整数转化为补码表示的方法如下:()对于正数,其补码表示与原码相同。()对于负数,其补码表示为它的反码加1;负数的反码为其绝对值的所有位(含符号位)取反得到。,2.3.1 整型常量,例如:求-10的补码的方法是:取-10的绝对值10;10的绝对值的二进制形式为:0000000000001010(一个整数占16位);对0000000000001010取反得到:1111111111110101;再加1得1111111111110110。,2.3.1 整型
15、常量,8.C语言中,下列合法的长整型常量是( )。A. a B0.012345 C.2.134e12 D0L36.数值029是一个()。A八进制数 B十六进制数 C十进制数 D非法数41.长整型数据在内存中的存储形式是()。AASCII码 B原码 C反码 D补码,2.3.1 整型常量,练习,2.3.2 实型常量,实型数据又称为浮点型数据,是带小数部分的数据。根据能够表示的大小和精度,浮点型数据分为单精度、双精度两类,类型说明符分别为float和double。浮点型数据在内存中以指数形式存储。语言将一个浮点型数据分成小数和指数两个部分存储。例如,实数3.14159在内存中的存放形式如图所示。,2
16、.3.2 实型常量,(1)十进制小数形式由正负号、数码和一个小点组成,小数点前面和后面可以没有数字。例如 .123 / 表示实数 0.123 -.123 /表示实数 -0.123 123. /表示实数 123.0,实型常量,语言中,实型常量有两种表示形式:十进制小数形式和指数形式。,(2)指数形式由十进制小数或整数与字母e或E组成。一般形式如下:aEn或aen其中,a可以是十进制小数或整数,n必须为十进制整数,整体表示数a10n。对于指数形式表示的实型常量,要求字母e或E前面必须有数字,后面必须为整数。 如: 0.23e2 ,-0.45e-3, 3.0+5,0.23*102,e3、1.2e1.
17、5 、e,不合法,实型常量不分float型和double型。一个实型常量,可以赋给一个实型变量(float型或double型)。,2.3.2 实型常量,规范指数形式,实型常量,2.3.3 字符型常量,在语言中字符型数据包括字符和字符串两种。字符型数据在内存中存储的是字符的ASCII码值的二进制形式,一个字符的存储占用一个字节。,2.3.3 字符型常量,(1)普通字符常。是用单引号括起来的一个字符。该字符可以是数字、字母等ASCII字符集中除“ ”和“”以外的所有可显示字符。(2)转义字符。转义字符是一种特殊的字符常量。转义字符以反斜杠开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符
18、原有的意义,故称“转义”字符。,字符常量,语言中,字符常量分为普通字符常量和转义字符两种。,2.3.3 字符型常量,10.以下所列的C语言常量中,错误的是()A、0xFF B、1.2e0.5 C、2L D、7220.下列4个选项中,均是合法整型常量的是()A160 -0xffff 011 B-0xcdf 01 0xeC-01 986,012 0668D-0x48a 2e5 0x,练习,2.3.3 字符型常量,2.3.3 字符型常量,实例分析,#include stdio.hmain()printf(104 x45 F n);printf(I say:How are you?n);printf(
19、C:teachingshiyann);,程序运行结果:,#include stdio.hmain() char c1=a,c2=b,c3=c,c4=101,c5=116; printf(a%c b%ctc%ctabcn,c1,c2,c3); printf(tb%c%c,c4,c5); getch();,程序运行结果:,实例分析,2.3.3 字符型常量,C语言中的字符串常量是由一对双引号括起来的字符序列。,字符串常量和字符常量是不相同的量,其区别如下: (1)从表示形式上看,字符常量是由单引号括起来的,字符串常量是由双引号括起来的。(2)从字符的个数上看,字符常量只能是单个字符,字符串常量可以包
20、含0个或多个字符。(3)有字符变量,但没有字符串变量。语言没有专门的字符串类型变量,而是使用字符型数组或字符型指针来存储字符串。(4)字符常量在内存中占个字节,字符串常量在内存中的字节数是字符个数加。因为语言规定,每一个字符串的末尾加一个字符串结束标志0,字符串常量,2.3.4 字符串常量,3、 字符串常量“How do you do”和“Good morning”的长度分别是多少?,2、 字符串C:msdosv6.22和I say: Goodbye! 在C语言中的字符串常量形式如何表示?,1、 字符串CHINA在内存中的实际存储形式是怎样的?占用多少个字节的内存空间?,13和12,C:msd
21、osv6.22和I say:Goodbye!,占用字节而非字节内存空间,思考,2.3.4 字符串常量,注意:1、a是字符, a是字符串。2、 不能把一个字符串赋给一个字符变 量。如c=a、c=Hello! 都是错误的。3、C语言中没有字符串变量,可以用字符数组来表示。,2.3.4 字符串常量,练习,19.下列字符串常量不正确的是(A)Aabc B1212 C0 D 25.下列符号中,不属于转义字符的是( B )。 B0xAA C.t D039.若有说明语句“char c=72;”,则变量c(A)A包含1个字符 B包含2个字符 C包含3个字符 D说明不合法,c的值不确定,2.3.5 符号常量,在
22、程序运行过程中其值保持不变的量称为常量。常量可以分为符号常量和直接常量两种。,符号常量是采用宏定义命令定义的常量。定义形式如下: #define 符号常量 常量 例如:#define PI 3.14159 定义PI为一个符号常量,C编译系统在处理程序时会将程序中全部的PI均用3.14159代替。,常量的本质不占据任何存储空间属于指令的一部分,编译后不再更改 常量分为整型常量、实型常量、字符常量、字符串常量和符号常量,课堂小结,2.3.5 符号常量,课程回顾,1、标识符的命名规则?2、C语言有哪些基本数据类型?3、简述语言常量基本类型?,课程回顾,1、下面哪些是合法的整型常量?2、下列哪些是合法
23、的实型常量? 3、下列哪些是合法的字符常量?4、想一想将0123转换成十进制、十六进制数是多少?,如:0.123e-6、e+3、1.2e1.5 、e、1.2e (e前必须有数字e后必须为整字),如:0128(八进制没有数字8)、123、0x12af 、256L、017,如:234、b(退格符)、x12、xaf ,第2章语言的基本知识,2.1 数据类型2.2 标识符和关键字2.3 常量2.4 变量2.5 运算符和表达式2.6 运算符的优先级2.7 不同数据类型数据间的混合运算,2.4.1 变量的概念,变量,在程序运行过程中其值可以被改变的量称为变量。变量在内存中根据其数据类型占据一定的存储单元,
24、用来存入可能变化的值。,(1)变量类型。表明变量用来存放什么类型的数据(2)变量名。每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。(3)变量值。在变量的存储单元中存放的数据。在程序中,通过变量名来引用变量的值。,变量的要素:,变量的定义,C语言中的变量遵循“先定义,后使用”的原则,就是必须先对将要使用的变量进行变量定义,说明变量的数据类型,然后才能使用该变量。变量定义的一般形式为:类型说明符变量名标识符1,变量名标识符2,;,注意:变量要先定义,后使用习惯上,变量名用小写字母。常量名用大写字母。数据类型与变量名之间至少有一个空格,例如:int i,j,k; /定义i,j,k为整型
25、变量 float x1,x2; /定义x1,x2为单精度实型变量 double y1,y2; /定义y1,y2为双精度实型变量 char c1,c2; /定义c1,c2为字符型变量,2.4.1 变量的概念,变量的赋值,方式1:定义变量的同时赋初值(也叫变量初始化)。 格式:数据类型 变量名=初值, 变量名2=初值2; 如: int a=2; char c=x; float x=1.2, y=2.4;方式2:通过一个赋值语句给变量赋初值。 格式 : 变量名=初值;,出现在函数体的执行部分,int a,b=3;,int a,b;b=3;,出现在函数体的声明部分,2.4.1 变量的概念,关于变量以及
26、变量赋初值的几点说明,1、程序中用到的变量必须“先定义(declare),后使用”。2、C语言的关键字不能用作变量名。3、允许同时定义同一数据类型的多个变量,变量间用“,”分隔4、C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。5、定义变量时,给几个变量赋相同的初值, 应写成 : int a=3,b=3,c=3; 不能写成: int a=b=c=3;6、给变量赋值时,正常情况下应给变量赋相同类型的数据。若给变量赋与其类型不同的数据时,需进行类型转换。,2.4.1 变量的概念,变量的基本操作,一个变量可以看成是一个存储数据的容器。有两个对变量的基本操作:一是向变量中存入
27、数据,这个操作被称为“赋值”;二是取得变量当前的值,以便在程序运行时使用,这个操作被称为“取值”。,2.4.1 变量的概念,include void main() int student,age; int if=adrress=1;(使用关键字并且赋初值的格式违法s) float score=90; stadent=2;(变量名打错) Age=20.7;(变量名大小写不区分并且应赋值为整形,数据类型以等号左边为准) printf(%d %d %d %f,if,student,age,score);,本程序中有几处错误?,undeclared identifier,思考,2.4.1 变量的概念,
28、分类及取值范围,表示可以省略,各类型整型变量占用的内存字节数,随系统而异。,2.4.2 变量类型整型变量,整型变量,整型变量,实例分析,#include int main( )int a,b,c,d; /定义a、b、c、d为基本整型变量unsigned u; /定义u为无符号基本整型变量a=10; b=-20; u=5;c=a+u;d=b-u;printf(c=%d,d=%dn,c, d);return 0;,程序运行结果如下:c=15, d=-25,2.4.2 变量类型整型变量,实型变量,分类及取值范围,2.4.2 变量类型实型变量,实例分析,#include int main( )floa
29、t a,b; /定义a、b为单精度浮点型变量double d; /定义d为双精度浮点型变量a=3.56; b=12345.678;d=12345.6789;printf(%f, %f, %fn,a, b, d);return 0;,程序运行结果如下:3.560000, 12345.677734, 12345.678900,2.4.2 变量类型实型变量,字符变量,每个字符变量被分配一个字节的内存空间。由于字符变量在内存中存放的是字符的ASCII码值,所以也可以把它们看成是整型量。字符型数据与整型数据之间的转换比较方便。字符数据可以参与算术运算,也可以与整型量相互赋值,还可以按照整数形式输出。,2
30、.4.2 变量类型字符变量,实例分析,#include int main( )short int n=97; /字符a的ASCII码为97printf(%d, %c, %d, %cn, n, n, n+1, n+1);return 0;,程序运行结果如下:97, a, 98, b,2.4.2 变量类型字符变量,程序说明,字符a的ASCII码为97,变量n以整型数据方式输出时为97,以字符方式输出时为a,如图所示;n+1的结果为98,字符b的ASCII码为98,n+1以整数方式输出时为98,以字符方式输出时为b。,2.4.2 变量类型字符变量,小结:变量,变量:程序运行时可以随时改变定义变量时,
31、给变量分配存储单元(如:一个字节),如宿舍号码对应一个房间,变量名对应一段存储空间。通过变量对内存修改、存取;对变量的存取就是对存储单元的存取。要先定义变量的类型,决定占用的内存空间,才能存取。,小结:变量,课程回顾,1、下面哪些是合法的整型常量?2、下列哪些是合法的实型常量? 3、下列哪些是合法的字符常量?4、想一想将0123转换成十进制、十六进制数是多少?,如:0.123e-6、e+3、1.2e1.5 、e、1.2e,如:0128、123、0x12af 、256L、017,如:234、b、x12、xaf ,1、下面哪些是不合法的整型常量?2、下列哪些是合法的实型常量? 3、下列哪些是合法的
32、字符常量?4、说出下列字符串“Good students”的长度?字节数?以及在内存中的存放方式,A、128、B、0x9afg、C、128L、D、012,课程回顾,A、0.23e-2 B、e3 C、1.2e2.5 D、e,A、97 B、xaf C、t D、”0”,#include main() int a=123; printf(a=%o, a=%#on,a,a); printf(a=%x, a=%#xn,a,a); getch();,【思考】阅读下列程序,写出运行结果?,课程回顾,运行结果,2.5 运算符和表达式,学习目标,熟练掌握语言提供的各种运算符,掌握运算符的优先级和结合性,能够应用运
33、算符构建相应的表达式,2.5 运算符和表达式,基本概念,运算是对数据进行加工的过程,用来表示各种不同运算的符号称为运算符。参加运算的数据称为运算量或操作数。用运算符将运算量连接起来的符合语言语法规则的式子称为运算表达式,简称表达式。,2.5 运算符和表达式,语言的运算符,2.5 运算符和表达式,使用语言的运算符的注意事项,1.运算符的功能,2.运算符的优先级,3.运算符的结合性,4.运算结果及其表示,基本算术运算符,+ - * / %,说明,例: 5/3=1 -5/3=-1,模运算符或求余运算符,算术表达式,用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。,优先级和
34、结合性,先乘除、后加减,有括号先算括号。自左至右,常量、变量、函数等,说明,如果一个运算符两侧的数据类型不同,先自动进行类型转换,使二者具有同一类型,然后进行运算。,两个整数相除的结果为整数,舍去小数部分。当商为负数时,多采用“向零取整”的方法。,求余运算的两侧均应为整数 例:5%3=2,例: a*b/c-1.5+a,5.0/3=?,2.5.1算术运算符及算术表达式,#include void main() printf(10/20=%dn,10/20); printf(10.0/20=%fn,10.0/20); getch();,10/20= 010.0/20=0.500000,程序运行结果
35、:,思考:阅读下列程序,并写出运行结果,Sum,=,num1,+,num2,表达式,2.5.1算术运算符及算术表达式,79,Z = ( X * 2 ) + ( 5 Y ),2.5.1算术运算符及算术表达式,80,案例1:已知三角形的边长a、b、c,求三角形周长的一半。,#include void main() float a,b,c,s; a=3;b=4;c=5; s=1/2 * (a+b+c); printf(s=%8.2f,s);,s= 0.00,程序运行结果:,?,s= 6.00,程序运行结果:,改为:1.0/2 (1/2.0)或 (float)1/2 (1/(float)2),2.5.
36、1算术运算符及算术表达式,自增、自减运算符,作用:自增运算符()使单个变量的值增1; 自减运算符()使单个变量的值减1。,i=i+1,i=i-1,格式: 前置:+i , -i (在使用i之前,使i的值加(减)1) 后置:i+ , i- (在使用i之后,使i的值加(减)1),2.5.1算术运算符及算术表达式,实例分析,/FileName: chap2_6.c#include int main( ) int i,k;i=5; k=+i; /赋值时,i先增1,再将i的值赋给kprintf(k=%d,i=%dn,k,i);i=5; k=-i; /赋值时,i先减1,再将i的值赋给kprintf(k=%d
37、,i=%dn,k,i);i=5; k=i+; /赋值时,先将i的值赋给k,再将i增1printf(k=%d,i=%dn,k,i);i=5; k=i-; /赋值时,先将i的值赋给k,再将i减1printf(k=%d,i=%dn,k,i);return 0;,2.5.1算术运算符及算术表达式,在使用自增自减运算符时,应注意以下几个问题。自增和自减运算符的优先级高于基本算术运算符。自增和自减运算符的操作数只能是变量,不能是常量和表达式。 +和-的结合方向为自右至左,程序运行结果如下:k=6,i=6k=4,i=4k=5,i=6k=5,i=4,#include main() /*主函数*/ int i,
38、j,m,n,k; i=5; j=10;m=+i;n=j+;k=i+j+;printf(i=%dn,j=%dn,m=%dn,n=%dn,k=%dn,i,j,m,n,k);getch();,2.5.1算术运算符及算术表达式,思考,例,i=3;A) c=(i+)+(i+);B) a=i+; b=i+; c=a+b;,? c,i,A) c=6 i=5B) c=7 i=5,两处i值都为3,例,? i,j,i=4 j=4表达式的值:7,自左而右组合,例,i=3; printf(“%d,%d”,i,i+),? i,4, 3,函数参数自右至左求值,2.5.1算术运算符及算术表达式,85,关系运算符, = =
39、!= (6种),优先级,关系表达式,值,举例,赋值 关系( 后2前4 ) c,d=ab+c,1,d=ab+c?,算术、关系、逻辑、赋值、字符。,53 ?,2.5.2关系运算符及关系表达式,2.5.3逻辑运算符及逻辑表达式,逻辑运算符,ANSI C标准规定,参与逻辑运算的操作数可以不是逻辑值,该操作数为非0时表示真,为0时表示假,但逻辑运算的结果只可以取逻辑值(真或假),返回值为1或0。,2.5.3逻辑运算符及逻辑表达式,逻辑运算真值表,运算规则(1) !: 取逻辑值的相反值。(2) &: 参加运算的两个逻辑值都为真时,结果为真(1)。(3) |: 参加运算的两个逻辑值都为假时,结果为假(0)。
40、,逻辑表达式,用逻辑运算符和圆括号将操作数连接起来的、符合C语法规则的式子称为逻辑表达式。具体构成规则如下:单目逻辑运算符 表达式或表达式双目逻辑运算符表达式其中的表达式主要是关系表达式,也可以是字符型或算术表达式、条件表达式、赋值表达式、逗号表达式等。,2.5.3逻辑运算符及逻辑表达式,逻辑运算的短路特性,在逻辑表达式求解时,并不是所有的逻辑运算符都要被执行,当表达式的运算结果能够确定以后,运算过程将立即终止,后面的部分不予执行。这种现象称为逻辑运算符的短路现象,也叫懒惰求值法。具体情况如下。(1)x & y & z 只有x为真(非0)时,才需要判断y的值,只有x和y都为真的情况下才需要判断z的值。(2)x | y | z 只有x为假,才需要判断y的值,只有x和y都为假才需要判断z的值。,2.5.3逻辑运算符及逻辑表达式,案例分析,2.5.3逻辑运算符及逻辑表达式,已知: (a= b=),1,a | b & 0,! a & (53) | b,0,53 & 8 3) & (8 3 | 2,1,优先次序:赋值 | & 关系算术 =、&=、=、|=。,赋值运算符,2.5.4 赋值运算符和赋值表达式,简单赋值运算符:=复合赋值运算符:+=, -=,*=,/=,%= ,