第4章函数.docx
- 文档编号:3005291
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:17
- 大小:33.10KB
第4章函数.docx
《第4章函数.docx》由会员分享,可在线阅读,更多相关《第4章函数.docx(17页珍藏版)》请在冰豆网上搜索。
第4章函数
第四章函数
函数是C语言程序的基本组成单元,迄今为止编写的每一个程序都用到了函数。
函数有库函数(系统)函数,有自己编写的函数,如:
main()函数和printf()、scanf()函数就是库函数。
第一章例1.4的max()就是自己编写的函数。
用函数可以使程序容易编写、阅读、调试、修改和维护。
下面我们先看一个有函数定义和函数调用的程序。
4、1带有函数的程序举例
例4、1编一个程序:
(1)输入两个数,比较这两个数的大小
(2)用比较出的较小的数做半径求圆的面积。
#include
intmain()
{inta,b,t;//a,b用来存放输入的2个数,t用来存放比较出的较小的数
doublear;//用来存放求出的面积
doublearea(int);//声明求面积的函数area()
intmax(int,int);//声明比较2个数大小的函数max()
printf(“输入2个数:
”);
scanf("%d,%d",&a,&b);//输入2个数,放在a和b中
t=max(a,b);//调用函数max()去比较2个数的大小,将比较出的小的数返回给t
ar=area(t);//调用函数area()去求半径为t(也就是比较出的小的数)的圆的面积
printf("最小的数%d为半径,求出的圆面积为:
%f\n",t,ar);//输出t和area
return0;
}
intmax(intx,inty)//函数定义,比较两个数的大小,将小的数返回给主函数
{intc;//c用来存放较小的数
c=x x: y;//比较两个数的大小,将较小的数存于c变量中 return(c);//将较小的数返回主函数 } doublearea(intr)//函数定义,求半径为较小的数的圆面积,将求出的面积返回主函数 {doublepi=3.1415926;//圆周率 doubleg;//g用来存放圆的面积 g=pi*r*r;//求出圆的面积лr2(即лr的平方),存于变量g中 return(g);//将圆的面积g返回主函数 } 运行结果: 输入2个数: 5,8 最小的数5为半径,求出的圆面积为: 78.539815 注意: 输入的2个数中间要用“,”隔开。 4.2函数的定义 函数是一个完成特定工作的独立程序模块,分库函数和自定义函数两种。 库函数由系统提供定义,编译时只要直接调用即可,而象前面的area()和max()函数,是程序人员自己定义的,属于自定义函数。 一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定的功能。 所有的高级语言中都有子程序这个概念,用子程序来实现模块的功能。 在C语言中,子程序的作用是由函数来完成的。 一个C程序可由一个主函数和若干个函数构成。 由主函数调用其它函数,其它函数也可以互相调用。 同一个函数可以被一个或多个函数任意调用多次。 函数返回有两种情况: (1)函数经过运算,得到一个明确的运算结果,并需要回送该结果。 例如,前面的max()函数要将比较出的小的数返回主函数调用它的地方,用来求圆的面积。 (2)函数只是完成一系列操作步骤,不需要回送任何运算结果。 1、返回运算结果的函数定义 函数类型函数名(形参表)//函数首部 {//函数体 函数实现过程; } 函数的定义包括函数首部和函数体两部分,其中函数首部由函数类型、函数名和形参表组成;函数体包括一对大括号内的若干条语句,体现函数的实现过程,并用return语句返回运算的结果。 return语句经常是最后一条语句。 return语句只能返回一个值。 2、不返回结果的函数定义 void函数名(形参表)//函数首部 {//函数体 函数实现过程; } 函数类型为void表示不返回结果,函数体中可以出现return语句,也可以省略。 void类型的函数虽然不直接返回一个值,但它的作用通常以屏幕输出等方式体现。 例4、2输出5之内的数字金字塔 #include intmain() {voidpyramid(intn);//声明输出数字金字塔的函数 pyramid(5);//调用输出数字金字塔的函数 return0; } voidpyramid(intn)//函数定义 {inti,j; for(i=1;i<=n;i++)//需要输出的行数 { for(j=1;j<=n-i;j++)//输出每行左边的空格 printf(""); for(j=1;j<=2*i-1;j++)//输出每行的数字 printf("%d",i); putchar('\n'); } } 运行结果: 1 222 33333 4444444 555555555 如果将函数pyramid(intn)的最后一个for循环: for(j=1;j<=2*i-1;j++) printf("%d",i); 改成: for(j=1;j<=i;j++) printf(“%d”,i);注意: %d后面有一个空格。 那么运行结果是: 1 22 333 4444 55555 该函数的功能很明显,就是在屏幕上输出数字金字塔,不做任何运算,也没有运算结果,自然也不需要返回值。 函数定义时,形参n决定了需要输出的数字金字塔的层数。 voidpyramid(intn)函数中省略了return语句,因为它无须返回什么。 4、3函数的调用 定义一个函数后,就可以在程序中调用这个函数。 调用函数时,将实参传递给形参并执行函数定义所规定的程序过程,以实现相应的功能。 在C语言中,调用标准库函数时,只需要在程序的最前面用#include命令包含相应的头文件;如: 要进行数学运算须包含#include 调用自定义函数时,程序中必须有与调用函数相对应的函数定义,如: 例4.2中的pyramid(5);和voidpyramid(intn)。 1、参数传递 函数定义中的参数称为形参,函数调用时的参数称为实参。 形参和实参必须一一对应,要求两者数量相同,类型一致。 在程序运行中,遇到函数调用时,将实参的值依次传给形参,这就是参数传递。 例4.2中pyramid(5)函数的实参5传递给voidpyramid(intn)函数形参的n,这时n就是5。 2、函数结果返回 从函数返回值的类型看,有两种类型: 一种是完成确定的运算,有一个运算结果返回给主调函数,如例4.1。 另一种是完成指定工作,没有确定的运算结果需返回给主调函数,通常用于实现结构化程序设计中的过程模块,函数类型用void指定,如第三章例3.8,一般最后用return;不返回到主调函数的什么地方。 下面讨论第一种类型,即有结果返回的函数。 例4、3判断一个数是奇数还是偶数,程序设计思想是在函数中判断若是偶数返回1,否则返回0。 #include intmain() {ints,t; inteven(intn); scanf("%d",&s); printf("输入的数是: %d\n",s); t=even(s); printf("经奇偶判别后,结果是t=%d\n若t=1是偶数,若t=0是奇数。 \n",t); return0; } inteven(intv) {if(v%2==0) return1; else return0; } 运行结果: (在终端上输入)9 (在终端上显示)输入的数是: 9 经奇偶判别后,结果是t=0 若t=1是偶数,若t=0是奇数。 说明: 如果你在终端上输入8,那么t就等于1,说明是偶数。 函数中出现了两个return语句,执行时根据条件选择其中一个,它们的作用相同,即结束函数运行,并回送结果。 如果return语句后面还有其它语句,将不会被执行。 3、函数原型声明 例4.2和4.3都出现了函数声明,这是因为C语言要求函数先定义后调用,将主调函数放在被调用函数的后面,就象变量先定义后使用一样。 如果自定义函数被放在主调函数的后面,就需要在函数调用前加上函数原型声明。 如果在调用函数前,即不定义,也不声明,程序编译时会出错。 函数声明的目的主要是说明函数的类型和参数的情况,以保证程序编译时能判断对该函数的调用是否正确。 函数声明的一般格式为: 函数类型函数名(参数表); 即只写函数定义中的第一行(函数首部),并以分号结束。 函数声明是一条C语句,而函数定义时的函数首部不是语句,后面不能跟分号。 在编写程序时,一般都把主函数main()写在最前面,这样做的好处是使整个程序的结构和功能开门见山地呈现在读者面前。 通过函数声明,可以解决函数先调用后定义的矛盾。 4.4使用函数编写程序 例4.4输入精度e,使用格里高利公式求п的近似值,精确到最后一项的绝对值小于e。 要求定义和调用函数funpi(e)求п的近似值。 格里高利公式: п111 —=1-—+—-—+… 4357 程序编制如下: #include #include intmain() {doublee,pi;//e代表精度 doublefunpi(doublee);//声明funpi,计算pi函数 printf("Enter(请输入计算精度)e: ");//提示用户输入精度,精确到小数点后多少位。 scanf("%lf",&e);//输入的精度放入变量e中 pi=funpi(e);//调用函数,把返回值赋给pi。 即pi值 printf("pi=%f\n",pi);//打印出п(pi)的值 return0; } doublefunpi(doublee)//定义计算pi的函数 { intdenominator,flag;//denominator是分母,flag是符号 doubleitem,sum;//item存放第i项的值,sum存放累加和即最终求到的п的值 flag=1;//flag表示第i项的符号,初值为1 denominator=1;//denominator表示第i项的分母,初值为1 item=1.0;//item中存放第i项的值,初值取1 sum=0;//置累加和pi的初值为0 //当|item|>=e时,执行循环 while(fabs(item)>=e) {item=flag*1.0/denominator;//计算第i项的值 sum=sum+item;//累加第i项的侄1 flag=-flag;//改变符号,为下一次循环做准备 denominator=denominator+2;//分母递增2,为下一次循环做准备 } returnsum*4;//将左边的分母4乘到右边就得到л的值。 } 运行结果: Entere: 0.00000001 pi=3.141593//机器打印出最多8位,包括小数点 例4.5输入任意一个数m,求m以内的全部素数,每行输出10个。 要求定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 函数
![提示](https://static.bdocx.com/images/bang_tan.gif)