C语言 学习课件 第5讲_第1页
C语言 学习课件 第5讲_第2页
C语言 学习课件 第5讲_第3页
C语言 学习课件 第5讲_第4页
C语言 学习课件 第5讲_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Chap 5 函数函数 5.1 统计圆柱体积统计圆柱体积5.2 使用函数编写程序使用函数编写程序5.3 变量与函数变量与函数本章要点本章要点n如何定义函数?似何调用函数?似何表如何定义函数?似何调用函数?似何表明函数?明函数?n啥是函数的指标?在函数调用时啥是函数的指标?在函数调用时,指标是指标是似何传递的?似何传递的?n在使用函数的环节中在使用函数的环节中,要注重哪些咨询题?要注重哪些咨询题?如何确定函数的指标?如何确定函数的指标?n似何使用局部变量和全局变量?似何使用局部变量和全局变量?n啥是静态变量?啥是静态变量?5.1 统计圆柱体积统计圆柱体积5.1.1 程序解析程序解析5.1.2 函

2、数的定义函数的定义5.1.3 函数的调用函数的调用5.1.1 程序解析统计圆柱体积程序解析统计圆柱体积 例例5-1 输入圆柱体的高和半径输入圆柱体的高和半径,求圆柱体求圆柱体积积,volume=*r2*h.要求定义和调用函数要求定义和调用函数cylinder (r, h )统计圆统计圆柱体的体积柱体的体积. 例例5-1源程序源程序* 统计圆柱体积统计圆柱体积 *#include int main( void ) double height, radius, volume;double cylinder (double r, double h); * 函数表明函数表明*printf (Enter

3、 radius and height: );scanf (%lf%lf, &radius, &height); * 调用函数调用函数,返回值赋给返回值赋给volume *volume = cylinder (radius, height );printf (Volume = %.3fn, volume);return 0;例例5-1源程序源程序* 定义求圆柱体积的函数定义求圆柱体积的函数 *double cylinder (double r, double h)double result;result =3.1415926 * r * r * h; * 统计体积统计体积 *re

4、turn result; * 返回结论返回结论 *Enter radius and height: 3.0 10Volume = 282.7435.1.2 函数的定义函数的定义 n函数是指完成一个特定任务的独站程序模块函数是指完成一个特定任务的独站程序模块.n库函数库函数:由由C语言系统提供定义语言系统提供定义n似似scanf()、()、printf()等函数()等函数n自定义函数自定义函数:需要用户自已定义需要用户自已定义n似统计圆柱体体积函数似统计圆柱体体积函数cylinder()()nmain()也是一个函数也是一个函数,C程序由一个程序由一个main()或多个函或多个函数构成数构成.n

5、程序中一旦调用了某个函数程序中一旦调用了某个函数,该函数便会完成部分特该函数便会完成部分特定的任务定的任务,接着返回到调用它的地点接着返回到调用它的地点.n函数通过运算函数通过运算,猎取一个明白的运算结论猎取一个明白的运算结论,同时需要同时需要回送该结论回送该结论.例似例似,函数函数cylinder()返回圆柱的体积返回圆柱的体积.n函数完成一系列操纵环节函数完成一系列操纵环节,不需要回送任何运算结论不需要回送任何运算结论.1返回运算结返回运算结论的函数定义论的函数定义函数类型函数类型 函数名(形参表)函数名(形参表)* 函数首部函数首部 * * 函数体函数体 * 函数实现环节函数实现环节 r

6、eturn 表达式;表达式;把函数运算的结论回送给主函数把函数运算的结论回送给主函数只能返回一个值只能返回一个值函数返回值的类型函数返回值的类型没有分号没有分号double cylinder (double r, double h) double result; result = 3.1415926 * r * r * h; return result;形参形参类型类型1 指标指标1 ,类型类型2 指标指标2 ,类型类型n 指标指标n指标之间用逗号分隔指标之间用逗号分隔,每个指标前面的类型都必须分不写明每个指标前面的类型都必须分不写明函数类型函数类型 函数名(形参表)函数名(形参表) 函数实现

7、环节函数实现环节 return 表达式;表达式;不能写成不能写成 double r, hdouble cylinder (double r, double h) double result; result =3.1415926 * r * r * h; return result;double cylinder (double r, double h) * 函数首部函数首部 * 函数体函数体,写在一对大括号内写在一对大括号内 * double result;result =3.1415926 * r * r * h; * 统计圆柱体积统计圆柱体积 *return result; * 返回运算结

