面向对象程序设计2.ppt_第1页
面向对象程序设计2.ppt_第2页
面向对象程序设计2.ppt_第3页
面向对象程序设计2.ppt_第4页
面向对象程序设计2.ppt_第5页
已阅读5页,还剩212页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+语言程序设计,基本数据类型与数值表达式,C+的起源和特点,C+语言概述 C+的产生 面向对象的编程语言的产生 60 年代中后期,Simula67语言的设计者Dahl,Nygaard和Myhrbang提出了对象的概念。Simula语言是编程语言中首先使用数据封装(data encapsu-lation)的。 但是由于Simula编译器价格昂贵,无法在市场上推广。,C+的起源和特点,C+语言概述 C+的产生 面向对象的编程语言的繁荣 1984 年,美国苹果公司推出Object Pascal 和 Object Assembler。1985 年,美国PPI 公司开发Object-C,日本IBM 公

2、司分部开发 SPOOL,即面向对象的Prolog语言。1986 年,德国Kaiserslautern大学开发Mod Pascal,是Pascal的面向对象的扩充,AT/函数原型的说明 int main()/主函数 int x, y,sum; cout x; cin y; sum=add(x,y); cout “The number is :” sum n; return 0; int add(int a, int b)/定义add函数 int c; c = a+b; return c; ,数据类型,C+数据类型概述 整型类:int、short、long、char、enum、bool 实型类:f

3、loat、double、long double 数组类:数组和字符串 指针类:指针和引用 记录类:结构(struct)和联合(union),数据类型,整型和实型 短整型:short, short int, signed short, signed short int, unsigned short, unsigned short int 整型:int ,signed, signed int, unsigned , unsigned int 长整型:long, long int, signed long, unsigned long, unsigned long int 单精度:float 双精

4、度:double, double float, long float 长双精度:long double,数据类型,常量与变量 常量 程序运行过程中不能被改变的量。 一般的数据显式写法均表示常量。 如程序中: 20 整型常量 15.8 实型常量 a 字符常量,数据类型,常量与变量 符号常量用一个符号表示一个常量 例: const int PRICE = 30; main ( ) int num, total; num=10; total=num*PRICE; cout total endl; ,数据类型,常量与变量 符号常量 说明: 、如果用const定义的是一个整型常量,关键字可以省略。所以下

5、面两行定义等价: const int LIMIT=100; const LIMIT=100; 、常量一旦被建立,在程序的任何地方都不能改变。 、const定义的常量可以有自己的数据类型。,数据类型,常量与变量 变量:程序执行中可以改变的量,包括变量名和变量值。 变量名:用标识符命名,对应一定数量的内存存贮单元,其单元数视变量类型而定。 标识符:由字母、数字、下划线组成且由字母或下划线开头的字符串。 标识符可用来命名变量及作为常量名、函数名、类型名、文件名等,一个程序内不得有重复名。 如: _sum, sum, student_name, price等,数据类型,常量与变量 变量的定义与初始化

6、格式:类型修饰符变量描述,变量描述; 变量须先定义,后使用,例: unsigned a; int x, th1=4, th2=ff(th1+5); double var1=3.14, var2; int x=6; 等价于: int x; x=6;,数据类型,整型数据 整型常量 十进制如: 256, 308, 120等 八进制:以数字0开头表示的整数 例:0235, 0146 012等. 0235=28238515710 十六进制:以“0 x”开头的整型数 如: 0 x16, 0 x28,0 xa3,数据类型,整型数据 整型变量 基本整型: int a, b, c;(字节) 短整型: short

7、 int 或 short a, b, c;(字节) 长整型:long int 或 long a, b, c;(字节) 无符号型 unsigned a, b, c; unsigned short a, b, c; unsigned long a, b, c;,数据类型,整型数据 整型变量 例: main ( ) int a, b, c, d; unsigned u; a=12; b= 24; u=10; c=a+u; d=b+u; cout a+u=” c “b+u=” d endl; ,数据类型,实型数据 实型常量 有二种表示形式 1.十进制形式 如: 0.126, 523.64等 2. 指数

8、形式 对于较大或较小的数,可用指数形式 0.0000126 1.26E 5 1260000 1.26E+6 或1.26E6 E , e 均可.,数据类型,实型数据 实型变量 分为单精度型、双精度型和长双精度 分别为: float x, y, z; (单精度,字节) double a, b, c; (双精度,字节) long double l, j, k;(长双精度,字节),数据类型,字符型数据 字符常量 用一对单引号括起来的单个字符。 如: a , A , 二者不一样。 此外,以“ ”开头后接一个字符或n个字符代表了一种特殊字符常量。 转义字符。 如: n 换行, r 回车,数据类型,字符型数

