C语言7-class-while和函数.ppt_第1页
C语言7-class-while和函数.ppt_第2页
C语言7-class-while和函数.ppt_第3页
C语言7-class-while和函数.ppt_第4页
C语言7-class-while和函数.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

4.3 while 循环(二) 例题:用while循环求1! + 2! + . + 100! 分析: 先求出n! 然后在累加 第五章 函数 5.1 使用函数编写程序入门 5.2 自己编写几个函数程序 5.3 变量与函数 本章要点 v怎样定义函数?如何调用函数?如何声 明函数? v什么是函数的参数?在函数调用时,参 数是如何传递的? v在使用函数的过程中,要注意哪些问题 ?怎样确定函数的参数? v如何使用局部变量和全局变量? v什么是静态变量? 5.1 使用函数编写程序入门 5.1.1 第一个使用函数程序(计算圆柱体体积)的解析 5.1.2 函数的定义 例题5-2 输出数字金字塔 5.1.3 函数的调用及说明 5.1.1 第程序计算圆柱体积 例5-1 输入圆柱体的高和半径,求圆柱体积, volume=*r2*h。 要求定义和调用函数cylinder (r, h )计算圆柱体 的体积。 例5-1源程序 /* 计算圆柱体积 */ #include void main() double height, radius, volume; double cylinder (double r, double h); /* 函数声明*/ printf (“Enter radius and height: “); scanf (“%lf,%lf“, volume = cylinder (radius, height ); /* 调用函数,返回值赋给volume */ printf (“Volume = %.3fn“, volume); 例5-1源程序 double cylinder (double r, double h) /* 定义求圆柱体积的函数 */ double result; result =3.1415926 * r * r * h; /* 计算体积 */ return result; /* 返回结果 */ 运行结果: Enter radius and height: 3.0 ,10 Volume = 282.743 5.1.2 函数的定义 v函数是指完成一个特定工作的独立程序模块。 库函数:由C语言系统提供定义 如scanf()、printf()等函数 自定义函数:需要用户自己定义 如计算圆柱体体积函数cylinder() vmain()也是一个函数,C程序由一个main()或多个函 数构成。 v程序中一旦调用了某个函数,该函数就会完成一些 特定的工作,然后返回到调用它的地方。 函数经过运算,得到一个明确的运算结果,并需要回 送该结果。例如,函数cylinder()返回圆柱的体积。 函数完成一系列操作步骤,不需要回送任何运算结果 。 1返回运算结果的函数定义 函数类型 函数名(形参表)/* 函数首部 */ /* 函数体 */ 函数实现过程 return 表达式; 把函数运算的结果回送给主函数 只能返回一个值 函数返回值的类型 没有分号 double cylinder (double r, double h) double result; result = 3.1415926 * r * r * h; return result; 1)形参说明: 类型1 参数1 ,类型2 参数2 ,类型n 参数n 参数之间用逗号分隔,每个参数前面的类型都必须分别写明 函数类型 函数名(形参表) 函数实现过程 return 表达式; 不能写成 double r, h double 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; /* 返回运算结果*/ 2)分析函数的定义 函数类型 函数名形参表 与函数类型一致 2不返回运算结果的函数定义 void 函数名(参数表) /* 函数首部 */ /* 函数体 */ 函数实现过程 return; /* 可以省略return */ 这类函数通常用于屏幕输出等 表示不返回结果 不能省略 否则 函数类型被默认定义为int 例5-2 输出5之内的数字金字塔。 /* 输出数字金字塔 */ #include void main () void pyramid (int n);/* 函数声明 */ pyramid(5);/* 调用函数,输出数字金字塔 */ void pyramid (int n) /* 函数定义 */ int i, j; for (i = 1; i void main() double height, radius, volume; double cylinder (double r, double h); printf (“Enter radius and height: “); scanf (“%lf%lf“, volume = cylinder (radius, height ); printf (“Volume = %.3fn“, volume); double cylinder (double r, double h) double result; result =3.1415926 * r * r * h; return result; 调用函数 实参形参 执行函数中的语句 返回调用它的地方 2参数传递 v函数定义时的参数被称为形式参数(简称形参) double cylinder (double r, double h); v函数调用时的参数被称为实际参数(简称实参) volume = cylinder (radius, height); v实参形参 在参数传递过程中,实参把值复制给形参。 形参和实参一一对应:数量一致,类型一致,顺序一 致 形参:变量,用于接受实参传递过来的值 实参:常量、变量 单向传递 3函数结果返回 v函数返回的两种情况 完成确定的运算,有一个运算结果返回给主 调函数。 完成指定工作,没有确定的运算结果需返回 给主调函数(函数类型void)。 v函数结果返回的形式: return 表达式; return (表达式); 4函数原型声明 函数类型 函数名(参数表); double cylinder (double r, double h); void pyramid (int n); v函数必须先定义后调用,将主调函数放在被调函 数的后面,就像变量先定义后使用一样。 v如果自定义函数在主调函数的后面,就需要在函 数调用前,加上函数原型声明。 v函数声明的作用:说明函数的类型和参数的情况 ,以保证程序编译时能判断对该函数的调用是否正 确。 只写函数定义中的第1行(函数首部),并以分号结束。 5.2 自己使用函数编写程序 例5-6 输入精度e,使用格里高利公式求的近似值 ,精确到最后一项的绝对值小于e。要求定义和调 用函数 funpi(e) 求的近似值。 例5-4 求两个数的最大值 例5-5 求阶乘问题 程序5-4 两个数球求最大值(无参数传递) 两个数求最大值(有参数传递,函数定义在main之前) 函数定义在main之前 v例5-5 求阶乘问题。输入一个正整数n,输出n!。 #include /* 编译预处理命令 */ void main() /* 主函数 */ int n; /* 变量定义 */ int factorial(int n); /* 函数声明 */ scanf(“%d“, /* 输入一个整数 */ printf(“%dn”, factorial(n); /* 调用函数计算阶乘 */ int factorial (int n) /* 定义计算 n! 的函数 */ int i, fact = 1; for(i = 1; i #include void main () double e, pi; double funpi (double e); printf (“Enter e:“); scanf (“%lf“, pi = funpi (e); printf (“pi = %fn“, pi); double funpi (double e) int denominator, flag; double 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.0001 pi = 3.1418 上机作业: 1、用函数实现三个数求最大值。(分有参数传 递和无参数传递两种)(2分) 2、用函数实现Fibonacci序列: 1,1,2,3,5,8,13, (求出10位)(1分) 5.3 变量与函数 5.3.1 局部变量和全局变量 5.3.2 变量生命周期和静态局部变量 5.3.1 局部变量和全局变量 v局部变量 在函数内定义的变量(包括形参) 作用范围:本函数内部 定义在复合语句内的变量 作用范围:复合语句内部 v全局变量 在函数以外定义的变量,不从属于任一函数 。 作用范围:从定义处到源文件结束(包括各函 数) 例5-6 在复合语句中定义局部变量。 #include int main (void) int a; a = 1; /* 复合语句开始 */ int b = 2; b = a + b; a = a + b; /* 复合语句结束 */ printf (“%d “ , a ); return 0; b:小范围内的临时变量 4 例5-7 全局变量定义#include “stdio.h“ int 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 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=? v自动变量(auto): 普通的局部变量 int x, y; auto int x, y; char c1; auto char c1; 函数调用时,定义变量,分配存储单元。 函数调用结束,收回存储单元。 v全局变量:从程序执行开始,到程序的结束,存储单 元始终保持。 v变量生命周期 变量从定义开始分配存储单元,到运行结束存储单元被 回收的整个过程。 5.3.2 变量生命周期和静态局部变量 v存储类型: 动态存储:自动变量 静态存储:全局变量、静态局部变量 v用户存储空间 存储区 数 据 区 静态存储区 动态存储区 static 类型名 变量表 v作用范围:局部变量 v生命周期:全局变量 静态局部变量 例5-9 静态局部变量示例 #include void fun (int k); int main (void) int k; for (k = 1; k = 3; k+) fun (k); return 0; void fun(int k) static int a; printf (“%d, “, a); a += k ; 0,1,3, 静态变量会记住前一次调用时留下来的值 静态变量的初值为0 附加例题1.找出500以内的所有素数。 例2 求Fibo

温馨提示

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

评论

0/150

提交评论