《第2章表达式优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第2章表达式优秀PPT.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第2章表达式现在学习的是第1页,共19页表达式的类型n n 算术表达式算术表达式算术表达式算术表达式n n 关系关系关系关系/逻辑表达式逻辑表达式逻辑表达式逻辑表达式n n 赋值表达式赋值表达式赋值表达式赋值表达式n n n n 左值表达式:左值表达式:左值表达式:左值表达式:表达式的结果有明确的内存地址,表达式的结果有明确的内存地址,表达式的结果有明确的内存地址,表达式的结果有明确的内存地址,可以出现在赋值操作符的左边,如一个变量。可以出现在赋值操作符的左边,如一个变量。可以出现在赋值操作符的左边,如一个变量。可以出现在赋值操作符的左边,如一个变量。带副作用的操作符带副作用的操作符带副作用的
2、操作符带副作用的操作符要求操作数必须是左值表达式要求操作数必须是左值表达式要求操作数必须是左值表达式要求操作数必须是左值表达式如如如如 :a+b+=2;/oka+b+=2;/ok 3+(a+b)+3=x;/error 3+(a+b)+3=x;/error包含什么类型的操作符现在学习的是第2页,共19页表达式的值n n每个表达式有一个值每个表达式有一个值n n赋值表达式的值是赋值操作符最左边的操作数的值赋值表达式的值是赋值操作符最左边的操作数的值若若a=b=c=5 a=b=c=5 则则a a、b b、c c和表达式的值都是和表达式的值都是5 5;n n关系关系/逻辑表达式的计算结果为逻辑值逻辑表
3、达式的计算结果为逻辑值n n表达式的值可以:表达式的值可以:参加运算参加运算 通过赋值运算存储在某个变量中通过赋值运算存储在某个变量中 直接输出直接输出现在学习的是第3页,共19页 操作符与操作数之间可以用空格符分隔,如操作符与操作数之间可以用空格符分隔,如a a+b b 对于连续多个操作符,可以用空格符分隔,如对于连续多个操作符,可以用空格符分隔,如a a-b b也可以在先运算的子表达式上加圆括号,如也可以在先运算的子表达式上加圆括号,如a a-(-(-b b)否则可能会有歧义,如:否则可能会有歧义,如:a-ba-b可以有可以有(a-)-b(a-)-b和和a-(-b)a-(-b)两种解释,两
4、种解释,多数编译系统按多数编译系统按贪婪准则贪婪准则确定操作符的功能,确定操作符的功能,即即a a-b b是是(a a-)-)-b b不是不是a-(-b)a-(-b)注意注意c+c+的表达式与数学表达式的区别的表达式与数学表达式的区别 数学中的数学中的 abc abc 应表示成应表示成 (ab)&(bc)(ab)&(bc)vc vc环境下,过长的表达式可以分行书写,用环境下,过长的表达式可以分行书写,用 连接连接表达式的书写尽可能多地自左而右将若干个字符组成一尽可能多地自左而右将若干个字符组成一个操作符个操作符现在学习的是第4页,共19页表达式的副作用问题表达式的副作用问题当一个表达式中包含带
5、副作用的操作符时,该表达式的结果有时是不确定的。例如:int x=1;(x+1)*(+x)由于C+没有规定操作符+和+谁先计算,因此,不同的编译程序可能会给出不同的实现:先计算+,则结果为:4 先计算+,则结果为:6 因此,应尽量避免把带副作用的操作符用在复杂的表达式中,最好把它们作为单独的操作来用。现在学习的是第5页,共19页表达式的输出表达式的输出C+C+提供了多种把计算结果输出到显示器的途径,最提供了多种把计算结果输出到显示器的途径,最典型的途径是利用典型的途径是利用C+C+标准库中定义的对象标准库中定义的对象coutcout和插入操作符和插入操作符“”来实现,例如:来实现,例如:#in
6、clude#include using namespace std;using namespace std;.cout a+b*ccout a+b*c;cout a;cout a;cout b;cout b;cout endl;cout endl;或或cout a+b*c a b endl;cout a+b*c a b endl;输出格式的调整参见第10章现在学习的是第6页,共19页表达式中的类型转换n常量、变量、表达式、函数是程序的基本操作对象常量、变量、表达式、函数是程序的基本操作对象(操作数操作数),它们都显式或隐式与一种数据类型相联系。它们都显式或隐式与一种数据类型相联系。n两个两个不
7、同数据类型不同数据类型的操作数同时参加运算时,会出现类型的操作数同时参加运算时,会出现类型转换,即将不同的数据类型转换成相同的数据类型,再转换,即将不同的数据类型转换成相同的数据类型,再运算。运算。如 int a=10;float b=a+3.4;n这些类型转换是暂时性的这些类型转换是暂时性的,利用临时存储空间,利用临时存储空间,比如被转换的若是变量比如被转换的若是变量,那么那么变量的值并没有被转换变量的值并没有被转换,只,只是参加当前运算的数值被是参加当前运算的数值被“看作看作”另一种类型的数值而另一种类型的数值而已。已。现在学习的是第7页,共19页n有些类型转换是系统自动进行的,有些类型转
8、换是系统自动进行的,即由编译程序按照某种预定的规则进行自动转换,即由编译程序按照某种预定的规则进行自动转换,这就是这就是隐式类型转换隐式类型转换。如 int a=10;float b=a+3.4;有些类型转换是程序员主动进行的,有些类型转换是程序员主动进行的,即用类型转换操作符明确地指出类型转换,即用类型转换操作符明确地指出类型转换,这就是这就是显式类型转换显式类型转换。如 int a=-10;unsigned int b=3;int c=a+(int)b;现在学习的是第8页,共19页隐式类型转换n隐式类型转换的基本原则是:隐式类型转换的基本原则是:精度低精度低精度高精度高;(参加运算的两个操
9、作数中,精度低的操作数类型将被转换成精度高的那个操作数的类型。)高高 long doubledoublefloatunsigned longlongunsigned低低 int short,char,bool现在学习的是第9页,共19页整型提升转换规则(integral promotions)n对于char、signed char、unsigned char、short int、unsigned short int类型,如果int型能够表示它们的值,则这些类型转换成int,否则,这些类型转换成unsigned int。nbool型转换成int型,false为0;true为1。nwchar_t和
10、枚举类型转换成下列类型中第一个能表示其所有值的类型:int、unsigned int、long int、unsigned long int。现在学习的是第10页,共19页逻辑类型转换规则:非非bool类型的数据参加逻辑运算时,类型的数据参加逻辑运算时,要转换成逻辑类型,转换规则:要转换成逻辑类型,转换规则:零转成零转成 false非零非零转成转成true现在学习的是第11页,共19页隐式类型转换的问题隐式类型转换的问题n隐式转换有时不能满足要求。隐式转换有时不能满足要求。例如:例如:(出错)(出错)int i=-10;unsigned int j=3;i+j将得到错误的结果:将得到错误的结果:
11、4294967289又如:又如:(出错)(出错)int i=-10;unsigned int j=3;ij将得到错误的结果:将得到错误的结果:false再例如:(溢出)再例如:(溢出)int i=2147483647;/int类型中最大的正整数类型中最大的正整数int j=10;i+j将得到错误的结果:将得到错误的结果:-2147483639现在学习的是第12页,共19页显式类型转换(强制类型转换)n类型转换操作符类型转换操作符()()n显示类型转换格式显示类型转换格式:()或或()例如:例如:int i=-10;unsigned int j=3;i+(int)j将得到正确的结果:将得到正确的
12、结果:-7又如:又如:int i=-10;unsigned int j=3;i(int)j将得到正确的结果:将得到正确的结果:true再如:再如:int i=2147483647,j=10;(double)i+j将得到正确的结果:将得到正确的结果:2147483657.0 现在学习的是第13页,共19页#include using namespace std;int main()float x=2.8,y=3.7,z;int a=5,b=2,c;c=(int)x+y;z=(float)a/b;cout c“z;return 0;实型实型 去掉小数部分去掉小数部分 整型整型整型整型 不变不变 实
13、型实型现在学习的是第14页,共19页类型转换后的数据精度n隐式类型转换和显式类型转换中,隐式类型转换和显式类型转换中,有些是不丢失精度,有些丢失精度。有些是不丢失精度,有些丢失精度。隐式(自动)类型转换:隐式(自动)类型转换:算术类型操作数精度低算术类型操作数精度低精度高(不丢失精度)精度高(不丢失精度)赋值表达式的值赋值表达式的值左值类型(可能丢失精度)左值类型(可能丢失精度)显式(强制)类型转换:显式(强制)类型转换:(可能丢失精度)(可能丢失精度)int a=10;float b=a+3.4;int x=4.3;int a=10;unsigned int b=(unsigned int)
14、a+3;int x=10%(int)3.4;现在学习的是第15页,共19页#include using namespace std;int main()double a=3.3,b=1.1;int i=a/b;cout i endl;return 0;double#include using namespace std;int main()double a=3.3,b=1.1;cout a/b endl;return 0;现在学习的是第16页,共19页表达式中类型转换的次序n含有多个操作符的表达式,类型转换过程是逐含有多个操作符的表达式,类型转换过程是逐步进行的,即:步进行的,即:逐个操作数转
15、换逐个操作数转换如如:int a=3;int b=6;int c=a/b*2.5;结果:结果:1.25?1?0?现在学习的是第17页,共19页C语言的输入方法:scanf()n nC+C+C+C+提供了兼容提供了兼容C C C C的利用库函数把各种类型的数据以多的利用库函数把各种类型的数据以多种格式输入给变量的方式种格式输入给变量的方式。#include /C#include /C#include /C#include /C标准库函数标准库函数int main()int main()int main()int main()int i;int i;int i;int i;double d;dou
16、ble d;double d;double d;scanf(%d%lf,&i,&d);scanf(%d%lf,&i,&d);scanf(%d%lf,&i,&d);scanf(%d%lf,&i,&d);return 0;return 0;return 0;return 0;注意:格式控制字符串的局限注意:格式控制字符串的局限注意:格式控制字符串的局限注意:格式控制字符串的局限 scanf(“scanf(“i=i=%d%d,d=,d=%lf”,&i,&d);%lf”,&i,&d);在输入时,白色字符也要正确输在输入时,白色字符也要正确输入,否则不能读入数据。入,否则不能读入数据。现在学习的是第18
17、页,共19页C语言的输出方法:printf()n nC+C+C+C+提供了兼容提供了兼容C C C C的利用库函数把各种类型的数据以多种的利用库函数把各种类型的数据以多种格式输出到显示器的方式。格式输出到显示器的方式。#include#include#include#include int main()int main()int main()int main()printf(%d,3);printf(%d,3);printf(%d,3);printf(%d,3);printf(%f,3.1415);/%f printf(%f,3.1415);/%f printf(%f,3.1415);/%f
18、printf(%f,3.1415);/%f默认保留默认保留6 6 6 6位小数位小数 printf(%.2f,3.1415);printf(%.2f,3.1415);printf(%.2f,3.1415);printf(%.2f,3.1415);printf(%c,$);printf(%c,$);printf(%c,$);printf(%c,$);printf(n);printf(n);printf(n);printf(n);/输出一个换行符输出一个换行符 printf(%d,%.2f,%cn,3,3.1415,$);printf(%d,%.2f,%cn,3,3.1415,$);printf(%d,%.2f,%cn,3,3.1415,$);printf(%d,%.2f,%cn,3,3.1415,$);return 0;return 0;return 0;return 0;现在学习的是第19页,共19页