9、据 字符常量 注意: 表示ASCII码字符,如: 101 表示字母A,又: x 十六进制ASCII 字符 x 41 表示字母A,数据类型,字符型数据 字符变量 其定义方式为: char c1, c2; c1= A ; c2= B ; 字符变量只占一个字节单元。,数据类型,字符型数据 字符变量 其定义方式为: char c1, c2;(字节) c1= A ; c2= B ; 说明:char有可能表示有符号字符,也有可能表示无符号字符,取决于编译系统。,数据类型,字符型数据 字符数据的实际存放形式 一个字符存入一个字符变量。其对应单元存放的是其ASCII码,即ASCII码的二进制形式。 由此:字符

10、变量中的数据是一整型数据。输出时既可输出字符,亦可输出整数,且字符变量可作整数运算。 举例:,例1: main ( ) char c1, c2; c1=97; c2=98; cout c1 “ “ c2 endl; ,运行结果 a b,例2: main ( ) char c1, c2; c1= a ; c2= b ; c1=c1 32; c2=c2 32; cout c1 “ “ c2; ,运行结果 A B,数据类型,字符型数据 字符串常量 用双引号括起来的字符串。 例: Good Morning! 注意A 与“A”是不同的。 字符串存放时, 在最后加上“ 0” 空字 符。,字符型数据 字符串

11、常量 、字符串长度=实际字符个数+1,但最后0不输出. cout Good Morning! “ endl; 2、单个字符的字符串不能赋给字符变量。 例: char c; c= a ; 是错误的。,数据类型,各类数值型数据间的混合运算 C语言允许双精度、单精度、整型及字符数据之间混合运算 10+a+1.58765.1234 b 是允许的。 规则:先转换成同一类型,再计算。,数据类型,各类数值型数据间的混合运算,数据类型,各类数值型数据间的混合运算,数据类型,算术运算符与算术表达式 C运算符: 运算的符号表示。 算术运算符 +, , , /, % , 等 关系运算符 , =, , , , , i

12、nt (x ); 则x本身仍为实型,而(int)x由一个中间变量(整)存放x的整数部分。,数值表达式,例: main ( ) float x; int i; x=3.6; i= int (x); cout “x=“ x “,” “i=“i; ,算术运算符与算术表达式 可利用强制类型转换运算符将一个算术表达式转换为所需类型 总结以上类型转换,有二种: 强制类型转换(有时会损失数据精度) 系统自动隐性转换(不会损失数据精度) 强制类型转换运算优先于算术运算符 若x为float, 则 x%3 不合法。 但可用 int (x)%3 来解决。,数值表达式,算术运算符与算术表达式 自增,自减运算符 + +

13、 自增1 自减1 设有int i = 3; 则: + +i, i+都会使i变为4,但有区别: +i: 先使i值+1,再使用i值; i+:先使用i值,再使i值+1;,数值表达式,算术运算符与算术表达式 j= +i; j=4, i=4 (i=i+1; j=i;) j=i+; j=3, i=4 (j=i; i=i+1) 同理: i, i ,均使i值1,但: i: 先使i值1,再使用i值; i : 先使用i值,再使i值1; 如:i=3; cout i+; / i=3; cout +i; / i=4;,数值表达式,算术运算符与算术表达式 自增,自减运算符 几点注意: +和 运算法只能用于变量,不得用于常

14、量和表达式。 如:5+ +, (a+b)+ +均为不合法。 +, ,的结合性为从右至左,而一般算术运算符为从左至右。如: i+; / “”和“+ +”为同一优先级。 i+; /相当于(i+); 若 i=3, 则结果为3, i为4. +, 主要用于循环变量自增或自减。,数值表达式,算术运算符与算术表达式 自增,自减运算符 有关表达式使用中的问题说明 要慎用+、 运算符。 如: 表达式(i+)+(i+)+(i+) (i=3) 一般认为: 从左至右: 3+4+5=12,i6。 但Turbo C. MSC 都是先取三个原值 相加: i+i+i=9 i6,数值表达式,算术运算符与算术表达式 自增,自减运

