计算圆柱体积_第1页
计算圆柱体积_第2页
计算圆柱体积_第3页
计算圆柱体积_第4页
计算圆柱体积_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、Chap 5 函数 5.1 计算圆柱体积5.2 使用函数编写程序5.3 变量与函数1本章要点怎样定义函数?如何调用函数?如何声明函数?什么是函数的参数?在函数调用时,参数是如何传递的?在使用函数的过程中,要注意哪些问题?怎样确定函数的参数?如何使用局部变量和全局变量?什么是静态变量?25.1 计算圆柱体积5.1.1 程序解析5.1.2 函数的定义5.1.3 函数的调用35.1.1 程序解析计算圆柱体积 例5-1 输入圆柱体的高和半径,求圆柱体积,volume=*r2*h。要求定义和调用函数cylinder (r, h )计算圆柱体的体积。 4例5-1源程序/* 计算圆柱体积 */#includ

2、e int main( void ) double height, radius, volume;double cylinder (double r, double h); /* 函数声明*/printf (Enter radius and height: );scanf (%lf%lf, &radius, &height); /* 调用函数,返回值赋给volume */volume = cylinder (radius, height );printf (Volume = %.3fn, volume);return 0;5例5-1源程序/* 定义求圆柱体积的函数 */double cylin

3、der (double r, double h)double result;result =3.1415926 * r * r * h; /* 计算体积 */return result; /* 返回结果 */Enter radius and height: 3.0 10Volume = 282.74365.1.2 函数的定义 函数是指完成一个特定工作的独立程序模块。库函数:由C语言系统提供定义如scanf()、printf()等函数自定义函数:需要用户自己定义如计算圆柱体体积函数cylinder()main()也是一个函数,C程序由一个main()或多个函数构成。程序中一旦调用了某个函数,该函

4、数就会完成一些特定的工作,然后返回到调用它的地方。函数经过运算,得到一个明确的运算结果,并需要回送该结果。例如,函数cylinder()返回圆柱的体积。函数完成一系列操作步骤,不需要回送任何运算结果。71返回运算结果的函数定义函数类型 函数名(形参表)/* 函数首部 */ /* 函数体 */ 函数实现过程 return 表达式;把函数运算的结果回送给主函数只能返回一个值函数返回值的类型没有分号double cylinder (double r, double h) double result; result = 3.1415926 * r * r * h; return result;8形参类

5、型1 参数1 ,类型2 参数2 ,类型n 参数n参数之间用逗号分隔,每个参数前面的类型都必须分别写明函数类型 函数名(形参表) 函数实现过程 return 表达式;不能写成 double r, hdouble cylinder (double r, double h) double result; result =3.1415926 * r * r * h; return result;9double cylinder (double r, double h) /* 函数首部 */* 函数体,写在一对大括号内 */ double result;result =3.1415926 * r * r

6、 * h; /* 计算圆柱体积 */return result; /* 返回运算结果*/分析函数的定义函数类型函数名形参表与函数类型一致102不返回运算结果的函数定义void 函数名(参数表) /* 函数首部 */ /* 函数体 */ 函数实现过程 return; /* 可以省略return */这类函数通常用于屏幕输出等表示不返回结果不能省略否则函数类型被默认定义为int11例5-2 输出5之内的数字金字塔。/* 输出数字金字塔 */#include int main (void) void pyramid (int n);/* 函数声明 */pyramid(5);/* 调用函数,输出数字金

7、字塔 */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); /* 每个数字的前后各有一个空格 */ putchar (n); 12 2 3 3 3 4 4 4 45 5 5 5 5 125.1.3 函数的调用定义一个函数后,就可以在程序中调用这个函数。调用标准库函数时,

8、在程序的最前面用#include命令包含相应的头文件。调用自定义函数时,程序中必须有与调用函数相对应的函数定义。131函数调用的形式和过程使用返回值:volume = cylinder (radius, height );printf(“%f n” , cylinder (radius, height );完成操作:pyramid(5);常用于void类型函数的调用常用于返回结果的函数的调用常量、变量、表达式函数名(实参表)14函数调用的过程计算机在执行程序时,从主函数main开始执行,如果遇到某个函数调用,主函数被暂停执行,转而执行相应的函数,该函数执行完后,将返回主函数,然后再从原先暂停的

