1、程序设计与语言(),培养目标 课程简介 实验 学时 考核形式 教材,主讲:何洁月,培养目标,1. 建立基本的计算机程序设计概念体系和基本 的程序 设计方法。 2.理解和掌握C+语言的基本语法和语义,初步 理解面 向对象的思想,初步掌握面向对象程序 设计的方法。 3. 逐步提高学生的编程能力和调试程序的能力。为后面的学习打好基础。,课程简介,第章 概述 计算机程序设计语言的发展(一般了解) 面向对象的方法(一般了解) 面向对象的软件开发(一般了解) 信息的表示与存储(理解) 程序的开发过程(一般了解) 小结,课程简介,第章 简单程序设计语言概述(一般理解) 基本数据类型和表达式(掌握) 数据的输
2、入与输出(掌握) 算法的基本控制结构(掌握) 自定义数据类型(掌握) 小结,课程简介,第章 函数函数的定义与使用(掌握)内联函数(掌握)带默认形参值的函数(掌握)函数重载(掌握)函数模板(掌握)使用系统函数(掌握)小结,课程简介,第章 类与对象面向对象的思想(理解)面向对象程序设计的基本特点(理解)类和对象(掌握)构造函数和析构函数(掌握)类的组合(掌握)类模板(掌握)面向对象标记(一般了解)小结,课程简介,第章 程序的结构程序的结构(理解)生存期(掌握)数据和函数(掌握)静态成员(掌握)友元(掌握)共享数据的保护(掌握)多文件结构和编译预处理命令(掌握)小结,课程简介,第章 数组、指针与字符
3、串数组(掌握)指针(掌握)动态内存分配(掌握)字符串(掌握),实验,实验共分次,每次小时,实验环境为:visual c+6.0 实验:visual c+6.0开发环境应用入门 实验:简单程序设计 实验:函数的应用 实验:类与对象 实验:程序的结构 实验:数组、指针与字符串,教材,教材: C+语言程序设计 C+语言程序设计习题与实验指导,考核,总评成绩=平时作业+上机实验+期末笔试成绩 (闭卷)期末上机成绩(闭卷) 平时作业占 10% 平时上机实验占 10% 期末笔试成绩(闭卷)占 60% 期末上机成绩(闭卷)占 20%,第一章 绪论,计算机程序设计语言的发展 面向对象的方法 面向对象的软件开发
4、 信息的表示与存储 程序的开发过程,1.1计算机语言的发展,计算机的工作是用程序来控制的 程序是指令的集合。 指令是计算机可以识别的命令。,计算机程序,机器语言,由计算机硬件系统可以识别的二进制指令组成的语言称为机器语言。 计算机发展的初期,软件工程师们只能用机器语言来编写程序。这一阶段,在人类的自然语言和计算机编程语言之间存在着巨大的鸿沟。 例如 1011 1111 1101 缺点:难懂,不易修改,移植性差,汇编语言,汇编语言将机器指令映射为一些可以被人读懂的助记符,如ADD、SUB等。 此时编程语言与人类自然语言间的鸿沟略有缩小,但仍与人类的思维相差甚远。因为它的抽象层次太低,程序员需要考
5、虑大量的机器细节。 例如 ADD CX,DX 将DX的内容加进CX 。不能立即执行,需要汇编,变成目标程序。,高级语言,高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定涵义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具体事物。 例如 if y3 z=x+y; 类似英语和数学表达式,高级语言,分成 解释方式与编译方式,解 释 程 序,运 行 结 果,编 译 程 序,目 标 程 序,初 始 数 据,目 标 程 序,源 程 序,源程序,初始数据,运 行 结 果,高级语言发展:,第一代语言是对数学表达式有很强的运算处理能力代表是Fortran 和Alg
6、ol 60第二代语言的重点如何有效地表达算法代表是Pascal 和C第三代语言引入抽象数据类型的程序设计语言代表是被认为是基于对象的语言第四代面向对象程序设计语言代表是Smalltalk、Eiffel、c+、Java,面向对象的语言,出发点: 更直接地描述客观世界中存在的事物(对象)以及它们之间的关系。 特点: 是高级语言。 将客观事物看作具有属性和行为的对象。 通过抽象找出同一类对象的共同属性和行为,形成类。 通过类的继承与多态实现代码重用,面向对象的语言,优点: 使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。,语言的鸿沟,面向对
7、象的语言,自然语言,非面向对象的语言,汇编语言,机器语言,对问题域的认识(人,语言的鸿沟,编程(人,程序的理解和执行(机器,程序的目的:用于数学计算 主要工作:设计求解问题的过程 缺点:对于庞大、复杂的程序难以开发和维护,1.2 面向对象的方法,面向对象方法的由来一、程序设计方法的发展历程 面向过程的程序设计方法,二、程序设计方法的发展历程 面向过程的结构化程序设计方法,设计思路 自顶向下、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之。 程序结构: 按功能划分为若干个基本模块,形成一个树状结构。 各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组
8、成。 其模块化实现的具体方法是使用子程序。,优点: 有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。,缺点:可重用性差、数据安全性差、难以开发图形界面的应用 把数据和处理数据的过程分离为相互独立的实体。 当数据结构改变时,所有相关的处理过程都要进行相应的修改。 每一种相对于老问题的新方法都要带来额外的开销。 图形用户界面的应用,很难用过程来描述和实现,开发和维护都很困难。,三、程序设计方法的发展历程 面向对象的方法,将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体对象。 对同类型对象抽象出其共性,形成类。 类通过一个简单的外部接口,与外
9、界发生关系。 对象与对象之间通过消息进行通讯。,优点: 程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。 通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。,面向对象的基本概念 对象,一般意义上的对象: 是现实世界中一个实际存在的事物。 可以使有形的(比如一辆汽车),也可以是无形的(比如一项计划)。 是构成世界的一个独立单位,具有: 静态特征:可以用某种数据来描述 动态特征:对象所表现的行为或具有的功能,面向对象方法中的对象: 是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位。对象由一组属性和一组行为构成。 属性:用来描述
10、对象静态特征的数据项。 行为:用来描述对象动态特征的操作序列。,面向对象的基本概念 类,分类人类通常的思维方法 分类所依据的原则抽象 忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。 例如,石头、树木、汽车、房屋等都是人们在长期的生产和生活实践中抽象出的概念。,面向对象方法中的“类“ 具有相同属性和服务的一组对象的集合 为属于该类的全部对象提供了抽象的描述,包括属性和行为两个主要部分。 类与对象的关系: 犹如模具与铸件之间的关系,一个属于某类的对象称为该类的一个实例。,集合成员 抽象描述具体实例,集合成员 抽象描
11、述具体实例,面向对象的基本概念 封装,把对象的属性和服务结合成一个独立的系统单位。 尽可能隐蔽对象的内部细节。对外形成一个边界(或者说一道屏障),只保留有限的对外接口使之与外部发生联系。,封装,顾客,面向对象的基本概念 继承,继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因之一。 定义:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。 例如:将轮船作为一个一般类,客轮便是一个特殊类。,哺乳动物 热血、有毛发、用奶哺育幼仔,狗 有犬牙、食肉、特定的骨骼结构、群居,柯利狗 尖鼻子、身体颜色红白相间、适合放牧,面向对象的基本概念 多态性,多态是指在一般类
12、中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义。 例如: 数的加法-实数的加法 -复数的加法 例 动物叫,面向对象的软件工程,面向对象的软件工程是面向对象方法在软件工程领域的全面应用。它包括: 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程(OOP) 面向对象的测试(OOT) 面向对象的软件维护(OOSM),面向对象的软件开发,传统的软件工程方法,面向对象的软件工程方法,自然语言,分析与设计的鸿沟,编程语言,自然语言,面向对象的编程语言,系统分析,系统分析阶段应该扼要精确地抽象出系
13、统必须做什么,但是不关心如何去实现。 面向对象的系统分析,直接用问题域中客观存在的事物建立模型中的对象,对单个事物及事物之间的关系,都保留他们的原貌,不做转换,也不打破原有界限而重新组合,因此能够很好地映射客观事物。,设计,针对系统的一个具体实现运用面向对象的方法。其中包括两方面的工作: 把OOA模型直接搬到OOD,作为OOD的一部分 针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的部分。,编程,OOP工作就是用一种面向对象的编程语言把OOD模型中的每个成分书写出来,是面向对象的软件开发最终落实的重要阶段。,测试,测试的任务是发现软件中的错误。 在面向对象的软件测试中继续
14、运用面向对象的概念与原则来组织测试,以对象的类作为基本测试单位,可以更准确的发现程序错误并提高测试效率。,维护,将软件交付使用后,工作并没有完结,还要根据软件的运行情况和用户的需求,不断改进系统。 使用面向对象的方法开发的软件,其程序与问题域是一致的,因此,在维护阶段运用面向对象的方法可以大大提高软件维护的效率。,信息的表示和存储,信息的分类 计算机的数字系统 程序设计中常用的数制 不同进位计数制间的转换 信息的存储单位 二进制数的编码表示 小数的表示方法 非数值信息的表示,信息的分类, 指令控制信息 控制字信息 定点数 数值信息 数据信息 浮点数 字符数据 非数值信息 逻辑数据,计算机的数字
15、系统,计算机采用的是二进制数字系统。 基本符号:0、1 进位原则:逢二进一 优点: 易于物理实现 二进制数运算简单 机器可靠性高 通用性强 缺点:对人来说可读性差,程序设计中常用的数制,不同进位计数制间的转换 R 进制十进制,各位数字与它的权相乘,其积相加。 例如: (11111111.11)2=1*27 + 1*26 + 1* 25 +1* 24 + 1* 23 + 1* 22 +1* 21+ 1* 20+1*2-1+1*2-2 =(255.75)10 (3506.2)8=3*83 + 5*82 + 0*81 + 6*80 +2*8-1 =(1862.25)10 (0.2A)16=2*16-
16、1 +10*16-2=(0.1640625)10,不同进位计数制间的转换 十进制 R 进制,十进制整数转换成R进制的整数 “除R取余”法,例如: 2 68 余 数2 34 0 低位2 17 02 8 12 4 02 2 02 1 00 1 高位 所以 681010001002,不同进位计数制间的转换 十进制 R 进制,十进制小数转换成R进制小数 “乘 R 取整”法,例如:高位0.31252 = 0 .6250.625 2 = 1 .250.25 2 = 0 .50.5 2 = 1 .0 所以 0.312510 = 0.01012,不同进位计数制间的转换 二、八、十六进制的相互转换,每位八进制数
17、相当于三位二进制数 每位十六进制数相当于四位二进制数 (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,信息的存储单位,位(bit):度量数据的最小单位,表示一位二进制信息。 字节(byte):由八位二进制数字组成(1 byte = 8 bit)。 K 字节 1 K = 1024 byte M 字节 1 M = 1024 K G 字节 1 G = 1024 M,二进制数的编码表示: 原码,“符号绝对值表示“的编码
18、 例如: X=+0101011 X原 = 0 0101011 X=-0101011 X原 = 1 0101011符号位 缺点: 零的表示不唯一: +0原 =000.0 -0原 =100.0 进行四则运算时,符号位需单独处 理,且运算规则复杂。,二进制数的编码表示:反码,正数的反码与原码表示相同。 负数的反码与原码有如下关系: 符号位相同(仍用1表示),其余各位取反(0变1,1变0)。例如: X=-1100110 X原 =11100110 X反 =10011001 X=+0000000 X原 =00000000 X反 =00000000 反码中零的表示也不唯一 X=-0000000 X原 =10
19、000000 X反 =11111111 反码只是求补码的中间码,二进制数的编码表示:补码,模数: n位整数(包括一位符号位),则它的模数为 2n 。 n位小数,小数点前一位为符号位,则它的模数为 2。 补数: 一个数减去另一个数,或者说一个数加上一个负数,等于第一个数加上第二个数的补数。例:8+(-2)=8+10 ( mod 12 ) 一个二进制负数可用其模数与真值做 加法 (模减去该数的绝对值) 求得其补 码。,二进制数的编码表示:补码,计算机中的补码表示法 负数的补码由该数反码的末位加 1 求得 对补码再求补即得到原码 补码运算规则p14 符号位可作为数值参加运算 减法运算可转换为加法运算
20、: 加上一个负数等于加上该数的补码 补码运算的结果仍为补码 运算结果溢出: 负数之和得正数,或正数之和得负数,小数的表示方法,计算机中通常采用浮点方式表示小数 一个数 N 用浮点形式表示可以写成: N=M2E E表示2的幂,称为数N的阶码。阶码确定了数N的小数点的位置,其位数反映了该浮点数所表示的数的范围。 M表示数N的全部有效数字,称为数N的尾数。其位数反映了数据的精度。 p15,非数值信息的表示,西文字符: ASCII码:用7位二进制数表示一个字符,最多可以表示27=128个字符 EBCDIC码:用8位二进制数表示一个字符,最多可以表示28=256个字符 汉字: 应用较为广泛的是“国家标准
21、信息交换用汉字编码“(GB2312-80标准),简称国标码。是二字节码,用二个七位二进制数编码表示一个汉字。,程序的开发过程,源程序、目标程序、翻译程序 三种不同类型的翻译程序: 汇编程序、编译程序、解释程序 程序的开发过程 编辑、编译、连接、运行调试,基本术语,源程序: 用源语言写的,有待翻译的程序 目标程序: 也称为“结果程序“,是源程序通过翻译程序加工以后所生成的程序。 翻译程序: 是指一个把源程序翻译成等价的目标程序的程序。,基本术语 三种不同类型的翻译程序,汇编程序: 其任务是把用汇编语言写成的源程序,翻译成机器语言形式的目标程序。 编译程序: 若源程序是用高级程序设计语言所写,经翻
22、译程序加工生成目标程序,那么,该翻译程序就称为“编译程序“。,基本术语 三种不同类型的翻译程序,解释程序: 这也是一种翻译程序,同样是将高级语言源程序翻译成机器指令。它与编译程序不同点就在于:它是边翻译边执行的,即输入一句、翻译一句、 执行一句,直至将整个源程序翻译并执行完毕。,程序的开发过程,编辑 将源程序输入到计算机中,生成后缀为cpp的磁盘文件。 编译 将程序的源代码转换为机器语言代码。 连接 将多个源程序文件以及库中的某些文件连在一起,生成一个后缀为exe的可执行文件。 运行调试,程序开发过程:,开始,编辑源程序,编译,编译错,连接,连接错,运行,运行错,完成,是,是,是,作业,复习第
23、一章,预习第二章 作业:、,第二章 C+简单程序设计,本章主要内容,C+语言概述 基本数据类型和表达式 数据的输入与输出 算法的基本控制结构 自定义数据类型,2.1.1 C+语言的产生,C+是从C语言发展演变而来的: C语言的开发史源于高级语言和UNIX操作系统的发展要求。早期的系统程序设计,使用的是汇编语言,其优点:(1)能体现计算机硬件指令级的特性,表达能力强;(2)运行效率高。其缺点:可读性,可移植性及描述问题的性能不如高级语言。这样很自然有如下想法:能否用具有足够表达能力的高级语言 来进行系统软件的设计呢?Bell实验室做了这一尝试。 1970:在 PDP-11/20机上实现了B语言,
24、并用它编写了UNIX系统的实用程序。B-BCPL-CPL-ALGOL 60,2.1 C+语言概述,在B语言基础上,改进其缺陷,发展出了C语言, 其设计目标:(1)保持BCPL和B的精练性及接近硬件的特点(2)恢复这些语言失去的通用性 1972:第一个C编译投入使用 1973:UNIX用C改写,加入多道程序功能,发生质变现在,UNIX已得到广泛推广,成为公认的第一标准的操作系统 随着UNIX的进一步开发,C也交织在一起被迅速推广。,1983:对C扩充,发展为C。C+语言的标准化工作从1989年开始,于1994年制定了ANSI C+标准草案。以后又经过不断完善,成为目前的C+。,2.1.2 C+的
25、特点,全面兼容C 它保持了C的简洁、高效和接近汇编语言等特点 对C的类型系统进行了改革和扩充 C+也支持面向过程的程序设计,不是一个纯正的面向对象的语言 支持面向对象的方法,2.1.3 C+程序实例例2-1,/ this is a simplest program. #include void main(void) cout“Hello!n“;cout“Welcome to c+!n“; 说明:(1)注解 (2) 编译预处理(3)main函数 (4)语句括号 (5)语句分号;,C+程序实例,运行结果: Hello! Welcome to c+!,C+字符集,语言的最基本单位是字符:字符词语句函
26、数程序。 字符集是构成语言的基本元素 大小写的英文字母:AZ,az 数字字符:09 特殊字符: 空格 ! # % . , ( ) ,词法记号,词法记号是最小的词法单位 、关键字 C+预定义的单词。是指C+中有特殊含义的字,是不能重 新定义的。程序员不可用之作为自己定义的变量或函数的名字。,类别 关键字个数 举例ANSI C 32 char,for 等ANSI C+ 61 (增加29个) class,public等BC/AC 扩展了一些 asm 等,、标识符 程序员声明的单词,它命名程序正文中的 一些实体。,标识符的构成规则 以大写字母、小写字母或下划线(_)开始。 可以由以大写字母、小写字母、
27、下划线(_)或数字09组成。 大写字母和小写字母代表不同的标识符。 例 Rectangle、 Draw、 _line . 、文字 在程序中直接使用符号表示的数据 包括数字、字符、字符串和布尔文字 、操作符 用于实现各种运算的符号。 、分隔符 用于分隔各个词法记号或程序正文:( ) , : ; 、空白:空格、制表符(TAB键产生的字符)、换行 符(Enter键所产生的字符)和注释的总称。 程序书写自由 / 、 /* */,2.2基本数据类型和表达式,2.2.1基本数据类型,是程序命令操作的对象。,是指将数据根据表达形式的不同而 划分的类别。,数据:,数据类型:,C+的数据类型一般分为如下几种:,
28、基本数据类型,非基本数据类型(用户定义数据类型),整型 字符型 实型(浮点型) 逻辑型(布尔型) 数组 指针 空类型 结构 联合 枚举 类,数据类型,数据类型修饰符:,short,long,unsigned,例:,无符号整型 unsigned int,无符号长整型 unsigned long,无符号短整型 unsigned short,signed,类型 所占位数 数的范围int 16 -32768 32767short int 16 -32768 32767long int 32 -2147483648 2147483647unsigned int 16 0 65535unsigned sh
29、ort 16 0 65535unsigned long 32 0 4294967295,至于它们之间的差异,请看下表(p):(16位计算机),0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.31456789,23,+,数符,小数部分,指数,例: cout“size of int is “ size of (int)endl;,C+强类型语言要求程序设计者在使用数据之前对数据的类型进行声明。,注意: (1)整型和实型的几种不同方式 (2)注意各种数据类型的取值范围。 (3)注意C无布尔类型。C语言在表达逻辑运算的结果时,用 整数0 代表逻辑“假”,用非0的整数值(如1)表示逻辑
30、“真”。 C+中增添了布尔类型bool,但并非每个C+编译器都支持。用size of (数据类型)可以确定数据类型的字节长度,数据类型 常量与变量,#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 endl; ,Page 84,2.2.2 常量,在程序中出现的常量分为一般常量和符号常量两种。,一般常量,让我们来看右边的程序段:,int sum;sum=3+5;
31、printf (“sum=%d”,sum);,.,其中的“”和“”都是一般常量。,常量 就是其值不能被改变的量,它相当于数学中的常数。,常量由于数据类型的不同而被分为:,整型常量,实型常量,字符常量,字符串常量,1、 整型常量,整型常量即以文字形式出现的整数。 分十进制整数、八进制整数和十六进制整数,注意它们的书写形式。,整型常量类型 表达形式 有无正负十进制 957 有正负八进制 01667 只有正十六进制 0xB7 只有正,123L 123l 长整型,2、 实型常量,实型常量即以文字形式出现的实数,又称浮点型。 它分一般形式和指数形式。,实型常量类型 表达形式 一般形式 0.123 指数形
32、式 123e5,(2) 一个实型常数缺省说明为double,如表示float型,则 在实数后加 f或 F。 例 34.5f 34.5,注: (1)指数形式的书写。E或e的前面必须要有数字,且E后面的指数必须为整数。 例:e32.1e3.5.e3e,单引号括起来的一个字符 例 A 每个字符常数占一个字节 每个字符常数有一个编码数字值ASCII码表中的码值例如:A:65 B:66 a:97 b:98 , 字符常量可象数量一样进行运行、比较例1:if(c=Ac=Z) c=c+a-A;将字符变量c从大写字母转为小写字母。例2:0-0=01-0=1 2-0=2如果c是一数字字符,则c-0就是它对应数字的
33、数值,3、 字符常量,非图形字符(如回车、制表符等) 及 “等字符,因它们有特殊 作用,所以表示这些字符本身时,应:p。n 表换行,无论是不可显示字符还是一般字符,都可用8进制数、16进制数表示ddd:一 至三位8进制数。xhh: 一 至二位16进制数。例如:001表示码值为(01)8 的ASCII字符。A也可用101表示0为空白符,即NULL,码值为0,在C语言中是字符串的结束标志。(与0和空格符不同)例:cout“x07operatingtsystemn”;operating system,转义字符,例 :int a=b; char c=97; coutaendl; coutcendl;输
34、出:98a,字符数据的使用方法 字符数据和整型数据之间可以运算。 字符数据与整型数据可以互相赋值。,4、 字符串常量,字符串型常量是用双引号括起来的一个或多个字符。 例如,将1用双引号括起来,此时“1”代表的是一个字符串型常量, 与字符型常量1也是有区别的。,C+规定以字符0作为字符串结束标志。如,一个字符串“HELLO”,在内存中以“0”为结尾。“0”在输出时不作显示,只用来表示字符串的结束。,字符串型常量,“HELLO”,H E L L O 0,注意“P”与P不同。前者为字符串,在机内存储形式 为 P 0 ,而P就是一常数P。,define PI 3.14159 main ( ) int
35、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。,符号常量比起一般常量来,不但使用方便,实际值容易修改,而且更形象化,便于记忆。,符号常量,数据类型 布尔型数据,布尔型变量的说明: 例:bool flag; 布尔型数据的取值: 只有 fa
36、lse 和 true 两个值,*C+中: const float pi=3.14159; *常量定义中初始化的值可以是一个常量表达式: const int size=100*sizeof(int); const int number=max(15,23); (错)注意:#define 与const的区别,2.3 变量,变量是什么,变量程序在运行过程中,其值会发生改变的量。,变量:变量值 23,变量名 length,变量类型 int,C+规定必须以字母或下划线打头,后面跟字母、数字或下划线(如:a3, Z_5e, _D7d等),并且不能与保留字、函数名、类名等C+专用名相同(如 char, fo
37、r, int 等)。 注意:(a)长度:早期的C编译程序只认前8个字符。VC允许256个字符。 但一般不要超过31个字符为宜,1、命名,(b)约定: 变量名、函数名、和数据类型名等用小写字母自定义的类型名(如类)、 符号常量名及宏用大写字母;下划线开头的名字常为系统程序(库函数用), 用户一般不用。(c)要有意义:如用Sum表示“求和变量”,不要用aaa,A1,B12之类名字。 例: my_car 小写my_Car 骆驼iMyCar 匈牙利标识法(WINDOWS标准命名法),下面我们看一段关于变量的程序:,程序中的num1,num2和sum都是变量。它们的值在程序的运行过程中都发生了变化。变量
38、定义后,各变量的初值都是不确定的。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; ,变量:需要定义,说明其存储属性和数据类型。,例:static int nward=0, nkayword;,同一语句中,不能混合定义不同类型的变量。,2、 变量的定义,变量的
39、存储类型,auto存储类 属于一时性存储,其存储空间可以被若干变量多次覆盖使用。 register存储类 存放在通用寄存器中。 extern存储类 在所有函数和程序段中都可引用。 static存储类 在内存中是以固定地址存放的,在整个程序运行期间都有效。,(1) double area, radius=23;(2) double area, radius;radius=23;,3、变量赋值与初始化,算术运算符与算术表达式,表达式: 一个常量或标识对象的标识符是一个最简单的表达式,其值是常量或对象的值 一个表达式的值可以用来参与其它操作,即用作其它运算符的操作数,这就形成了更复杂的表达式 包含在
40、括号中的表达式仍是一个表达式,其类型和值于未加括号时的表达式相同 算术表达式: 由算术运算符、操作数和括号构成的表达式称为算术表达式 a+b+(c-b)/2+5,Page 104,、基本算术运算符+ - * / %(取余) (若整数相除,结果取整) 优先级与结合性 先乘除,后加减,同级自左至右 ,(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,在 C+语言中,表达式 (7/3+
41、1)+ 5/6 的值是( )。A)2 B)3 C)4 D)不能确定,B,(余的符号与被除数相同,不允许对浮点数操作) 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 :
42、 “ n endl; /(-5),( 2.) % 取余,()取作为表达式的值, 然后 ()先;然后取作为表达式的值 () 取; () , 取例: int a=3;int b=+a;couta“ “bendl;int c=a+;couta“ “cendl;,4 5 4,、增量和减量 ,,.赋值运算 = 赋值运算符用于将一个数据传给一个变量。 例如: int x; x = 5; 将值 5 传给变量 x。其中=号即赋值运算符。A: (1) 双目运算符,从右到左 d=a=b (2) 赋值操作是一个表达式,每个表达式在求值后都有一个确定的值,其值 为赋值号左边表达式的值例:cout(x=5)endl;
43、(3) 当赋值号两边类型不一至时,根据左边类型转,int a=10; float x=70000.5; x = a; 将 a 的值 10 赋给 x,x 的值为 10.0。int a=10; float x=70000.5; a = x; 将 x 的值 70000.5 赋给 a,但 70000.5 超过了 int 的取值范围,于是将超过的部分扔掉了,a 是多少不知道了。 特别注意,上面的赋值语句,编译时是可以通过的。,复合的赋值运算符,有10种复合运算符: +=, -=, *=, /=, %=, =,&=,=,|= 例:a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8),赋值
44、运算符和赋值表达式 赋值表达式举例,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,例:x=6;x+=x-=x*x;若x为整型变量,则上述语句执行后 x 的值是_(4)_。A. 36 B. -60 C. 60 D. -24,B,、逗号运算和逗号表达式,格式: 表达式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 );coutdendl;,Page 115,、关系运算与关系表达式,用关系运算符将两个表达式连接起来,就是关系表达式 关系运算是比较简单的一种逻辑运算,优先次序为: = = !=优先级相同(高) 优先级相同(低)关系表达式是一种最简单的逻辑表达式 其结果类型为 bool,值只能为 true 或 false。 例如:ab,c=a+b,x+y=3,