15、算符 有关表达式使用中的问题说明 如果表达式数为: k=(+i)+(+i)+(+i) 则:先对i进行3次自加,为6,然后三个i相加为18,而i为6。 2. 在表达式中,有的运算符为一个字符,有的为两个字符。 例: i+j, 究竟理解为(i+)+j还是i+(+j)? 一般地: 自左至右尽可能多地将若干字符组成一个运算符。,数值表达式,算术运算符与算术表达式 自增,自减运算符 3. 在函数调用时,如: cout i i+); 若i=3, 若参数计算从左至右, 则输出 3, 3 若从右至左, 则输出4, 3 上述问题看似复杂,最好上机实践。,数值表达式,赋值运算符与赋值表达式 符号“ = ”为赋值运

16、算符。 赋值时,两边类型若不一致,则按以下规则转换: 将实型数据(无论单,双精度)赋给整型变量时,舍弃小数。 整型数据赋给实型变量,数值不变,但按实数形式存放。 字符型数据赋给整型变量时:,数值表达式,赋值运算符与赋值表达式 符号“ = ”为赋值运算符。 赋值时,两边类型若不一致,则按以下规则转换: (1)字符无符号整型变量,则存入低8位,高8位补零。 (2)字符带符号整型变量,则字符高位扩展。 4. 将intlong int, 进行符号扩展。 即: 符号扩展, 低16位long 的低16位。,数值表达式,赋值运算符与赋值表达式 符号“ = ”为赋值运算符。 赋值时,两边类型若不一致,则按以下

17、规则转换: 5. long int int 则高16位截断。 6. 将unsigned int 型long int高位补0。 而位数相同部分赋值 unsigned int int unsigned long long unsigned short short,数值表达式,赋值运算符与赋值表达式 符号“ = ”为赋值运算符。 赋值时,两边类型若不一致,则按以下规则转换: 原值传送,但数据大小不能超值。 如: unsigned int a=65535; int b; b=a; 则越界。 7. 非unsigned 型长度相同的unsigned型数据,原样传送(包括符号位),数值表达式,赋值运算符与赋

18、值表达式 复合赋值运算符:在“ ”号之前加一个其它运算符。 例: a+=3; 相当于 a=a+3 x=y+8; 相当于 x=x (y+8) x%=3; 相当于x=x% 3 C+语言规定:凡是二目运算符均可构成复合运算符。,数值表达式,赋值运算符与赋值表达式 赋值表达式 一般形式: 例:x=10 为一赋值表达 其中又可以是一个赋值表达式。 例: x=(y=10) 相当于 y=10;x=y 由于赋值号为右结合性,于是 ( ) 可省略, 即为:x=y=10;,数值表达式,赋值运算符与赋值表达式 赋值表达式 又: a=5+(c=6) c=6, a=11 a=(b=4)+(c=6) b=4, c=6,

19、a=10 a=(b=10)/ (c=2)b=10,c=2, a=5 进一步,还可用复合赋值运算符作下列运算: 例: a + = a =aa (设a12) 步骤: aa144. a =a a a=a a a=12 144= 132 a + = 132 a = a+(132) = 264,数值表达式,逗号运算符与逗号表达式 一般形式: 表达式1, 表达式2 计算规则: 先计算表达式1,再计算表达式2,最后值为表达式2的值。 例:a=35, a 4 则: 先计算3 5, a15, a 4=60,结果为60。,数值表达式,逗号运算符与逗号表达式 又如: (a=35, a 4), a+5 3 5=15a

20、 a 4=60 (此时a值仍未变) a+5a 即 20a. 结果为20(作为逗号表达式的值),数值表达式,逗号运算符与逗号表达式 扩展形式: 表达式1, 表达2, ,表达式n 结果为表达式n的值 注意: x=(a=3, 63) 赋值表达式, x18; x=a=3, 6 a 逗号表达式, x3。 逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。,数值表达式,C+语言程序设计,逻辑运算和判断选取控制,控制语句 if ( ) else (条件) for ( ) (循环) while ( ) (循环) do while (循环) continue (结束本次循环) switc