9、位置继续执行。函数遇return或最后的大括号,返回主函数15分析函数调用的过程#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 );printf (Volume = %.3fn, volume);return 0;double cylinder (doub

10、le r, double h)double result;result =3.1415926 * r * r * h; return result; 调用函数实参形参执行函数中的语句返回调用它的地方162参数传递函数定义时的参数被称为形式参数(简称形参)double cylinder (double r, double h);函数调用时的参数被称为实际参数(简称实参)volume = cylinder (radius, height);实参形参在参数传递过程中,实参把值复制给形参。形参和实参一一对应:数量一致,类型一致,顺序一致形参:变量,用于接受实参传递过来的值实参:常量、变量或表达式单向传

11、递173函数结果返回函数返回的两种情况完成确定的运算,有一个运算结果返回给主调函数。完成指定工作,没有确定的运算结果需返回给主调函数(函数类型void)。函数结果返回的形式:return 表达式;return (表达式);18【例5-3】定义判断奇偶数的函数even (n)定义一个判断奇偶数的函数even (n),当n为偶数时返回1,否则返回0。/* 判断奇偶数的函数 */int even (int n)/* 函数首部 */if(n%2 = 0) /* 判别奇偶数 */return 1;/* 偶数返回1 */elsereturn 0;/* 奇数返回0 */如何调用该函数?194函数原型声明函数

12、类型 函数名(参数表);double cylinder (double r, double h);void pyramid (int n);函数必须先定义后调用,将主调函数放在被调函数的后面,就像变量先定义后使用一样。如果自定义函数在主调函数的后面,就需要在函数调用前,加上函数原型声明。函数声明:说明函数的类型和参数的情况,以保证程序编译时能判断对该函数的调用是否正确。只写函数定义中的第1行(函数首部),并以分号结束。205.2 使用函数编写程序例5-4 输入精度e,使用格里高利公式求的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数 funpi(e) 求的近似值。21例5-4 源程序

13、/* 用格里高利公式计算的近似值,精度为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; double item, sum; flag = 1; denominator = 1; item = 1.0; sum = 0; while (

14、fabs (item) = e) item = flag * 1.0 / denominator; sum = sum + item; flag = -flag; denominator = denominator + 2; return sum * 4;Enter e: 0.0001pi = 3.141822例5-5 判断素数的函数例5-5 求100以内的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。要求定义和调用函数prime (m)判断m是否为素数,当m为素数时返回1,否则返回0。算法描述:对2100之间的每个数进行判断,若是素数,则输出该数。for

15、(m = 2; m = 100; m+) if (m是素数) printf(%d , m); prime(m) != 023例5-5 源程序#include #include int main(void) int count, m; int prime (int 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 )

16、return 0; n = sqrt (m); for( i = 2; i = n; i+) if (m % i = 0) return 0; return 1; 245.3 变量与函数5.3.1 局部变量和全局变量5.3.2 变量生命周期和静态局部变量255.3.1 局部变量和全局变量局部变量在函数内定义的变量(包括形参)作用范围:本函数内部定义在复合语句内的变量作用范围:复合语句内部全局变量在函数以外定义的变量,不从属于任一函数。作用范围:从定义处到源文件结束(包括各函数)26例5-6 在复合语句中定义局部变量。#include int main (void) int a; a = 1;

17、/* 复合语句开始 */ int b = 2; b = a + b; a = a + b; /* 复合语句结束 */ printf (%d , a ); return 0;b:小范围内的临时变量 427例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 =

18、x + b; /* 全局变量运算 */ printf(%d %d , a, x); return 0;4, 7若局部变量与全局变量同名,局部变量优先28变量作用范围示例int x=1;void main( ) int a=2; . int b=3; . f( ); .int t=4 ;void f( ) int x=5, b=6; .int a=7; x=? a=? b=?b=? x=5 b=6 t=4 a没定义 x=? b=? t=? a=?29自动变量(auto): 普通的局部变量int x, y; auto int x, y;char c1; auto char c1;函数调用时,定义变量,分配存储单元。函数调用结束,收回存储单元。全局变量:从程序执行开始,到程序的结束,存储单元始终保持。变量生命周期变量从定义开始分配存储单元,到运行结束存储单元被回收的整个过程。5.3.2 变量生命周期和静态局部变量30

温馨提示

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

评论

0/150

提交评论