资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,程序设计与语言(),培养目标,课程简介,实验,学时,考核形式,教材,主讲:何洁月,C+,&,Object Oriented Programming,1,培养目标,1.,建立基本的计算机程序设计概念体系和基本的程序设计方法。,2.,理解和掌握,C+,语言的基本语法和语义,初步理解面向对象的思想,初步掌握面向对象程序设计的方法。,3.,逐步提高学生的编程能力和调试程序的能力。,为后面的学习打好基础。,C+,&,Object Oriented Programming,2,课程简介,第章,概述,计算机程序设计语言的发展(一般了解),面向对象的方法(一般了解),面向对象的软件开发(一般了解),信息的表示与存储(理解),程序的开发过程(一般了解),小结,C+,&,Object Oriented Programming,3,课程简介,第章,简单程序设计,语言概述(一般理解),基本数据类型和表达式(掌握),数据的输入与输出(掌握),算法的基本控制结构(掌握),自定义数据类型(掌握),小结,C+,&,Object Oriented Programming,4,课程简介,第章,函数,函数的定义与使用(掌握),内联函数(掌握),带默认形参值的函数(掌握),函数重载(掌握),函数模板(掌握),使用系统函数(掌握),小结,5,课程简介,第章,类与对象,面向对象的思想(理解),面向对象程序设计的基本特点(理解),类和对象(掌握),构造函数和析构函数(掌握),类的组合(掌握),类模板(掌握),面向对象标记(一般了解),小结,C+,&,Object Oriented Programming,6,课程简介,第章,程序的结构,程序的结构(理解),生存期(掌握),数据和函数(掌握),静态成员(掌握),友元(掌握),共享数据的保护(掌握),多文件结构和编译预处理命令(掌握),小结,7,课程简介,第章,数组、指针与字符串,数组(掌握),指针(掌握),动态内存分配(掌握),字符串(掌握),C+,&,Object Oriented Programming,8,实验,实验共分次,每次小时,实验环境为:,visual c+6.0,实验:,visual c+6.0,开发环境应用入门,实验:简单程序设计,实验:函数的应用,实验:类与对象,实验:程序的结构,实验:数组、指针与字符串,9,教材,教材:,C+,语言程序设计,C+,语言程序设计习题与实验指导,C+,&,Object Oriented Programming,10,考核,总评成绩,=,平时作业,+,上机实验,+,期末笔试成绩(闭卷)期末上机成绩(闭卷),平时作业占,10%,平时上机实验占,10%,期末笔试成绩(闭卷),占,60%,期末上机成绩(闭卷),占,20%,11,第一章 绪论,计算机程序设计语言的发展,面向对象的方法,面向对象的软件开发,信息的表示与存储,程序的开发过程,12,1.1,计算机语言的发展,计算机的工作是用程序来控制的,程序是指令的集合。,指令是计算机可以识别的命令。,计算机程序,13,机器语言,由计算机硬件系统可以识别的二进制指令组成的语言称为机器语言。,计算机发展的初期,软件工程师们只能用机器语言来编写程序。这一阶段,在人类的自然语言和计算机编程语言之间存在着巨大的鸿沟。,例如,1011 1111 1101,缺点:难懂,不易修改,移植性差,14,汇编语言,汇编语言将机器指令映射为一些可以被人读懂的助记符,如,ADD,、,SUB,等。,此时编程语言与人类自然语言间的鸿沟略有缩小,但仍与人类的思维相差甚远。因为它的抽象层次太低,程序员需要考虑大量的机器细节。,例如,ADD CX,,,DX,将,DX,的内容加进,CX,。不能立即执行,需要汇编,变成目标程序。,15,高级语言,高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定涵义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具体事物。,例如,if y,实数的加法,-,复数的加法,例动物叫,37,面向对象的软件工程,面向对象的软件工程是面向对象方法在软件工程领域的全面应用。它包括,:,面向对象的分析(,OOA,),面向对象的设计(,OOD,),面向对象的编程(,OOP,),面向对象的测试(,OOT,),面向对象的软件维护(,OOSM,),面向对象的软件开发,38,问题域,需求分析,总体设计,详细设计,编程,测试,计算机,自然语言,编程语言,分析与设计的鸿沟,问题域,OOA,OOD,OOP,OOT,自然语言,面向对象的编程语言,计算机,传统的软件工程方法,面向对象的软件工程方法,自然语言,分析与设计的鸿沟,编程语言,自然语言,面向对象的编程语言,39,系统分析,系统分析阶段应该扼要精确地抽象出系统必须做什么,但是不关心如何去实现。,面向对象的系统分析,直接用问题域中客观存在的事物建立模型中的对象,对单个事物及事物之间的关系,都保留他们的原貌,不做转换,也不打破原有界限而重新组合,因此能够很好地映射客观事物。,40,设计,针对系统的一个具体实现运用面向对象的方法。其中包括两方面的工作:,把,OOA,模型直接搬到,OOD,,作为,OOD,的一部分,针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的部分。,41,编程,OOP,工作就是用一种面向对象的编程语言把,OOD,模型中的每个成分书写出来,是面向对象的软件开发最终落实的重要阶段。,42,测试,测试的任务是发现软件中的错误。,在面向对象的软件测试中继续运用面向对象的概念与原则来组织测试,以对象的类作为基本测试单位,可以更准确的发现程序错误并提高测试效率。,43,维护,将软件交付使用后,工作并没有完结,还要根据软件的运行情况和用户的需求,不断改进系统。,使用面向对象的方法开发的软件,其程序与问题域是一致的,因此,在维护阶段运用面向对象的方法可以大大提高软件维护的效率。,44,信息的表示和存储,信息的分类,计算机的数字系统,程序设计中常用的数制,不同进位计数制间的转换,信息的存储单位,二进制数的编码表示,小数的表示方法,非数值信息的表示,45,信息的分类,指令,控制信息,控制字,信息,定点数,数值信息,数据信息 浮点数,字符数据,非数值信息,逻辑数据,46,计算机的数字系统,计算机采用的是二进制数字系统。,基本符号:,0,、,1,进位原则:逢二进一,优点:,易于物理实现,二进制数运算简单,机器可靠性高,通用性强,缺点:对人来说可读性差,47,程序设计中常用的数制,48,不同进位计数制间的转换,R,进制十进制,各位数字与它的权相乘,其积相加。,例如,:,(11111111.11),2,=1*2,7,+1*2,6,+1*2,5,+1*2,4,+1*2,3,+1*2,2,+1*2,1,+1*2,0,+1*2,-1,+1*2,-2,=(255.75),10,(3506.2),8,=3*8,3,+5*8,2,+0*8,1,+6*8,0,+2*8,-1,=(1862.25),10,(0.2A),16,=2*16,-1,+10*16,-2,=(0.1640625),10,49,不同进位计数制间的转换,十进制,R,进,制,十进制整数转换成,R,进制的整数,“除,R,取余”法,例如:,2 68,余 数,2 34 0,低位,2 17 0,2 8 1,2 4 0,2 2 0,2 1 0,0 1,高位,所以,68,10,1000100,2,50,不同进位计数制间的转换,十进制,R,进制,十进制小数转换成,R,进制小数,“乘,R,取整”法,例如:,高位,0.3125,2=0.625,0.625,2=1.25,0.25,2=0.5,0.5,2=1.0,所以,0.3125,10,=0.0101,2,51,不同进位计数制间的转换,二、八、十六进制的相互转换,每位八进制数相当于三位二进制数,每位十六进制数相当于四位二进制数,(1011010.10),2,=(,001,011,010,.,100,),2,=(132.4),8,(1011010.10),2,=(,0101,1010,.,1000,),2,=(5A.8),16,(F7),16,(,1111,0111,),2,(11110111),2,52,信息的存储单位,位,(bit),:度量数据的最小单位,表示一位二进制信息。,字节,(byte),:由八位二进制数字组成,(1 byte=8 bit),。,K,字节,1 K=1024 byte,M,字节,1 M=1024 K,G,字节,1 G=1024 M,53,二进制数的编码表示,:,原码,符号绝对值表示,的编码,例如:,X=+0101011 X,原,=0 0101011,X=-0101011 X,原,=1 0101011,符号位,缺点:,零的表示不唯一:,+0,原,=000.0 -0,原,=100.0,进行四则运算时,符号位需单独处理,且运算规则复杂。,54,二进制数的编码表示,:,反码,正数的反码与原码表示相同。,负数的反码与原码有如下关系:,符号位相同,(,仍用,1,表示,),,其余各位取反,(0,变,1,,,1,变,0),。例如:,X=-1100110 X,原,=11100110 X,反,=10011001X=+0000000 X,原,=00000000 X,反,=00000000,反码中零的表示也不唯一,X=-0000000 X,原,=10000000 X,反,=11111111,反码只是求补码的中间码,55,二进制数的编码表示,:,补码,模数:,n,位整数,(,包括一位符号位,),,则它的模数为,2,n,。,n,位小数,小数点前一位为符号位,则它的模数为,2,。,补数:,一个数减去另一个数,或者说一个数加上一个负数,等于第一个数加上第二个数的补数。例:,8+(-2)=8+10(mod 12),一个二进制负数可用其模数与真值做加法,(,模减去该数的绝对值,),求得其补码。,56,二进制数的编码表示,:,补码,计算机中的补码表示法,负数的补码由该数反码的末位加,1,求得,对补码再求补即得到原码,补码运算规则,p14,符号位可作为数值参加运算,减法运算可转换为加法运算:,加上一个负数等于加上该数的补码,补码运算的结果仍为补码,运算结果溢出:,负数之和得正数,或正数之和得负数,57,小数的表示方法,计算机中通常采用浮点方式表示小数一个数,N,用浮点形式表示可以写成:,N=M2,E,E,表示,2,的幂,称为数,N,的阶码。阶码确定了数,N,的小数点的位置,其位数反映了该浮点数所表示的数的范围。,M,表示数,N,的全部有效数字,称为数,N,的尾数。其位数反映了数据的精度。,p15,58,非数值信息的表示,西文字符:,ASCII,码:用,7,位二进制数表示一个字符,最多可以表示,2,7,=128,个字符,EBCDIC,码:,用,8,位二进制数表示一个字符,最多可以表示,2,8,=256,个字符,汉字:,应用较为广泛的是,国家标准信息交换用汉字编码,(GB2312-80,标准,),,简称国标码。是二字节码,用二个七位二进制数编码表示一个汉字。,59,程序的开发过程,源程序、目标程序、翻译程序,三种不同类型的翻译程序:,汇编程序、编译程序、解释程序,程序的开发过程,编辑、编译、连接、运行调试,60,基本术语,源程序:,用源语言写的,有待翻译的程序,目标程序:,也称为,结果程序,,是源程序通过翻译程序加工以后所生成的程序。,翻译程序:,是指一个把源程序翻译成等价的目标程序的程序。,61,基本术语,三种不同类型的翻译程序,汇编程序:,其任务是把用汇编语言写成的源程序,翻译成机器语言形式的目标程序。,编译程序:,若源程序是用高级程序设计语言所写,经翻译程序加工生成目标程序,那么,该翻译程序就称为,编译程序,。,62,基本术语,三种不同类型的翻译程序,解释程序:,这也是一种翻译程序,同样是将高级语言源程序翻译成机器指令。它与编译程序不同点就在于:它是边翻译边执行的,即输入一句、翻译一句、执行一句,直至将整个源程序翻译并执行完毕。,63,程序的开发过程,编辑,将源程序输入到计算机中,生成后缀为,cpp,的磁盘文件。,编译,将程序的源代码转换为机器语言代码。,连接,将多个源程序文件以及库中的某些文件连在一起,生成一个后缀为,exe,的可执行文件。,运行调试,64,程序开发过程:,开始,编辑源程序,编译,编译错,连接,连接错,运行,运行错,完成,是,是,是,65,作业,复习第一章,预习第二章,作业:、,、,66,第二章,C+,简单程序设计,67,本章主要内容,C+,语言概述,基本数据类型和表达式,数据的输入与输出,算法的基本控制结构,自定义数据类型,68,2.1.1 C+,语言的产生,C+,是从,C,语言发展演变而来的,:,C,语言的开发史源于高级语言和,UNIX,操作系统的发展要求。,早期的系统程序设计,使用的是汇编语言,其优点:,(1),能体现计算机硬件指令级的特性,表达能力强;,(2),运行效率高。,其缺点:可读性,可移植性及描述问题的性能不如高级语言。,这样很自然有如下想法:能否用具有足够表达能力的高级语言,来进行系统软件的设计呢?,Bell,实验室做了这一尝试。,1970,:在,PDP-11/20,机上实现了,B,语言,并用它编写了,UNIX,系统的实用程序。,B-BCPL-CPL-ALGOL 60,2.1 C+,语言概述,69,在,B,语言,基础上,改进其缺陷,发展出了,C,语言,,其设计目标:,(1),保持,BCPL,和,B,的精练性及接近硬件的特点,(2),恢复这些语言失去的通用性,1972,:第一个,C,编译投入使用,1973,:,UNIX,用,C,改写,加入多道程序功能,发生质变,现在,,UNIX,已得到广泛推广,成为公认的第一标准的操作系统,随着,UNIX,的进一步开发,,C,也交织在一起被迅速推广。,70,1983,:对,C,扩充,发展为,C,。,C+,语言的标准化工作从,1989,年开始,于,1994,年制定了,ANSI C+,标准草案。以后又经过不断完善,成为目前的,C+,。,71,2.1.2 C+,的特点,全面兼容,C,它保持了,C,的简洁、高效和接近汇编语言等特点,对,C,的类型系统进行了改革和扩充,C+,也支持面向过程的程序设计,不是一个纯正的面向对象的语言,支持面向对象的方法,72,2.1.3 C+,程序实例,例,2-1,/this is a simplest program.,#include,void main(void),coutHello!n;,cout,词,语句,函数,程序。,字符集是构成语言的基本元素,大小写的英文字母:,A,Z,,,a,z,数字字符:,0,9,特殊字符:空格,!#%&*_(,下划线,)+=-,/;.,(),75,词法记号,词法记号是最小的词法单位,、关键字,C+,预定义的单词。,是指,C+,中有特殊含义的字,是不能重 新定义的。程序员不可用之作为自己定义的变量或函数的名字。,类别,关键字个数,举例,ANSI C 32 char,,,for,等,ANSI C+61,(增加,29,个),class,,,public,等,BC/AC,扩展了一些,asm,等,、标识符 程序员声明的单词,它命名程序正文中的,一些实体。,76,标识符的构成规则,以大写字母、小写字母或下划线,(_),开始。,可以由以大写字母、小写字母、下划线,(_),或数字,09,组成。,大写字母和小写字母代表不同的标识符。,例,Rectangle,、,Draw,、,_line,.,、文字 在程序中直接使用符号表示的数据,包括数字、字符、字符串和布尔文字,、操作符 用于实现各种运算的符号。,、分隔符 用于分隔各个词法记号或程序正文:(),:;,、空白:空格、制表符(,TAB,键产生的字符)、换行符(,Enter,键所产生的字符)和注释的总称。,程序书写自由,/,、,/*/,77,2.2,基本数据类型和表达式,2.2.1,基本数据类型,是程序命令操作的对象,。,是指将数据根据表达形式的不同而,划分的类别。,数据:,数据类型:,78,C+,的数据类型一般分为如下几种:,基本数据类型,非基本数据类型,(用户定义数据类型,),整型,字符型,实型(浮点型),逻辑型(布尔型),数组,指针,空类型,结构,联合,枚举,类,数据类型,79,数据类型修饰符:,short,long,unsigned,例:,无符号整型,unsigned int,无符号长整型,unsigned long,无符号短整型,unsigned short,signed,80,类型,所占位数,数的范围,int 16 -32768 32767,short int 16 -32768 32767,long int 32 -2147483648 2147483647,unsigned int 16 0 65535,unsigned short 16 0 65535,unsigned long 32 0 4294967295,至于它们之间的差异,请看下表,(p,),:,(16,位计算机),81,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.31456789,23,+,数符,小数部分,指数,82,例:,cout“size of int is“size of(int)endl;,C+,强类型语言,要求程序设计者在使用数据之前对数据的类型进行声明。,注意:,(,1,)整型和实型的几种不同方式,(,2,)注意各种数据类型的取值范围。,(,3,)注意,C,无布尔类型。,C,语言在表达逻辑运算的结果时,用,整数,0,代表逻辑,“,假,”,,用非,0,的整数值,(,如,1),表示逻辑,“,真,”,。,C+,中增添了布尔类型,bool,,但并非每个,C+,编译器都支持,。,用,size of,(数据类型)可以确定数据类型的字节长度,83,数据类型,常量与变量,#include,void main(void),const int PRICE=30;,int num,total;,float v,r,h;,num=10;,total=num*PRICE;,couttotal endl;,r=2.5;,h=3.2;,v=3.14159*r*r*h;,coutv=A,c=Z)c=c+a-A;,将字符变量,c,从大写字母转为小写字母。,例,2,:,0,-,0,=0,1-0=1,2-0=2,如果,c,是一数字字符,则,c-0,就是它对应数字的数值,3,、,字符常量,90,非图形字符,(,如回车、制表符等,),及,“,等字符,因它们有特殊作用,所以表示这些字符本身时,应:,p,。,n,表换行,无论是不可显示字符还是一般字符,都可用,8,进制数、,16,进制数表示,ddd,:一,至三位,8,进制数。,xhh:,一,至二位,16,进制数。,例如:,001,表示码值为,(01),8,的,ASCII,字符。,A,也可用,101,表示,0,为空白符,即,NULL,,码值为,0,,在,C,语言中是字符串的结束标志。,(,与,0,和空格符不同,),例:,cout“x07operatingtsystemn”;,operating system,转义字符,91,例,:,int a=b;,char c=97;,coutaendl;,coutcendl;,输出:,98,a,字符数据的使用方法,字符数据和整型数据之间可以运算。,字符数据与整型数据可以互相赋值。,92,4,、,字符串常量,字符串型常量,是用双引号括起来的一个或多个字符。,例如,将,1,用双引号括起来,此时“,1,”,代表的是一个字符串型常量,,与字符型常量,1,也是有区别的。,C+,规定以字符,0,作为字符串结束标志。如,一个字符串“,HELLO,”,,在内存中以“,0,”,为结尾。,“,0”,在输出时不作显示,只用来表示字符串的结束。,字符串型常量,“,HELLO,”,H E L L O 0,注意,“,P”,与,P,不同。前者为字符串,在机内存储形式,为,P 0,,而,P,就是一常数,P,。,93,define PI 3.14159,main(),int r;,float L,S;,r=10;,L=2*PI*r;,S=PI*r*r;,printf(“,周长,=%fn”,L);,printf(“,面积,=%fn”,S);,这是一个知道圆半径,r,,求圆周长,L,、圆面积,S,的简单,C,程序。其中的,PI,就是符号常量,它的值在一开始就被预处理命令“,#define,”,定义为实数,3.14159,了,故程序在运行和编译时会自动用,“,3.14159,”,来替代,PI,。,符号常量比起一般常量来,不但使用方便,实际值容易修改,而且更形象化,便于记忆。,符号常量,94,数据类型,布尔型数据,布尔型变量的说明:例:,bool flag;,布尔型数据的取值:只有,false,和,true,两个值,95,*,C+,中:,const float pi=3.14159;,*,常量定义中初始化的值可以是一个常量表达式:,const int size=100*sizeof(int);,const int number=max(15,23);,(错),注意:,#define,与,const,的区别,96,2.,3,变量,变量是什么,变量,程序在运行过程中,其值会发生改变的量。,变量:变量值,23,变量名,length,变量类型,int,97,C+,规定必须以字母或下划线打头,后面跟字母、数字或下划线,(,如:,a3,Z_5e,_D7d,等,),并且不能与保留字、函数名、类名等,C+,专用名相同,(,如,char,for,int,等,),。,注意:,(a),长度:早期的,C,编译程序只认前,8,个字符。,VC,允许,256,个字符。但一般不要超过,31,个字符为宜,1,、命名,98,(b),约定:,变量名、函数名、和数据类型名等用小写字母,自定义的类型名(如类)、,符号常量名及宏,用大写字母;,下划线开头的名字常为系统程序,(,库函数用,),,用户一般不用。,(c),要,有意义:如用,Sum,表示,“,求和变量,”,,不要用,aaa,,,A1,,,B12,之类名字。,例:,my_car,小写,my_Car,骆驼,iMyCar,匈牙利标识法(,WINDOWS,标准命名法,),99,下面我们看一段关于变量的程序:,程序中的,num1,num2,和,sum,都是变量。它们的值在程序的运行过程中都发生了变化。变量定义后,各变量的初值都是不确定的。,num1,的第一个确切值是,10,,当再次给,num1,赋值时,,num1,的值又变成,-5,。其他两个变量的变化情况类似。,#include,void main(),int num1,num2,sum;,num1=10;num2=25;,sum=num1+num2;,cout“sum=“sumendl;,num1=-5;num2=num1+3;,sum=num1+num2;,cout“sum=“sumendl;,100,变量:需要定义,说明其存储属性和数据类型,。,存储属性,类型区分符,变量名,赋初值,;,static,extern,register,auto,int,char,float,double,例:,static int nward=0,nkayword;,同一语句中,不能混合定义不同类型的变量。,2,、,变量的定义,101,变量的存储类型,auto,存储类,属于一时性存储,其存储空间可以被若干变量多次覆盖使用。,register,存储类,存放在通用寄存器中。,extern,存储类,在所有函数和程序段中都可引用。,static,存储类,在内存中是以固定地址存放的,在整个程序运行期间都有效。,102,(1)double area,radius=23;,(2)double area,radius;,radius=23;,3,、变量赋值与初始化,103,算术运算符与算术表达式,表达式:,一个常量或标识对象的标识符是一个最简单的表达式,其值是常量或对象的值,一个表达式的值可以用来参与其它操作,即用作其它运算符的操作数,这就形成了更复杂的表达式,包含在括号中的表达式仍是一个表达式,其类型和值于未加括号时的表达式相同,算术表达式:,由算术运算符、操作数和括号构成的表达式称为算术表达式,a+b+(c-b)/2+5,Page,104,104,、基本算术运算符,+-*/%,(取余),(,若整数相除,结果取整,),优先级与结合性,先乘除,后加减,同级自左至右,105,(,1,),/,整除,5/2=2 5.0/2.0=2.5,若,/,的两操作数都为整数,则为整除:,例,int i=15;,float f ;,f=i/10;,结果为:,f=1,如果将第三条语句改为,f=(float)i/10;,或,f=i/10.0;,则结果为:,f=1.5,106,在,C+,语言中,表达式(,7/3+1,),+5/6,的值是(,)。,A,),2B,),3C,),4 D,)不能确定,B,107,(,余的符号与被除数相同,不允许对浮点数操作,),3%4=3 4%4=0,例,#include,void main(),int n;,n=40%5;cout 40%5:n endl;/,(,0,),n=40%7;cout 40%7:n endl;/,(,5,),n=40%-7;cout 40%-7:n endl;/,(,5,),n=-40%7;cout -40%7:n endl;/,(,-5,),n=-40%-7;cout -40%-7:n endl;/,(,-5,),(,2.,),%,取余,108,(),取作为表达式的值,然后,(),先;然后取作为表达式的值,()取;,(),取,例:,int a=3;,int b=+a;,couta,“,“,bendl;,int c=a+;,couta,“,“,cendl;,4,5 4,、增量和减量,,109,.,赋值运算,=,赋值运算符用于将一个数据传给一个变量。,例如:,int x;x=5;,将值,5,传给变量,x,。其中,=,号即赋值运算符。,A:,(,1,)双目运算符,从右到左,d=a=b,(,2,)赋值操作是一个表达式,每个表达式在求值后都有一个确定的值,其值为赋值号左边表达式的值,例:,cout(x=5)=,&=,=,|=,例:,a+=3,等价于,a=a+3 x*=y+8,等价于,x=x*(y+8),112,赋值运算符和赋值表达式,赋值表达式举例,a=5,表达式值为,5,a=b=c=5,表达式值为,5,,,a,b,c,均为,5,a=5+(c=6),表达式值为,11,,,a,为,11,,,c,为,6,a=(b=4)+(c=6),表达式值为,10,,,a,为,10,,,b,为,4,,,c,为,6,a=(b=10)/(c=2),表达式值为,5,,,a,为,5,,,b,为,10,,,c,为,2,a+=a-=a*a,相当于,:a=a+(a=a-a*a),Page,113,113,例:,x=6;,x+=x-=x*x;,若,x,为整型变量,则上述语句执行后,x,的值是,_(4)_,。,A.36 B.-60C.60D.-24,B,114,、逗号运算和逗号表达式,格式:,表达式,1,,表达式,2,求解顺序及结果:,先求解,1,,再求解,2,,最终结果为表达式,2,的值,例,a=3*5,a*4,最终结果为,60,例,2,int a,b,c;,d=(a=1,b=a+2,c=b+3);,coutd=,=!=,优先级相同(高)优先级相同(低),关系表达式是一种最简单的逻辑表达式,其结果类型为,bool,,值只能为,true,或,false,。,例如:,ab,,,cb)&(xy),其结果类型为,bool,,值只能为,true,或,false,。,117,a,!a,true,false,false,true,a,b,a&b,1,1,1,1,0,0,0,1,0,0,0,0,a,b,a|b,1,1,1,1,0,1,0,1,1,0,0,0,118,优先级:,!;,*,/%,;,+-,;,=;,=!=;,&,|,119,注意:,(,1,)比较运算符,与,(),“,”,;,(),“,”,;,(,2,)不等于运算符,(,!,),(!),120,()逻辑非,(!(),例!,c,若,,(!,c,)(),!(),(),若写成从左到右 (衡为,1,),121,例:,ay|ab-!c,(ay)|(a(b-(!c),若,x,y,z,的初值均为,1,则执行表达式,w=+x|+y&+z,后,x,y,z,的值分别为,_,。,A,),x=1,y=1,z=2 B,),x=2,y=2,z=2,C,),x=2,y=1,z=2 D,),x=2,y=1,z=1 (D),122,、条件运算符与条件表达式,一般形式:,表达式,1,?表达式,2,:表达式,3,表达式,1,必须是,bool,类型,执行顺序:,先求解,表达式,1,,,若表达式,1,的值为,true,,则求解,表达式,2,,表达式,2,的值为最终结果,若表达式,1,的值为,false,,则求解,表达式,3,,,表达式,3,的值为最终结果,例,x=ab?a:b,该例是,IFELSE,语句的一个替代,if(ab)?a:b+1,(2),条件运算符的结合性为,“,自右向左,”,例,ab?a:cd?c:d,即,ab?a:(cd?c:d),(3),条件表达式与一般,if,的语句的关系,coutb?a:b;,()表达式,2,、,3,的类型可以不同,条件表达式的最终类型为,2,和,3,中较高的类型。,124,、,sizeof,操作符,语法形式,sizeof(,类型名,),或,sizeof(,表达式,),结果值:“类型名”所指定的类型或“表达式”的结果类型所占的字节数。,例:,coutsizeof(double)endl;,125,、位运算,按位与(,&,),运算规则,将两个运算量的每一个位进行逻辑,与,操作,举例:计算,3&5,3,:,0 0 0 0 0 0 1 1,5,:,(&)0 0 0 0 0 1 0 1,3&5:0 0 0 0 0 0 0 1,用途:,将某一位置,0,,其它位不变。例如:将,char,型变量,a,的最低位置,0:a=a&0376,;,取指定位。例如:有,char c;int a;,取出,a,的低字节,置于,c,中:,c=a,126,位运算,按位或(,|,),运算规则,将两个运算量的每一个位进行逻辑,或,操作,举例:计算,3|5,3,:,0 0 0 0 0 0 1 1,5,:,(|)0 0 0 0 0 1 0 1,3|5:0 0 0 0 0 1 1 1,用途:,将某些位置,1,,其它位不变。例如:将,int,型变量,a,的低字节置,1,:,a=a|0 xff,;,127,位运算,按位异或(,),运算规则,两个操作数进行异或:若对应位,相同,,则结果该位为,0,,若对应位,不同,,则结果该位为,1,,,举例:计算,071052,071:0 0 1 1 1 0 0 1,052,:,()0 0 1 0 1 0 1 0,071052:0 0 0 1 0 0 1 1,128,位运算,按位异或(,),用途:,使特定位翻转(与,0,异或保持原值,与,1,异或取反),例如:要使,01111010,低四位翻转:,0 1 1 1 1 0 1 0,(),0 0 0 0 1 1 1 1,0 1 1 1 0 1 0 1,129,位运算,取反,(),单目运算符:对一个二进制数按位取反。,例:,025,:,0000000000010101,025,:,1111111111101010,130,位运算,移位,左移运算(,),右移后,低位:舍弃 高位:无符号数:补,0,有符号数:补,“符号位”,131,例,1,:,char a=-8;,coutint(a)2)endl;,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,132,例,2,:,20)t=a;,不可写为:,if(a=b;)0)t=a;,138,这是,C,中新加的非常简单易用的输入、输出方式,,C+,中没有专门的输入输出语句,是用,I/O,流类来实现。,在程序的开头增加一行:,#include,1),用插入操作符,“,”,向标准输出流,cout,中插入字符。,向标准输出设备(显示器)输出,例:,int x;,cout“x=“”,从标准输入流,cin,中抽取字符,从标准输入设备(键盘)输入,例:,int x;,cinx;,int a,b;,cinab;,),使用控制符,有时缺省输出格式不能满足要求,这时可以用控制符控制输出的格式。,P,表,2-,。,在程序的开头增加一行:,#include,140,例:,#include,#include,void main(),coutsetw(5)setprecision(3)3.1415endl;,3.14,141,2.5,算法的基本控制结构,问题的提出,:(1)-1 (x0),(2),统计任意一个人群的平均身高,算法,算法的基本控制结构:,顺序结构,分支结构,循环结构,程序流程图,142,if (,表达式,),语句,例:,if (xy)couty)coutx;,else couty;,if (,表达式,1),语句,1else if (,表达式,2),语句,2else if (,表达式,3),语句,3 else,语句,n,2.4.1 if,语句,三种形式,143,(条件表达式),语句;,或(条件表达式),语句;,或(条件表达式);空语句作中的语句,语句,;,0,表达式,语句,1,144,例(判输入是否合理),#include,void main(),unsigned int age;,cout age;,if (age10),cout The age may be wrong;,145,#include,void main(),int year;,cout year;,/think about the sequence of the logical expression,if (year%4=0&year%100!=0|year%400=0),cout The year is leap year;,else,cout=0),if(x50),cout“x is okn”;,else,cout“x is not okn”;,If,语句的嵌套二义性,因为,if,可以,嵌套,,所有在嵌套时有时会出,歧义,,例如上例中,,else,是与第一个,if,配对,,还是与第二个,if,配对?,这种时候,系统就认为,:else,与最近的一个,if,相对应,148,二义性,:,(1)if,(),if,(),cout,endl,;,/,输出能被整除,能被整除,else,cout,endl,;,/,输出能被整除,不能被整除,(2)if,(),if,(),cout,endl,;,/,输出能被整除,能被整除,else,cout,endl;/,输出不能被整除不管是否被整除,149,例,2-3,输入两个整数,比较两个数的大小。,150,#include,void main(),int x,y;,coutxy;,if(x!=y),if(xy),coutyendl;,else,coutxyendl;,else,coutx=yendl;,151,运行结果,1,:,Enter x and y:5 8,xy,152,#include,void main(),int x,y,z;,cinxyz;,int max=x;,If(zy),if(zx),max=z;,else,if(yx),max=y;,couty,zx,y,max=z,max=y,y,n,n,yx,max=x,coutxyz;,int max=x;,If(ymax),max=y;,if(zmax),max=z;,co
展开阅读全文