21、h (多分支选择),C语句概述,控制语句 break (中止整个循环) goto (转移) return ( 函数返回) ( )表示条件, 表示语句 函数调用语句 sin(x) ;,C语句概述,表达式语句 加; 如: i=i+1; i+; x+y; 其函数调用也可理解为表达式语句。 空语句 ; 任何事情都不做。 复合语句,C语句概述,用 括起来的一系列语句。 如: z = x+y; t=z/100; cout t; ,C语句概述,顺序结构 先执行A, 再执行B,程序的三种基本结构,选择结构 存在某条件P, 若P为真,则执行A, 否则执行B。,程序的三种基本结构,循环结构 当型:当P条件成立时(

22、T),反复执行A,直到P为“假”时才停止循环。,程序的三种基本结构,循环结构 直到型:先执行A,再判断P,若为F,再执行A,如此反复,直到P为T。,程序的三种基本结构,另外:由选择结构可以派生出另一种基本结构多分支结构。 已证明:上述三种结构组成的程序可以解决全部的问题,所以任何一种高级语言都具备上述三种结构。,程序的三种基本结构,由赋值表达式加分号;构成 与其它高级语言相比有以下不同点: “ =”为一运算符,由此,构成一赋值表达式,可出现于表达式能出现的任何地方: if ( (a=b)0) t=a;,赋值语句,关系运算符概念 关系运算比较运算, 如: a3为一比较运算,当a=5, a3成立。

23、结果称为“ 真”, 否则, 如: a=1,a3不成立,为假。 上述表达式a3称为关系表达式。,关系运算符和关系表达式,关系运算符及其优先次序 六种关系运算符 = = = != 优先级为: 、, =为同一优先级, = =, !=等为同一优先级, 但前者高于后者。 、关系运算符优先级低于算术运算符。 、关系运算符优先级高于赋值运算符。,关系运算符和关系表达式,关系运算符及其优先次序,关系运算符和关系表达式,关系表达式,关系运算符和关系表达式,逻辑运算符及优先级 三种: ,if的三种形式 形式2:if(表达式)语句A else 语句B 功能: 表达式为非0,执行语句A;表达式为0,执行语句B。,if

24、 语句条件判断,例: if(xy) cout x; else cout y;,if的三种形式,if 语句条件判断,if的三种形式,if 语句条件判断,if的三种形式 注意的问题: 1. 表达式可以是逻辑、关系,甚至是算术表达式。 如: if (3) cout o.k; if (a) 2. 上述形式中的语句必须以分号结束; 3. 上述形式中的语句可以是由 括起来的复合语句。此时,在 外可以不用分号。,if 语句条件判断,if语句的嵌套 在if语句中, 又可以是if语句称为嵌套。,if 语句条件判断,if语句的嵌套,if 语句条件判断,条件运算符 一个简单的条件赋值语句或条件表达式。 条件运算符为

25、? : 三目运算符。 一般形式: 表达式1?表达式2: 表达式3 功能:先判表达式1,若非0,则值为表达式2的值,否则为表达式3的值。 max=ab? a:b; 当ab. max a. 否则maxb,if 语句条件判断,条件运算符 注意事项 1. 条件运算符优先于赋值运算符。 例: max=(ab? a:b)可去掉( ) 2. 条件运算符低于关系运算符和算术运算符。 例: max=ab? a:b+1 max= ab? a:(b+1)并不是 max=(ab? a:b)+1,if 语句条件判断,条件运算符 注意事项 3. 条件运算符结合性为从右至左. 如: ab? a:cd ? c:d 相当于 a

