《C程序设计》2010复习.ppt

上传人:本田雅阁 文档编号:2152550 上传时间:2019-02-23 格式:PPT 页数:46 大小:1.99MB
返回 下载 相关 举报
《C程序设计》2010复习.ppt_第1页
第1页 / 共46页
《C程序设计》2010复习.ppt_第2页
第2页 / 共46页
《C程序设计》2010复习.ppt_第3页
第3页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《《C程序设计》2010复习.ppt》由会员分享,可在线阅读,更多相关《《C程序设计》2010复习.ppt(46页珍藏版)》请在三一文库上搜索。

1、C+程序设计复习,主讲 郑巍,第二章 C+简单程序设计,英文字母:AZ,az,数字字符:09,下划线:_,以大、小写字母或下划线开始; 不能是C+关键字。,1,2,3,C+标识符,例如: Int 、3X 、char、-ar 、_at,基本数据类型,1. 布尔型(变量、常量) bool 1字节 2. 整型(变量、常量) int 、 long int 4字节 short int 2字节 3. 实型(变量、常量) float 4字节 、double 8字节 4. 字符型(变量、常量) char 1字节 5. 字符串常量 例如:a与“a”、A与“A”是不同的 6. 符号常量 例如: const dou

2、ble PI=3.14159;,计算某种类型的对象在内存中所占的字节数,不同进位计数制间的转换 R 进制十进制,各位数字与它的权相乘,其积相加。 例如: (11111101)2=1*27 + 1*26 + 1* 25 +1* 24 + 1* 23 + 1* 22 +0* 21+ 1* 20=(253)10 (3506)8=3*83 + 5*82 + 0*81 + 6*80 =(1862)10 (2A)16=2*161 +10*160=(42)10,运算符与表达式,算术运算符与表达式,赋值运算符和赋值表达式,+ * /(整数相除取整) %(只能用于整型数) + 例如: (1) 2x2+5x+3

3、表示为:2*x*x+5*x+3 (2) int x=8; y=5; +x+y; 结果:14,= *= /= += = 例:int n=2; n=n+5; n+=n*n; 结果:n=56,运算符具有优先级与结合性 表达式:由运算符、运算量和括号组成。,运算符与表达式,逻辑运算与逻辑表达式,条件运算符与条件表达式,!(非) &(与) |(或) !(610) 结果: true 值只能为 true 或 false,? : 例: int a=5,b=20,x; coutb? a: b) ; 输出:b,关系运算与关系表达式, = = != 优先级相同(高) 优先级相同(低) 例如:ab,c=a+b,x+y

4、=3 值只能为true 或 false,运算符优先级,() +, -, ! *, /, % +, - ,= =, != & | ?: = , *=,/=,+=,-=,低,高,声明语句:int max(int x,int y); 表达式语句: x=3*y5+2; 选择语句: if (a=b)0) t=a; 循环语句: while、for 复合语句: sum=sum+i; i+;,语句,以分号 “;”结尾,if 语句三种形式,if (xy) couty) coutx; else couty; if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 e

5、lse 语句 n,注意嵌套if语句中,每层的 if 与 else 配对,,if (x!=y) if (xy) couty“endl; else cout“xy“endl; else cout“x=y“endl;,三种基本结构,switch 语句,case分支可包含多个语句,且不用 。 表达式、判断值都是int型或char型。 若干分支执行内容相同可共用一组语句。,switch(10/3) case 1: case 2: case 3: case 4: ,switch (表达式) case 常量表达式 1:语句1 case 常量表达式 2:语句2 case 常量表达式 n:语句n default

6、 : 语句n+1 ,例1: #include using namespace std; void main(void) int day; cin day; switch (day) case 0: cout “星期日“ endl; break; case 1: cout “星期一“ endl; break; case 2: cout “星期二“ endl; break; case 3: cout “星期三“ endl; break; case 4: cout “星期四“ endl; break; case 5: cout “星期五“ endl; break; case 6: cout “星期六

7、“ endl; break; default: cout “超出星期日 星期六范围“ endl; break; ,11,2 Tuesday,例2: #include void main() int x=B; switch(+x) case a: case A: cout“优“;break; case b: case B: cout“良“;break; case c: case C: cout“及格“endl; case d: case D: case e: case E: cout“不及格“; break; default : cout“错误“; break; ,while、 do-while

