ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:37.22KB ,
资源ID:3908427      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3908427.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第7章 函数及其应用.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第7章 函数及其应用.docx

1、第7章 函数及其应用第7章 函数及其应用7.1 函数种类1 命令函数,例如:printf(),scanf(),getchar(),putchar()等。2 库函数,fabs(), pow(), rand(),srand()sin(x), sqrt(), fexp()等。3 自定义函数7.2 自定义函数的概念及使用方法 例1:求两个数的最大数void main() int a=9,b=6;int imax (int a,int b); clrscr(); printf(“max=%dn”,imax(a,b); int imax (int a,int b)return ( ab ? a:b); 练

2、习:编写计算m,n两数和的函数子程序(子过程)方法:1 起函数名字2 确定形参类型和个数3 返回的值是什么练习:计算n!的函数子程序(子过程)long Factorial (int n)long i,k=1; for(i=1;i=n;i+) k=k*i;return (k); 练习:编写求x的n次方main() long npow (float x,int n);clrscr(); printf(“npow=%ldn”,npow(3,3); long npow (float a,int n)long i,k=1; for(i=1;i=n;i+) k=k*a;return (k); 7.3 自定

3、义函数的三种形式7.3.1无参函数,例如main(), clrscr(), getchar()等。主函数与子函数之间不传输数据例:输出字符四方形*void print()int i; for(i=1;i5;i+) printf(“*”); 7.3.2 空函数 例: null() 7.3.3 有参函数 如例1,例2 说明:1 C语言程序由一个主函数和若干个子函数(模块、过程)组成。 2 子函数也有类型和函数值。3 子函数程序体可以放在主函数后边,也可以放在主函数前边。如果放在后边,应在主函数中进行说明(说明的函数称原型函数),说明时参数可以出现变量名,也可以不出现变量名。如果是整型函数或字符函数

4、可以不说明。注意句未用“;”。main()long f(int); printf(“%ld”,f(10);long f(int n)int k;long ff=1;for(k=1; k=0) return 1; else return 1;12 当函数不返回值时,return 可以省略。13 函数的类型一定与retuen 返回的值的类型一致。14 当函数不返回值时,应在函数名字前加void,又叫无类型。15 使用函数有三种使用方法:(1) 作为语句:print();(2) 作为表达式:A=max(x,y)+npow(x,n)(3) 作为实参:A=max(max(a,b),c)16 函数程序中不

5、允许在定义函数。例:将作过的一些编程题编写成函数程序1 求三个数的最大数(可以求多个数的最大数)2 求两个正整数的最大公约数(可以求多个数的最大数)gys(int m,int n) int r; r=m%n; while(r!=0)m=n;n=r;r=m%n;return n;3 求n+(n+1)+(n+2)+(n+k)int sum(int n,int k) int s=0,i; for(i=0;i1e-3); return x;5 用子函数完成排序(绘制流程图)例:对n个数据排序。#define n 10main()int k,an=67,89,78,67,87,98,56,90,85,8

6、7;sort(a);for(k=0;kn;k+) printf(%dn,ak); sort(int a) int k,j,t; for(k=0;kn-1;k+) for(j=k+1;jn;j+) if(akaj) t=ak;ak=aj;aj=t; 6 用子函数完成x,x2,x3,.,xnfloat powm(float x,int n)float s=1; int i=1; for(i=1;i=n;i+) s=s*x return x; main() int n,k; float x; scanf(“%f%d”,&x,%n); for(k=1;k=n;k+) printf(“%fn”,powm

7、(x,k); 7.4 函数用数组做实参的应用说明:1 函数中使用数组仍要进行类型说明。2 函数中实参只给数组名。而形参要说明维数、类型和下标。3 数组作为实参和形参,有一方改变了其元素值,双方的数组的元素值句均改变。4 使用数组做实参和形参,可以函数程序中带回多个值。例:有n个学生,每个学生3门课程成绩,求每人的平均成绩。main()int k; float a34=1,78,98,88,2,78,67,77,3,66,98,89,r3; sum(a,r); for(k=0;k3;k+) printf(%d %fn,ak0,rk); sum(float b34,float c3) int k;

8、 for(k=0;k3;k+) ck=bk1+bk2+bk3; 例:对n个数据排序(绘制流程图)。#define n 10main()int k,an=67,89,78,67,87,98,56,90,85,87;sort(a);for(k=0;kn;k+) printf(%dn,ak); sort(int a) int k,j,t; for(k=0;kn-1;k+) for(j=k+1;jn;j+) if(akaj) t=ak;ak=aj;aj=t; 例:求主对角线元素值的平方和。main()int k; float a33=78,98,88,78,67,77,66,98,89,s; s=as

9、um(a,3); printf(%d %fn,s); float asum(float b,int n) float s=0; int k; for(k=0;kn;k+) s+= bkk+bkn-k; return s;7.5 局部变量和全局变量7.5.1 局部变量及其概念1 形参是局部变量。2 在一个复合语句中定义的变量。3 在一个函数中定义的变量。7.5.2 全局变量及其概念1. 函数外部定义的变量。2. 用extern 说明的变量。例:全局变量,一方变化,都变化 int m,n;main()m=3,n=5;printf(%d %dn,m,n);abc();abc()printf(%d %

10、d,m,n);例:有全局变量与局部变量相同,局部变量优先 给出下列程序的运行结果: int m=3,n=5;main()int m=30,n=50; /*无此句,一方变化都变化,有此句,局部优先 clrscr(); abc(); printf(%d %dn,m,n); abc(); abc() m=15,n=17; printf(%d %dn,m,n); 7.6 动态存储变量及静态存储变量7.6.1 动态变量1 程序运行期间,分配内存单元,运行结束,内存单元就释放。2 形参、局部变量都是动态变量。3 动态变量用auto说明或省略。7.6.2 静态变量1 调用函数结束,变量值保留,下次调用值仍存

11、在。2 静态变量用static 说明。3 数组只有定义成静态时,才能初始化。4 静态变量自动赋0值。5 何时需要定义静态数组:保留函数的变量值和数组初始化。 例:读程序,给出运行结果 main()int k; clrscr(); for(k=1;k5;k+) printf(%dn,f(k); int f(int n) int k; static int f=1; /*静态变量f,保留上次计算结果 for(k=1;k=n;k+) f=f*k; return f; 7.7 寄存器变量 作用:存取速度快。 特点:只允许使用三个寄存器变量,且必须是形参和局部变量才能使用。 用法:用 register

12、说明。 int f(int n) register k,f=1; for(k=1;k=n;k+) f=f*k; return f; 7.8 内部函数 放在一个文件中的函数称为内部函数。7.9 外部函数文件独立存放,能被其他文件中调用的函数称为外部函数。外部函数在调用程序中要用头文件说明。7.10 函数递归函数自身调用自身举例:1. 计算年龄程序:main()printf(“age=%dn”,age(4);int age(int n)int c;if(n=1) c=16;else c=age(n-1)+2;return c;2. 计算 1+2+3+ +100 main()printf(age=%

13、dn,age(100);int sum(int n)int c;if(n=1) c=1;else c=sum(n-1)+n;return c;3. 计算 n! (c=f(n-1)*n)4. 计算 0,1,1,2,3,5,8,. 第前20项(return (f(n-1)+f(n-2);)main()printf(age=%dn,num(19);int num(int n)int c;if(n=1) c=0; else if (n=2) c=1;else c=num(n-1)+num(n-2);return c;函数递归的两个基本条件(1) 边界条件(2) 递归表达式5. 求两个正整数的最大公约数

14、int gys(int m,int n) int r; r=m%n; if(r=0) return n;gys(n,r);main()printf(“%d”,gys(24,16);设计一个过程:能产生Fibonacci序列数的N个数, 即0 1 1 2 3 5 8 13 21 .。用主调函数过程调用这个过程并完成:找出所有是偶数的Fibonacci数,计算这些偶数的平均值。任务:设计子过程,产生序列数。设计主过程,找偶数,统计,求平均值long fib(int a,b)return (a+b);main()long n=18,a=0,b=1;k; long p=0,num=0 For(k=1;

15、k=n;k+) =fib(a,b);if(a%2=0) p+=a;num+=1; Printf(“average=%fn”,(float)num/n); 设计一个过程:求两个正整数的最小公倍数。在主调函数过程中调用这个过程并求m,n的最小公倍数设计一个过程:判定任意正整数是否素数。在主调函数过程中调用这个过程并求出100,200范围内的素数的个数。int primes(int m) (int k;For(k=2;km;k+) If(m%k=0) break; If(k=m) return 1 else return 0;main()int j,n=0; for(j=100;j200,j+)if

16、(primes(j) n+; printf(“primes is in 100-200=%d”,n)7.11 多文件程序的运行方法一:建立多个*.c文件(说明型,项目文件型),按顺序放在#include 中。例:f1.c 输出 “11111” f2.c 输出“22222” f3.c 调用f1.c,f2.c, 再输出“33333”例:方法一/*f3*/#include “f1.c” /*文件名*/#include “f2.c”main()p1();p2(); /*函数名*/ clrscr(); printf(“3 3 3 3 3n”);/*f1.c*/ /*文件名*/p1() /*函数名*/pr

17、intf(“1 1 1 1 1”n);/*f2.c*/p2()prinf(“2 2 2 2 2”);方法二、1. 分别建立子函数文件:f1.c , f2.c, f3.c2. 建立项目文件,文件名后缀一定是*.prj /*a.prj*/f1.c f2.c f3.c或 /*a.prj*/f1.cf2.cf3.c用save 保存为a.prj将project菜单项中的*.prj改为a.prj3. 编译连接 (f9)4. 运行(Ctrl f9)/*f3*/main()extern p1(),p2(); clrscr(); printf(“3 3 3 3 3n”);/*f1.c*/p1()printf(“

18、1 1 1 1 1”n);/*f2.c*/p2()prinf(“2 2 2 2 2”);方法三: 用extern 说明函数为外部函数例:求m的n 次方(使用方法一) /*ncf.c*/ #include “ncf.c”main() extern long npow (float a,int n)clrscr(); printf(“npow=%ldn”,npow(3,3); /*ncf.c*/extern long npow (float a,int n)long i,k=1; for(i=1;i1e-3); printf(“%f”,x1); 题2: 用牛顿迭代法求方程2x3-4x2+3x-6=

19、0在1.5附近的根(2)。f(x)=2x3-4x2+3x-6=0f(x)=6x2-8x+3=0#include “math.h”main()float x0,x1=1.5;float f(float x)float f1(float x) do x0=x1;x1=x0-f(x0)/f1(x0); while (fabs(x1-x0)0.0001);printf(“%fn”,x1);float f(float x)return (2*x*x*x-4*x*x+3*x-6);float f1(float x)return (6*x*x-8*x+3);题3: 用牛顿迭代法求方程x=从1-10的平方根的

20、根.x2=af(x)=x2-a=0 迭代式: xn+1=(xn+a/xn)/2#include “math.h”main()float a,x0,x1;for(a=1;a0.0001);printf(“%fn”,x1);题4: 用矩形法求一元函数f(x)=ln(x+1)+x/2,在区间1,5上的积分近似值S,保留2位小数main()float a=1,b=5,x,sum=0,h.n=100; H=(b-a)/n; For(x=a;xb;x+=h) sum+=log(x+1)+x/2; printf(“%fn”,sum*h);题5: 用梯形法求一元函数f(x)=ln(x+1)+x/2,在区间1,

21、5上的积分近似值S,保留2位小数方法一:main()float a=1,b=5,x,sum=0,h.n=100,d1,d2; H=(b-a)/n; For(x=a;xb;x+=h) d1= log(x+1)+x/2; d2= log(x+h+1)+(x+h)/2; sum+=d1+d2; printf(“%fn”,sum*h/2);方法二:main()float a=1,b=5,x,sum=0,h.n=100; H=(b-a)/n; For(x=a+h;xb;x+=h) sum+= log(x+1)+x/2; sum= log(a)+a/2+ log(b)+b/2+sum*2; printf(“%fn”,sum*h/2);题6: 用梯形法求积分近似值S,保留2位小数#include “math.h”main()float a=0,b=1.57,x,sum=0,h,n=100; h=(b-a)/n; for(x=a+h;xb;x+=h) sum+= sin(x); sum= sin(a)+ sin(b)+sum*2; printf(“%4.2fn”,sum*h/2);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1