C语言函数的一些简单总结

  C源程序采用是函数模块式的结构,每一个程序都是由很多个函数组成的,函数是C源程序的基本模块,C语言不仅提供了极为丰富的库函数,他还允许用户自己根据需求创建需要的函数,然后用函数调用的方法来使用该函数,正式这种函数模块化的设计,使得程序的层次结构清晰,便于程序的编写、阅读和调试

  main 函数在C语言中称为主函数,它可以调用其它函数,而不允许被其它函数调用。因此,C程序的执行总是从main函数开始,完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。一个C源程序必须有,并且只能有一个主函数main。另外,所有的函数包括main函数在内,他们都是一种平行的关系,也就是说,在一个函数内部不能再定义一个新的函数,单数允许函数之间的相互调用,包括函数自己调用自己本身,我们称这种调用为递归调用 

首先定义函数的一般格式为

 返回值类型 函数名(形式参数1,形式参数2,...){

     函数体

  }

 其中如果函数没有返回值那么返回值类型就为void,也可以省略返回值类型(不建议这么写),一旦省略了,那么系统会默认你的返回值类型为int

 

 1 //第一个程序:输出整数a、b、c三个数中最大的
 2 
 3 #include<stdio.h>
 4 
 5 int maxOfNum1WithNum2(int, int);
 6 
 7 int main(){
 8     
 9     int a = 30;
10     int b = 142;
11     int c = 36;
12     int max;  //存放最大值
13     
14     max = maxOfNum1WithNum2(a,b);     //将a、b中最大的赋值给max
15     max = maxOfNum1WithNum2(max,c);   //将max、c中较大的赋值给max
16     printf("%d\n",max);
17     
18     return 0;
19 }
20 
21 //比较两个整数大小的函数
22 int maxOfNum1WithNum2(int a,int b){
23     return a > b ? a : b; //采用三目运算返回较大者
24     
25 }

思路:我们可以将数值的比较单独的写成一个函数,并在main函数中调用它,既然是数值的比较,我们可以采用两个形参并且有返回值的函数

第五行代码为函数的声明,要注意末尾的分号,千万不能漏了,也可以放在main函数里,只需注意要放在函数被调用之前,为防止出现调用函数之前没有声明函数,我们一般会将函数的声明放在main函数的前面,也可以省去函数声明部分,此时一般是将自定义的函数放在main函数之前,但切记一定不能将自定义函数或者其他的函数放在main函数里面,因为函数是不能嵌套定义。

 

 1  //第二个程序:定义函数时需要注意的地方
 2  #include<stdio.h>
 3  
 4  //定义一个打印下划线的函数
 5  void test(){
 6  printf("______\n");
 7  }
 8  
 9  //定义一个求和函数
10  int test(int a, int b){
11  return a + b ;
12  }
13  int main(){
14  
15  test();
16  
17  int sum = test(7,9);//调用求和函数,将函数的返回值结果赋值给sum,注意此处的7和9我们称为实参,他们一定要和函数定义部分保持一致,也就是说,定义部分有几个形参,调用的时候就得有几个实参,不能多也不能少,并且类型要保持一致,否则会出现error或者warning,另外,在函数体内若有新的变量需要定义,一定不能和形参变量名相同
18  
19  printf("%d\n",sum);
20  
21  return 0;
22  }

这个程序中有两个函数,一个是打印下划线,一个是求和,有部分初学者以为函数之间只要返回值类型不同、形参数量不同,函数名是可以相同的,所以就容易出现与上面这个程序一样的错误,切记无论函数之间多少的不一样,函数名是绝对不能相同的,另外函数名一般情况下要起得有意义,要让别人看到函数名就会猜到函数的作用或者用途

函数的第15行调用打印下划线函数,虽然该函数没有形参,但是函数名后面的小括号不能省略

 

函数的第17行调用了求和函数并将返回值赋值给变量sum,注意此处的7和9我们称为实际参数(简称实参),他们一定要和函数定义部分保持一致,也就是说,定义部分有几个形参,调用的时候就得有几个实参,不能多也不能少,并且类型要保持一致,否则会出现error或者warning,另外,在函数体内若有新的变量需要定义,一定不能和形参变量名相同

 

下面的两个程序分别简单介绍一下函数的嵌套调用和递归调用的实现其中第一个程序是求12+22+32+...n2的值,第二个程序是求整数n的阶乘,即n×(n-1)×(n-2)×...3×2×1

 

 1 //函数的嵌套调用
 2  #include<stdio.h>
 3  
 4  int pingfang(int); //求一整数的平方和的函数声明
 5  int sum(int); //求和函数声明
 6  
 7  
 8  int main(){
 9  int n;
10  printf("请输入一个正整数:\n"); //提示输入一整数
11  scanf("%d",&n);
12  printf("%d\n",sum(n)); //调用求和函数并将结果输出
13  
14  return 0;
15  }
16  
17  //求和函数
18  int sum(int n){
19  
20  int result = 0;
21  //利用for循环
22  for (int i = 0; i < n; i++) {
23  result += pingfang(i); // 利用pingfang函数将i值平方
24  }
25  
26  return result;
27  
28  }
29  
30  //求一整数平方的函数
31  int pingfang(int n){
32  return n * n;
33  }

 

 1  //函数的递归调用
 2  #include<stdio.h>
 3  #long jiecheng(int);//函数的声明
 4  
 5  int main(){
 6  int n;
 7  printf("请输入一个正整数:\n"); //提示用户输出一个正整数
 8  scanf("%d",&n);
 9  printf("%ld\n",jiecheng(n)); //调用阶乘函数并将结果打印出来
10  
11  return 0;
12  }
13  
14  //函数的定义
15  long jiecheng(int n){
16  
17  long result; //存放最后结果
18  
19  if(n == 0||n == 1){
20     result = 1; //当数值减为1或者整数本身就是1或者0,它的阶乘就为1
21  }
22  
23  else{
24     result = jiecheng(n - 1) * n;//调用函数本身实现递归调用完成阶乘算法
25  }
26  
27  return result;
28  
29  }

在C语言中如果库函数不能满足用户需要求的时候,我们就会把自己的算法编写成一个函数,当需要的时候就去调用它实现相应的功能,但无论有多少个函数,main函数(主函数)永远是有且仅有一个,程序始于它也终于它。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。