本文主要介绍自定义函数在C语言中的实现,并通过示例代码进行了详细介绍。对大家的学习或工作都有一定的参考价值。有需要的朋友下面跟边肖学习。
函数是一段可重用的代码,用于独立完成一项功能。它可以接收或不接收用户传递的数据。接收用户数据的函数在定义时需要指定参数,而那些不需要指定的。据此,函数可分为参数函数和非参数函数。
将代码段封装成函数的过程称为函数定义。
C语言中无参数函数的定义
如果函数没有接收到用户传递的数据,可以定义为不带参数。如下所示:
数据类型functionName(){
//正文
}
DataType是返回值类型,可以是C语言中的任何数据类型,如int、float、char等。
FunctionName是函数名,是一种标识符。命名规则与标识符的规则相同。函数名后面的括号()不能太短。
Body即函数体,是函数需要执行的代码,是函数的主要部分。即使只有一条语句,函数体也要用{}括起来。
如果有返回值,使用函数体中的return语句返回。返回数据的类型应该与数据类型相同。
例如,定义一个函数来计算从1到100相加的结果:
int sum(){
int i,sum=0;
for(I=1;i=100i ){
sum=I;
}
返回总和;
}
累加的结果保存在变量sum中,最后由return语句返回。是sumint类型,返回值也是int类型。它们一一对应。
Return是C语言中的一个关键字,只能用在返回处理结果的函数中。
完成上面的代码:
#包含stdio.h
int sum(){
int i,sum=0;
for(I=1;i=100i ){
sum=I;
}
返回总和;
}
int main(){
int a=sum();
printf('总和为%d\n ',a);
返回0;
}
运行结果:
总数是5050英镑
你不能嵌套函数的定义。main也是一个函数定义,所以应该把sum放在main外面。函数必须在使用前定义,所以sum应该放在main之前。
注意:main是函数定义,不是函数调用。当可执行文件加载到内存后,系统从main函数开始执行,即系统会调用我们定义的main函数。
无返回值函数
有些函数不需要返回值,或者返回值的类型不确定(很少),所以可以表示为void,例如:
void hello(){
printf ('Hello,world \ n ');
//如果没有返回值,则不需要返回语句
}
Void是C语言中的一个关键字,意思是“空类型”或者“无类型”。在大多数情况下,它意味着没有返回语句。
C语言中参数函数的定义
如果函数需要接收用户传递的数据,应该用参数定义。如下所示:
数据类型函数名称(数据类型1参数1,数据类型2参数2.){
//正文
}
数据类型1参数1,数据类型2参数2.是参数列表。一个函数可以只有一个参数,也可以有多个参数,用。参数本质上也是变量,定义时要注明类型和名称。与无参数函数的定义相比,无参数函数的定义只多了一个参数表。
数据参数传递到函数内部进行处理,然后用返回值通知函数外部。
改变上面的例子来计算从m到n相加的结果:
int sum(int m,int n){
int i,sum=0;
for(I=m;I=n;i ){
sum=I;
}
返回总和;
}
参数列表中给定的参数可以像普通变量一样在函数体中使用。
当调用sum()函数时,需要向其传递两段数据,一段为M,一段为n,可以直接传递整数,例如:
int result=sum(1,100);//1传递给M,100传递给n。
您还可以传递变量:
int begin=4;
int end=86
int result=sum(begin,end);//begin传递给m,end传递给n。
也可以一起传递整数和变量:
int num=33
int result=sum(num,80);//num传递给m,80传递给n。
定义函数时给出的参数称为形参,简称形参;调用函数时给出的参数(即传递的数据)称为实际参数,简称实参。当调用函数时,实参的值被传递给形参,这相当于一个赋值操作。
原则上,参数的类型和数量应该与形式参数一致。如果可以执行自动类型转换或强制类型转换,则实参类型也可以不同于形参类型。例如,如果将int类型的参数传递给float类型的参数,将发生自动类型转换。
完成上面的代码:
#包含stdio.h
int sum(int m,int n){
int i,sum=0;
for(I=m;I=n;i ){
sum=I;
}
返回总和;
}
int main(){
int begin=5,end=86
int result=sum(begin,end);
printf('从%d到%d的和是%d\n ',begin,end,result);
返回0;
}
运行结果:
5和86的和是3731
定义sum()时,参数m和n的值未知;调用sum()时,begin和end的值分别传递给m和n,与给变量赋值的过程相同。它相当于:
m=begin
n=结束;
函数定义不能嵌套。
强调C语言不允许函数的嵌套定义;也就是说,不能在一个函数中定义另一个函数,而必须在所有函数之外定义另一个函数。Main()也是一个函数定义,不能在main()函数内部定义新函数。
下面的例子是错误的:
#包含stdio.h
void func1(){
printf(' http://c . biancheng . net ');
void func2(){
printf(‘C语言白怪物’);
}
}
int main(){
func 1();
返回0;
}
有些初学者认为在func1()内部定义了func2(),调用func1()就会调用func2(),这是错误的。
正确的写法应该是这样的:
#包含stdio.h
void func2(){
printf(‘C语言白怪物’);
}
void func1(){
printf(' http://c . biancheng . net ');
func 2();
}
int main(){
func 1();
返回0;
}
func1()、func2()和main()函数是并行的,谁也不能位于谁的内部。要达到“调用func1()时调用func2()”的目的,必须在func1()外定义func2(),在func1()内调用func2()。
一些编程语言允许函数的嵌套定义,比如JavaScript,其中经常使用函数的嵌套定义。
递归函数(两个简易的递归调用)
1,阶乘
功能声明
int my fun(int num);
功能实现
int MyFun(int num){
//通用函数
//int sum 1=1;
//for(int I=1;i=numi ) {
//sum 1 *=I;
//}
//返回sum1
//递归调用
if (num==1||num==0) {
返回1;
}否则{
返回num * my fun(num-1);
}
}
转移
printf('sum=%d\n ',my fun(6));
操作效果
2,菲波那切数列数列
功能声明
int FBS NQ(int num);
功能实现
int fbsnq(int num){
//递归
if(num==1||num==2){
返回1;
}
返回FBS NQ(num-1)FBS NQ(num-2);
//普通
//int n1=1,n2=1,temp=0;
//if (num==1||num==2) {
//返回1;
//}
//int I=2;
//for(;inumi ){
//temp=n1 N2;
//n1=N2;
//N2=temp;
//}
//返回temp
}
函数的调用
for(int I=1;i=30i ) {
if ((i-1)%5==0) {
printf(' \ n ');
}
printf('d',FBS NQ(I));
}
printf(' \ n \ n ');
运行结果
就是这样。本文介绍了C语言自定义函数的实现。有关C语言自定义函数的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。