8、论返回运算结论*对比函数的定义对比函数的定义函数类型函数类型函数名函数名形参表形参表与函数类型一致与函数类型一致2不返回运算结不返回运算结论的函数定义论的函数定义void 函数名(指标表)函数名(指标表) * 函数首部函数首部 * * 函数体函数体 * 函数实现环节函数实现环节 return; * 能够省略能够省略return *这类函数往往用于屏幕输出等这类函数往往用于屏幕输出等示意不返回结论示意不返回结论不能省略不能省略否那么否那么函数类型被默认定义为函数类型被默认定义为int例例5-2 输出输出5之内的数字金字塔之内的数字金字塔.* 输出数字金字塔输出数字金字塔 *#include in

9、t main (void) void pyramid (int n);* 函数表明函数表明 *pyramid(5);* 调用函数调用函数,输出数字金字塔输出数字金字塔 *return 0;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+) * 输出每行的数字输出每行的数字 * printf( %d , i); * 每个数字

10、的前后各有一个空格每个数字的前后各有一个空格 * putchar (n); 12 2 3 3 3 4 4 4 45 5 5 5 5 5.1.3 函数的调用函数的调用n定义一个函数后定义一个函数后,便能够在程序中调用那个函便能够在程序中调用那个函数数.n调用规格库函数时调用规格库函数时,在程序的最前面用在程序的最前面用#include号令见谅相应的头文件号令见谅相应的头文件.n调用自定义函数时调用自定义函数时,程序中必须有与调用函数程序中必须有与调用函数相对应的函数定义相对应的函数定义.1函数调用的形式和环节函数调用的形式和环节n使用返回值使用返回值:nvolume = cylinder (ra

11、dius, height );nprintf(“%f n” , cylinder (radius, height );n完成操纵完成操纵:npyramid(5);常用于常用于voidvoid类型函数的调用类型函数的调用常用于返回结论的函数的调用常用于返回结论的函数的调用常量、变量、表达式常量、变量、表达式函数名(实参表)函数名(实参表)函数调用的环节函数调用的环节n统计机在履行程序时统计机在履行程序时,从主函数从主函数main最先履最先履行行,似果遇到某个函数调用似果遇到某个函数调用,主函数被停息履主函数被停息履行行,转而履行相应的函数转而履行相应的函数,该函数履行完后该函数履行完后,将返回主

12、函数将返回主函数,接着再从原先停息的位置接接着再从原先停息的位置接着履行着履行.n函数遇函数遇return或末了的大括号或末了的大括号,返回主函数返回主函数对比函数调用的环节对比函数调用的环节#include int main( void ) double height, radius, volume;double cylinder (double r, double h); printf (Enter radius and height: );scanf (%lf%lf, &radius, &height);volume = cylinder (radius, height

13、);printf (Volume = %.3fn, volume);return 0;double cylinder (double r, double h) double result;result =3.1415926 * r * r * h; return result; 调用函数调用函数实参实参形参形参履行函数中的语句履行函数中的语句返回调用它的地点返回调用它的地点2指标传递指标传递n函数定义时的指标被称为形式指标(简称形参)函数定义时的指标被称为形式指标(简称形参)ndouble cylinder (double r, double h);n函数调用时的指标被称为现实指标(简称实参)

14、函数调用时的指标被称为现实指标(简称实参)nvolume = cylinder (radius, height);n实参实参形参形参n在指标传递环节中在指标传递环节中,实参把值复制给形参实参把值复制给形参.n形参和实参一一对应形参和实参一一对应:数量一致数量一致,类型一致类型一致,次序一致次序一致n形参形参:变量变量,用于同意实参传递过来的值用于同意实参传递过来的值n实参实参:常量、变量或表达式常量、变量或表达式单向传递单向传递3函数结论返回函数结论返回n函数返回的两种情况函数返回的两种情况n完成确定的运算完成确定的运算,有一个运算结论返回给主有一个运算结论返回给主调函数调函数.n完成指定任务

