《高级语言程序设计教学课件》第7章.ppt
《《高级语言程序设计教学课件》第7章.ppt》由会员分享,可在线阅读,更多相关《《高级语言程序设计教学课件》第7章.ppt(71页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、1第第7章章 函数函数2 2第第7章章 函数函数n7.1 函数的概念函数的概念n7.2 函数的简单调用函数的简单调用n7.3 数组作为函数参数的调用数组作为函数参数的调用n7.4 函数的嵌套调用函数的嵌套调用n7.5 函数的递归调用函数的递归调用n7.6 变量的作用域变量的作用域n7.7 变量的存储类别变量的存储类别3 3学习目标学习目标n n函数定义函数定义和和函数调用函数调用n n掌握掌握数组作为参数的函数调用数组作为参数的函数调用n n掌握函数的掌握函数的嵌套和递归调用嵌套和递归调用n n掌握掌握变量作用域变量作用域n n了解了解变量存储类别变量存储类别4 47.1 函数的概念函数的概念
2、n1、C是模块化程序设计语言是模块化程序设计语言C是是函数式函数式函数式函数式语言语言必须必须有且只有一个名为有且只有一个名为有且只有一个名为有且只有一个名为mainmain的主函数的主函数的主函数的主函数C程序的执行总是从程序的执行总是从mainmain函数开始,在函数开始,在函数开始,在函数开始,在mainmain中中中中结束结束结束结束所有函数是平行的,所有函数是平行的,函数不能嵌套定义函数不能嵌套定义函数不能嵌套定义函数不能嵌套定义,可以可以可以可以嵌嵌嵌嵌套套套套调用调用调用调用C C程序程序源程序文件源程序文件1 1源程序文件源程序文件i i源程序文件源程序文件n n预编译命令预编
3、译命令函数函数1 1函数函数n n说明部分说明部分执行部分执行部分C C程序结构程序结构C C程序程序源程序文件源程序文件预编译命令预编译命令主函数主函数mainmain说明部分说明部分执行部分执行部分目前编写的目前编写的C C程序程序#include#include stdio.hstdio.hvoidvoid main main(void(void)float float x,y,z;x,y,z;floatfloat average(average(floatfloat a,a,floatfloat b);b);printf(printf(输入输入输入输入2 2个数值:个数值:个数值:个数
4、值:););scanf(%f%f,&x,&y);scanf(%f%f,&x,&y);z=average(x,y);z=average(x,y);printf(%.2f printf(%.2f和和和和%.2f%.2f的平均值为:的平均值为:的平均值为:的平均值为:%.2fn“,x,y,z);%.2fn“,x,y,z);float float average(average(float float a a,float,float b)b)float float c;c;c=(a+b)/2c=(a+b)/2;return return c;c;5 55【例例例例7-17-1】计算两个数的平均值。主函
5、数主函数子函数子函数函数声明函数声明函数声明函数声明函数调用函数调用函数调用函数调用函数定义函数定义函数定义函数定义函数返回值函数返回值函数返回值函数返回值6 6简单的函数举例简单的函数举例简单的函数举例简单的函数举例main()main()printf(“*n”);printf(“*n”);printf(“How do you do!n”);printf(“How do you do!n”);printf(“*n”);printf(“*n”);要求在屏幕上输出下列的图形要求在屏幕上输出下列的图形要求在屏幕上输出下列的图形要求在屏幕上输出下列的图形*How do you do!How do y
6、ou do!*7 7简单的简单的简单的简单的函数举例函数举例函数举例函数举例#include#include void printstar(int num);void printstar(int num);main()main()printstar(10);printstar(10);printf(“How do you do!n”);printf(“How do you do!n”);printstar(10);printstar(10);函数声明函数声明函数声明函数声明函数调用函数调用函数调用函数调用void printstar(int num)void printstar(int num
7、)int i;int i;for(i=0;inum;for(i=0;i y?x:y;z=x y?x:y;return z return z;main()main()int a=5,b=9,c;int a=5,b=9,c;c=c=max(a,b);max(a,b);printf(“Max=%d”,c);printf(“Max=%d”,c);例:例:求两个数中的最大值求两个数中的最大值 函数定义函数定义函数定义函数定义函数调用函数调用函数调用函数调用函数返回值函数返回值函数返回值函数返回值9 9n2、函数分类、函数分类从用户角度从用户角度标准函数(库函数):由系统提供标准函数(库函数):由系统提供
8、用户自定义函数用户自定义函数 printstar(int num)从函数形式从函数形式无参函数无参函数有参函数有参函数strlen(字符数组名字符数组名)1010使用库函数应注意的问题使用库函数应注意的问题1、函数、函数功能功能2、函数、函数参数参数的数目和顺序,及各参数意义和的数目和顺序,及各参数意义和类型类型3、函数、函数返回值返回值的意义和类型的意义和类型4、需要使用的包含、需要使用的包含头文件头文件strlen(str)1111例例例例 有参函数有参函数有参函数有参函数 int maxint max(int x,int y(int x,int y)int z;int z;z=xy?x:
9、y;z=xy?x:y;return(z);return(z);例例例例 无参函数无参函数无参函数无参函数 printstar()printstar()printf(“*n”);printf(“*n”);或或或或 voidvoid printstar(printstar(voidvoid)printf(“*n”);printf(“*n”);7.2 函数的定义函数的定义n1、函数定义的一般格式、函数定义的一般格式 存储类别存储类别存储类别存储类别 函数类型函数类型函数类型函数类型 函数名(函数名(函数名(函数名(形参列表形参列表形参列表形参列表)说明部分说明部分说明部分说明部分语句部分语句部分语句
10、部分语句部分 例例例例 有参函数有参函数有参函数有参函数 int max(int max(int x,yint x,y)int z;int z;z=xy?x:y;z=xy?x:y;return(z);return(z);例例例例 空函数空函数空函数空函数 /调用此函数时,什么都不做调用此函数时,什么都不做调用此函数时,什么都不做调用此函数时,什么都不做 dummy()dummy()函数体为空函数体为空函数体为空函数体为空函数带回来的值的类型函数带回来的值的类型函数带回来的值的类型函数带回来的值的类型 若缺省为:若缺省为:若缺省为:若缺省为:intint整型整型整型整型 函数没有返回值函数没有返
11、回值函数没有返回值函数没有返回值定义为定义为定义为定义为voidvoid 1212n2、函数的返回值、函数的返回值返回语句的形式:返回语句的形式:功能:使程序控制从功能:使程序控制从被调用函数被调用函数被调用函数被调用函数返回到返回到调用函数调用函数调用函数调用函数中,同中,同时时把返回值带给调用函数把返回值带给调用函数把返回值带给调用函数把返回值带给调用函数说明:说明:只能返回一个值只能返回一个值只能返回一个值只能返回一个值,而不能返回多个值。,而不能返回多个值。return(x,y);return return(表达式表达式表达式表达式);returnreturn 表达式表达式表达式表达式
12、;return;return;1313n函数函数语句语句 printstar(printstar(1010);n表达式方式表达式方式 函数调用出现在表达式中,函数的返回值参加函数调用出现在表达式中,函数的返回值参加表达式的运算。表达式的运算。c=5*max(a,b)max(a,b);n作为函数的参数作为函数的参数 printf(“max=%d”,max(a,b)max(a,b);c=max(k,max(i,j)max(k,max(i,j);函数的调用方式函数的调用方式int max(int x,int y)int max(int x,int y)int z;int z;z=x y?x:y;z=
13、x y?x:y;return(z);return(z);1414【例例7-3】输出数字金字塔输出数字金字塔#include#include void main(void)void main(void)int num;int num;void pyramid(int n);void pyramid(int n);printf(printf(请输入金字塔的层数:请输入金字塔的层数:请输入金字塔的层数:请输入金字塔的层数:););scanf(%d,&num);scanf(%d,&num);pyramid(num);pyramid(num);请输入金字塔的层数:请输入金字塔的层数:5 1 2 2 3
14、3 3 4 4 4 45 5 5 5 5Press any key to continue1515void pyramid(int n)void pyramid(int n)int i,j;int i,j;for(i=1;i=for(i=1;i=n n;i+);i+)for(j=1;j=n-i;j+)for(j=1;j=n-i;j+)/*/*输出左侧空格输出左侧空格输出左侧空格输出左侧空格*/printf();printf();for(j=1;j=i;j+)for(j=1;j=i;j+)/*/*输出数字输出数字输出数字输出数字*/printf(%d,i);printf(%d,i);printf
15、(“n”);printf(“n”);/*/*换行换行换行换行*/请输入金字塔的层数:请输入金字塔的层数:5 1 2 2 3 3 3 4 4 4 45 5 5 5 5Press any key to continue1616【例例7-4】判断素数判断素数#include stdio.h#include stdio.h#include math.h#include math.hint prime(int n)int prime(int n)int k,i,result;int k,i,result;k=sqrt(n);k=sqrt(n);for(i=2;i=k;i+)for(i=2;i k)res
16、ult=1;if(i k)result=1;else result=0;else result=0;return result;return result;【例例例例4-164-16】判断判断判断判断n n是否为素数是否为素数是否为素数是否为素数 P75P75for(i=2;i=sqrt(n);i+)for(i=2;isqrt(n)if(isqrt(n)printf(%d is a prime number!n,n);printf(%d is a prime number!n,n);elseelse printf(%d is not a prime number!n,n);printf(%d
17、is not a prime number!n,n);1717void main(void)void main(void)int a=1777,b=1991;int a=1777,b=1991;if(if(prime(a)prime(a)printf(%d printf(%d是素数是素数是素数是素数n,a);n,a);else else printf(%d printf(%d不是素数不是素数不是素数不是素数n,a);n,a);if(if(prime(b)prime(b)printf(%d printf(%d是素数是素数是素数是素数n,b);n,b);else else printf(%d pr
18、intf(%d不是素数不是素数不是素数不是素数n,b);n,b);1777是素数是素数1991不是素数不是素数1818说明:说明:函数中可有多个函数中可有多个return语句语句,但是,当程序执行但是,当程序执行到第一个到第一个return语句时,函数执行完毕,后面的程语句时,函数执行完毕,后面的程序不再执行,返回到函数调用处序不再执行,返回到函数调用处若无若无return语句,遇语句,遇 时自动返回调用函数时自动返回调用函数void型函数型函数没有返回值的函数没有返回值的函数若若return返回值的类型和函数返回值的类型和函数类型不一致类型不一致类型不一致类型不一致,系统,系统自自自自动转换
19、成函数类型动转换成函数类型动转换成函数类型动转换成函数类型后返回后返回voidvoid printstar(int n)printstar(int n)for(i=0;in;i+)for(i=0;iy)if(xy)returnreturn x;x;else else returnreturn y;y;int fun()int fun()returnreturn 10;10;int a=5;int a=5;returnreturn a;a;#include stdio.h#include stdio.hintint average(float a,float b)average(float a,
20、float b)float c;float c;c=(a+b)/2;c=(a+b)/2;return c;return c;int main(void)int main(void)float x,y,z;float x,y,z;x=10.0;x=10.0;y=5.0;y=5.0;z=average(x,y);z=average(x,y);printf(“%.2fn,z);printf(“%.2fn,z);7.007.00Press any key to continuePress any key to continue1919【例例7-5】编写编写函数函数,交换两个变量的,交换两个变量的数值数
21、值#include stdio.h#include stdio.hvoid swap(int x,int y);void swap(int x,int y);void main(void)void main(void)int a,b;int a,b;printf(printf(请输入交换的数值:请输入交换的数值:请输入交换的数值:请输入交换的数值:););scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(printf(交换前交换前交换前交换前a=%d,b=%dn,a,b);a=%d,b=%dn,a,b);swap(a,b);swap(a,b);printf(
22、printf(交换后交换后交换后交换后a=%d,b=%dn,a,b);a=%d,b=%dn,a,b);void swap(int x,int y)void swap(int x,int y)int temp;int temp;temp=x;x=y;y=temp;temp=x;x=y;y=temp;请输入交换的数值:请输入交换的数值:7 11交换前交换前a=7,b=11交换后交换后a=7,b=112020为什么没有实现数值的交换?为什么没有实现数值的交换?函数间的参数传递函数间的参数传递n形式参数和实际参数形式参数和实际参数n 形参形参形参形参:定义函数时,函数名后括号内的变量。:定义函数时,函
23、数名后括号内的变量。形式参数只有在形式参数只有在函数被调用时函数被调用时函数被调用时函数被调用时才分配变量空间(才分配变量空间(产生产生产生产生),),并在函数调用并在函数调用结束后结束后结束后结束后,释放变量空间(,释放变量空间(消失消失消失消失)。)。实参实参实参实参:调用函数时,函数名后括号内的表达式。:调用函数时,函数名后括号内的表达式。n形式参数与实际参数的关系形式参数与实际参数的关系 形参与实参类型一致,个数相同。形参与实参类型一致,个数相同。若类型不一致,自动按形参类型转换。若类型不一致,自动按形参类型转换。main()int a,b,c;scanf(%d,%d,&a,&b);c
24、=max(a,ba,b);printf(Max is%d,c);max(int x,int yint x,int y)int z;z=xy?x:y;return(z);实参实参形参形参2121【例例7-5】编写程序,交换两个变量的编写程序,交换两个变量的数值数值#include stdio.h#include stdio.hvoid swap(int x,int y);void swap(int x,int y);void main(void)void main(void)int a,b;int a,b;printf(printf(请输入交换的数值:请输入交换的数值:请输入交换的数值:请输入交
25、换的数值:););scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(printf(交换前交换前交换前交换前a=%d,b=%dn,a,b);a=%d,b=%dn,a,b);swap(a,b);swap(a,b);printf(printf(交换后交换后交换后交换后a=%d,b=%dn,a,b);a=%d,b=%dn,a,b);void swap(int x,int y)void swap(int x,int y)int temp;int temp;temp=x;x=y;y=temp;temp=x;x=y;y=temp;a ab b7 71111x xy y7
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级语言程序设计教学课件 高级 语言程序设计 教学 课件
限制150内