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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C语言函数知识详解文档格式.docx

1、二、函数的定义和返回值1、 函数定义的语法 函数首部(main( ) 函数1C语 定义说明部分言程 函数体 序 执行语句部分 函数22、C语言函数定义的一般形式如下1) 函数返回值的类型名 函数名(类型名 形式参数1,类型名 形式参数2.) /* 函数首部*/ 说明部分 /*函数体*/ 语句部分 int abs(int x) 2) 在老的C语言版本中,函数的首部用以下的形式: 函数返回值的类型名 函数名(形式参数1,形式参数2.) 形式参数类型说明; int abs(x) int; 3)函数名和形式参数都是由用户命名的标识符。在同一程序中,函数名必须唯一;形式参数名只要同一函数中唯一即可,可以

2、与其它函数中的变量同名。4)C语言规定,不能在同一个函数的内部再定义函数。5)若在函数的首部省略了函数返回值的类型名,函数首部写成: 函数名(类型名 形式参数1,类型名 形式参数2.)C语言默认返回值类型为int型。编写求两个双精度之和的函数。 double add(double a, double b) double s; s=a+b; return s;6) 函数体中,除形参外,用到的其它变量必须在说明部分进行定义,这些变量(包括形参),只在函数被调用时才临时开辟存储单元,当退出函数时,这些临时开辟的存储单元全被释放掉,因此,这种变量只在函数体内部起作用,与其它函数中的变量互不相关,它们可

3、以和其它函数中的变量同名。3、函数的返回值1)函数的值通过return语句返回,return语句的形式如下: return 表达式; 或 return(表达式); 或 return2) 说明 return语句中的表达式的值就是所求的函数值。此表达式值的类型必须与函数首部所说明的类型一致。若类型不一致,则以函数值的类型为准,由系统自动进行转换。当程序执行到return语句时,程序的流程式就返回到调用该函数的地方,并带回函数值。在同一函数内,可以根据需要在多处出现return语句。return语句也可以不含表达式,这时它的作用只是使流程返回到调用函数,并没有确定的函数值。函数体内可没有return

