当前位置:
文档之家› C++学习资料-函数和编译预处理
C++学习资料-函数和编译预处理
int a,b; a=20; b=40; cout<<maxi(b+a,b=b +1); }
int maxi(int a,int b) { return a>b?a:b;}
19:01
5.2 形参与实参的结合方式
值传递:实参将它的值传递给形参变量
int max(int x,int y)
a: 20
{x=100;return(x>y?x:y);}
3*f(2)
}
递归调用包括两个过程: 2*f(1)
递推和回代过程.
1
1*2*3*4*5 1*2*3*4 1*2*3 1*2
递推过程 回代过程
19:01
5.3 递归调用的较复杂例子
河内塔问题:A(n)C(借助B )
A柱
B柱
C柱
设A柱上有n个盘子,盘子大小不等,大盘子在下,小盘 子在上,要求将A柱上盘子移到C柱上,每次只能移动 一个盘子,在移动过程中可以借助于任一柱子,但必须 保证三根柱子上的盘子都是大盘子在下,小盘子在上. 要求编一个程序打印出移动盘子的步骤.
40 20
20 40
19:01
5.3 函数的嵌套调用
在函数体内定义另一个函数是不允许的, 每个C++函数都具有平等的地位.但在函 数调用时可以嵌套调用:
A函数{ B函数;
}
B函数{ C函数;
}
C函数{ 函数体;
}
19:01
5.3 函数的递归调用
在函数的嵌套调用中:
函数调用其本身: 称为直接递归
A函数{ A函数;
#include "iostream.h"
int maxi(int a,int b) { return a>b?a:b;}
void main() {
int a,b; a=20; b=40; cout<<maxi(b+a,b= b+1); }
void main() { int maxi(int,int);
5 函数和编译预处理
19:01
5.1 函数定义和调用
函数是完成一种功能的语句组合,程序是由一个主 函数main和若干个其它函数(自定义函数及库 函数)组成的.
函数定义:对于用户定义函数,必须先定义后使用,库
函数在特定的头文件中已经定义好了,使用时必须在程 序中包含该头文件.
定义格式: 返回值类型 函数名(函数的参数表){函数体} 如:int max(int a,int b){return (a>b?a:b);}
19:01
5.2 例
#include "iostream.h"
int maxi(int a,int b) 注意这里的
{ return a>b?a:b;} 实参表达式
void main()
计算顺序
{
int a,b;
a=20; b=40;
cout&lxi函数输出值?
}
函数通过其调用的函数
调用其本身: 称为间接递归
A函数{ B函数;
}
B函数{ A函数;
}
19:01
5.3 递归调用的简单例子
求n!
#include “iostream.h”
5*f(4)
long int f(int n)
4*f(3)
{ if(n==0 || n==1) return (1);
else return n*f(n-1);
19:01
河内塔问题:(算法)
A柱
B柱
C柱
提示:第一步:设法将A柱上n-1个盘子借 助C柱移到B柱上去,即
A(n-1)B(借助C)
19:01
河内塔问题:
A柱
B柱
C柱
思路:先设法将A柱上n-1个盘子借助C 柱移到B柱上去: A(n-1)B(借助C)
19:01
河内塔问题:
A柱
B柱
函数调用:用户定义的函数内可以调用其它的函数,
包括库函数,但主函数main只能被操作系统调用. 调用过程:
19:01
5.1 函数定义和调用(例)
#include “iostream.h”
main()函数
float max(float x,float y) {return(x>y?x:y);}
输入a,b c=max(a,b)
}
61
19:01
5.2 返回值及原型说明
上例中,max函数输出值为整型,即该函数 的返回值. 被调函数的定义放在主调函数之前时,主 调函数中无须进行额外说明; 被调函数定义放在主调函数之后时,主调 函数调用前必须进行函数说明; 格式: 类型 函数名(形参类型表)
19:01
5.2 例2
#include "iostream.h"
函数max()
void main(void) {float a,b,c;
输出c
cout<<“输入两个实数”; cin>>a>>b; c=max(a,b);
结束
cout<<“两个数中较大的数为:”<<c<<‘\n’;
}
执行max()函数
19:01
5.2 形参,实参,返回值及原型说明
在函数定义中,参数表中列举说明的参数称为形 参. 每一个形参都是某种类型的变量. 在函数调用时,函数名后面依次列出的参数称为 实参.每一个实参都与形参按位置一一对应,实 参可以常量,变量或者表达式. 注意:实参值如果是表达式,那么各个实参表达 式的计算次序是从右向左进行,获得表达式值 后与形参配对.
int *x
void main(void){ int a=20,b=40;
1000H
cout<<max(&a,&b);}
int *y 10ABH
19:01
5.2 值传递与地址传递对比
void swap(float x,float y) { float t;
t=x; x=y; y=t;} void main(void) { float a=40,b=20;
b: 40
void main(void){ int a=20,b=40; cout<<max(a,b);}
x=20 y=40
地址传递:
引用调用
19:01
5.2 形参与实参的结合方式
地址传递:传递的不是变量的值而 是其在内存中的地址.
int max(int *x,int *y) {return(*x>*y?*x:*y);}
swap(a,b); cout<<a<<‘\t’<<b; }
void swap(float *x,float *y) { float t;
t=*x; *x=*y; *y=*t;} void main(void) { float a=40,b=20;
swap(&a,&b); cout<<a<<‘\t’<<b; }