第七章函数

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第七章函数函数的定义一、为什么要使用函数首先通过一个例题来引入函数的概念:求:k!n!+m!……scanf(“%d%d%d”,&k,&n,&m);fk=1;for(i=1;i=k;i++)fk=fk*ifn=1;for(i=1;i=n;i++)fn=fn*ifm=1;for(i=1;i=m;i++)fm=fm*i;printf(“%f\n”,fk/(fn+fm));…………f=1;for(i=1;i=n;i++)f=f*i;反复使用的代码段#includestdio.hintmain(void){inti,k,n,m;floatfk,fn,fm;scanf(“%d%d%d”,&k,&n,&m);fk=1;for(i=1;i=k;i++)fk=fk*ifn=1;for(i=1;i=n;i++)fn=fn*ifm=1;for(i=1;i=m;i++)fm=fm*i;printf(“%f\n”,fk/(fn+fm));return0;}#includestdio.hfloatfact(intn);intmain(void){inti,k,n,m;floatfk,fn,fm;scanf(“%d%d%d”,&k,&n,&m);fk=fact(k);fn=fact(n);fm=fact(m)printf(“%f\n”,fk/(fn+fm));return0;}floatfact(intn){inti;floatf=1;for(i=1;i=n;i++)f=f*i;returnf;}为什么使用函数?第一,函数的使用可以省去重复代码的编写。如果程序中需要多次使用某种特定功能,那么只需编写一个合适的函数即可。程序可以在任何需要的地方调用该函数,并且同一个函数要以在不同的程序中调用,就像在许多程序中需要使用printf()函数一样。第二,即使某种功能在程序中只使用一次,将其以函数的形式实现也是有必要的,因为函数使得程序更加模块化,从而有利于程序的阅读、修改和完善。#includestdio.hfloatfact(intn);intmain(void){inti,k,n,m;floatfk,fn,fm;scanf(“%d%d%d”,&k,&n,&m);fk=fact(k);fn=fact(n);fm=fact(m)printf(“%f\n”,fk/(fn+fm));return0;}floatfact(intn){inti;floatf=1;for(i=1;i=n;i++)f=f*i;returnf;}调用定义mainscanffactprintf库函数自定义函数库函数mainfact主调函数被调用函数输出处理输入函数的概念1、库函数,如:scanf(),printf(),sqrt()等。2、功能独立、反复使用的代码段,如fact(),即,用户自定义函数。3、模块化编程思想。学生成绩管理软件成绩录入成绩修改成绩统计成绩打印#includestdio.hvoidinput();voidedit();voidprocess();voidprint();intmain(void){intchoice;printf(“1.INPUT2.EDIT3.PROCESS4.PRINT5.EXIT\N”);while(1){print(“Pleaseinput1---5\n”);scanf(“%d”,&choice);if(choice==5)break;switch(choice){case1:input();break;cale2:edit();break;case3:process();break;case4:print();break;}}}voidinput(){…………….}voidedit(){…………..}voidprocess(){…………….}voidprint(){……………}二、怎样定义函数定义函数要包括以下几个内容:1、指定函数的名字,以便以后按名调用。2、指定函数的类型,即函数返回值的类型。3、指定函数的参数的名字和类型,以便在调用函数时向它们传递数据。对无参函数不需要这一项。4、指定函数应当完成什么操作,也就是函数是做什么的,即函数的功能。这是最重要的,是在函数体中解决的。格式如下:函数类型名函数名(参数说明)//没有参数时用void{函数体}#includestdio.hfloatfact(intn);intmain(void){intm,n;floatresm,resn;resm=fact(6);resn=fact(5);……….}floatfact(intn){………….}调用函数定义函数名(实际参数)返回值类型(形式参数){…………..}floatfact(intn){inti;floatf=1;for(i=1;i=n;i++)f=f*i;returnf;}voidshow_n_char(intn,charstr){inti;for(i=1;i=n;i++)putchar(str);}voidprint_star(){printf(“**********\n”);}voidprint_message(){printf(“helloworld!Cprogramisfun!\n”);}函数的调用一、函数调用的形式调用函数的形式很简单,如,fk=fact(k);fn=fact(n);fm=fact(m);printf(“helloworld\n”);函数调用的形式为:函数名(实参表列)如果是调用无参函数,则“实参表列”可以没有,但括号不能省略。如果实参表列包含多个实参,则各参数间用逗号隔开。函数调用的方式有以下三种:1、函数调用语句,如,printf(“********\n”);2、函数表达式,如,c=2*max(a,b);3、函数参数,如,m=max(a,max(b,c));printf(“%d\n”,max(a,b));把max(a,b)的返回值作为函数的参数。#includestdio.hfloatfact(intn);intmain(void){intm,n;floatresm,resn;scanf(“%d%d”,&n,&m);resm=fact(m);resn=fact(n);printf(“%f%f\n”,resm,resn);return0;}floatfact(intn){inti;floatf=1;for(i=1;i=n;i++)f=f*i;returnf;}调用定义函数名(实际参数)返回值类型(形式参数){…………..}参数传递二、函数调用时的数据传递1、形式参数和实际参数实际参数是函数调用时出现在圆括号中的表达式。而形式参数则是函数定义中在函数头部声明的变量。实际参数可以是常量、变量或表达式。如:intmain(void){……fk=fact(k);fn=fact(n);fm=fact(m)……}floatfact(intn){inti;floatf=1;for(i=1;i=n;i++)f=f*i;returnf;}实际参数是k,n,m。main()函数把这两个值传递给fact(),并把它们赋值给变量n形式参数是声明在函数头部的变量n.三、实参和形参间的数据传递在函数调用过程中,主调函数和被调函数是通过实参和形参来进行通信的。系统会把实参的值传递给被调用函数的形参。或者说,形参从实参得到一个值。该值在函数调用期间有效,可以参加该函数中的运算。#includestdio.hfloatfact(intn);intmain(void){inti,k,n,m;floatfk,fn,fm;scanf(“%d%d%d”,&k,&n,&m);fk=fact(k);fn=fact(n);fm=fact(m)printf(“%f\n”,fk/fn+fm);return0;}floatfact(intn){inti;floatf=1;for(i=1;i=n;i++)f=f*i;returnf;}mainscanffactprintf库函数自定义函数库函数mainfact主调函数被调用函数例7.2输入两个整数,要求输出其中值较大者。要求用函数来找到大数。函数的嵌套调用函数的递归调用指针作为函数参数数组作为函数参数变量的作用范围变量的声明和定义

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功