资源简介 第十六课 函数参数 目 标 01、理解形式参数与实际参数。 02、 理解参数传递的三种方式。 函数的参数 参数是函数与函数之间实现通信的数据“接口”。函数调用的过程就是调用者带着实际参数(如果有)执行函数,将实际参数“传递”给形式参数,执行完函数体后再将计算得到的返回值传递给调用者(如果有)。 在未调用函数前,函数中的形式参数并不分配内存空间。只有在被调用执行时,才被分配临时存储空间。函数调用结束后,形式参数的内存空间将被操作系统立刻收回。 函数的参数 实际参数可以是任何符合形式参数类型的常量、变量、表达式。函数参数传递的过程就是实际参数和形式参数相结合的过程,必须遵守三个一致。 (1) 个数一致。 (2) 顺序一致。 (3) 类型一致。 例1、打印字符三角形 【问题描述】 编写一个函数 print (n,ch),表示打印一行 n 个英文字母 ch,并换行。然后,在函数 main() 中输入 n 和 ch,调用函数 print() 打印一个字符三角形。 【输入格式】 一行一个整数 n 和一个英文字母 ch,之间用一个空格隔开,1≤n≤20。 【输出格式】 n 行,第 i 行有 i 个字母 ch。 【输入样例】 3 a 【输出样例】 a aa aaa #include using namespace std; void print(int i,char ch){ for(int j = 1; j <= i; j++) cout << ch; cout << endl; } int main(){ int n; char ch; cin >> n >> ch; for(int i = 1; i <= n; i++) print(i,ch); return 0; } 函数参数的传递方式 根据不同的应用需求,函数参数的传递方式,或者说函数参数的调用方式分为三种: (1) 传值(调用):参见例2; (2) 传址(调用):参见例3; (3) 引用(调用):参见例4、例5; 例2、阅读程序,写出程序的运行结果,体会函数的传值(调用)。 #include using namespace std; void swap(int x,int y){ int temp; temp = x; x = y; y = temp; cout << x << “ “ << y << endl; } int main(){ int a = 10,b = 50; swap(a,b); cout << a << “ “ << b << endl; return 0; } 例3、阅读程序,写出程序的运行结果,体会函数的传址(调用)。 #include using namespace std; void swap(int *x,int *y){// 形式参数的类型定义为指针 int temp; temp = *x; *x = *y; *y = temp; cout << *x << “ “ << *y << endl; } int main(){ int a = 10,b = 50; swap(&a,&b);// 实际参数必须是地址 cout << a << “ “ << b << endl; return 0 ; } 例4、阅读程序,写出程序的运行结果,体会变量及其引用的操作。 //#include using namespace std; int main(){ int k = 32; int& k_adr = k; cout << “ k= ” << k << “ k_adr= ” << k_adr << endl; k++; cout << “ k= ” << k << “ k_adr= ” << k_adr < k_adr = -5; cout << “ k= ” << k << “ k_adr= ” << k_adr << endl; int i = 100; k_adr += i; cout << “ k= ” << k << “ k_adr= ” << k_adr << endl; return 0; } 例5、阅读程序,写出程序的运行结果,体会函数的引用调用。 #include using namespace std; void swap(int &a,int &b){ int temp; temp = a; a = b; b = temp; cout << a << “ “ << b << endl; } int main(){ int a = 10,b = 50; swap(a,b); cout << a << “ “ << b << endl; return 0; } 变量的作用域 学习目标 1. 理解变量的作用域。 2. 熟练规范使用局部变量和全局变量。 变量的作用域 变量按其在程序中的作用范围,分为全局变量和局部变量。 全局变量是指定义在任何函数之外的变量,也就是不被任何“{函数体}”所包含,可以被源文件中其他函数所共用,用静态数据区存储,作用域(有效范围)是从定义变量的位置开始到源文件(整个程序)结束。 局部变量是指在一个函数(包括 main 函数)内部定义的变量,它只在本函数内部有效,其他函数不能使用这些变量,用动态数据区存储,函数的参数也是局部变量。 例1、以下程序中,哪些是全局变量,哪些是局部变量,并指出它们的作用域。 int x,y; float a,b; float find(int c,d){ float e,f; int i,j; … } int z; void doit(){ … } int main(){ int g,h; … } 例2、找出程序中的错误。如果去掉错误,程序输出什么。 #include using namespace std; int f(){ int b = 0,c = 1; b = b + 1; c = c + 1; return (b+c); } int main(){ for(int i = 1; i < 4; i++) cout << i << “ .sum= ” << f() << endl; cout << “ b= ” << b << “ c= ” << c << endl; return 0; } C++允许在更多地方定义变量,例如for的第一个子句,if、for或者while语句块的{ }内。这些变量只在当前语句块内有效。一个语句块内只能定义一个同名变量。不同的函数内部可以使用相同名称的变量,它们代表不同的对象,相互独立,互不干扰。访问同名变量时、只能访问到当前有效、且最近定义的该变量。特别地,在变量前加“::”可以指定访问全局变量。在写复杂代码时,可以利用这些特性,调整临时变量的定义位置和作用域,以规避变量重名带来的编译错误。 例3、找出程序中的错误。如果去掉错误,程序输出什么。 #include using namespace std; int x = 233; int main(){ int x; cin >> x; for(int i = 1; i <= x; ++i){ int x,y; cin >> x >> y; cout << x + y << endl; } cout << x << endl; cout << ::x << endl; cout << i << “ “ << y << endl; return 0; } 例4、阅读程序,写出程序的运行结果。 //p6-4-4 #include using namespace std; int x = 10, y = 15; void change(int a, int b, int x){ int temp; x++;y++; temp = a;a = b;b = temp; } int main(){ int a = 3, b = 5; cout << x << “ ” << y << “ ” << a << “ ” << b << endl; change(a,b,x); cout << x << “ ” << y << “ ” << a << “ ” << b << endl; return 0; } 展开更多...... 收起↑ 资源预览