C语言第二讲-数据的存储与运算.ppt
C语言第二章第二章 数据类型及表达式数据类型及表达式本章主要介绍了C的数据类型,常量的类型及表示方法,变量的定义及赋值以及一些简单的运算符和表达式。2.1C语言的基本数据类型l数据在计算机中是以二进制形式存储的l计算机中为什么要采用二进制呢?二进制在电器元件中容易实现。二进制只有0和1两个数,在电学中具有两种稳定状态,并可以用0和1表示的东西很多。例如,电压的高和低、电容器的充电和放电、脉冲的有与无、晶体管的导通与截止等等。2.1C语言的基本数据类型十进制数十进制数二进制数二进制数十进制数十进制数二进制数二进制数0061101171112108100031191001410010101051012.1C语言的基本数据类型l位、字节和地址位、字节和地址u位(bit):每个二极管元件称为一个“二进制位”,是存储信息的最小单位。u字节(byte):一个存储器包含多个“二进制位”。一般将8个“二进制位”组成一组,称为“字节”。u地址:存放数据的存储器中的存储单元,存储单元以字节为单位编号。2.1C语言的基本数据类型2.1C语言的基本数据类型l不同类型数据的存储方式不同类型数据的存储方式u整数的存储方式 整型数以二进制形式存放在存储单元中;例如:用一个字节存储整数15;(15)10-(00001111)2 整型数具有两种表示方式:有符号数和无符号数;无符号数:只表示正整数,无符号位。有符号数:可表示正、负数,最高位为符号位;正数采用原码方式存储;负数采用补码方式存储。2.1C语言的基本数据类型l不同类型数据的存储方式不同类型数据的存储方式u实数的存储方式 实数采用指数形式存储;标准化指数形式:数值部分是一个小数,小数点前的数字是零,小数点后的第一位数字不是零。规范化指数形式:在尾数中,小数点左边只有一个非零数字。如:123.456可以表示为:0.123 456103 123 45610-3 123 45.610-2 123 4.5610-1 123.45610-02.1C语言的基本数据类型l不同类型数据的存储方式不同类型数据的存储方式u字符的存储方式 字符包括字母(如:A,a,X,x等)专用字符(如:$、%、#等)计算机并不是将字符本身放到存储单元中,而是将字符的代码存储到相应的存储单元中。ASCII码(American National Standard Code for Information Interchange)。例如:“A”:65(ASCII)。010000012.2 常量和变量常量常量(常数常数):数据数据 12,-3(整型)4.6 -1.23(实型)a(字符)符号常量:用标识符表示的常量数据符号常量:用标识符表示的常量数据 :PI:EPS通常用大写字母表示符号常量变量C语言中的量语言中的量l常量常量(常数常数):数据:数据l符号常量符号常量:用标识符表示的常量数据:用标识符表示的常量数据 在程序运行过程中,在程序运行过程中,其值不能被改变其值不能被改变l变量变量:存放数据的内存单元:存放数据的内存单元 在程序的运行过程中,在程序的运行过程中,其值可以改变其值可以改变变量的定义l变量定义的一般形式:变量定义的一般形式:类型名类型名 变量表;变量表;变量名:大小写字母,见名知义变量名:大小写字母,见名知义 类型名:类型名:整型整型int 实型实型float double 字符字符char变量的定义lint i,j,k;(定义定义i,j,k为整型变量为整型变量)lchar c;(定义定义c为字符型变量为字符型变量)lfloat x,y;ldouble area,length;l变量名代表内存中的一个存储单元变量名代表内存中的一个存储单元l变量类型决定了存储单元的大小变量类型决定了存储单元的大小变量的使用l变量:先定义,后使用变量:先定义,后使用 先赋值,后引用先赋值,后引用#include void main()int x,y;x=3;y=x*x;printf(“%d”,y);变量的赋值l赋初值:在定义变量时对它赋值赋初值:在定义变量时对它赋值 int a=5,b=3;l赋值表达式:赋值表达式:int a,b;a=5;b=3;l输入函数:输入函数:scanf(“%d%d”,&a,&b);变量赋初值变量赋初值l在定义变量的同时设置初值,也称初始化。在定义变量的同时设置初值,也称初始化。如:如:int a=3;float f=3.56;char c=a;int i,j,k=5;int x=1,y=1,z=1;int x=y=z=1;标识符命名规则标识符命名规则 标识符标识符标识符标识符用来标识变量名、符号常量用来标识变量名、符号常量用来标识变量名、符号常量用来标识变量名、符号常量名、函数名、数组名、文件名等的有名、函数名、数组名、文件名等的有名、函数名、数组名、文件名等的有名、函数名、数组名、文件名等的有效字符序列。效字符序列。效字符序列。效字符序列。1 1、组成字符:字母、数字、下划线。、组成字符:字母、数字、下划线。、组成字符:字母、数字、下划线。、组成字符:字母、数字、下划线。2 2、以字母或下划线开头。、以字母或下划线开头。、以字母或下划线开头。、以字母或下划线开头。3 3、字符长度不超过、字符长度不超过、字符长度不超过、字符长度不超过8 8个字符。个字符。个字符。个字符。4 4、标示符区分大小写。、标示符区分大小写。、标示符区分大小写。、标示符区分大小写。5 5、保留字不能作为标识符使用。、保留字不能作为标识符使用。、保留字不能作为标识符使用。、保留字不能作为标识符使用。如如如如 y3 _imax ELSEy3 _imax ELSE 7y int7y int(合法)(合法)(合法)(合法)(不合法)(不合法)(不合法)(不合法)保留字保留字n n保留字(关键字):其为保留字(关键字):其为保留字(关键字):其为保留字(关键字):其为C C语言中具语言中具语言中具语言中具有特定含义,专门用作语言特定成分有特定含义,专门用作语言特定成分有特定含义,专门用作语言特定成分有特定含义,专门用作语言特定成分的一类标识符。的一类标识符。的一类标识符。的一类标识符。n n如:如:main int char float definemain int char float definen n保留字分类:保留字分类:l l类型说明符,例如:类型说明符,例如:intint;l l语句定义符,例如:语句定义符,例如:if if;l l预处理命令字,例如:预处理命令字,例如:includeinclude;1 1、所有保留字都有固定含义,不能用、所有保留字都有固定含义,不能用、所有保留字都有固定含义,不能用、所有保留字都有固定含义,不能用作其它。作其它。作其它。作其它。2 2、所有保留字都必须小写。、所有保留字都必须小写。、所有保留字都必须小写。、所有保留字都必须小写。整型数据的运算与分析l鸡兔同笼问题鸡兔同笼问题 在一个笼子里同时养着一些鸡和兔,你想了解有多少只鸡和多少只兔,若已知鸡和兔的总头数是16和总脚数是40,计算鸡和兔的数量。整型数据的运算与分析l鸡兔同笼问题鸡兔同笼问题#includevoid main()int h,f,x,y;/*定义整型变量 h,f,x,y*/h=16;/*对整型变量h赋值,使h的值等于16*/f=40;/*对整型变量f赋值,使f的值等于40*/y=(f-2*h)/2;/*对表达式(f-2*h)/2进行运算,把结 果赋给y*/x=h-y;/*对表达式h-y进行运算,把结果赋给x*/printf(“x=%d,y=%dn”,x,y);/*输出鸡和兔的个数*/整型常量与整型变量一、整型常量(整数)一、整型常量(整数)三种表现形式三种表现形式十进制十进制整数:正、负号,整数:正、负号,0-9,首位不是,首位不是0 例:例:123,-456,0。八进制八进制整数:正、负号,整数:正、负号,0-7,首位是首位是0 例:例:010,0123十六进制十六进制整数:正、负号,整数:正、负号,0-9,a-f,A-F,前缀是前缀是0 x或或0X 例:例:0 x10,0X123123=1111011(B)二进制)二进制 =173(O)八进制)八进制 =7B(X)十六进制)十六进制 int i=0173;int j=0 x7b;int k=123;例:例:16 020 0 x10整型变量如有以下定义及赋值语句如有以下定义及赋值语句 int ai,bi,ci,di=0;ai=1;说明说明1为一十进制整数为一十进制整数 bi=-027;说明说明-027为一八进制整数为一八进制整数 ci=0 x12;说明说明0 x12为一十六进制整数为一十六进制整数整型变量整型变量二、整型变量二、整型变量1、整型数据在内存中的存放形式:、整型数据在内存中的存放形式:以以二进制补码二进制补码表示:表示:00000000000010101111111111110110+10-10整型变量整型变量2、整型变量的分类、整型变量的分类整型变量根据其数值范围,可将变量定义为三类:整型变量根据其数值范围,可将变量定义为三类:基本整型(基本整型(int)2字节字节 短整型(短整型(short int)2字节字节 长整型(长整型(long int)4字节字节无符号数:以无符号数:以unsigned int 或或unsigned说明。说明。有符号数:以有符号数:以 signed int 或或 int说明。说明。整型变量的值是整数,其取值范围有限整型变量的值是整数,其取值范围有限int型取值范围型取值范围 -3276832767整型变量整型变量3、整型变量的定义、整型变量的定义 int a,b;long num,i,j;unsigned short c,d;整型数据的输入输出printf(格式控制,输出参数格式控制,输出参数1,输出参数,输出参数n);scanf(格式控制,输出参数格式控制,输出参数1,输出参数,输出参数n);格式控制说明格式控制说明%d:以有符号十进制形式输入,输出整数以有符号十进制形式输入,输出整数%u:以无符号十进制形式输入,输出整数以无符号十进制形式输入,输出整数%o:以八进制形式输入、输出整数以八进制形式输入、输出整数%x:以十六进制形式输入、输出整数以十六进制形式输入、输出整数例:各种进制整数的输出#include void main()printf(“%d,%o,%xn”,10,10,10);printf(“%d,%d,%dn”,10,010,0 x10);printf(“%d,%xn”,012,012);运行结果为:运行结果为:10,12,a10,8,1610,a实型数据的运算与分析型数据的运算与分析实型数据的运算与分析型数据的运算与分析n n分期付款的计算#include/*#include/*用输入输出函数时用用输入输出函数时用stdio.hstdio.h头文件头文件*/*/#include/*#include/*用数学函数时必须用用数学函数时必须用math.hmath.h头文件头文件*/*/void main()void main()int d,p;/*int d,p;/*定义定义d d和和p p为整型变量为整型变量*/*/float r,m;/*float r,m;/*定义定义r r和和mm为实型变量为实型变量*/*/d=324 500;/*d=324 500;/*给给d d赋值赋值*/*/p=3245;/*p=3245;/*给给p p赋值赋值*/*/r=0.008;/*r=0.008;/*给给r r赋值赋值*/*/m=(log10(p)-log10(p-d*r)/log10(1+r);/*m=(log10(p)-log10(p-d*r)/log10(1+r);/*求求mm的值的值*/*/printf(“month=%fn”,m);/*printf(“month=%fn”,m);/*输出输出mm的值的值*/*/printf(“total=%fn”,m*p);/*printf(“total=%fn”,m*p);/*计算并输出总的还款额计算并输出总的还款额*/*/实型数据的运算与分析型数据的运算与分析n n实数又称浮点数。有两种表示形式:(1)、十进制小数形式。如 123.0 .123 0.123 0.0等等(2)、指数形式 如 123e3 实型变量的表现形式实型变量的表现形式n n常用系统中,一个实型数据在内存中占4个字节(个字节(32位)位)。n n浮点型数据是按照指数形式指数形式存储的。即在存储时,把指数部分和小数部分分别存放。小数和指数部分各占有的位数有由编译系统决定。实型变量的分类实型变量的分类n n实型变量分为三类:单精度实型变量(单精度实型变量(floatfloat型);型);双精度实型变量(双精度实型变量(doubledouble型);型);长双精度实型变量(长双精度实型变量(long doublelong double型)型)n nsizeofsizeof(sizeof(类型名类型名)或或sizeof(sizeof(变量名变量名)例如:例如:printf(“%d”,sizeof(long double);printf(“%d”,sizeof(long double);浮点型数据的舍入误差浮点型数据的舍入误差n n由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的,在有效位之外的数字将被舍去。n n通常float型有7位有效数字。n n而double型有16位有效数字。实型数据的输入输出实型数据的输入输出n nprintf(printf(格式控制,输出参数格式控制,输出参数格式控制,输出参数格式控制,输出参数n);n);n nscanf(scanf(格式控制,输出参数格式控制,输出参数格式控制,输出参数格式控制,输出参数n);n);n n格式控制说明格式控制说明格式控制说明格式控制说明%f%f:以小数形式输入输出实数以小数形式输入输出实数以小数形式输入输出实数以小数形式输入输出实数%e%e:以指数输入输出实数以指数输入输出实数以指数输入输出实数以指数输入输出实数2.4 字符型数据的运算n例:逐个输出英文字母例:逐个输出英文字母C,H,I,N,A。然后按。然后按反序输出,反序输出,A,N,I,H,C。#includevoid main()char a=C,b=H,c=I,d=N,e=A;printf(“%c%c%c%cn”,a,b,c,d,e);printf(“%c%c%c%cn”,e,d,c,b,a);2.4 字符型数据的运算一、字符常量一、字符常量字符常量字符常量用用单引号单引号括起来的括起来的一个字符一个字符。如如 a b?$转义字符转义字符用用 开头的字符序列。开头的字符序列。如如 n表示换行(光标移到下一行开头)表示换行(光标移到下一行开头)t表示跳到下一个表示跳到下一个tab的位置的位置 r表示回车(光标移到本行开头)表示回车(光标移到本行开头)表示反斜杠字符表示反斜杠字符字符常量 表示单引号字符表示单引号字符 ”表示双引号字符表示双引号字符ddd 1-3位位8进制数所代表的字符(进制数所代表的字符(ASCII)xhh 1-2位位16进制数所代表的字符(进制数所代表的字符(ASCII)eg1:char c1,c2;c1=A;c2=101;c3=x41;eg2:printf(“A=101=x41”);例 转义字符的使用#include void main()printf(“ab ct derftgn”);printf(“htibbj k”);f gdeh j kabc def gdeh ih j k字符变量二、字符变量二、字符变量定义形式如下:定义形式如下:char c1,c2,c3;c1=a;c2=b;c3=101字符变量在内存中以一个字节存放。字符变量在内存中以一个字节存放。字符数据的存储1、将一个字符常量放到一个字符变量中,并、将一个字符常量放到一个字符变量中,并不是将该字符本身放到内存单元中,而是不是将该字符本身放到内存单元中,而是将该字符的相应的将该字符的相应的ASCII码码放到存储单元中。放到存储单元中。实际上也就是以实际上也就是以二进制的形式二进制的形式存放的。存放的。例 向字符变量赋以整数向字符变量赋以整数#include void main()char c1,c2;c1=a;c2=b;printf(“%c,%cn”,c1,c2);c1=97;c2=98;printf(“%c,%cn”,c1,c2);a,ba,b字符数据的存储2、字符数据与整型数据可以相互赋值。、字符数据与整型数据可以相互赋值。3、字符数据可以以字符形式输出,也可以以、字符数据可以以字符形式输出,也可以以整型数形式输出。整型数形式输出。例题#include void main()int i;char c;c=a;i=97;printf(“%c,%dn”,c,c);printf(“%c,%dn”,i,i);a,97a,97例 大小写字母的转换大小写字母的转换#include void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“%c,%c”,c1,c2);A,B字符数据的存储l字符数据在内存中占字符数据在内存中占一个字节一个字节,即只能存,即只能存放放0255范围内的整数。范围内的整数。注意注意:turbo C把字符处理成带符号的整数。把字符处理成带符号的整数。即认为其取值范围为即认为其取值范围为-128127。l如果使用如果使用ASCII码为码为0127间的字符,用间的字符,用%d输出时,会输出一个输出时,会输出一个正正整数;如果使用整数;如果使用ASCII码为码为128255间的字符,用间的字符,用%d输出输出时,会输出一个时,会输出一个负负整数。整数。例题2EG#include void main()char c;c=376;printf(“%c,%d”,c,c);,-2字符型数据的输入输出printf(格式控制,输出参数格式控制,输出参数1,输出参数,输出参数n);scanf(格式控制,输出参数格式控制,输出参数1,输出参数,输出参数n);格式控制说明格式控制说明%c:输入输出一个字符输入输出一个字符字符串常量三、字符串常量三、字符串常量l字符串常量字符串常量是由一对是由一对双双引号括起来的引号括起来的字符字符序列序列。如如“How do you do.”“CHINA”“a”C规定:在存储字符串常量时,由系统在字规定:在存储字符串常量时,由系统在字符串的末尾自动加一个符串的末尾自动加一个0作为字符串作为字符串的结束标志。的结束标志。如:如:“CHINA”在内存中存储为:在内存中存储为:C HIN A 0字符常量与字符串常量的区别(1)定定界界符符不不同同:字字符符常常量量使使用用单单引引号号,而而字符串常量使用双引号;字符串常量使用双引号;(2)长长度度不不同同:字字符符常常量量的的长长度度固固定定为为1,而字符串常量的长度是某个整数;而字符串常量的长度是某个整数;(3)存存储储要要求求不不同同:字字符符常常量量存存储储的的是是字字符符的的ASCII码码值值,而而字字符符串串常常量量,除除了了要要存存储储有有效效的的字字符符外外,还还要要存存储储一一个个结结束束标标志志0。字符串数据的输入输出printf(格式控制,输出参数格式控制,输出参数1,输出参数,输出参数n);scanf(格式控制,输出参数格式控制,输出参数1,输出参数,输出参数n);格式控制说明格式控制说明%s:输入输出一个字符串输入输出一个字符串例题3EG#include void main()char c20;scanf(“%s”,c);printf(“%sn”,c);各类数值型数据间的混合运算整型、实型整型、实型(包括单、双精度包括单、双精度)和字符型数据和字符型数据可以混合运算。可以混合运算。如:如:10+a+1.5-8765.1234*b 是合法的。是合法的。在运算时,不同类型的数据要先转换成同在运算时,不同类型的数据要先转换成同一类型,然后进行运算。一类型,然后进行运算。doublefloatlongunsignedintchar,short高低2.5 符号常量符号常量2.5 符号常量符号常量符号常量的作用符号常量的作用 改进:改进:pow(r,n)函数;)函数;如何替代如何替代3.1415926?方法一:方法一:double PI=3.1415926;问题:如果误操作:问题:如果误操作:PI=9.8;会造成错;会造成错误;误;方法二:采用符号常量方法二:采用符号常量#define PI 3.1415926 然后用然后用 PI代替所有出现的代替所有出现的3.14159262.6 算术运算符和算术表达式算术运算符和算术表达式l在语言中,除控制语句和输入输出函数外,在语言中,除控制语句和输入输出函数外,其它所有基本操作都作为运算符处理。其它所有基本操作都作为运算符处理。1.算术运算符算术运算符 7.逗号运算符逗号运算符 2.关系运算符关系运算符 8.指针运算符指针运算符 3.逻辑运算符逻辑运算符 9.求字节数运算符求字节数运算符 4.位运算符位运算符 10.强制类型转换运算符强制类型转换运算符 5.赋值运算符赋值运算符 11.分量运算符分量运算符 6.条件运算符条件运算符 12.下标运算符下标运算符 13.其他其他 算术运算符和算术表达式算术运算符和算术表达式 1.五种基本算术运算符五种基本算术运算符+(加法或正值运算符)如(加法或正值运算符)如2+3 +6 -(减法或负值运算符)如(减法或负值运算符)如2-3 -6 *(乘法运算符)如(乘法运算符)如3*4 2*x /(除法运算符)如(除法运算符)如5/3 (x+y)/(a+b)%(模运算符或求余运算符)如(模运算符或求余运算符)如 7%4的值为的值为3注意:两个整数相除时,其值为整数。如注意:两个整数相除时,其值为整数。如5/3值为值为1;除数、被除数中有一个为负值时,结果除数、被除数中有一个为负值时,结果“向零取整向零取整”。如。如-5/3值值-1;除数、被除数中有一个为实数时,结果为除数、被除数中有一个为实数时,结果为double型。型。%两侧均要为整型数据。两侧均要为整型数据。-7%4 7%-4 -7%4 的值为多少。的值为多少。-3 3 -3算术运算符和算术表达式算术运算符和算术表达式 2.算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性(1)用算术运算符和括号将运算对象(也叫)用算术运算符和括号将运算对象(也叫操作数)连接起来的,符合操作数)连接起来的,符合C语言语法规则语言语法规则的式子,称为的式子,称为算术表达式算术表达式。运算对象包括常量、变量、函数等。运算对象包括常量、变量、函数等。(2)运算符的优先级与结合性)运算符的优先级与结合性 优先级:优先级:先先*/%后后+结合性:结合性:左结合性左结合性。强制类型转换运算符强制类型转换运算符3、强制类型转换运算符、强制类型转换运算符l可以用一个强制类型转换运算符将一个表达可以用一个强制类型转换运算符将一个表达式转换成所需类型。式转换成所需类型。l一般形式一般形式:(类型名)(表达式):(类型名)(表达式)l如如(double)a;l (int)(x+y);l (float)(5%3)例 强制类型转换强制类型转换#include void main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);X=3.600000,i=3自增、自减运算符自增、自减运算符4、自增、自减运算符、自增、自减运算符l+i i 表示在使用表示在使用i之前,先使之前,先使i的值加的值加1或减或减1。li+i 表示在使用表示在使用i之后,使之后,使i的值加的值加1或减或减1。例题4EG#include void 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 与与j=i+自增、自减运算符自增、自减运算符l注意注意:(1)自增、自减运算符只能用于变量,而不)自增、自减运算符只能用于变量,而不能用于常量或表达式。能用于常量或表达式。如:如:5+,-(a+b)是不合法的。)是不合法的。(2)+和和的的优先级高于算术运算符优先级高于算术运算符,且结合性是且结合性是右结合性右结合性。如:如:-i+相当于相当于-(i+)赋值运算符与赋值表达式赋值运算符与赋值表达式一、赋值运算符一、赋值运算符“=”用法:用法:变量变量=表达式;表达式;作用:将表达式的值赋给变量(常量、变量是作用:将表达式的值赋给变量(常量、变量是 表达式的特例)。表达式的特例)。如:如:a=5;ave=(a+b)/10;注意:与数学中的等式不同!注意:与数学中的等式不同!二、赋值结果与类型转换二、赋值结果与类型转换1、实型数据赋给整型变量时,舍弃实数的小数、实型数据赋给整型变量时,舍弃实数的小数部分。部分。赋值运算符与赋值表达式赋值运算符与赋值表达式2、整型数据赋给单、双精度变量时,数值、整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。不变,但以浮点数形式存储到变量中。3、将一个、将一个double型数据赋给型数据赋给float变量时,变量时,截取其前面截取其前面7位有效数字。位有效数字。4、长度相同的有符号与无符号整型数间,、长度相同的有符号与无符号整型数间,原样赋值(但数值有时会有变化)。原样赋值(但数值有时会有变化)。例题5EG#include void main()int a=3,b;float c=2.3,d,e;double f=123.45678987656;b=c;d=a;e=f;printf(“b=%d,d=%f,e=%f”,b,d,e);b=2,d=3.000000,e=123.456787例6 有符号数传送给无符号变量#include void main()unsigned a;int b=-1;a=b;printf(“%u”,a);00 00 00 00 00 00 00 01111 11 11 11 11 11 11 10-1+111 11 11 11 11 11 11 11-165535赋值运算与赋值表达式赋值运算与赋值表达式5、char、int、long等类型的转换等类型的转换1)“短短”数据赋给数据赋给“长长”变量变量符号扩展符号扩展:若最高位为:若最高位为1(负数),则变(负数),则变量高字节位补量高字节位补1;反之,补;反之,补0;2)“长长”数据赋给数据赋给“短短”变量变量只将数据的低字节位原封不动地送到变量只将数据的低字节位原封不动地送到变量中(数据有可能有差错)。中(数据有可能有差错)。例题例题6EG#include void main()char c;int i;c=43;i=c;printf(“i=%dn”,i);c=376;i=c;printf(“i=%dn”,i);00 10 10 11c=43i00 10 10 1100 00 00 0011 11 11 10c=376i11 11 11 1011 11 11 11i=43i=-2赋值运算符与赋值表达式赋值运算符与赋值表达式三、复合的赋值运算符三、复合的赋值运算符在赋值符在赋值符“=”之前加上其它运算符,构之前加上其它运算符,构成复合赋值运算符。成复合赋值运算符。+=-=*=/=%=如:如:a+=3 等价于等价于 a=a+3 x*=y+8 等价于等价于 x=x*(y+8)x%=3 等价于等价于 x=x%3赋值运算符与赋值表达式赋值运算符与赋值表达式四、赋值表达式四、赋值表达式由赋值运算符将一个变量和一个表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为连接起来的式子称为“赋值表达式赋值表达式”。形式:形式:变量变量=表达式表达式如:如:a=5 a=(b=5)计算过程:计算赋值运算符右侧计算过程:计算赋值运算符右侧“表达式表达式”的值;的值;将计算结果赋给左侧的变量;将计算结果赋给左侧的变量;(右结合性右结合性)赋值表达式的值就是被赋值的变量的值。赋值表达式的值就是被赋值的变量的值。如:如:a=b=c=5;a=5+(c=6);a=(b=4)+(c+6)a+=a-=a*a逗号运算符和逗号表达式逗号运算符和逗号表达式形式:形式:表达式表达式1,表达式,表达式2,表达式,表达式i作用:用于连接表达式作用:用于连接表达式如:如:3+5,6+8计算过程计算过程:求解表达式:求解表达式1;再求解表达式再求解表达式2,表达式,表达式i;整个逗号表达式的值是表达式整个逗号表达式的值是表达式i的值。的值。一个逗号表达式又可与另一个表达式组成一个新一个逗号表达式又可与另一个表达式组成一个新的逗号表达式。逗号运算优先级低于赋值运算。的逗号表达式。逗号运算优先级低于赋值运算。如如:(a=3*5,a*4),a+5条件判断如果你在家,我去拜访你;如果考试不及格,要补考;如果遇到红灯,要停车等待;周末我们去郊游;70岁以上的老人,入公园免票;如果ab,输出a。条件判断的结果是一个逻辑值:“是”或者“否”。在计算机语言中用“真”或者“假”表示。关系运算符和关系表达式关系运算符和关系表达式关系运算符和关系表达式关系运算符和关系表达式1、关系运算:对两个量进行、关系运算:对两个量进行“比较运算比较运算”。2、关系运算符:、关系运算符:、=、=、!=3、优先级:、优先级:、=(同级)(同级)=、!=(同级)(同级)算术运算符、关系运算符、赋值运算符算术运算符、关系运算符、赋值运算符如:如:ca+b 等同于等同于 c(a+b)a=bc 等同于等同于 a=(bc)a=bc 等同于等同于 a=(bc)4、结合性:左结合、结合性:左结合高高低低高高 低低关系运算符和关系表达式关系运算符和关系表达式5、关系表达式:用关系运算符将两个表达式(算术、关系表达式:用关系运算符将两个表达式(算术或赋值表达式)连接起来的有意义的式子。或赋值表达式)连接起来的有意义的式子。如:如:x!=0 a=A a*a+b*ba+b a=bc a=bc条件运算符和条件表达式条件运算符和条件表达式形式:形式:?:作用:用于判断选择操作作用:用于判断选择操作如:如:ab?a:b计算过程计算过程:求运算:求运算”表达式表达式1”;若值为真,则整个条件表达;若值为真,则整个条件表达式的值为式的值为“表达式表达式2”的值,反之,则为的值,反之,则为“表达式表达式3”的值。的值。如如:a=2,b=3;c=ab?a:b;a=b?a:b条件运算优先级高于赋值运算,低于关系和算术运算。条件运算优先级高于赋值运算,低于关系和算术运算。条件运算的结合方向是右结合。条件运算的结合方向是右结合。如:如:x=10;x0?1:xb?4.0:2;条件运算符和条件表达式条件运算符和条件表达式例:从键盘中输入字符,如果字符是英文小写字母,则将例:从键盘中输入字符,如果字符是英文小写字母,则将其转换成大写后输出,否则输出原字符。其转换成大写后输出,否则输出原字符。提示:大写字母的提示:大写字母的ASCII码比对应小写字母的小码比对应小写字母的小32;Char c;scanf(“%c”,&c);(c=a&cb&bc 等同于等同于(ab)&(bc)a=b|x=y 等同于等同于(a=b)|(x=y)!a|ab 等同于等同于(!a)|(ab)53&2|!83&2|(!8)3&2|(!8)3)&2|(!8)3)&2)|(!8)2x1+a或或yb (x=2|x=0&x!=0 x2|x-2x=1+a|y=b逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式若若a=1,b=0,c=-2.5,试写出下列表达式的值试写出下列表达式的值 a*b|c !b&c 0|a 1&!a/c位运算符与位运算表达式位运算符与位运算表达式位逻辑运算符位逻辑运算符 按位与运算符(&):参与运算的两个数转换为二进制,将各对应的二进位相与;用于对某些位进行清0操作。例如:7&15=0111&1111=0111=7;按位或运算符(|):参与运算的两个数转换为二进制,将各对应的二进位相或;用于对某些位进行置1操作。例如:7|15=0111|1111=1111=15;按位非运算():对参与运算的数转换为二进制,将各对应的二进位按位求反。例如:7=(0111)=1000=8;按位异或运算符():对参与运算的数转换为二进制,将各对应的二进位按位相异或。可用于:字节取反,交换两个整形变量的值,而不需要第三个量的传递;例如:715=01111111=1000=8;位运算符与位运算表达式位运算符与位运算表达式移位运算符移位运算符 左移位运算符():n 把左边表达式以二进制形式给出的值全部向左移动n位,左边移出的位丢弃,右边空出的位补0。其中,“表达式”是进行移位的对象,“n”是移位的位数。每左移1位相当于乘2操作。例如:73=00000111):n 把左边表达式以二进制形式给出的值全部向右移动n位,右边移出的位丢弃,左边空出的位补0。其中,“表达式”是进行移位的对象,“n”是移位的位数。每右移1位相当于除2操作。例如:73=000001113=00000000=0;