了解函数
1.函数就是一系列C语句的集合,是可以重复调用的、功能相对独立完整的程序段。
2.主函数可以调用其他函数,其他函数也可以互相调用。
3.要注意一个C程序必须有一个且只能有一个main函数,无论main函数位于程序的什么位置,运行时都是从main函数开始执行的。
4.函数不能嵌套定义,也就是说一个函数不能从属于另一个函数。函数之间可以互相调用,但是任何函数不能调用main函数,main函数是被操作系 统调用的。
函数分类
(1)从用户角度看:库函数、用户自定义的函数
(2)从形式:无参函数、有参函数
函数定义
一般形式:
类型标识符 函数名(形式参数表列)
{
声明部分
语句
}
函数的类型标识符是函数要返回的数据的类型,函数的形式参数是函数要进行数据处理时,需要从主调函数里获取的值。
例:用函数实现计算两个整数的和。
因为函数的功能是计算两个整数的和,首先要涉及到两个整数,而这两个整数不是固定的,要把这两个整数作为函数的形式参数;而最后得到的结果是这两个整数的和,要返回到主调函数,所以函数的类型标识符也应该是整型;而函数的功能则是把这两个整数相加,利用return语句返回两个整数的和。
函数的定义如下:
int add(int x,int y)
{
int z;
z=x+y;
return z;
}
(1)函数的名字是add,函数起名时也要遵循C语言标识符的规定;
(2)函数的形式参数(简称“形参”)是x和y两个整数;
(3)函数的功能是计算x+y的值,并把它的值赋给z,然后将z值返回;
(4)因为z值是整数,所以函数的类型设置为int。
函数调用:
对函数的调用也是函数功能的实现。函数调用的一般形式为:函数名(实参表列); 函数的实参是真正进行计算的数据,一般都有具体的数据。实参可以没有,但括弧不能省略。各实参之间用逗号间隔,实参与形参按顺序对应,一一传递数据。
例:对上述函数的调用
void main()
{
int a,b,c;
scanf(“%d,%d”,&a,&b);
c=add(a,b);
printf(“%d”,c);
}
在此程序中:
(1)a和b为实参,从键盘上输入,有固定的值;
(2)调用add(a,b)函数时,把实参的值按照顺序对应一一传递给形参,即有x=a,y=b;
(3)函数add通过形参得到实参的值后,进行运算z=x+y; 得到两个整数的和;
(4)再通过return语句将z的值返回到主调函数;
(5)主调函数通过调用add(a,b)得到z的值,并将它赋值给c,得到了两个整数a,b的和。
编写函数:
编写函数时最主要的是函数的定义,因为函数的定义决定了函数声明和函数调用的格式,而函数的定义主要掌握函数的输入、输出和处理。
(1)函数的输入,一般指函数的形参,即希望函数对哪些数据进行处理,这些数据大都要作为函数的形参而参与计算;
(2)函数的输出,一般指函数的返回值,即希望函数调用后得到的数值;
(3)函数的处理,一般函数内部所实现的功能,即通过何种算法利用形参的值得到返回值。
在编写函数时,一般要确定好函数的输入、输出和处理。
比如:利用函数计算n!的运算。
分析这个问题,可以得到:
(1)函数的输入是n,是一个整数;
(2)函数的输出是n!,也是一个整数;
(3)函数的处理,是进行1*2*3*……*n的运算得到n!的值,可用for循环进行计算。
根据上述分析,编写函数时,首先给函数起一个名字,要做到“见名知义”。可以给函数起一个名字:jiancheng;函数的形参是一个整数,可命名为n;函数的返回值是一个整数,但这个整数的值可能会很大,它的数据类型可以设置为长整型,以满足计算的要求。如此,函数的定义如下:
long jiancheng(int n)
{
long nn; //因此返回值为长整型数,首先定义一个长整型变量nn,来存储n!的值
//然后在程序的最后一条语句中写上return nn语句,再写中间的语句
int i;
nn=1;
for(i=2;i<=n;i++) //利用for循环计算n!
nn=nn*i;
return nn; //返回n!
}
函数定义好以后,就可以在其他函数中任意次地进行调用。
void main()
{
int j;
for(j=1;j<=10;j++)
{ printf(“%ld\n”,jiancheng(j)); }
}
这个函数实现的功能是在屏幕上输出1!,2!,……,10!, jiancheng函数被调用了10次,每一次调用函数的实参都不相同。