函数new
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例子
函数返回值类型
int max (int x, int y) { 语句; }
合法标识符 形参类型
合法标识 符
形参类型 合法标识 符
几点说明:
函数名和形式参数都是由用户命名的标示 符。同一程序中,函数名必须唯一;形式 参数在同一个函数中唯一即可,可以与其 它函数中的变量同名。 在一个函数的内部不能再定义函数。 若省略了函数返回值类型,C语言中默认函 数返回值是in参 例子 main() { static int a[5]={1,2,3,4,5},i ; add(a,5); for(i=0;i<5;i++) printf(“ %d,”, a[i]); }
2
a[0] a[1] a[2] a[3] a[4]
3 4 5 6 1 2 3 4 5
max(int x, int y) { int t; if (x>y) t=x; else t=y; return(t); }
a
5 5
b
10 10
c
10 10
t
x
y
• 函数的地址传递 –方式:函数调用时,将数据的存储地 址作为参数传递给形参 –特点: »形参与实参占用同样的存储单元 »“双向”传递 »实参和形参必须是地址常量或变量 »可以批量地传递数据
int dif(int x,int y,int z) {return max(x,y,z)-min(x,y,z); } #include <stdio.h> int max(int x,int y,int z) int dif(int x,int y,int z); { int r; int max(int x,int y,int z); r=x>y?x:y; int min(int x,int y,int z); return(r>z?r:z); void main() } { int a,b,c,d; int min(int x,int y,int z) scanf("%d%d%d",&a,&b,&c); { int r; d=dif(a,b,c); r=x<y?x:y; printf("Max-Min=%d\n",d); return(r<z?r:z); } }
实际参数
c =add(a,b);
printf(“c=%d\n”, c);
} int add ( int x, int y ) { int z ; z=x+y; return(z);
add (a , b) ; int add ( x, y )
形式参数
}
函数的调用规则
1、调用函数时,函数名必须与调用处的函数名完全一致。 2、实参的个数必须与形参的个数一致。 3、函数必须先定义,后调用。 4、函数可以直接或间接地自己调用自己,称为递归调用。 5、形参在函数被调用前不占内存;函数调用时为形参分配 内存;调用结束,内存释放。
注意:
函数定义与函数说明不同; 函数说明位置:程序的数据说明部分(函数内或 外); 下列情况下,可不作函数说明: 1)若函数返值是char或int型,系统自动按int型 处理; 2)被调用函数定义出现在主调函数之前。
5.调用函数和被调用函数之间的参数传递 三种传递方式: 1)实参与形参之间进行数据传递; 2)return语句把函数值返回调用函数; 3)定义全局变量。
函数分类
• 从用户角度
– 标准函数(库函数):由系统提供 – 用户自定义函数
• 从函数形式
– 无参函数 – 有参函数
使用库函数应注意: 1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件
1.库函数
C语言中有一些完成基本任务的函数, 如输入输出函数、求正弦值的sin函数、 求平方的sqrt函数等是经常需要使用的。 这样的常用的完成基本任务的函数有 许多已经由提供编译程序的公司为我 们写好了。这些已经写好的函数放在 TC或者BC编译器的文件中。
int add(int x,int y) { int z; z=x+y; return(z); } 例 无返回值函数 void swap(int x,int y ) { int temp; …… temp=x; c=add(a,b); x=y; …… y=temp; }
3. 函数的调用
函数调用格式: 函数名(实参表) ; main() { int a=100,b=200,c ;
7.变量的使用范围与存储类型
“变量” — 是指在程序运行过程中其值可以发生 变化的量。通常是用来表示在程序中对数据存储空间 的一种抽象的描述。 当我们在学习C语言中的变量时,必须要掌握 变 量的有关属性:
1、变量的数据类型及其定义方法 2、变量的初始化
3、变量的使用范围及其说明方法 4、变量的存储类别及其定义方法
• 所谓“库函数”,就是存放“函数”的“仓库”。 编写程序的时候,如果我们需要使用某个库函数, 就要在这个程序开头指明这库函数存放在哪里,以 便让编译程序到这个地方去找。 • 有了众多的库函数,给编写程序带来了很大的方便。 就象做房子要用砖和瓦一样。如果没有砖和瓦,做 房子自己要挖土烧砖,可想而知,那样做房子的难 度有多大。 • 写程序也是这样,有了库函数,在需要完成某些任 务时,找到相应的库函数调用一下就可以了,不需 要自己一点一点的写代码。 • 在学习编程的同时要多多了解一些库函数的特点及 用法,对编写程序是有很大的好处的。
库函数说明:
调用标准库函数要使用include命令 标准形式是: #include “stdio.h” 或 #include <stdio.h> “”与<>的区别:“”寻找库函数时,如果在 stdio.h中没有找到,会自动到其它的文件中 找;而<>只在stdio.h中寻找。
库函数说明:
库函数的调用和使用:
变
量
的 使用 范围
变量的使用范围包括有 在一个函数内部使用的变量--- 局部变量; 在 函 数 之 外部 使用的变量--- 全局变量;
1、局部变量
局部变量
局部变量
在一个函数内部定义的变量称为局部变量
main() { int a, b ; …… }
int fun( int x) { int i, j ; …… }
1 n! n (n 1)!
(n 0,1) (n 1)
因此, 要想计算出n!,必须计算出 (n-1)!; 计算 出 (n-1)!, 必须计算出(n-2)!; …;由此类推,直到推 到 1!=1,返回后即可依次计算出 2!,3!,…, (n-1)!, n! 。
#include <stdio.h> int fac(int n) { int f; if(n<0) printf("n<0,data error!"); else if(n==0||n==1) f=1; else f=fac(n-1)*n; return(f); } main() { int n, y; printf("Input a integer number:"); scanf("%d",&n); y=fac(n); printf("%d! =%15d",n,y); }
main( ) 调用函数dif 输出 结束 dif函数 max函数
调用函数max 调用函数min
min函数
函数的递归调用
C语言的特点之一,就是允许函数的递归调用
其特点是在函数内部直接地调用自己。 递归函数的结构十分简练,对于可以使用递归 算法实现功能的函数,在C 语言中都可以把它们编 写成递归函数。 构造递归函数的关键是寻找递归算法和终结 条件象数学中的递推函数,都可以用C语言中的递 归函数来实现。
请编制: f(n)=12 + 22 +32 + 42 +… + n2 的递归程序。 1、递推公式: f(n)=n2 +f(n-1) 2、递归终止条件:f(1)=1
main() { int x=4 ; float sum; sum=fac(x); printf(“%d\n”,sum); }
float fac(int n) { float f ; if(n= =1) f=1; else f=n*n+fac(n-1); return(f ); }
f ( int a, int b ) { int c ; c=a+b; return(c); }
A) 11 B) 20 C) 21 D) 31
6.函数的嵌套与递归调用
– 嵌套调用
C规定:函数定义不可嵌套,但可以嵌套调用函数
main( ) a函数 b函数
调用函数a
结束
调用函数b
(2)函数的返回值
返回语句
1、常量 • 形式: return(表达式); return语句中的表 2、变量 3、表达式 或 return 表达式; 达式的值就是所求 的函数值 4、指针值 或 return ;
注意事项:
1. return语句表达式的值必须与函数首部所说明的类型一致,若不一致, 以函数值的类型为准,由系统自动进行转换;
add(a , b); int add(x , y);
4. 函数说明
C语言中函数要遵守“先定义,后使用”的规则,若把函 数的定义放在定义之后,应该在调用之前对函数进行说 明 一般形式: 函数类型 函数名(形参类型 [形参 名],…); 或 函数类型 函数名();
作用:告诉编译系统函 数类型、参数个数及类型, 以便检验
2. 程序执行到return语句时,程序流程返回到调用该函数的地方,并返回 函数值,同一个函数中,根据需要可多出出现return语句;
3. return语句不含表达式时,只是返回到调用函数,并没有确定的函数值;
4. 函数体内可以没有return语句,程序的流程一直执行到函数末尾的“}”, 然后返回调用函数,而且此时没有确定的函数值带回。
第五章 函数
C语言源程序有什么函数 组成,C程序从main函数 开始执行!
C 语言程序完全是由函数组成。除语 言本身提供的库函数和必须包含的 main 函数外,用户还可以根据需要定义 任意多个自己的函数。
C是函数式语言; 必须有且只能有一个名为main的主函数; C程序的执行总是从main函数开始,在main中 结束; 函数不能嵌套定义,可以嵌套调用。
关于局部变量使用的几点说明
2000 2002 2004 2006 2008
int add ( int b[ ], int n ) { int j ; for(j=0; j<n ;j++) b[j]++ ; return ; }
b[0] b[1] b[2] b[3] b[4]
请写出下列程序的运行结果
C)21 main() { int x=6,y=7,z=8,r ; r=f ((x--,y++,x+y),z--); printf(“r=%d\n”, r); }
main() 例子 { int a=100 ,c ; func(&a); printf(“a=%d\n”, a); int func( int *p ) } { int j ; j=*p+100 ; &a 2000 return(j) ; 2000 200 100 } p a
从上面的分析中,我们可以得出,使用参数传递地址时,当 对形参作出的任何变动,都将影响实参的变化。所以,利用这个 特性,可以在被调用函数中把它的处理结果送入某个参数的存储 空间,函数返回时,通过参数的地址就会把处理结果带 回调用函数
实参与形参的数据传递
• 值传递方式
方式:函数调用时,为形参分配单元,并将实 参的值复制到形参中;调用结束,形参单 元被释放,实参单元仍保留并维持原值 特点: »形参与实参占用不同的内存单元 »单向传递 »每次每个参数只能传递一个数据
例子
main() { int a=5,b=10, c ; c=max(a,b); printf(“c=%d\n”, c); }
函数名(参数)
具体使用在后面学习中会多次的用到, 需要积累。
2.函数的定义和返回值 函数返回值类型
缺省int型 (1)、定义格式 无返回值void 现代风格: 合法标识符
函数类型 函数名(形参类型说明表) { 说明部分 函数体 语句部分 }
(类型名 形式参数1,类型名 形式参数2,类型名 形式参数3……)
11变量的数据类型及其定义方法变量的数据类型及其定义方法22变量的初始化变量的初始化33变量的使用范围及其说明方法变量的使用范围及其说明方法44变量的存储类别及其定义方法变量的存储类别及其定义方法变量的使用范围包括有变量的使用范围包括有在一个函数在一个函数内部内部使用的变量使用的变量局部变量局部变量