《高级语言程序设计教学课件》第7章.ppt
《《高级语言程序设计教学课件》第7章.ppt》由会员分享,可在线阅读,更多相关《《高级语言程序设计教学课件》第7章.ppt(71页珍藏版)》请在三一办公上搜索。
1、1,第7章 函数,2,第7章 函数,7.1 函数的概念7.2 函数的简单调用7.3 数组作为函数参数的调用7.4 函数的嵌套调用7.5 函数的递归调用7.6 变量的作用域7.7 变量的存储类别,3,学习目标,函数定义和函数调用掌握数组作为参数的函数调用掌握函数的嵌套和递归调用掌握变量作用域了解变量存储类别,4,7.1 函数的概念,1、C是模块化程序设计语言C是函数式语言必须有且只有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束所有函数是平行的,函数不能嵌套定义,可以嵌套调用,#include stdio.hvoid main(void)float x,y,z;fl
2、oat average(float a,float b);printf(输入2个数值:);scanf(%f%f,5,5,【例7-1】计算两个数的平均值。,主函数,子函数,函数声明,函数调用,函数定义,函数返回值,6,简单的函数举例,main()printf(“*n”);printf(“How do you do!n”);printf(“*n”);,要求在屏幕上输出下列的图形*How do you do!*,7,简单的函数举例,#include void printstar(int num);main()printstar(10);printf(“How do you do!n”);prints
3、tar(10);,函数声明,函数调用,void printstar(int num)int i;for(i=0;inum;i+)printf(“*”);printf(“n”);,函数定义(无返回值),8,int max(int x,int y)int z;z=x y?x:y;return z;main()int a=5,b=9,c;c=max(a,b);printf(“Max=%d”,c);,例:求两个数中的最大值,函数定义,函数调用,函数返回值,9,2、函数分类从用户角度标准函数(库函数):由系统提供用户自定义函数 printstar(int num)从函数形式无参函数有参函数strlen(
4、字符数组名),10,使用库函数应注意的问题,1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值的意义和类型4、需要使用的包含头文件,strlen(str),11,例 有参函数 int max(int x,int y)int z;z=xy?x:y;return(z);,例 无参函数 printstar()printf(“*n”);或 void printstar(void)printf(“*n”);,7.2 函数的定义,1、函数定义的一般格式,存储类别 函数类型 函数名(形参列表)说明部分语句部分,例 有参函数 int max(int x,y)int z;z=xy?x:y;r
5、eturn(z);,函数带回来的值的类型若缺省为:int整型函数没有返回值定义为void,12,2、函数的返回值返回语句的形式:功能:使程序控制从被调用函数返回到调用函数中,同时把返回值带给调用函数说明:只能返回一个值,而不能返回多个值。return(x,y);,return(表达式);return 表达式;return;,13,函数语句 printstar(10);表达式方式 函数调用出现在表达式中,函数的返回值参加表达式的运算。c=5*max(a,b);作为函数的参数 printf(“max=%d”,max(a,b);c=max(k,max(i,j);,函数的调用方式,int max(in
6、t x,int y)int z;z=x y?x:y;return(z);,14,【例7-3】输出数字金字塔,#include void main(void)int num;void pyramid(int n);printf(请输入金字塔的层数:);scanf(%d,请输入金字塔的层数:5 1 2 2 3 3 3 4 4 4 45 5 5 5 5Press any key to continue,15,void pyramid(int n)int i,j;for(i=1;i=n;i+)for(j=1;j=n-i;j+)/*输出左侧空格*/printf();for(j=1;j=i;j+)/*输出
7、数字*/printf(%d,i);printf(“n”);/*换行*/,请输入金字塔的层数:5 1 2 2 3 3 3 4 4 4 45 5 5 5 5Press any key to continue,16,【例7-4】判断素数,#include stdio.h#include math.hint prime(int n)int k,i,result;k=sqrt(n);for(i=2;i k)result=1;else result=0;return result;,【例4-16】判断n是否为素数 P75for(i=2;isqrt(n)printf(%d is a prime number
8、!n,n);else printf(%d is not a prime number!n,n);,17,void main(void)int a=1777,b=1991;if(prime(a)printf(%d是素数n,a);else printf(%d不是素数n,a);if(prime(b)printf(%d是素数n,b);else printf(%d不是素数n,b);,1777是素数1991不是素数,18,说明:函数中可有多个return语句,但是,当程序执行到第一个return语句时,函数执行完毕,后面的程序不再执行,返回到函数调用处若无return语句,遇 时自动返回调用函数void型
9、函数没有返回值的函数若return返回值的类型和函数类型不一致,系统自动转换成函数类型后返回,void printstar(int n)for(i=0;in;i+)printf(“*“);printf(“n”);,int max(int x,int y)if(xy)return x;else return y;,int fun()return 10;int a=5;return a;,#include stdio.hint average(float a,float b)float c;c=(a+b)/2;return c;int main(void)float x,y,z;x=10.0;y=
10、5.0;z=average(x,y);printf(“%.2fn,z);,7.00Press any key to continue,19,【例7-5】编写函数,交换两个变量的数值,#include stdio.hvoid swap(int x,int y);void main(void)int a,b;printf(请输入交换的数值:);scanf(%d%d,请输入交换的数值:7 11交换前a=7,b=11交换后a=7,b=11,20,为什么没有实现数值的交换?函数间的参数传递,形式参数和实际参数 形参:定义函数时,函数名后括号内的变量。形式参数只有在函数被调用时才分配变量空间(产生),并在
11、函数调用结束后,释放变量空间(消失)。实参:调用函数时,函数名后括号内的表达式。形式参数与实际参数的关系 形参与实参类型一致,个数相同。若类型不一致,自动按形参类型转换。,main()int a,b,c;scanf(%d,%d,21,【例7-5】编写程序,交换两个变量的数值,#include stdio.hvoid swap(int x,int y);void main(void)int a,b;printf(请输入交换的数值:);scanf(%d%d,7,11,调用前,调用时,调用结束,22,结论,参数“值”传递方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参中调用结束,形参单元
12、被释放,实参单元仍保留并维持原值特点:形参与实参占用不同的内存单元单向值传递(形参的改变并不影响实参),23,函数的声明,对被调用函数要求必须是已存在的函数1)库函数:#include 2)用户自定义函数:进行函数声明函数声明一般形式,函数类型 函数名(形参类型 形参名,);函数类型 函数名();,24,例如:int max(int x,int y);int max(int,int);,int max(int x,int y)int z;z=x y?x:y;return(z);,可以省略形参的名称,函数的声明,25,函数声明的位置函数的数据说明部分在预编译命令之后(建议使用),26,函数的声明
13、举例,void main(void)int a,b;printf(请输入交换的数值:);scanf(%d%d,void swap(int x,int y);,void swap(int x,int y);,void swap(int x,int y)int temp;temp=x;x=y;y=temp;void main(void)int a,b;printf(请输入交换的数值:);scanf(%d%d,27,7.3 数组作为参数的函数调用,当形式参数是一维数组时,可以说明数组长度或不说明数组的长度形参数组与实参数组公用一块内存空间,main()int b6=,c;c=fun(b);int f
14、un(int a6),int a,b,a,调用前,调用时,调用后,28,参数的“地址”传递方式方式:函数调用时,将数据的存储地址作为参数传递给形参函数调用后,形式参数数组a并没有像实际参数数组b一样再次申请一块连续的空间,而是使得数组a与数组b首地址相同。这样,在函数中访问数组a中的元素实际上等同于访问数组b中的元素,从而实现数组参数传递,29,特点:本质上仍然是“值”传递,只是传递的值是“地址”形参与实参指向同样的存储单元实参和形参必须是地址常量或地址变量“双向”传递形参的改变影响实参,30,函数中如何知道数组的长度呢?,C语言没有为函数提供任何简便的方法来确定传递给它的数组的长度。但是,处
15、理数组,长度是必须的,所以通常要把数组长度也作为形式参数。,例如:int fun(int a,int n),31,【例7-6】求数组中元素的最大值,#include stdio.h#define N 10float max_array(float a,int n);void main(void)float arrayN,max;int i;printf(请输入%d个实数:n,N);for(i=0;i N;i+)scanf(%f,请输入10个实数:1.2 2.3 3.4 4.5 5.6 6.7 7.8 8.9 9.0 2.1最大的数组元素值是:9.00Press any key to conti
16、nue,32,【例7-6】求数组中元素的最大值。,float max_array(float a,int n)int i;float max;max=a0;for(i=1;i max)max=ai;return max;,可以说明数组长度或不说明数组的长度,33,【例7-7】比较两个数组a和b的大小,比较规则为:,用m,n和k分别记录两个数组对应元素的比较结果,如果ai大于bi,m+,否则如果ai等于bi,k+,否则n+。如果mn,数组a大于b,否则如果mn,数组a小于b,否则数组a等于b。,34,#include stdio.h#define N 5int cmp_array(int a,i
17、nt b,int length);void main(void)int aN,bN,cmp,i;printf(请输入数组1:%d个整数:n,N);for(i=0;i N;i+)scanf(%d,35,cmp=cmp_array(a,b,N);if(cmp0)printf(数组1大于数组2n);else if(cmp0)printf(数组1小于数组2n);else printf(数组1等于数组2n);,请输入数组1:5个整数:1 2 3 4 5请输入数组2:5个整数:3 4 5 1 2数组1小于数组2Press any key to continue,36,int cmp_array(int a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级语言程序设计教学课件 高级 语言程序设计 教学 课件
链接地址:https://www.31ppt.com/p-5904936.html