c语⾔⾃定义sum函数,C语⾔⾃定义函数
函数是⼀段可以重复使⽤的代码,⽤来独⽴地完成某个功能,它可以接收⽤户传递的数据,也可以不接收。接收⽤户数据的函数在定义时要指明参数,不接收⽤户数据的不需要指明,根据这⼀点可以将函数分为有参函数和⽆参函数。
将代码段封装成函数的过程叫做函数定义。
⽆参函数的定义
如果函数不接收⽤户传递的数据,那么定义时可以不带参数。如下所⽰:
dataType functionName(){
//body
}
dataType 是返回值类型,它可以是C语⾔中的任意数据类型,例如 int、float、char 等。
functionName 是函数名,它是标识符的⼀种,命名规则和标识符相同。函数名后⾯的括号( )不能少。
body 是函数体,它是函数需要执⾏的代码,是函数的主体部分。即使只有⼀个语句,函数体也要由{ }包围。
如果有返回值,在函数体中使⽤ return 语句返回。return 出来的数据的类型要和 dataType ⼀样。
例如,定义⼀个函数,计算从 1 加到 100 的结果:
int sum(){
int i, sum=0;
for(i=1; i<=100; i++){
sum+=i;
}
return sum;
}
累加结果保存在变量sum中,最后通过return语句返回。sum 是 int 型,返回值也是 int 类型,它们⼀⼀对应。
return是C语⾔中的⼀个关键字,只能⽤在函数中,⽤来返回处理结果。
将上⾯的代码补充完整:
#include
int sum(){
int i, sum=0;
for(i=1; i<=100; i++){
sum+=i;
}
return sum;
}
int main(){
int a = sum();
printf("The sum is %d\n", a);
return 0;
}
运⾏结果:
The sum is 5050
函数不能嵌套定义,main 也是⼀个函数定义,所以要将 sum 放在 main 外⾯。函数必须先定义后使⽤,所以 sum 要放在 main 前⾯。
注意:main 是函数定义,不是函数调⽤。当可执⾏⽂件加载到内存后,系统从 main 函数开始执⾏,也就是说,系统会调⽤我们定义的main 函数。
⽆返回值函数
有的函数不需要返回值,或者返回值类型不确定(很少见),那么可以⽤ void 表⽰,例如:
void hello(){
printf ("Hello,world \n");
//没有返回值就不需要 return 语句
}
void是C语⾔中的⼀个关键字,表⽰“空类型”或“⽆类型”,绝⼤部分情况下也就意味着没有 return 语句。
有参函数的定义
如果函数需要接收⽤户传递的数据,那么定义时就要带上参数。如下所⽰:
dataType functionName( dataType1 param1, dataType2 param2 ... ){
//body
}
dataType1 param1, dataType2 param2 ...是参数列表。函数可以只有⼀个参数,也可以有多个,多个参数之间由,分隔。参数本质上也是变量,定义时要指明类型和名称。与⽆参函数的定义相⽐,有参函数的定义仅仅是多了⼀个参数列表。
数据通过参数传递到函数内部进⾏处理,处理完成以后再通过返回值告知函数外部。
更改上⾯的例⼦,计算从 m 加到 n 的结果:
int sum(int m, int n){
int i, sum=0;
for(i=m; i<=n; i++){
sum+=i;
}
return sum;
}
参数列表中给出的参数可以在函数体中使⽤,使⽤⽅式和普通变量⼀样。
调⽤ 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 类型的形参就会发⽣⾃动类型转换。
将上⾯的代码补充完整:
#include
int sum(int m, int n){
int i, sum=0;
for(i=m; i<=n; i++){
sum+=i;
}
return sum;
}
int main(){
int begin = 5, end = 86;
int result = sum(begin, end);
printf("The sum from %d to %d is %d\n", begin, end, result);
return 0;自定义函数怎么用c语言
}
运⾏结果:
The sum from 5 to 86 is 3731
定义 sum() 时,参数 m、n 的值都是未知的;调⽤ sum() 时,将 begin、end 的值分别传递给 m、n,这和给变量赋值的过程是⼀样的,它等价于:
m = begin;
n = end;
函数不能嵌套定义
强调⼀点,C语⾔不允许函数嵌套定义;也就是说,不能在⼀个函数中定义另外⼀个函数,必须在所有函数之外定义另外⼀个函数。main()也是⼀个函数定义,也不能在 main() 函数内部定义新函数。
下⾯的例⼦是错误的:
#include
void func1(){
printf("c.biancheng");
void func2(){
printf("C语⾔⼩⽩变怪兽");
}
}
int main(){
func1();
return 0;
}
有些初学者认为,在 func1() 内部定义 func2(),那么调⽤ func1() 时也就调⽤了 func2(),这是错误的。
正确的写法应该是这样的:
#include
void func2(){
printf("C语⾔⼩⽩变怪兽");
}
void func1(){
printf("c.biancheng");
func2();
}
int main(){
func1();
return 0;
}
func1()、func2()、main() 三个函数是平⾏的,谁也不能位于谁的内部,要想达到「调⽤ func1() 时也调⽤ func2()」的⽬的,必须将func2() 定义在 func1() 外⾯,并在 func1() 内部调⽤ func2()。
有些编程语⾔是允许函数嵌套定义的,例如 JavaScript,在 JavaScript 中经常会使⽤函数的嵌套定义。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论