
程序设计基础 第7章 函数 1/30
第7章 函 数 1/30 程序设计基础

本章知识点 7.1函数概述 7.2函数的定义和使用 7.3嵌套调用与递归调用 7.4变量与函数 7.5随机数函数 恩 2130
本章知识点 7.1 函数概述 7.2 函数的定义和使用 7.3 嵌套调用与递归调用 7.4 变量与函数 7.5 随机数函数 2/30

变量的作用域与存储类别 变量的作用域 变量的存储类别 恩 章目录330
变量的作用域与存储类别 变量的作用域 变量的存储类别 章目录 3/30

变量的作用域及分类 int m,n; ■ 变量的作用域 float f1(int a) ◆变量有效作用的范围。 int b,c; ag■n。a ■变量分类(按作用域) flaot k,t; ◆局部变量(local variable) char f2(int x,int y) >函数内定义,只在本函 inti,j; 数内才能使用。 ~复合语句中定义,只在 本复合语句范围内有效 int main() int m,n; 。全局变量(global variable) int p,q; >1 函数外定义,从定义变 量的位置开始到本源文 return 0; 件结束。 猖 4/30
变量的作用域及分类 ◼ 变量的作用域 ◆ 变量有效作用的范围。 ◼ 变量分类(按作用域) ◆ 局部变量(local variable) ➢ 函数内定义,只在本函 数内才能使用。 ➢ 复合语句中定义,只在 本复合语句范围内有效 。 ◆ 全局变量(global variable) ➢ 函数外定义,从定义变 量的位置开始到本源文 件结束。 4/30 int m, n; float f1( int a) { int b,c; . } flaot k,t; char f2(int x,int y) { int i,j; . } int main( ) { int m,n; . { int p,q; . } return 0; }

float f1(int a) a、b、c仅在 int b,c; 此函数内有效 局部变量 char f2(int x,int y) 、yi、j仅在 int i,j; 此函数内有效 在函数内或复合语句 int main() m、n仅在此 内部定义的变量,其 int m,n; 函数内有效 作用域是从定义的位 置起到函数体或复合 int p,q; 语句的结束。形参也 p、q仅在此复 是局部变量。 合语句内有效 return 0; 5/30
float f1( int a) { int b,c; . } char f2(int x,int y) { int i,j; . } int main( ) { int m,n; . { int p,q; . } return 0; } a、b、c仅在 此函数内有效 x、y、i、j仅在 此函数内有效 m、n仅在此 函数内有效 p、q仅在此复 合语句内有效 在函数内或复合语句 内部定义的变量,其 作用域是从定义的位 置起到函数体或复合 语句的结束。形参也 是局部变量。 局部变量 5/30

不同作用域中的同名变量 ■不同的函数及作用域中可以使用相同名字的局部变量, 它们在内存中分属不同的存储单元,互不干扰。 例复合语句内定义变量的作用域 变量名相同,局部 #include (小范围)更优先。 int main() int i=2,j=3,k; k=i+j; int k=10; 运行结果: printf(“(1)k=%d小n”,k); (1)k=10 (2)k=5 printf((2)k=%dn”,k月 return 0; 6130
不同作用域中的同名变量 ◼ 不同的函数及作用域中可以使用相同名字的局部变量, 它们在内存中分属不同的存储单元,互不干扰。 例 复合语句内定义变量的作用域 #include int main() { int i=2, j=3, k; k=i+j; { int k=10; printf(“(1) k=%d\n”, k); } printf(“(2) k=%d\n”, k); return 0; } 变量名相同,局部 (小范围)更优先。 6/30

#include 课堂练习 void f(int a月 int main(void) int x=10; 输出? int x=20; printf(%d小n”,x); } f(x); 运行结果: printf(%d小n3”,x); 20 return 0; 30 } 10 void f(int a) int x; x=a+20; printf(“%d小n”,x; 恩 7130
#include void f(int a); int main(void) { int x=10; { int x=20; printf(“%d \n”, x); } f( x); printf(“%d \n”, x); return 0; } void f(int a) { int x; x=a+20; printf(“%d \n”, x); } 运行结果: 20 30 10 输出? 课堂练习 7/30

intp=1,q=5;1全局变量 char f2(int,int);/声明函数f2 全局变量 float f1(inta;l定义函数f1 int b,c; 全局变量p、q float p=45; 的作用范围 如果在同一个源文 件中,全局变量与 char c1,c2; 川全局变量 局部变量同名,则 main() ∥主函数 在局部变量的作用 int m,n; 范围内,全局变量 被屏蔽,即它不起 作用,如p,c1。 char f2 (int x,int y) int c1,i,j; 全局变量c1、 c2的作用范围 8/30
int p=1,q=5; //全局变量 char f2(int,int); //声明函数f2 float f1(int a) ; //定义函数f1 { int b,c; float p=45; ┆ } char c1,c2; //全局变量 main ( ) //主函数 { int m,n; ┆ } char f2 (int x, int y) { int c1,i,j; ┆ } 全局变量p、q 的作用范围 全局变量c1、 c2的作用范围 如果在同一个源文 件中,全局变量与 局部变量同名,则 在局部变量的作用 范围内,全局变量 被屏蔽,即它不起 作用,如 p,c1。 全局变量 8/30

#include 全局变量举例 int a=3,b=5; int max(int a,int b); b为全部变量 int main() {int a=8; printf(“max=%dn”,max(a,b); max=8 return 0; a为局部变量,仅 int max(int a,int b) 在此函数内有效 int c; a、b为局部变量, c=a>b?a:b; 仅在此函数内有效 return c; } 9/30
#include int a=3,b=5; int max(int a,int b); int main() { int a=8; printf(“max=%d\n”,max(a,b)); return 0; } int max(int a,int b) { int c; c=a>b?a:b; return c; } a为局部变量,仅 在此函数内有效 b为全部变量 全局变量举例 a、b为局部变量, 仅在此函数内有效 9/30

除非必要,不使用全局变量 ■作用:增加函数间数据联系的渠道。 ■子 空间效率:程序执行中全程占用存储单元。 ■高耦合:使函数的通用性降低了 ◆函数执行要受到外部变量的影响。 ■可读性:使用全局变量过多,会降低程序的清晰性 ◆在各个函数执行时都可能改变全局变量值,程序易出错。 恩 10130
除非必要,不使用全局变量 ◼ 作用:增加函数间数据联系的渠道。 ◼ 空间效率:程序执行中全程占用存储单元。 ◼ 高耦合:使函数的通用性降低了 ◆ 函数执行要受到外部变量的影响。 ◼ 可读性:使用全局变量过多,会降低程序的清晰性 ◆ 在各个函数执行时都可能改变全局变量值,程序易出错。 10/30