《东华理工学学院计算机科学技术系本科生课程面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《东华理工学学院计算机科学技术系本科生课程面向对象程序设计.ppt(118页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、东华理工学学院计算机科学技术系本科生课程面向对象程序设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望教学大纲教学大纲中央电大大纲1C+程序设计语言教程 钱能 编著 清华大学出版社2C程序设计 谭浩强 编著 清华大学出版社3C语言程序设计 郑莉 董渊 傅仕星 编 清华大学出版社4Visual C+6技术内幕 美David J.Kruglinski 等著 希望图书创作室译 北京希望电子出版社参考书 与面向对象理论的相关参考书目与面向对象理论的相关参考书目与面向对象
2、理论的相关参考书目与面向对象理论的相关参考书目1.1.邵邵维维忠忠,杨杨芙芙清清.面面向向对对象象的的系系统统分分析析.北北京京:清清华华大大学学出出版版社社,19981998年年1212月月2.2.冯冯玉玉林林,黄黄涛涛,倪倪彬彬.对对象象技技术术导导论论.北北京京:科科学学出出版版社社,19981998年年3 3月月*3.3.邵维忠邵维忠,廖钢城廖钢城,苏渭珍苏渭珍(译译).).面向对象的设计面向对象的设计.北京北京:北京大学北京大学出版社,出版社,19941994年年1111月月4.汪成为,郑小军,彭木昌.面向对象的分析、设计及应用.北京:国防工业出版社,1992年9月5.殷人昆,田金兰
3、,马晓勤(译).实用面向对象软件工程教程.北京:电子工业出版社,1998年6月6.6.蔡蔡希希尧尧,陈陈平平.面面向向对对象象技技术术.西西安安:西西安安电电子子科科技技大大学学出出版版社社,19931993年年1111月月7.徐家福,王志坚,翟成祥.对象式程序设计语言.南京:南京大学出版社,1992年12月8.邵维忠,廖钢城,李力(译).面向对象的分析.北京:北京大学出版社,1992年2月9.BoochG.Object-OrientedAnalysisandDesignWithApplications,2nded.RedwoodCity,California:enjamin/Cummings
4、PublishingCompany,199410.CoadPandYourdonE.Object-OrientedAnalysis,2nded.EnglewoodCliffs,NJ:Prentice-Hall,199111.Coad P and Yourdon E.Object-Oriented Design.EnglewoodCliffs,NJ:Prentice-Hall,199112.JacobsonI.Object-OrientedSoftwareEngineering,AUseCaseDrivenApproach.NewYork:Addison-WesleyPublishingComp
5、any,199213.Rumbaugh J,Blaha M,Premerlani W et al.Object-Oriented Modeling and Design.Englewood Cliffs,NJ:Prentice-Hall,19911.1.邵维忠邵维忠,杨芙清杨芙清.面向对象的面向对象的系统分析系统分析.北京北京:清华大学出版清华大学出版社社,1998,1998年年1212月月(建议购买,本(建议购买,本系)系)3.3.邵维忠邵维忠,廖钢城廖钢城,苏渭珍苏渭珍(译译).).面向对象的设计面向对象的设计.北京北京:北京北京大学出版社,大学出版社,19941994年年1111月月(可
6、到(可到系图书室借阅,教材科有售)系图书室借阅,教材科有售)6.6.蔡希尧蔡希尧,陈平陈平.面向对象技术面向对象技术.西安西安:西安电子科技大学出版社西安电子科技大学出版社,19931993年年1111月月(提供印页)(提供印页)2.2.冯玉林,黄涛,倪彬冯玉林,黄涛,倪彬.对象技对象技术导论术导论.北京北京:科学出版社科学出版社,19981998年年3 3月月(建议购买)(建议购买)相关参考书与面向对象内容的关系相关参考书与面向对象内容的关系相关参考书与面向对象内容的关系相关参考书与面向对象内容的关系1 1 1 1、基本知识、基本知识、基本知识、基本知识2 2 2 2、面向对象的分析、面向对
7、象的分析、面向对象的分析、面向对象的分析3 3 3 3、面向对象的设计、面向对象的设计、面向对象的设计、面向对象的设计4 4 4 4、面向对象的程序设计、面向对象的程序设计、面向对象的程序设计、面向对象的程序设计6 6 6 6、面向对象的数据库系统、面向对象的数据库系统、面向对象的数据库系统、面向对象的数据库系统7 7 7 7、分布对象技术、分布对象技术、分布对象技术、分布对象技术课程安排总学时:60学时其中上课40学时,实验20学时鼓励提问、讨论作业:每布置后的下周一交作业最后成绩比例:考试:70%平时:30%(其中考勤占15%,作业和实验占15%)如何学习面向对象技术(1)面向对象技术的概
8、念和方法,本质上是一种合理的思维方法,是不依赖于程序设计语言的应用软件开发的基本核心技术。因此要掌握面向对象编程,首先应该学习面向对象技术的基本要点。越是深入理解面向对象技术的理论和方法,就越能让您在自己在应用领域中最大限度地发挥思维能力和创造能力,就能掌握各种面向对象软件设计的各种语言。如何学习面向对象技术(1)面向对象设计方法追求的是现实问题空间与软件系统解空间的近似和直接模拟。现实世界空间中的基本问题是物质和意识,映射到面向对象系统解空间就是具体事物(对象)和抽象类概念(类)。面向对象技术的封装、继承、多态性等不仅支持软件利用,而且使软件维护可靠有效,可实现软件系统的柔性制造。如何学习面
9、向对象技术(1)面向对象语言对程序设计的主要影响并不在于它的语法特征,而在于它所提供的自然问题求解的机制和结构。面向对象编程(OOP)将计算过程看做是分类过程加状态变换过程,即将系统逐步划分为相互联系的多个对象并建立这些对象的联系,以引发状态转换,实现系统计算任务。因此,要理解面向对象语言,应首先理解面向对象技术的基本原理和基本概念,然后再学习此类语言。第一章第一章 C+编程基础编程基础计算机语言的发展第一阶段:低级语言(计算机诞生开始)第一阶段:低级语言(计算机诞生开始)机器语言机器语言机器语言机器语言机器指令二进制表示机器指令二进制表示汇编语言汇编语言汇编语言汇编语言指令使用符号化的助记符
10、指令使用符号化的助记符举例:汇编语言汇编语言机器语言机器语言mov eax,DWORD PTR a_$ebp8b 45 fcmov ecx,DWORD PTR b_$ebp8b 4d f8add ecx,ecx03 c9sub eax,ecx2b c1inc eax40mov DWORD PTR a_$ebp,eax89 45 fc以上指令实现运算 a=a-2b+1特点:特点:1.适用于计算机专业人员,追求编制技巧和代码短小;2.实现简单计算和设备驱动。3.依赖于计算机硬件,程序的可读性和可移植性差汇编语言与机器语言的特点第二阶段第二阶段 高级语言高级语言出现了诸如FORTRAN、BASIC等
11、高级语言,但一般高级语言难以实现汇编语言的某些功能,C语言的出现解决了这一问题,它集高级语言和低级语言的特性于一身。但是C是一种过程化语言,已经不适合现代软件开发的需要,后来,在C的基础上出现了面向对象的C+。C+语言的发展过程原型ALGO60,剑桥大学ALGOL语言是一种嵌套结构的面向过程的程序设计语言,它是ALGORITHMICLANGUAGE(算法语言)的缩写。故适合于描述数值计算的过程,与习惯的数学表达形式较接近。ALGOL语言是国内广泛流行的一种程序设计语言。ALGOL语言的源程序结构可分为四个部分:开始部分、说明部分、语句部分和结束部分。C+语言的发展过程1963年,剑桥大学将AL
12、GOL60语言发展成为CPL(CombinedProgrammingLanguage)语言。1967年,剑桥大学的MatinRichards对CPL语言进行了简化,于是产生了BCPL语言。1970年,美国贝尔实验室的KenThompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。C+语言的发展过程1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。为了使UNIX操作系统推广
13、,1977年DennisM.Ritchie发表了不依赖于具体机器系统的C语言编译文本可移植的C语言编译程序。1978年BrianW.Kernighian和DennisM.Ritchie出版了名著TheCProgrammingLanguage,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。C+语言的发展过程1988年,随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准3.C语言的主要特点C+语言的发展过程C+是一种面向对象的编程
14、语言.C#是Microsoft公司设计的一种编程语言。它松散地基于C/C+,并且有很多方面和Java类似。Microsoft是这样描述C#的:“C#是从C和C+派生来的一种简单、现代、面向对象和类型安全的编程语言。程序的开发过程开始开始开始开始程序设计程序设计程序设计程序设计程序编辑程序编辑程序编辑程序编辑程序编译程序编译程序编译程序编译通过通过通过通过程序连接程序连接程序连接程序连接通过通过通过通过程序运行程序运行程序运行程序运行正确正确正确正确结束结束结束结束重新修改原程序重新修改原程序重新修改原程序重新修改原程序产生产生产生产生*.cpp*.cpp的源文件的源文件的源文件的源文件产生产生
15、产生产生*.obj*.obj的目标文件的目标文件的目标文件的目标文件产生产生产生产生*.exe*.exe的可执行程序的可执行程序的可执行程序的可执行程序N NN NN NY YY YY YC+语言概述讨论C+语言的基本程序结构、学习方法与编程规范等进入进入开发环境简介主要向同学们介绍VisualC+的使用环境这部分希望大家认真学习,这是我们后面做实验的基础。进入进入一、一、C+的基本数据类型的基本数据类型二、变量的赋值与运算二、变量的赋值与运算C+的数据类型与运算的数据类型与运算C+的基本数据类型C+数据类型概述数据类型概述整型数据整型数据实型数据实型数据字符型数据字符型数据枚举常量枚举常量常
16、量与变量定义常量与变量定义定义类型定义类型C+数据类型概述数据类型概述数据类型数据类型数据类型数据类型基本数据类型基本数据类型基本数据类型基本数据类型非基本数据类型非基本数据类型非基本数据类型非基本数据类型整型整型整型整型 int int字符型字符型字符型字符型实型实型实型实型逻辑型逻辑型逻辑型逻辑型 bool bool单字符型单字符型单字符型单字符型 char char宽字符型宽字符型宽字符型宽字符型 w_char w_char单精度型单精度型单精度型单精度型 float float双精度型双精度型双精度型双精度型 double double数组数组数组数组 type type 指针指针指针
17、指针 type*type*空类型空类型空类型空类型 void void结构结构结构结构 struct struct联合联合联合联合 union union枚举枚举枚举枚举 enum enum类类类类 class class常量与变量常量与变量常量:在程序的运行过程中,值不能不能被改变。变量:在程序的运行过程中,值可以可以被改变。整型数据整型常量整型常量整型变量整型变量整形常量C+中的整型常量可用三种形式表示:1、十进制整数十进制整数。如56,378,0等。2、八进制整数八进制整数。表示时在整数前加0。如0452,056。八进制数与十进制数之间的换算关系(635)8=682+38+5=5413、
18、十六进制整数十六进制整数。表示时在整数前加0 x。如0 x254,0 xAC32,0 x64B46等。十六进制数用0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F表示。十六进制数与十进制数的换算关系(7A6)167162+A16+6=1958整型变量:整型变量:整数在存储单元中的存储情况:(以DOS为例)1、intinta,b/*指定指定a,b为整型为整型*/可进行如下赋值运算:可进行如下赋值运算:a=3;b=5;a=b+4;a=a+10;2、shortshort a,b/*指定指定a,b为短整型为短整型*/3、longlong a,b/*指定指定a,b为长整型为长整型*/4、u
19、nsigned intunsigned inta,b/*指定指定a,b为无符号型为无符号型*/在只能用正整数数时使用。注意不能给这种变量负数在只能用正整数数时使用。注意不能给这种变量负数5、unsigned shortunsigned shorta,b/*指定指定a,b为无符号短整型为无符号短整型*/6、unsigned longunsigned longa,b/*指定指定a,b为无符号长整型为无符号长整型*/不同种类的整型数据间可以进行算术运算。不同种类的整型数据间可以进行算术运算。不同种类的整型数据间可以进行算术运算。不同种类的整型数据间可以进行算术运算。整型变量的分类与定义实型数据实型常
20、量实型常量实型变量实型变量实型常量实型常量有两种表示形式:1、十进制形式。如123.456,89.3等。2、指数形式。如123104可写成123e4或123E4。实型变量实型变量分单精度单精度(float,占4个字节)和双精度双精度(double,占8个字节)。1、floata,b;可进行如下赋值运算:a=3.45;b=89.32;a=a+46.23;2、doublea,b;字符型数据字符常量字符常量字符变量字符变量字符串常量字符串常量字符常量字符常量要用单引号单引号括起来,如:a表示字符常量a;¥表示字符常量¥;字符形式字符形式功能功能nn换行换行t t横向跳格,相当一个横向跳格,相当一个t
21、abtab键键vv竖向跳格竖向跳格bb退格退格r r回车回车f f走纸换页走纸换页 反斜杠字符反斜杠字符“单引号单引号“字符字符dddddd1 1到到3 3位八进制数所代表的字符位八进制数所代表的字符xhhxhh1 1到到3 3位位1616进制数所代表的字符进制数所代表的字符字符变量字符型变量用来存放字符常量且只只能能存存放一个字符常量放一个字符常量,定义形式如下:charc1,c2;/*定义定义a,b为字符型变量为字符型变量*/可进行如下运算:c1=d;c2=c;/*c1表表示示字字符符常常量量d,c2表表示示字字符符常常量量c*/字符数据在内存中的存储形式字符数据在内存中是以整数整数的形式
22、存储的,所以单字符可以与整数混合运算。例如:charc1,c2,c3;intt1,t2;c1=97;c2=c1+1;c3=c1-32;t1=c1;t2=c2;字符串常量字符串常量就是用一一对对双双引引号号括起来的字符序列。如:“tsinghuauniversity”,“a”,“china”。系统在每一个字符串常量最后都自动加有一个字字符符串串结结束束符符号号0,该字符占用一个字符的存储空间,但不可见不可见。例:“china”在内存中的存储形式为china0字符串常量与字符常量的区别又如:a与“a”的不同之处在于:a的存储形式为“a”的存储形式为枚举常量当一个变量只有几种可能的值,可以定义为枚举
23、类型。枚举类型就是将变量的值一一列举出来,变变量量的的值值只只限限于于列列举举出出来来的的内内容容。如下便是一个枚举类型的定义:enumweekdaysun,mon,tue,wed,thu,fri,sat;enumweekdayworkday,week_end;#includetypedef enumsun,mon,tue,wed,thu,fri,satweek;/定义一个枚举类型定义一个枚举类型main()weekworkday;workday=(week)4;/枚举类型值从枚举类型值从0开始开始/整数必须强制类型转换整数必须强制类型转换printf(workday=%s,workday);
24、printf(workday=%d,workday);return0;常量定义在C+中,如果想让变量的内容自初始化后一直保持不变,可以定义一个常量:constconstinta=10;constconstfloatf=4.5;constconstcharc=a;定义常量时必须初始化定义常量时必须初始化定义常量时必须初始化定义常量时必须初始化。C+允许define定义常量,这时为了兼容C,而 在 C+中 常 量 定 义 都 用 const,不 用#define。常量名不能放在赋值语句左边常量名不能放在赋值语句左边,如:constinta;a=10;/error常量定义中,初始化的值可以是一个常量
25、表达式,如:constinta=100*3+5;但该常量表达式中不能出现函数调用常量表达式中不能出现函数调用:constinta=max(3,5);/error常量定义中应注意的问题变量定义变量命名规则:(1)不能是C+关键字,不要与C+中的库函数名、类名和对像名相同。(2)变量名由字母、数字和下划线组成,不能以数字开头,中间不能有空格。(3)C+区分大小写。(4)采用英文单词,不用中文拼音。(5)变量用小写字母开头,宏和常量用大写。(6)类的名称一般用C开头。(7)尽量使用系统提供的名称。(8)尽量形成自己的一套风格。变量定义时可以加前缀,前缀意义如下:p:指针s:字符串sz:以0终止的字符
26、串msg:消息fn:函数c:8位的字符b:布尔量by:无符号字符u:无符号整数w:无符号整数或整数dw:无符号长整数l:长整数h:句柄n:整数例如:pBrush,nColor,lnumber定义类型用typedef定义新的类型名来代替已有的类型名,这样有利于程序的维护。例如:typedef int integer;inta,b;integera,b;变量的赋值与运算运算符运算符混合运算中的类型转换混合运算中的类型转换优先级与结合性优先级与结合性溢出溢出求值次序与副作用求值次序与副作用运算符算术运算符a.(加法运算符)b.(减法运算符)c.*(乘法运算符)d./(除法运算符,两数相除取整)e.(
27、模运算符,两数相除取余)在多数机器上,对于“/”运算,若相除结果为负,则向零取整(使变量加1),(使变量减1)例如:i+/相当于相当于i=i+1i-/相当于相当于i=i-1注注意意:(1).运运算算符符(+)和和()只只能能用用于于变变量量,不不能能用于常量和表达式,如用于常量和表达式,如5+和(和(a+b)+都不合法。都不合法。区别:i+,i-/*/*在使用在使用在使用在使用i i之后使之后使之后使之后使i i的值增或减的值增或减的值增或减的值增或减1*/1*/+i,-i/*/*在使用在使用在使用在使用i i之前使之前使之前使之前使i i的值增或减的值增或减的值增或减的值增或减1*/1*/自
28、增、自减运算符(1).#includemain()inti,j,k;i=3;j=i+;i-;k=+i;printf(j=%d,k=%d,j,k);return0;运行结果为:j=3,k=4。例如赋值运算赋值符号“”就是赋值运算符。允许以下情况:(1).a=3;(2).a=b=c=5/a,b,c均为5(3).a=5+(c=6)/a为11,c为6在赋值符“”前加上其它运算符,可构成复合的赋值运算符复合的赋值运算符:a+=3等价于a=a+3注注意意:x*=y+8 等等价价于于x=x*(y+8),不不等等价价于于 x=x*y+8求字节数运算符求字节数运算符:sizeof例如:求int型数据所占的字节数
29、:sizeofint=sizeof(int)课后练习:分别求出自己机器上各种数据类型所占的字节数。强制类型转换运算符强制类型转换的一般形式为:(类型名)(表达式)例如:(float)a/*将a强制转换为float型*/(int)(x+y)/*将(将(x+y)强制转换为)强制转换为int 型型*/(int)x+y /*将将x转换为转换为int型后再与型后再与y相加相加*/强制类型转换只是得到一个所需类型的中间变量,原来变量的类型并不发生变化。#includemain()floatx;intxi;x=4.5;xi=(int)x;printf(x类型转换后产生的中间变量值为%d,而x的值仍为%f.n
30、,xi,x);return0;运行结果为:x类型转换后产生的中间变量值为4,而x的值仍为4.5。例如:条件运算符条件运算符:?:例如:max=(ab)?a:b如果ab,把a的值赋给max;否则,把b的值赋给max。逗号运算符一般形式是:表达式1,表达式2,表达式n求解顺序为从左至右,整个逗号表达式的值是表达式n的值。如:a=(3+2,6*4,7-4),/a的值为3逗号运算符在整个运算符中级别最低逗号运算符在整个运算符中级别最低。位运算(位右移)(位取反)|(按位或)(按位异或)&(按位与)实例实例10进制值进制值二进制值二进制值x01100001001y02700010111x36611110
31、110 x&y00100000001x|y03700011111xy03600011110 x200200000010混合运算时数据类型转换混合运算时数据类型转换charcharshortshortintintlong intlong intunsigned longunsigned longunsigned intunsigned intunsigned shortunsigned shortunsigned charunsigned charfloatfloatdoubledoublelong doublelong double溢出各种数据类型都有其数据范围,当数据超超超超出这个范围时出这
32、个范围时出这个范围时出这个范围时就会发生溢出,数据溢出不会引起编译错误,但是会使运行结果发生偏差。例如以下程序:inta=9999999999;intb=9999999999;couta*b=a*bendl;在windows环境下运行结果为:a*b=-1158137855求值次序与副作用对于复合表达式来说,不同的编译器求值的次序会不同,例如下例:inta=3,b=5;C=a*b+b;D=+b*(a+b);E=(a=4)+b;当求值顺序不同时,运算的结果会有所不同。这样的程序不提倡,在编程时最好将复合这样的程序不提倡,在编程时最好将复合这样的程序不提倡,在编程时最好将复合这样的程序不提倡,在编程
33、时最好将复合表达式写成几个简单表达式。表达式写成几个简单表达式。表达式写成几个简单表达式。表达式写成几个简单表达式。C+程序设计数据的传输数据的传输C程序结构程序结构逻辑运算与条件控制逻辑运算与条件控制循环控制循环控制数据的传输标准标准C的输出的输出标准标准C的输入的输入C+的控制台操作的控制台操作标准C的输出C语言本身不提供输入输出语句,输入和输出操作是由C的标准类库中提供的函数来实现的,使用时将用户程序与标准文件相连接。在使用标准输入输出库函数时,要用预编译命令“#include”将“stdio.h”文件包括到用户源文件中。即#include#include printf函数是向终端输出若
34、干个任意类型的数据。printf函数的一般格式为:printf(“格式控制”,输出表列)格式控制由普通字符和格式说明组成,普通字符照原样输出,格式说明由“”和格式字符组成,其作用是指定输出数据的格式。printf函数(格式输出函数)#includemain()inta;a=67;printf(“以数字形式输出,a=%d;n以字符形式输出,a=%cn,a,a);return0;运行结果为:以数字形式输出,a=67;以字符形式输出,a=C例如:标准C的输入scanf可以用来输入任何类型的多个数据。例如:#includemain()inta,b,c;scanf(%d%d%d,&a,&b,&c);pr
35、intf(%d,%d,%d,a,b,c);return0;运行:输入:123(输入数据时两个数据之间可以用空格、回车、tab键隔开)输出:1,2,3C+的控制台操作C除了stdio以外,还为面向对像程序设计了一套相当方便的I/O,其定义在iostream.h中。cout标准输出cin标准输入两个运算符:输入运算符#include#include voidmain()charname20;intage;cout”please give your name:”name;cout”please give you age:”age;cout”your name is:”name endlendl;co
36、ut”you are”age ”years old”endlendl;例如:C+的常用控制符控制符描述dec十进制hex十六进制oct八进制setfill(c)设填充字符为csetprecision(n)设显示小数精度为nsetw(n)设域宽为n设置值的输出宽度#include#include voidmain()floatamount=3.14159;coutsetw(4)amountendl;coutsetw(8)amountendl;coutsetw(12)amountendl;3.14159_3.14159_3.14159运行结果八进制与十六进制输出intnumber=1000;cou
37、tdecimal:decnumberendl;couthexadecimal:hexnumberendl;coutoctal:octnumberendl;couthex;cout123endl;cout234endl;cout345endl;coutdec;decimal:1000hexadecimal:3e8octal:17507bea159运行结果设置填充字符coutsetfill(*)setfill(*);coutsetw(2)10endl;coutsetw(10)10,=,=,=,!=优先级关系:(1).,=的优先级相同且高于=和!=,=和!=的优先级相同。(2).关系运算符的优先级低
38、于算术运算符。(3).关系运算符的优先级高于赋值运算符。用关系运算符将两个表达式连接起来的式子称为关系表达式。关系表达式的值是“真”或“假”,C中以中以1代表真,以代表真,以0代表假代表假。例如:“53”的值为0,“50”的值为1。逻辑运算C中提供三种逻辑运算符:(1).&逻辑与。(2).|逻辑或(3).!逻辑非。(1).“!”的优先级最高,其次为“&”,“|”的优先级最低。(2).“!”的优先级高于算术运算符,“&”和“|”的优先级低于关系运算符。优先级关系系统在给出逻辑运算结果时,以系统在给出逻辑运算结果时,以系统在给出逻辑运算结果时,以系统在给出逻辑运算结果时,以1 1代表真,以代表真,
39、以代表真,以代表真,以0 0代表假;而在参加逻辑运算的运算对象中,以代表假;而在参加逻辑运算的运算对象中,以代表假;而在参加逻辑运算的运算对象中,以代表假;而在参加逻辑运算的运算对象中,以0 0代代代代表假,以非表假,以非表假,以非表假,以非0 0(不一定是(不一定是(不一定是(不一定是1 1)代表真。)代表真。)代表真。)代表真。例如:(a).若a=4,则!a=0(b).若a=3,b=0,则a|b的值为1,a&b的值为0。(c).表达式c|84-!0c|83c|0表达式的值为1(c=!0)注意:在逻辑运算中,并不是所有的逻辑运算符都被执行,只有在必须执行下一个运算符后才能得出表达式的值时,才
40、执行该运算符。例如:a&b&c,只有当a为真时,才依次判断b和c,当a为0时可直接得到表达式的值为0,系统不会再继续判断表达式b和c。如以下程序:#includemain()inta=0,b=1,c=1,d;d=a&(b=b+1)|(c=c+1);couta=aendl;coutb=bendl;coutc=cendl;coutd=dendl;运行结果为:a=0b=1c=2d=1单分支控制语句根据所给条件是否满足的情况来决定执行两种不同的操作。它的实现语句用if语句,if语句的一般形式为:if(表达式)语句体1;else语句体2;#includemain()inta=0,b=0;cout请输入一
41、个整数:a;if(a=0)b+;cout0时,b=b0时执行的操作时执行的操作elseb-;cout当a0时,b=bendl;/a0时执行的操作时执行的操作return0;例如:(1).if(表达式)语句;(2).if(表达式)语句1;else语句2;(3).if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;elseif(表达式n-1)语句n-1;else语句n;if语句有三种形式一般形式如下:if()if()语句1else语句2elseif()语句3else语句4if语句可以嵌套使用下列程序的哪些改法是正确的?#includemain()intx,y;c
42、inx;if(x0)y=-1;else if(x=0)y=0;else y=1;cout当x=x时,y=y=0)if(x0)y=1;elsey=0;elsey=-1;改法2.if语句改为:y=-1;if(x!=0)if(x0)y=1;elsey=0;改法3.if语句改为:y=0;if(x=0)if(x0)y=1;elsey=-1;#includemain()inta;cout请输入一个整数:a;if(a)cout该整数不为0endl;elsecout该整数为0endl;return0;例2多分支选择语句switch语句也是条件选择语句,与if语句不同的是,if语句只提供两个可供选择的分支,而s
43、witch语句可以提供多条选择分支。它的一般形式为:switch(表达式)case常量表达式1:语句1case常量表达式2:语句2case常量表达式n:语句ndefault:语句n+1;当switch表达式和某个case常量表达式的值相同时,就从该从该从该从该casecase表达式开始向后执行表达式开始向后执行表达式开始向后执行表达式开始向后执行。intresult=0;switch(ope)case+:result=v1+v2;case-:result=v1-v2;case*:result=v1*v2;case/:result=v1/v2;default:coutoperatoriswron
44、g!endl;当ope=-时,打印结果为operatoriswrong!例如:若要使switch语句只执行一个分支,可以在case语句后加一个break语句来达到此目的。上面例子可以改为:intresult=0;switch(ope)case+:result=v1+v2;break;case-:result=v1-v2;break;case*:result=v1*v2;break;case/:result=v1/v2;break;default:coutoperatoriswrong!endl;循环控制在C+中可以用以下语句来实现循环:1用用while语句语句;2用用do-while语句语句;
45、3用用for语句语句;4.break和和continue语句语句while语句一般形式如下:while(表达式)语句例如:计算整数110的和#includemain()inti,sum;i=1;sum=0;while(i=10)sum=sum+i;i+;cout整数110的和为:sumendl;return0;do-while语句一般形式为:do语句while(表达式)先执行一次语句先执行一次语句,再判断表达式是否成立,若表达式的值为非0,返回再执行do后的语句;若表达式的值为0,结束循环。例1:计算整数110的和#includemain()inti,sum;i=1;sum=0;do sum=
46、sum+i;i+;while(i=10);cout整数110的和为:sumendl;return0;(1)#includemain()inti;i=1;while(i10)i+;couti=iendl;return0;结果:i=1例2:比较下列两个程序的结果(2)#includemain()inti;i=1;do i+;while(i10);couti=iendl;return0;结果:I=2注意:对于注意:对于do-while语句,不管表达式是否成立,语句,不管表达式是否成立,都会先执行一次循环体。都会先执行一次循环体。for语句for语句是C中使用最灵活的循环语句,它不仅可以用于循环次数已
47、经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况。for语句的一般形式为:for(表达式1;表达式2;表达式3)语句#includemain()inti,sum;for(i=1,sum=0;i=10;i+)sum=sum+i;cout整数110的和为:sumendl;return0;例如:(2)、表达式1和表达式3可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其它表达式,如for(sum=0,i=1;i=10;sum=sum+i,i+);(3)、表达式2一般是关系表达式,但也可以是其它表达式,只要它的值非0,就执行循环体。例如:for(i=1;(c=getchar()!=n);i+=c);(1)三个表达式均可省略break语句和continue语句break语句用来跳出循环体,continue语句用来结束本次循环。#includemain()inti;for(i=0;i4;i+)if(i=2)break;elsecouti=iendl;cout*endl;return0;运行结果为:I=0I=1*例1#includemain()inti;for(i=0;i4;i+)if(i=2)continue;elsecouti=endl;cout*endl;例2运行结果为:I=0I=1I=3*
限制150内