8、、 for 语句,while,do while,for (表达式1;表达式2;表达式3) 循环体语句,break语句 使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。 结束该层的循环,注意循环语句的条件判断表达式,1、 int a=5,b=3; b+; while(a=b) 与while(a=b) 的区别 例:int b=0; while(b=1) b+; int b=0; while(b=1) b+; 循环多少次? 2、int a=1; while(a) 合法吗? 3、for(int i=0;i5;i+); cout“?”endl;,第三章 函数,函数声明的语法形式 类型

9、标识符 函数名(形式参数表) 语句序列 ,若无参数,写void,是被初始化的内部变量,寿命和可见性仅限于函数内部,若无返回值,写void,若函数有返回值(如类型标识符为int、float等 ) 由 return 语句给出,例如:return 0 函数中可有多条return 语句。 若函数无返回值(函数类型为void),不能使用函数值,函数不必写return 语句。 例, void fn(); b=fn() ; /错,要注意区分: ”函数定义性声明、调用前函数原型声明、函数调用“ 三者的不同和它们之间的关系,调用形式:函数名(实参列表) 函数调用可以是一条独立的语句,也可以出现在表达式中。 例:

10、fn(); coutmax(a,b); c=ma(a,b); 若函数调用在函数定义之前,则在函数调用之前加一条函数原型声明语句。,程序是由一个主函数main()或者多个函数组成的,但必须要有一个主函数,程序是从这个主函数开始运行的。,函数类型可以是基本数据类型或结构类型等复合类型。 例如: (1) int add(int x, int y)return x+y; (2) float add(float x, float y)return x+y; (3) complex complex:operator + (complex c2) complex c; c.real= real + c2.r

11、eal ; c.imag= imag + c2.imag ; return complex( c.real , c.imag ) ; ,例:函数定义举例 #include /使用cout必须要包含 using namespace std; /使用cout名字必须要的 int max(int x,int y); /函数原型声明 void main() int a=1, b=2, c; c=max(a,b); couty)?x:y; return z; ,函数的参数传递,引用( int &ri=i;j=10; 普通变量作为函数的形参,则实参传送给形参的是值; 而引用作为形参,则实参传送给形参的是参

12、数的地址。,例如: #include using namespace std; void Swap(int a, int ,重载函数,C+允许两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数的重载。,内联函数声明与使用,声明时使用关键字 inline。 inline 类型说明符 被调函数名(含类型说明的形参表) 函数体语句 ; 编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销。 注意: 内联函数体内不能有循环语句和switch语句。 内联函数的声明必须出现在内联函数第一次被调用之前。,作用域,作

13、用域是一个标识符在程序正文中有效的区域。 C+中标识符的作用域有: (1) 函数原型作用域 例如,double Area(double radius); /radius是局部变量 (2) 块作用域 int x;/x是局部变量 函数中定义的变量都是局部变量 (3) 类作用域 局部变量 (4)文件作用域 全局变量,定义在函数之外。,第五章 C+程序的结构,可见性,可见性是从对标识符的引用的角度来谈的概念 可见性表示从内层作用域向外层作用域“看”时能看见什么。 如果标识在某处可见,则就可以在该处引用此标识符。,静态生存期,对象从产生到结束的这段时间就是它的生存期。在对象生存期内,对象将保持它的值,直

14、到被更新为止。 这种生存期与程序的运行期相同。 在文件作用域中声明的变量或对象具有静态生存期。 在函数内部声明静态生存期的变量或对象,要冠以关键字static 。 例:static int i ; 静态变量的初值缺省为0。,动态生存期,块作用域中声明的,没有用static修是的对象是动态生存期的对象(习惯称局部生存期对象)。 开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。 动态变量的缺省初值不确定。,第六章 数组 指针与字符串,数组,一维数组的声明 类型说明符 数组名 常量表达式 ; 例如: int a10; 表示 a 为整型数组,有10个元素:a0.a9,数组元素在内存中顺次存

15、放,它们的地址是连续的。 例如,a0地址是从2000开始,则 a2的地址是从2008开始。,数组名字是数组首元素的内存地址。 数组名是一个常量,不能被赋值。,一维数组的初始化,在声明数组时对数组元素赋以初值。 例如:int a10=0,1,2,3,4,5,6,7,8,9; 可以只给一部分元素赋初值。 例如:int a10=a,b,c,d,e; 在对全部数组元素赋初值时,可以不指定数组长度。 例如:int a =1,2,3,4,5; 数组长度与数组元素个数相同。,引用 先声明,后使用。 只能逐个引用数组元素,而不能一次引用整个数组。 例如:a0=a5+a7-a2*3; a=a+a5; /错,存储

