资源预览内容
第1页 / 共29页
第2页 / 共29页
第3页 / 共29页
第4页 / 共29页
第5页 / 共29页
第6页 / 共29页
第7页 / 共29页
第8页 / 共29页
第9页 / 共29页
第10页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,第四讲 C+语言基础,3.4 函数 3.5 数组与指针,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,引用(reference): C+的特点,什么是引用: 引用是一个别名, 是某一个目标对象的替代名. 对所有加于引用上的操作实际上就是加于引用的目标对象之上. 例如: int x; /定义了变量 x int /定义了x的一个引用,问题: 1. 为什么要用引用? 2. 引用与指针的区别? 3. 引用的功能是什么? 4. 在引用的使用中要注意什么?,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,传值调用和引用调用,例2: 希望通过传值调用交换变量值 #include void Swap(int, int); /声明函数 void main( ) int x=4, y=8; /定义变量 cout “n Before Swap x= “ x “ , y= “ y endl; Swap(x, y); /调用函数 cout “n After Swap x=“ x “ , y= “ y endl; void Swap(int a, int b) int t=a; a=b; b=t; ,结果: Before Swap x=4, y=8 After Swap x=4, y=8,为什么? 传值调用.,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,例: 通过指针调用交换变量值 #include void Swap(int*, int*); /声明函数 void main( ) int x=4, y=8; /定义变量 cout “n Before Swap x= “ x “ , y= “ y endl; Swap( ,结果: Before Swap x=4, y=8 After Swap x=8, y=4,为什么? 指针调用.,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,例: 通过引用调用交换变量值 #include void Swap(int ,结果: Before Swap x=4, y=8 After Swap x=8, y=4,为什么? 引用调用.,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,引用与指针关系的分析,void Swap(int ,void Swap(int *a, int *b) /指针调用 int t; t=*a; *a=*b; *b=t; ,void Swap(int a, int b) /传值调用 int t=a; a=b; b=t; ,区别: 1. 引用是某一对象的别名, 指针是 某一变量的地址变量. 2. 引用在定义时就必须初始化, 即 为一已定义的对象的别名, 不可 以重新赋值. 指针可在使用时初 始化, 且可以重新赋值.,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,引用的作用: 1. 引用可以象地址一样完成对所代表的对象的操作. 2. 对引用的操作不同与对指针的操作, 它可直接作用于变量, 所以更方便, 更易于理解.,引用的缺点: 引用不能为空, 即必须代表某一象,且不能重新赋值. 指针灵活性较好, 但使用较不方便.,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,函数名重载: C+的特点,问题: 设计一个函数完成两个数相加. 分析: 用C语言, 就必须设计两不同名函数: int Iadd(int a, int b); float Fadd(float a, float b); 它们分别完成对整型和实型数的加法. 若用C+, 就可以两个同名的函数: int add(int a, int b); float add(float a, float b); 它们分别完成对整型和实型数的加法. 作用: 由于函数名相同, 在函数调用时不必 考虑实参数的类型, 使编程更便利.,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,什么是函数重载: 对同一函数进行多次定义,例: #include int fname(int p) /定义函数 cout “one “; return p*p; char fname(char p) /定义函数 cout “ two “; return p+4; void main( ) cout fname(4) endl; / cout fname(a) endl; / ,结果: one 16 two d,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,递归函数,什么是递归 一个函数直接或间接地 调用自己,何时用递归 问题可被简化, 边界有界 如 Fibonacci数列,我们有: fibo(0)=1 fibo(1)=1 fibo(n)=fibo(n-1)+fibo(n-2), 有边界 有边界, 可简化,为何用递归 使难以实现的编程简单化,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,例: 用递归函数求Fibonacci数列,#include unsigned long fibo(unsigned long); /声明函数 void main( ) unsigned long result, temp; cout temp; result = fibo(temp); /调用函数 cout “Fibonacci(“ temp “ )= “ result endl; unsigned long fibo(unsigned long n) /定义函数 if( n = = 0 | n = = 1) return n; /边界条件 else return fibo(n-1) + fibo(n-2); /递归调用,结果: Enter an integer: 3 Fibonacci(3) = 3,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,递归执行流程,fibo(3),return fibo(2)+fibo(1),return fibo(1)+fibo(0),return 1,return 1,return 1,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,内嵌函数,为什么要内嵌函数 程序中对函数的调用过于频繁,导致程序执行时间加长。内嵌函数的使用可提高程序执行效率。,内嵌函数的定义 在函数声明时加inline 例如:inline void swap(int,内嵌函数作用机理 把内嵌函数的代码直接嵌人函数调用处,而不是转到调用函数的代码处。这样减少了调用转换的开销。,内嵌函数的缺点 程序执行效率提高了,但可执行程序规模变大了。实际应用中要权衡效率和规模之间的关系。,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,例:内嵌函数的定义使用 #include inline int max(int a, int b); if( ab) return a; else return b; void main( ) int x, y; cout x y; cout “ max= “ max(x,y) endl; ,结果: Enter two integers: 10 28 max= 28,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,数组(array)与指针(pointer),什么是数组 保存相同类型数据的内 存单元集合,数组的定义 类型名 数组名大小; type ArrayNamesize;,例如: int a5; 定义了一个整数型数组,数组名为 a,数组的大小为5,即有5个元素:a0, a1, a2, a3, a4.,Float b23; 定义了一个二维数组, 6个元素:b00, b01, b02, b10, b11, b12.,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,数组使用注意点 1. 数组的第一个元素下标是0, 而不是1, 如: a0, b00,等 2. 数组的最后一个元素的下标是数组的大 小减去1, 如: int a8; 的最后一个 元素为 a7. 3. 二维数组的定义和使用其下标都是用 隔开, 而不是用逗号隔开, 如: int b23; 定义了一个二维数组, 而不 能定义成: int b2,3; b12 表示数组的第2行、第3列元素, 而不能用 b1,2 来表示.,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,数组的初始化,数组可以在定义时初始化,并可以用初始化来确定数组的元素个数。,例如:int b =2, 4, 9, 15; 等价于 int b4=2, 4, 9, 25; int c 2=2,4,5,9,11,19; 等价于 int c32=2,4,5,9,11,19; 注意:二维数组初始化时,第二个下标不 能省,int c=2,4,5,9,11,19是错 的。在上例中,我们有: c00=2, c01=4, c10=5, c11=9, c20=11, c21=19.,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,例:对数组中的元素按升序排列,#include int a5=23,42,36,19; /初始化数组 void sort( ); /声明函数 void main( ) sort ( ); /调用函数 for(int i=0; iaj) int t=ai; ai=aj; aj=t; ,结果: a0=0, a1=19, a2=23, a3=36, a4=42,第3章 C+基础,3.1 C+概述 3.2 数据和表达式 3.3 基本语句 3.4 函数 3.5 数组与指针,char 型数组,字符型数组可定义为: char c =H,i, ,w,o,r,l,d,0; 数组 c 包含了字符串 Hi world, 0表示结束。,可等价定义为: char c =“Hi world“;,数组的长度为9个字节,其中 “Hi” 占2个字节,“world”占 5个字节,空
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号