4、语句,程序的流程就一直执行到函数末尾的”,然后返回调用函数,这时也没有确定的函数值带回。函数的调用和说明一、函数的两种调用方式:1、 函数的一般调用形式为:函数名(实在参数表)实在参数(简称实参)的个数多于一个时,各实在参数之间用逗隔开。若函数无形参,调用形式为:函数名( ) 例:函数名后的一对括号不可少。 fun(int x)int j,sum=0; for(j=1;j=x;j+) sum+=j; return sum;main( ) int s,n; scanf(“%d”,&n); s=fum(int n); printf(“%d”,s);可用两种方式调用函数1)作为表达式出现y=add(

5、3.0,4.0)2)作为独立语句出现printf(“*”);二、函数调用时的语法要求1、调用函数时,函数名必须与所调用的函数名字完全一致。2、实参的个数必须与形式参数的个数一致。实参可以是表达式,在类型上应按位置与形参一一对应匹配。如果类型不匹配,C编译程序按赋值兼容进行转换,若实参和形参的类型不赋值兼容,通常不给出出错信息,且程序仍然执行,只是不会得到正确的结果。因此,应该特别注意实参和形参的类型匹配。3、C语言规定:函数必须先定义,后调用(函数的返回值类型为int或char时除外)。第三节 调用函数和被调用函数之间数据的传递fun(int x) /被调用函数.main() s=fun( n

6、); Printf(“%d”,s);C语言中,调用函数被调用函数之间数据可以通过三种方式进行传递1.实在参数和形式参数之间进行数据传递2.通过return语句把函数值返回调用函数3.通过全局变量。二、在C语言中,数据只能从实参单向按值传递。也就是说,当简单变量作为实参时,用户不可能在函数中改变对应实参值。三、例题:例1:以下程序例示了函数参数之间的单向传递,请观察程序的执行结果。 int x=2,y=3,z=0; printf(“(1)x=%d y=%d )z=%dn”,x,y,z); try(x,y,z); printf(“(4)x=%d y=%d z=%dn”,x,y,z);try(int

7、 x,int y,int z) printf(“(2)x=%d y=%d z=%dn”,x,y,z); z=x+y; /* 5=2+3 x=x*x; /* 4=2*2y=y*y; /* 9=3*3printf(“(3)x=%d y=%d z=%dn”,x,y,z);两个数交换 int a,b; main()int a,b,t; scanf(“%d%d”,&a,&b); printf(“a=%d,b=%d”,a,b); t=a;a=b;b=t;例2:用函数方法 twr(a,b);twr(int a,int b) int t;printf(“a=%d,b=%d”,a,b);函数程序举例 例1:编写

8、函数isprime(int a)用来判断自变量a是否为素数,若是素数,函数返回1,否则返回0。 素数:只能被1和本身整除的数。 int x,i;x);for(i=2;i=x) printf(“YES”); /始终没有跳出循环,说明它是素数。else printf(“NO”);函数方法: main( ) int a; if(isprme(a) printf(“YES”); else printf(“NO”);isprime(int a) int i; for(i=2;a; if(a%i=0) return 0; return 1; 例2:编写函数,验证任意偶数为两个素数之和并输出这两个素数。 分

9、析:任意输入一个数:如 12 12的因子: 2 3 4 5 6 7 8 9 10 11 2+10=12 (2,10 不是素数) 3+9=12 (3,9不是素数) 4+8=12 (4, 8不是素数) 5+7=12 6+6=12 (6不是素数) 超过一半就不用判断了,因为重复。 int isprime(int a) if(a%i=0) retrurn 0; void even(int x) int i;=x/2; if(isprime(i) if(isprime(x-i) printf(“%d=%d+%d”,x,i,x-i); int x; /*当前要判断的偶数*/ if(x%2=0) /*如果为

10、偶数*/even(x); /*函数为独立语句调用,没有返回值*/ 例3:编写函数myupper(ch),把ch中的小写字母转换成大写字母作为函数值返回,其它字符不变。用字符结束输入。分析; dsdDSFDF#include “ctype.h”#include “stdio.h”char myupper(char ch) if(islower(ch) ch=ch-32; else ; return ch; char ch; while(ch=getchar()!=) ch= myupper(ch); putchar(ch); 例4:编写函数统计输入字符的个数如输入dkjfkd5456 遇到非法字

11、符结束。如ctrl+z #include “stdio.h” int fun( ) char ch; int x=0;=EOF) x+; return x; int n=0; /*n用来统计输入的个数*/ n=fun( ); printf(“%d”,n); 例5:编写函数统计输入文本中单词的个数,单词之间用空格符、换行符、跳格符隔开。分析: my name is jinwen以name为例:name前一个字符必须是间隔符,当前字符必须为字母,说明n是首字母。int countword( ) int x=0,state=0; /*state为标志位。 if(isspace(ch) state=0

