时间:2021-05-20
函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收。接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以将函数分为有参函数和无参函数。
将代码段封装成函数的过程叫做函数定义。
如果函数不接收用户传递的数据,那么定义时可以不带参数。如下所示:
例如,定义一个函数,计算从 1 加到 100 的结果:
累加结果保存在变量sum中,最后通过return语句返回。sum 是 int 型,返回值也是 int 类型,它们一一对应。
return是C语言中的一个关键字,只能用在函数中,用来返回处理结果。
将上面的代码补充完整:
运行结果:
The sum is 5050
函数不能嵌套定义,main 也是一个函数定义,所以要将 sum 放在 main 外面。函数必须先定义后使用,所以 sum 要放在 main 前面。
注意:main 是函数定义,不是函数调用。当可执行文件加载到内存后,系统从 main 函数开始执行,也就是说,系统会调用我们定义的 main 函数。
无返回值函数
有的函数不需要返回值,或者返回值类型不确定(很少见),那么可以用 void 表示,例如:
void是C语言中的一个关键字,表示“空类型”或“无类型”,绝大部分情况下也就意味着没有 return 语句。
如果函数需要接收用户传递的数据,那么定义时就要带上参数。如下所示:
dataType1 param1, dataType2 param2 ...是参数列表。函数可以只有一个参数,也可以有多个,多个参数之间由,分隔。参数本质上也是变量,定义时要指明类型和名称。与无参函数的定义相比,有参函数的定义仅仅是多了一个参数列表。
数据通过参数传递到函数内部进行处理,处理完成以后再通过返回值告知函数外部。
更改上面的例子,计算从 m 加到 n 的结果:
参数列表中给出的参数可以在函数体中使用,使用方式和普通变量一样。
调用 sum() 函数时,需要给它传递两份数据,一份传递给 m,一份传递给 n。你可以直接传递整数,例如:
也可以传递变量:
也可以整数和变量一起传递:
函数定义时给出的参数称为形式参数,简称形参;函数调用时给出的参数(也就是传递的数据)称为实际参数,简称实参。函数调用时,将实参的值传递给形参,相当于一次赋值操作。
原则上讲,实参的类型和数目要与形参保持一致。如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型,例如将 int 类型的实参传递给 float 类型的形参就会发生自动类型转换。
将上面的代码补充完整:
运行结果:
The sum from 5 to 86 is 3731
定义 sum() 时,参数 m、n 的值都是未知的;调用 sum() 时,将 begin、end 的值分别传递给 m、n,这和给变量赋值的过程是一样的,它等价于:
强调一点,C语言不允许函数嵌套定义;也就是说,不能在一个函数中定义另外一个函数,必须在所有函数之外定义另外一个函数。main() 也是一个函数定义,也不能在 main() 函数内部定义新函数。
下面的例子是错误的:
有些初学者认为,在 func1() 内部定义 func2(),那么调用 func1() 时也就调用了 func2(),这是错误的。
正确的写法应该是这样的:
func1()、func2()、main() 三个函数是平行的,谁也不能位于谁的内部,要想达到「调用 func1() 时也调用 func2()」的目的,必须将 func2() 定义在 func1() 外面,并在 func1() 内部调用 func2()。
有些编程语言是允许函数嵌套定义的,例如 JavaScript,在 JavaScript 中经常会使用函数的嵌套定义。
1,阶乘
函数的声明
int MyFun(int num);函数的实现
int MyFun(int num){// 普通函数// int sum1=1;// for (int i=1; i<=num; i++) {// sum1*=i;// }// return sum1; // 递归调用 if (num==1||num==0) { return 1; }else { return num*MyFun(num-1); }}调用
printf("sum=%d\n",MyFun(6));运行效果
2,菲波那切数列数列
函数的声明
int fbsnq(int num);函数的实现
int fbsnq(int num){ // 递归 if(num==1||num==2){ return 1; } return fbsnq(num-1)+fbsnq(num-2); //普通// int n1=1,n2=1,temp=0;// if (num==1||num==2) {// return 1;// }// int i=2;// for(;i<num;i++){// temp=n1+n2;// n1=n2;// n2=temp;// }// return temp;}函数的调用
for (int i=1; i<=30; i++) { if ((i-1)%5==0) { printf("\n"); } printf("%10d", fbsnq(i)); } printf("\n\n");运行结果
到此这篇关于C语言自定义函数的实现的文章就介绍到这了,更多相关C语言自定义函数内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C语言语法简洁、紧凑,使用方便、灵活,具有丰富的预定义运算符和数据类型,自定义数据类型也十分灵活。C程序的模块化主要通过函数实现。由于C语言既有高级语言的功能,
在类中自定义的“函数”称为“方法”,由于C#是完全面向对象的语言,同时为了便于解释后面要学的C#类,这里的“方法”来称呼“函数”。方法是一种用于实现可以有对象或
c语言sum,它是自定义关键字,不属于C语言关键字,无固定含义。开发者可以自定义sum,一般用来表示求和变量。 C语言是一门面向过程的计算机编程语言,与C++
以C语言为例,main是主函数,这是规定,必须有一个,并且只能有一个main函数。basic不是保留字,可以用它做自定义变量和函数的标识符。 C语言的数据类型
Android自定义View的构造函数自定义View是Android中一个常见的需求,每个自定义的View都需要实现三个基本的构造函数,而这三个构造函数又有两种