c语言函数

  在写代码创作一个较大的模块时,通常需要将大模块分解为几个小模块来共同完成,"函数"即可笼统的理解为"小模块",合理的构架,运用"小模块"有利于让别人读懂我们的代码.

我们之前了解到一个程序必须要有一个函数(即main主函数)构成,在主函数中还使用c系统提供的标准函数(如printf,scanf),本文章的函数并非这些系统函数,而是一些我们自己创作出来的函数.

我们首先看一段"交换数值的代码":

//两个数值交换
#include<stdio.h>  //"#"预处理指令 
void swap(int a,int b)
{  
    printf("交换前a为%d,b为%d\n",a,b);
    int i;//i为数据的传递桥梁
	i=a;//a的值赋给了i
	a=b;//b的值赋给了a
	b=i;//i的值赋给了b 
	printf("交换后a为%d,b为%d",a,b); 
}
int main()
{ int a,b;
  a=1,b=2;
  swap(a,b);
  return 0;
}

运行结果为:

c语言函数

 下面依次解读此代码的运行原理与过程:

1原理:代码一下几行:

void swap(int a,int b)
{  
    printf("交换前a为%d,b为%d\n",a,b);
    int i;//i为数据的传递桥梁
	i=a;//a的值赋给了i
	a=b;//b的值赋给了a
	b=i;//i的值赋给了b 
	printf("交换后a为%d,b为%d",a,b); 
}

为函数定义部分,一般格式如下:

数据类型或者void  函数名(形参1,形参2,~~)

{

     函数体 

}

先看 void swap(int a,int b):

细节1:数据类型 or void? 就看这个"小模块"有无返回值(retuen),有就是数据类型中的一个,无就是 void.

细节2:若写数据类型,则其为返回值的数据类型,即返回值为1,那就是int,为1.0,那就是float,为字节a,那就是char.

细节3:函数名(本小模块为swap汉语为交换的意思),这个东西可以随便写(除了c系统自带的!!!),尽量写英文单词.

细节4:(形参1,形参2),形参可以没有但这对括号必须要有,形参就是接受实参传递过来的数据,然后带入"小模块"去"加工",所以,形参与实参必须一一对应.例如,本代码中main函数部分的swap(a,b)中的a传给了"小模块"中的"int a",main函数中的swap(a,b)中的a,b为实参,一定注意形参与实参在顺序上的一一对应,并且形参的改变不影响实参的值,比如我在本程序加了一句打印实参a,b:

//两个数值交换
#include<stdio.h>  //"#"预处理指令 
void swap(int a,int b)
{  
    printf("交换前a为%d,b为%d\n",a,b);
    int i;//i为数据的传递桥梁
	i=a;//a的值赋给了i
	a=b;//b的值赋给了a
	b=i;//i的值赋给了b 
	printf("交换后a为%d,b为%d\n",a,b); 
}
int main()
{ int a,b;
  a=1,b=2;
  swap(a,b);
  printf("实参a为%d,实参b为%d\n",a,b);
  return 0;
}

运行后:

c语言函数

 那么我们该如何改变实参?这就是下一节内容 指针与函数.

细节5:函数体的内容.此内容为小模块的核心,也是体验每个人思路的一部分.我们先只看一下其中的返回值部分.return语句会结束一切函数包括"小模块"的运行,同时return(表达式)还可以向主函数返回"表达式",表达式为变量或者常量,例如:

#include<stdio.h>
float avg(int a,int b,int c)
{  
     float avg=(a+b+c)/3;
     return avg;
}
int main()
{ int a,b,c;
  float average;
  scanf("%d %d %d",&a,&b,&c);
  average=avg(a,b,c);
  printf("平均值为%.1f",average);
  
}

其中"小模块"的return avg 的avg在小模块运行完后赋给了main函数的average,结果如下:

c语言函数

 细节6:main使用自己的"小模块"时,如果"小模块"在主函数后面,必须先在前面声明,就是这样:

//两个数值交换
#include<stdio.h>  //"#"预处理指令 
void swap(int a,int b);//声明函数,(定义加;) 
int main()
{ int a,b;
  a=1,b=2;
  swap(a,b);
  printf("实参a为%d,实参b为%d\n",a,b);
  return 0;
}
void swap(int a,int b)
{  
    printf("交换前a为%d,b为%d\n",a,b);
    int i;//i为数据的传递桥梁
	i=a;//a的值赋给了i
	a=b;//b的值赋给了a
	b=i;//i的值赋给了b 
	printf("交换后a为%d,b为%d\n",a,b); 
}

即"小模块"必须先声明,在调用.

/

以上内容为21级大一新生对于函数的了解,可能哪里有些不妥,请多指教.代码均为c,都可直接运行

上一篇:#5 实现指定函数swap


下一篇:学习更新2021年11月