15、完成指定任务,没有确定的运算结论需返回没有确定的运算结论需返回给主调函数(函数类型给主调函数(函数类型void).n函数结论返回的形式函数结论返回的形式:nreturn 表达式;表达式;nreturn (表达式表达式);【例【例5-3】定义推断奇偶数的函数】定义推断奇偶数的函数even (n)定义一个推断奇偶数的函数定义一个推断奇偶数的函数even (n),当当n为偶数时返回为偶数时返回1,否那否那么返回么返回0.* 推断奇偶数的函数推断奇偶数的函数 *int even (int n)* 函数首部函数首部 *if(n%2 = 0) * 判不奇偶数判不奇偶数 *return 1;* 偶数返回偶数

16、返回1 *elsereturn 0;* 奇数返回奇数返回0 *似何调用该函数?似何调用该函数?4函数原型表明函数原型表明函数类型函数类型 函数名函数名( (指标表指标表) );double cylinder (double r, double h);double cylinder (double r, double h);void pyramid (int n);void pyramid (int n);函数必须先定义后调用函数必须先定义后调用, ,将主调函数放在被调将主调函数放在被调函数的背面函数的背面, ,便像变量先定义后使用一样便像变量先定义后使用一样. .似果自定义函数在主调函数的背面

17、似果自定义函数在主调函数的背面, ,便需要在便需要在函数调用前函数调用前, ,加上函数原型表明加上函数原型表明. .函数表明函数表明: :讲明函数的类型和指标的情况讲明函数的类型和指标的情况, ,以以保证程序编译时能推断对该函数的调用是保证程序编译时能推断对该函数的调用是否精确否精确. .只写函数定义中的第只写函数定义中的第1 1行(函数首部)行(函数首部), ,同时以分号结束同时以分号结束. .5.2 使用函数编写程序使用函数编写程序例例5-4 输入精度输入精度e,使用格里高利程式求使用格里高利程式求的近的近似值似值,精确到末了一项的绝对值小于精确到末了一项的绝对值小于e.要求要求定义和调用

18、函数定义和调用函数 funpi(e) 求求的近似值的近似值.71513114例例5-4 源程序源程序* 用格里高利程式统计用格里高利程式统计的近似值的近似值,精度为精度为e *#include #include int main (void) double e, pi; double funpi (double e); printf (Enter e:); scanf (%lf, &e); pi = funpi (e); printf (pi = %fn, pi);return 0;double funpi (double e) int denominator, flag; doubl

19、e item, sum; flag = 1; denominator = 1; item = 1.0; sum = 0; while (fabs (item) = e) item = flag * 1.0 denominator; sum = sum + item; flag = -flag; denominator = denominator + 2; return sum * 4;Enter e: 0.0001pi = 3.1418例例5-5 推断素数的函数推断素数的函数例例5-5 求求100以内的全部素数以内的全部素数,每行输出每行输出10个个.素数便素数便是只能被是只能被1和自身整除的

20、正整数和自身整除的正整数,1不是素数不是素数,2是素是素数数.要求定义和调用函数要求定义和调用函数prime (m)推断推断m是否为素数是否为素数,当当m为素数时返回为素数时返回1,否那么返回否那么返回0.算法描述算法描述:对对2100之间的每个数履行推断之间的每个数履行推断,如果是如果是素数素数,那么输出该数那么输出该数.for(m = 2; m = 100; m+) if (m是素数是素数) printf(%d , m); prime(m) != 0例例5-5 源程序源程序#include #include int main(void) int count, m; int prime (i

21、nt m); count = 0; for(m = 2; m = 100; m+) if ( prime(m) != 0 ) printf(%6d, m ); count+; if (count %10 = 0) printf (n); printf (n);int prime (int m) int i, n; if ( m = 1 ) return 0; n = sqrt (m); for( i = 2; i = n; i+) if (m % i = 0) return 0; return 1; 5.3 变量与函数变量与函数5.3.1 局部变量和全局变量局部变量和全局变量5.3.2 变量生

22、命周期和静态局部变量变量生命周期和静态局部变量5.3.1 局部变量和全局变量局部变量和全局变量n局部变量局部变量n在函数内定义的变量(包罗形参)在函数内定义的变量(包罗形参)n作用范畴作用范畴:本函数内部本函数内部n定义在复合语句内的变量定义在复合语句内的变量n作用范畴作用范畴:复合语句内部复合语句内部n全局变量全局变量n在函数以外定义的变量在函数以外定义的变量,不从属于任一函数不从属于任一函数.n作用范畴作用范畴:从定义处到源文件结束(包罗各函从定义处到源文件结束(包罗各函数)数)例例5-6 在复合语句中定义局部变量在复合语句中定义局部变量.#include int main (void)

23、int a; a = 1; * 复合语句最先复合语句最先 * int b = 2; b = a + b; a = a + b; * 复合语句结束复合语句结束 * printf (%d , a ); return 0;b:b:小范畴内的临时变量小范畴内的临时变量 4例例5-7 全局变量定义全局变量定义#include stdio.hint x; * 定义全局变量定义全局变量x *int f( ) int x = 4; * x为局部变量为局部变量 * return x;int main(void) int a = 1; x = a; * 对全局变量对全局变量 x 赋值赋值 * a = f( ); * a的值为的值为4 * int b = 2; b = a + b; * b的值为的值为4 * x = x + b; * 全局变量运算全局变量运算 * printf(%d %d , a, x); return 0;4, 7如果局部变量与全局变如果局部变量与全局变量同名量同名,局部变量优先局部变量优先变量作用范畴示例变量作用范畴示例int x=1;void main( ) int a=2; . int b=3; . f( ); .int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论