16、顺序 按行存放,上例中数组a的存储顺序为:,二维数组的声明 类型说明符 数组名常量表达式常量表达式 例如:float a34;,例: short a34; a10的地址为:2010,则a03的地址为:2010-2;a21的地址为:2010+10,二维数组的声明,30,将所有数据写在一个内,按顺序赋值 例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12; 分行给二维数组赋初值 例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12; 可以对部分元素赋初值 例如:int a34=1,0,6,0,0,11; 初始化时可省略行但不能省略列 例如:int a3

17、 4=1,0,6,0,0,11; int a43 =1,0,6,0,0,11; /错误 不初始化时行和列都不能省 int a 4 ; int a3 ; /都是错误的,二维数组的初始化,31,数组作为函数参数,数组元素作实参,与单个变量一样,是值传送。 数组名作参数,形、实参数都应是数组名,类型要一样,传送的是数组首地址,即地址传送。对形参数组的改变会直接影响到实参数组。,指针,指针:内存地址,用于间接访问内存单元。 指针变量: 用于存放地址的变量。,声明: 数据类型 *标识符 例:int i; int *i_p ; i_p = ,用指针处理数组元素,声明与赋值 例: int a10, *pa;

18、 pa= 通过指针引用数组元素 *pa等于a0,*(pa+1)等于a1,. , *(pa+i)等于ai. ai, *(pa+i), *(a+i), pai都是等效的。 例:int arr5=1,3,5,7,9, *pt=arr; 则数字 7 对应的元素是arr3, 或 *(pt+3),字符数组,字符数组的初始化 例: char str8=112,114,111,103,114,97,109,0; char str8=p,r,o,g,r,a,m,0; char str8=“program“; char str=“program“; 字符串数组输入输出 cinstr; coutstr;,字符数组的

19、声明 char str5;,类是具有相同属性和服务的一组对象的集合,对象内部包括属性和服务两个主要部分。 利用类可以实现数据的封装、隐藏、继承与派生。 封装是面向对象方法的一个重要原则,就是把对象的属性和服务结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。,第四章 类与对象,类是一种用户自定义类型,声明形式: class 类名称 public: 公有成员(外部接口) private: 私有成员 protected: 保护型成员 ,任何外部函数都可以访问 public数据和函数,private数据和函数,只允许本类中的函数访问,而类外部的任何函数都不能访问。,类的数据和函数确定了属性后,外

20、部的任何函数都不能改变,缺省访问权限为: private,对象是类的实例,为对象分配存储空间而不为类分配存储空间,类名 对象名; 例: Clock myC;,类中成员的访问方式:,类中成员互访 直接使用成员名 类外访问 使用“对象名.成员名”方式访问 public 属性的成员。例: myc.show();,构造函数特殊成员函数,构造函数的作用是:在对象被创建时使用特定的值构造对象,为对象分配内存空间,进行初始化并执行对象的其他内部管理操作。 在对象创建时由系统自动调用。 如果程序中未声明,则系统自动产生出一个默认形式的构造函数 构造函数允许为内联函数、重载函数、带默认形参值的函数 该函数的名字

21、与类同名,且不指定函数类型。可以有参数。,析构函数特殊成员函数,完成对象被删除前的一些清理工作。 在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。 如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。 它的名字与类同名,并在前面加 “ ”符号,用来与构造函数加以区别。 析构函数没有返回类型,没有参数,不能重载。 一个类中只可能定义一个析构函数。,友元函数,友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中能够通过对象名访问 private 和 protected成员 访问对象中的成员必须通过对象名。 友元函数能够访问该类的所有成员。 友元

22、关系是单向的。 友元关系不可继承。 友元关系破坏了数据封装。,类的继承与派生,继承: 保持已有类的特性而构造新类的过程。 派生: 在已有类的基础上新增自己的特性而产生新类的过程。 被继承的已有类称为基类(或父类)。 派生出的新类称为派生类。 派生类的成员只能访问基类的公有和保护成员,不能访问基类的私有成员。,运算符重载,C+中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类) 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致 不同的行为。 实现方法: 将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。,程序:,for内嵌套 switch的程序; 循环函数调用程序,静态变量; 递归调用; 一维、二维数组,一维字符数组; 基类,派生类。,试题类型,填空题 单选题 程序阅读题 程序改错题 程序填空题 编程题,Thank You!,,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1