12、; /*0位于单词的外部,1位于单词的内部 else if(state=0) state=1; int n; n=countword( ); 例6:编写函数用以求表达式x2-5x+4,x作为参数传递给函数。 x2-5x+4=x*x-5*x+4 #include “math.h” double fun(double x) return x*x-5*x+4; double x,y; scanf(“%lf”,& y=fun(x); printf(“%lf”,y);例7:编写函数求1-1/2+1/3-1/4+1/5-1/6+1/71/ndouble fun(int x) int i,n=1; /*n为

13、符号控制变量*/ double s=0; for(i=1; s+=n*(1.0/i); / s=s+n*(1.0/i) n=-n; double s; int n; s=fun(n); printf(“%lf”,s);习题练习1:以下叙述中正确的是:A、C语言程序总是从第一个定义的函数开始执行。B、在C语言程序中,要调用的函数必须在main函数中定义。C、C语言程序总是从main函数开始执行。D、C语言程序中的main函数必须放在程序的开始部分。2、以下函数的类型是 A、与参数x的类型相同 B、void类型 C、int类型 D、无法确定fff(float x) printf(“%dn”,x*x

14、);3、以下函数调用语句中,含有的实参个数是: A、1 B、2 C、 4 D、 5 Func(exp1,exp2),(exp3,exp4,exp5) 4、以下程序的输出结果是(A) A、5.500000 B、3.000000 C、4.000000 D、8.25 double f(int n)int i; double s; s=1.0;=n;i+) s+=1.0/i; int i,m=3;float a=0.0; for(i=0;m; a+=f(i); /a=a+f(i)printf(“%fn”,a);5、以下程序的输出结果是_4_ fun1(int a,int b) int c; a+=a;

15、 b+=b; c=fun2(a,b); return c*c; fun2(int a,int b) c=a*b%3; return c; int x=11,y=19; printf(“%dn”,fun1(x,y);二指向函数的指针变量的定义1、在C语言中函数名代表该函数的入口地址,因此可以定义一种指向函数的指针来存放这种地址。2、double fun(int ,int*); 函数说明 double (*p) (int int*); 函数指针若有p=fun则以上两个等价。p与fun必须类型名与参数类型一一匹配。3、例: double fun(int a,int *p) . main( ) dou

16、lbe (*fp) (int ,int*),y; fp=fun; . y=(*fp)(56,& 等价于 y=fun(56,&函数名或指向函数的指针变量作为实参 函数名或指向函数的指针变量作为实参是将函数首地址传给形参: double tran(double (*)(double),double (*)(double), double); double y,v; v=6.0*3.1415/180.0; y=tran(sin,cos,v);printf(“tan(60)=%10.6fn”,y);y=tran(cos,sin,v);printf(“cot(60)=10.6fn”,y); double

17、 tran(double (*f1)(double),double (*f2) (double),double x) return (*f1)(x)/(*f2)(x);函数的递归调用基本概念C语言中的函数可以递归调用,即:可以直接或间接地自己调用自己。前者称简单递归,后者称间接递归。一个问题采用递归方法来解决时,必须符合以下三个条件:可以把要解的问题转化为一个新的问题,而这个新的问题的解法仍与原来的的解法相同。可以应用这个转化过程使问题得到解决。必定要有一个明确的结束递归的条件。while(不知道同学年纪) 问当前同学年纪while(不知道第一个同学年纪) 用当前同学年纪加两岁一、 实例应用1

18、、 求n!如求5! 5*4! 4*3! 3*2! 2*1! 1!=1double fun(int n) if(n=1) return 1; else return n*fun(n-1);printf(“%d”,s);5!=5*fun(4) 5*24fun(4)=4*fun(3) 24fun(3)=3*fun(2) 6 fun(2)=2*fun(1) 2=2*12、用递归算法根据以下求平方根的迭代公式,求某数的a的平方根。x1=1/2(x0+a/x0)double mysqrt(double a,double x0) double x1; x1=(x0+a/x0)/2.0; if(fabs(x1

19、-x0)0.00001) return mysqrt(a,x1); else return x1; double a; printf(“The sqrt of %f=%fn”,a,mysqrt(a,1.0);3、请写递归函数,把输入的一个整数转换成二进制数输出。以8为例 8 8%2=0 8/2=44 4%2=0 4/2=22 2%2=0 2/2=11 1%2=1 1/2=0 二进制1000fun(int x) if(x/2=0) return 1; else printf(“%d”,fun(x/2); return x%2; int x; printf(“%d”,fun(x);fun(8) r

20、etun x%2 0fun(4) return x%2 0fun(2) return x%2 0 fun(1) return 1 最后结果:10004、请用递归算法,求1+2+3+4+.n,n由键盘输入(5)5+(4) (4)4+(3) (3)3+(2) (2)2+(1) (1)1得出公式:(n)+(n-1)fun(int n) else return n+fun(n-1); int s; printf(“s=%dn”,s);5、请用递归算法,求斐波拉契级数。求n阶斐波拉契级数的公式如下:当n=0时 F(n)=1当n=1时 F(n)=1当n1时 F(n)=F(n-1)+F(n-2) 0 1 2 3 4 5 1 1 2 3 5 8. if(n=0|n=1) return 1; else return fun(x-2)+fun(x-1); printf(“%d”,fun(n);fun(4) fun(2)+fun(3) 5 2+3 fun(3) fun(1)+fun(2) 3 1+2 fun(2) fun(0)+fun(1) 2 1+1

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

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