26、b? a:(cd? c:d) 4. 条件表达式不能取代一般的if语句,只有当if 的两 个分支为给同一变量赋值时才可替代if. 举例:,if 语句条件判断,条件运算符 注意事项 if (ab) cout b? a:b;,if 语句条件判断,条件运算符 注意事项 5. 表达式1、表达式2、表达式3可类型不同。 例4.4 :输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。,if 语句条件判断,条件运算符,if 语句条件判断,main ( ) char ch; cin ch; ch=(ch=A ,问题: 当某一表达式有n个取值,每一取值执行一语

27、句,则如果用内嵌if十分繁锁,而用switch简单. 一般形式: switch(表达式) case 常量表达式1: 语句1 case 常量表达式2: 语句2 case 常量表达式n: 语句n default : 语句n+1 ,switch 语句开关语句,switch 语句开关语句,功能: 1、根据表达式的取值, 判断其与哪一个常量表达式相等。如=表达式i,则自语句i开始执行,直到语句n+1止。 、若与所有常量表达式值不相等,则从default后的语句开始执行。 以上存在一个问题: 没有完全起到分支作用。 解决办法: 增加break语句, 使之跳出switch结构。,switch 语句开关语句,

28、一般形式改为: switch (表达式) case 常表1: 语句1; break; case 常表2: 语句2; break; case 常表n: 语句n; break; default: 语句n+1; ,switch 语句开关语句,注意事项 1. 常表值必须互不相等,否则二异性。 2. case顺序无关紧要。 3. 不一定非用break不可,有时几种情况合并执行一组语句。,switch 语句开关语句,注意事项,switch 语句开关语句,switch (grade) case A : case B: case C: cout 60“ endl; break; case D: cout “6

29、0“ endl; break; ,C+语言程序设计,循环控制,四种形式循环 1.if语句与goto语句 2. while 语句 3. do while 语句 4. for语句,概述,goto语句 形式: goto标号; 功能: 无条件转向标号处。 标号:用标识符命名。 与if构成循环,goto语句及与if语句构成循环,例: 求,main ( ) int i=1, sum=0; loop: if (i=100) sum=sum+i; i+; goto loop; cout sum; ,goto语句及与if语句构成循环,while语句 形式: while (表达式)语句 执行过程: 先判断表达式的

30、值。若0.则执行其后面的语句,否则while执行完毕。,while语句,流程图,while语句,流程图: 将上述例子用while语句写出 while (i=100) sum+ =i; i+; ,while语句,形式: do语句while(表达式); 执行过程: 先执行语句,再判表达式的值,若0,再执行语句,否则结束循环 流程:,do while语句,程序如下: main ( ) int i, sum=0; i=1; do sum=sum+i; i+; while (i=100); cout sum endl;,do while语句,while语句与dowhile语句的区别: 当第一次执行时,若

31、表达式=0时,则while语句与do while有所不同,do while 执行一次后面的语句,而while不执行。,do while语句,形式: for(表达式1; 表达式2; 表达式3)语句 执行过程: 首先计算表达式1,接着执行表达式2,若表达式2的值0,则执行语句,接着计算表达式3,再判断表达式2的值.依此重复下去,直到表达式2的值=0(假)。,for语句,for语句,用for语句写出上述例子: for ( i=1; i=100; i+) sum+=i; for语句完全可以用while代替,但for直观、简单、方便,for用while代替的流程: 表达式1; while(表达式2) 语

32、句 表达式3; ,for语句,for语句的几种特例: 、可以省略表达式1, 但须保留分号;这时在for之前就得赋值给循环变量;,for语句,例: 任意输入两个整数a, b,求,main ( ) int i, j, a, b, sum; cout a; cin b; i=a; j=b; if (ab) i=b; j=a; for (; i=j; i+) sum+=i; cout “sum=“ sum; ,for语句的几种特例: 2、表达式2一般不可省略,否则为无限循环。 例: for (i=1; ; i+) sum+=i; 相当于条件永真、永不为0,若用while表示: 相当于:while (1

33、) sum+=i; i+; ,for语句,for语句的几种特例: 3、表达式3亦可省略,但在循环体中须有语句修改循环变量;以使表达式2在某一时刻为0而正常结束循环。 例: for (sum=0,i=1;i=100;) sum+=v; i+; ,for语句,for语句的几种特例: 4、若同时省略表达式1,表达式3,则相当于while(表达式2)语句。 例: for (; i=100;) sum+=i; i+; 相当于 while (i=100) sum+=i; i+; ,for语句,for语句的几种特例: 5、三个表达式均省略 即for(;)语句则相当于while(1)语句。 6、表达式1、表达

34、式3可以是逗号表达式,以使循环变量值在修改时可以对其它变量赋值。 如: for (sum=0, i=1; i=100; i+, i+) sum=0; for (i=1; i=100; i=i+2),for语句,for语句的几种特例: 5、表达式2可以是关系表达式,也可以是数值表达式或字符表达式。只要值0.即执行循环体。 例: for (i=0; (c=getchar( )!=n; i+=c);,for语句,嵌套:循环体中又包含了另一个完整的循环语句。 C有三种循环语句,均可以相互嵌套: while ( ) while ( ) ,循环的嵌套,循环的嵌套,for (; ;) while ( ) d

35、o while ( ); ,循环的嵌套,for (; ;) while ( ) do while ( ); ,均为正确的嵌套,但:,循环的嵌套,要注意语句的包含关系。,几种循环的比较,对于同一问题, 四种循环可相互替代。但不提倡用goto. for循环功能强于while, dowhile.但若不是明显地给出循环变量初终值(或修改条件),则应用while 或do while.以增强程序的结构化和可读性。 要防止无限循环死循环。 循环过程中,为了结束本次循环或跳出整个循环。分别要用到continue和break语句。,break语句和contiune语句,break语句 问题:计算圆的面积r2,

36、半径取1, 2, 3, 4,当面积100时结束。 for(r=1; r100) break; cout area;,break语句和contiune语句,break语句 用break,退出循环,进入for语句的下一条语句。 break只能用于循环语句和switch语句。,break语句和contiune语句,continue语句 问题:编写程序,打印100200中不能被3整除的数。 main( ) int n; for (n=100; n200; n+) if (n%3!=0) cout n endl; ,break语句和contiune语句,continue语句 换一种方式: main (

37、) int n; for (n=100; n=200; n+) if (n%3= =0) continue; cout n; continue语句起了结束本次循环的作用。,C+语言程序设计,数组,数组,数组:同一种(基本)类型按一定顺序组合在一起的数据类型。 数组分为:一维数组、二维数组、三维数组等。,一维数组,一维数组的定义 形式:类型说明符 数组名常量表达式; 例: int a 20; float x 100; 数组名的确定方法同变量名。 用方括号 表示数组元数个数。 常量表达式为常量和符号常量。不允许有变量,其表达式的值代表了元素的个数。,一维数组,一维数组的定义 例: int a20;

38、 表示有20个元素 且元素从0开始编排:a0,a1,a 19 可在定义时对静态数组和外部存储(全局)数组赋初值, 方法如下: 对全部元素赋初值 static int a10=10, 11, 12, 13, 14, 15, 16, 17, 18, 19,一维数组,一维数组的定义 对部分元素赋初值。 static int a10=0,1,2,3,4; 如此,只有前5个元素初值确定,后5个元素由系统设置。 如对数组元素赋同一初值,必须一一写出: static int a10=0,0,0,0,0,0,0,0,0,0; 不可写成: static int a10*0; 若赋全部元素的初值,可省略常量表达式

39、 a =0,1,2,3; 表示a4,即只有4个元素。,二维数组,二维数组的定义 形式 : 类型说明符 数组名常量表达式 常量表达式 例: int a4 10; float x8 20; 不可将定义写为int a4,10。 可将二维数组的元素看成为若干个特殊的一维数组。 如: int b3 4;,二维数组,二维数组的定义,则: 有三个特殊的一维数组b0,b1, b2,每一个又有四个元素: b00, b01, b02, b03, b10, b11, b12, b13, b20, b21, b22, b23,二维数组,二维数组的定义 二维数组的存放方式为: 按行存放。由此可推广 至三维、n维数组的定

40、义和存放。即: 最右边的下标变化最快。 初始化: 按行给二维数组赋初值: static int a34=1,2,3,4, 5,6,7,8, 9,10,11,12,;,二维数组,二维数组的定义 可以对部分元素赋初值,但需表达清楚。如: static int a34=1,2,3,8。,二维数组,二维数组的定义 可通过赋初值决定数组大小。如为二维,则只可省略第一维的大小. static int a 4=1,2,3,12;,二维数组,二维数组元素的引用 形式: 数组名下标下标 其中的下标为整型表达式,但不得越界。 二维数组元素相当于同类型的简单变量。,字符数组,定义:存放字符数据。字符串用字符数组存放

41、。 字符数组的定义,字符数组,字符数组的初始化 直接给出字符串中的各字符。 static char a4= G , o , o , d ; 若字符多于元素个数,则语法错,反之,后而补“0” 可以去掉定义时的大小设置,而通过自动赋值决定长度(大小)。 static char x = I , , a , m , , a, , s , t , u , d , e , n , t ;,字符数组,字符数组的初始化 前面说过,字符串常量用“ ” 表示,且由 0结尾。 char x =I am a student. ; 则长度为15+1=16, 其中x15存放 0,其中 亦可省略,写成: char x =I

42、 am a student. ;,字符数组,字符数组的引用 每一个字符数组元素相当于一个字符变量。 字符数组的输出 对于已作为字符串变量的一维数组,一般不在使用下标,而是直接通过数组名访问存于其中的字符串,如: char c =I am a student; cout c endl;,字符数组,字符数组的输入 利用输入流操作符 cin s1 s2; 若键入: ABCD 123XYZ WTR 则:ABCD s1 123XYZ s2 用操作符进行输入,总是滤掉前导空白字符(空格符、回车符r、换行符n、制表符t),用输入到变量中的字符串只能是不含空白字符的字符串。,字符数组,字符数组的输入 利用输入

43、流函数getline。 char s81; cin.getline(s,81); 函数的第一个参数是字符串变量; 函数的第二个参数表明字符串变量的大小,以此限定输入字符串的得最大长度。如果键入的字符串过长,则变量中只包含前面的若干字符。 上例中的s所能存放的字符串的最大长度为(留一个字节存放结束符0)。,C+语言程序设计,函数,函数的声明与头文件的使用,一个C+程序就是由一系列函数声明和其他声明(如全局变量声明)构成的。函数的声明可分为三类: 定义性声明 参考性声明 参考性定义,函数的声明与头文件的使用,函数的定义性声明 即函数定义,是为实现一个函数提供信息的,是对函数的完整描述。 定义函数的

44、基本格式: 类型修饰函数名(形式参数表)函数体 其中的形式参数表是一系列用逗号隔开的形式参数声明,可以是空,也可以是保留字void,它们都表示无参数; 函数体就是一个复合语句,即用 括起来的语句系列。,函数的声明与头文件的使用,函数的参考性声明 是为调用函数提供信息的,它对函数的描述不完整,其中不包含对函数体的描述。 函数参考性声明的最典型的形式就是函数原型(prototype)其基本格式如下: 类型修饰函数名(形式参数表); 函数原型是一条语句,它必须以分号结束。,函数的声明与头文件的使用,函数的参考性定义 主要指内联函数(inline)的声明和函数模板。 它们虽然对函数进行了完整的描述,但

45、编译系统只用在调用的情况下才会生成相关的程序代码。,函数的声明与头文件的使用,函数声明中的类型修饰 用来说明函数返回值的类型。 对于有返回值的函数,必须用语句: return 表达式; 结束程序运行,表达式的类型应当与类型修饰符的限定类型相同;若两者不兼容,编译器会产生编译错误。 例: Double square ( double n ) return n*n;,函数的声明与头文件的使用,函数声明中的类型修饰 对于无返回值的函数,必须用: void 作为类型修饰,称之为void函数。 在无返回值的函数中可以用: return; 结束程序运行,也可以不用热return语句。 例: void he

46、llo( void ) cout “hello!” endl;,函数的声明与头文件的使用,头文件 在程序中,要求一个函数的原型出现在该函数的调用语句之前。当一个函数的定义在后,而对它的调用在前时,必须将该函数的原型放在调用语句之前。 当一个函数的定义在前,而对它的调用在后时,一般不必再单独给出它的原型。 用函数定义取代函数原型,存在以下问题: 、函数的定义必须出现在函数调用的同一文件中,别的文件无法使用该函数,因而限制了函数的使用范围;,函数的声明与头文件的使用,头文件 、函数定义必须以源程序的形式呈现,不便于将之作为产品提供; 、应用系统只能有一个程序文件,不便于实现大系统、多人分工合作;

47、、在若干函数相互调用形成递归情况下,无法实现所有的函数定义都位于其调用处之前; 解决方案: 利用头文件,使函数的定义与函数的原型有明确的分工。,函数的声明与头文件的使用,头文件 在多程序文件的应用系统中,实现函数定义和函数调用位于不同的程序文件中,但它们必须遵守共同的接口标准,而描述这种接口标准的任务就由函数原型来承担。 头文件的主要任务就是记录、保存函数原型。每个调用该函数的程序文件只需用: #include 命令把头文件插入到文件的开始就可以了。,函数的声明与头文件的使用,头文件 一般形式: #include “头文件名” 或 #include ,函数的调用与参数传递,函数的调用 两种方式

48、: 、作为表达式; 、作为语句; 两种调用方式在语法格式上是一样的,但所处的位置不同。 作为表达式的函数调用位于一个表达式中,函数必须有返回值。 例:area = area_of_round(radius);,函数的调用与参数传递,函数的调用 作为语句的函数在函数调用后加语句结束符而构成的,因而函数调用构成了函数的主体。相应的函数可以没有返回值,如果有,也被舍弃不用。其功能是通过函数的副作用体现的。 例:delay_time( );,函数的调用与参数传递,函数的参数传递 在调用一个函数时,须按函数原型中形式参数表所规定的顺序和数量提供对应的实际参数。 每个参数可以是常量、变量、函数调用或含有操

49、作符的复杂表达式。 主函数声明为: Void main( ) 时是一无返回值函数。 而声明为:,函数的调用与参数传递,函数的参数传递 而声明为: int main () 时是有返回值函数,返回值通常用来表明程序结束的状态,一般用0表示正常结束,用非0值表示异常结束。 C+中的函数是以“传值”的方式传递参数。即只把实参表达式的值传递给被调用的函数中对应的形式参数。 例:,函数的调用与参数传递,double sqr( double n) n*=n; return n; void main( ) double m=7.0; cout endl m; cout end l sqr(m); cout e

50、nd l m; ,带有缺省参数的函数,C+在说明函数原型时,可为一个或多个参数指定缺省的参数值,以后调用此函数时,若省略其中某一参数,C+自动地以缺省值作为相应参数的值。 例:int special ( int x=5, float y=5.3); x、y的缺省值分别为3和5.3。 当进行函数调用时,编译器按从左到右顺序将实参与形参结合,若未指定足够的实参,则编译器按顺序用函数原型中的缺省值来补充所缺少的实参。,带有缺省参数的函数,例: special (100,79.8); /x=100, y=79.8 special (25); /x=25, y=5.3 special ( ) /x=5,

51、 y=5.3 说明: 、在函数原型中,所有取缺省值的参数都必须出现在不取缺省值的参数的右边,亦即,一旦开始定义取缺省值的参数,就不可以再说明非缺省值的参数。 例:int fun ( int i, int j=5, int k ) ; /错误 int fun ( int i, int k, int j=5 ); /正确,带有缺省参数的函数,、在函数调用中时,若某个参数省略,则其后的参数皆应省略而采用缺省值。不允许某个参数省略后,再给其后的参数指定参数值。 例:special ( , 21.5 ) ;/错误,数组参数,可以把整个数组作为参数传递给函数 特点: 直接用数组名作参数时,则为地址传送(不

52、是值传送),即实参数组的首地址传递给形参数组首地址。所以,实参、形参数组共享相同的内存单元。 形参数组可不指定大小,可用另一参数作大小,以确定使用实数组的元素个数。 形参、实参数组必须类型一致。 多维数组方式一样,仅第一维大小的说明可省略。,例:有一个一维数组score,内放10个学生成绩,求平均成绩。,float average (float array, int n) float aver, sum=array0; for (int i=1; in; i+) sum+=arrayi; aver=sun/n; return aver; ,void main( void ) static fl

53、oat score_15=98.5,97,91.5,60,55; static float score _2 10=67.5, 89.5, 99, 69.5, 77, 89.5, 76.5, 54, 60 ,99.5; cout “the average of class A is” average(score_1, 5)endl; cout “the average of class B is” average(score_2, 10)endl; ,运行结果如下: the average of class A is 80.40 the average of class B is 78.20,

54、内置函数(inline函数),在函数说明前,冠以关键字“inline”,该函数就被声明为内置函数。 每当程序中出现对该函数的调用时,编译器使用函数体中的代码替代函数表达式。 内置函数能加快代码的效率,减小调用开销。 内置函数在被调用之前必须进行完整的定义,否则编译器将无法知道应该插入什么代码。 尽管inline函数的声明中包含函数体,但它并不是定义性声明,而是参考性定义,与参考性声明一样应该放置在头文件中。,内置函数(inline函数),例: #include inline float circle (float r) return 3.1416*r*r; int main ( ) for (

55、int i=1;i=3;i+) cout “r=“ i “ area = “ circle (i) endl; return 0; ,内置函数(inline函数),程序运行结果如下: r=1area=3.1416 r=2area=12.5664 r=3area=28.274401,函数重载,函数重载 当两个或两个以上的函数共用一个函数名时,称为函数重载。 重载函数 被重载的函数称为重载函数。 例: 编写求整数、浮点数和双精度数的平方数的函数。 用C语言处理,必须编写三个函数:,函数重载,Isquare( int i ); /求整数的二次方 Fsquare( float i ); /求浮点数的二

56、次方 Dsquare( double i ); /求双精度的二次方 用C+编写: include int square( int I ) return I*I ; float square( float f ) return f*f ;) ,函数重载,double square( double d ) return d*d;) int main ( ) int I=12; float f=3.4; double d=5.67; cout i * i = square(i) endl; cout f * f = square(f) endl; cout d * d = square(d) endl; return 0;,函数重载,程序运行的结果如下: 12 * 12 =144 3.4 * 3.4 =11.56 5.67 * 5.67 = 32.1489,函数重载,程序运行的结果如下: 12 * 12 =144 3.4 * 3.4 =11.56 5.67 * 5.67 = 32.1489 例:参数个数不同的重载 #include int mul ( int x, int y ) return x * y;,函数重载,int mul ( int x, int y, int z ) return x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论