太原理工大学测绘C语言程序设计课件(下).ppt
* 第八章 函 数 例8.15 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。 #include float Max=0,Min=0; void main() { float average(float array[ ],int n); float ave, score[10]; int i; printf("Please enter 10 scores:\n"); for(i=0;i<10;i++) scanf("%f",&score[i]); ave=average(score,10); printf("max=%6.2f\nmin=%6.2f\n average=%6.2f\n",Max,Min,ave); } 分析: 调用一个函数可以得到一个函数返回值,现在希望通过函数调用能得到3个结果。可以利用全局变量来达到此目的。 float average(float array[ ], int n) { int i; float aver,sum=array[0]; for(i=1;iMax) Max=array[i]; else if(array[i] int a=3,b=5; void main() { int max(int a,int b); int a=8; printf(“max=%d\n”,max(a,b) ); } ? int max(int a,int b) { int c; c=a>b?a:b; return(c); } 全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。 它使函数的通用性降低了,因为函数在执行时要依赖于其所在的外部变量。 使用全局变量过多,会降低程序的清晰性。 b为全局变量 a为局部变量,仅在此函数内有效 a、b为局部变量,仅在此函数内有效 说明: 如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。 建议不在必要时不要使用全局变量 * * 第八章 函 数 九、变量的存储类别 1、动态存储方式与静态存储方式 从变量的作用域的角度来观察,变量可以分为全局变量和局部变量 从变量值存在的时间(即生存期)观察,变量的存储有两种不同的方式:静态存储方式和动态存储方式 静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式 动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式 * * 第八章 函 数 九、变量的存储类别 1、动态存储方式与静态存储方式 程序区 静态存储区 动态存储区 用户区 将数据存放在此区 说明: 静态存储区:全部全局变量。程序开始执行时给全局变量分配存储区,程序执行完毕就释放。在程序执行过程中占据固定的存储单元 动态存储区:①函数形式参数②自动变量: 函数中定义的没有用关键字static声明的变量③函数调用时的现场保护和返回地址等存放在动态存储区. 函数调用开始时分配,函数结束时释放。在程序执行过程中,这种分配和释放是动态的 * * 第八章 函 数 九、变量的存储类别 1、动态存储方式与静态存储方式 每一个变量和函数都有两个属性:数据类型和数据的存储类别 数据类型: 如整型、浮点型等 存储类别指的是数据在内存中存储的方式(如静态存储和动态存储) 存储类别包括: 自动的(auto)、静态的(static) 、寄存器的(register) 、外部的(extern) 根据变量的存储类别,可以知道变量的作用域和生存期 * * 第八章 函 数 九、变量的存储类别 2、自动变量(auto变量) 局部变量,如果不专门声明存储类别,则动态地分配存储空间,为自动变量。 调用函数时,系统会给局部变量分配存储空间,调用结束时就自动释放空