预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共91页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第八章本章要点函数的定义函数的调用函数间的数据传递变量的存储类型变量的作用范围内部函数和外部函数C程序是函数的集合体,每个函数是一个独立的程序模块。有一个主函数,若干个子函数,程序总是从主函数开始执行。函数可集中或分散存放在一个或多个源程序文件中。所有子函数地位平等,可互相调用、自我调用。·引入函数的优点:减少重复编写程序的工作量;使程序便于调试和阅读。[例]输入三个整数,计算它们的和并输出运算结果。8.1.2函数的定义定义函数的一般形式类型标识符函数名(形式参数表){[说明部分]语句}1.无参函数的定义形式类型标识符函数名(){[说明部分]语句}[例8-2]intmax(intx,inty){intz;z=x>y?x:y;returnz;}3.形式参数说明形式参数:在定义函数时函数名后面括弧中的变量名在形参表中说明的形参,在函数体中不再说明,可以同一般变量一样直接使用。形参调用前不占内存单元,调用时分配内存单元。调用结束后释放。形参是函数的内部变量,只在函数内部才有意义。对每个形参必须指明其名字和数据类型。多个形参用逗号分隔。8.1.3函数的调用(1)函数语句:(把函数调用作为一个语句)一般形式:函数名(实际参数表);使用情况:这种方式常用于调用一个可以忽略返回值或没有返回值的函数,只要求函数完成一定的操作。例如:print_message();值传递:在函数调用时,实参将其值传递给形参。实参对形参的数据传递是“值传递”,即单向传递,只由实参传递给形参,而不能由形参传回来给实参。实参与形参占用不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。在执行一个被调用函数时,形参的值如果发生变化,并不会改变主调函数中实参的值。[例8-3]编写函数交换两个变量的值。#include<stdio.h>voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;printf("x=%d,y=%d\n",x,y);}intmain(){inta,b;a=5;b=10;printf("a=%d,b=%d\n",a,b);swap(a,b);printf("a=%d,b=%d\n",a,b);}8.1.5函数的返回值说明:return语句只能把一个返回值传递给调用函数。返回值的类型为定义的函数类型,若return语句中表达式类型与函数类型不一致,以函数类型为准。返回值可以是有确定值的常量、变量或表达式,也可以是地址。当返值是地址时,应该用指针接受。无返回值的函数,定义为void类型(无类型函数)。一个函数中可以有多个返回语句。exit()函数由ANSCC定义的,功能是终止和关闭所有程序,结束程序执行,忽略返回值。0为正常退出非0为非正常退出。main(){inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“Maxis%d”,c);}[例8-5]用函数计算浮点数x的n次方,其中n为整型(n>=0)[例8-6]编写函数,将一个给定的整数转换成字符串。[例8-7]编写函数,求1+1/2+1/3+…+1/n的值,并在主函数中调用它。#include<stdio.h>doublecount(intn){inti;doublesum=0;if(n<=0){printf("Dataerror!\n");return0;}else{for(i=1;i<=n;i++)sum+=1.0/i;returnsum;}}intmain(){intn;doubles;printf("Pleaseinputthevalue:");scanf("%d",&n);s=count(n);printf("s=%6.2lf\n",s);}8.1.6函数的声明main(){floatadd(floatx,floaty);floata,b,c;scanf(“%f,%f”,&a,&b);c=add(a,b);printf(“sumis%f”,c);}2.函数声明和函数定义的区别(1)被调用函数在主调函数之前定义(2)在所有函数定义之前说明8.2数组作函数参数一维数组作函数参数,形参的写法为:类型说明符形参数组名[数组长度]例如:floataverage(floatarray[10]){…}main(){floatb[10];inti;for(i=0;i<10;i++)scanf(“%f”,&b[i]);average(b);}说明:实参数组和形参数组大小不一定一致,一维形参数组可以不指定大小。数组名除作为变量的标识外,还代表该数组在内存中存放区域的首地址。数组名做函数实参与形参之间是“地址传递”,实参数组将数组的起始地址传递给形参数组。编