【文件属性】:
文件名称:10.第十章 函数.txt
文件大小:27KB
文件格式:TXT
更新时间:2022-11-28 10:17:18
函数
第十章 函数
10.1 理解函数
C语言函数是程序中对分解与抽象思想的实现。C语言把大段的程序代码按照功能分解开,体现出对重复使用的程序段的抽象。
例:求任意两个正整数的最大公约数(GCD)和最小公倍数(LCM)。
/*求最大公约数用辗转相除法*/
#include
int main()
{
int i1,i2,i3,i4,gcd,lcm,temp;
printf("Input i1 and i2:");
scanf("%d%d",&i1;,&i2;);
i3=i1;
i4=i2;
temp=i2;
while(temp!=0)
{
temp=i1%i2;
i1=i2;
i2=temp;
}
gcd=i1;
lcm=i3*i4/gcd;
printf("最大公约数:%d\n最小公倍数:%d\n",gcd,lcm);
return 0;
}
例:利用函数分解求任意两个正整数的最大公约数(GCD)和最小公倍数(LCM)。
/*利用函数分解求任意两个正整数的最大公约数(GCD)和最小公倍数(LCM)*/
#include
int gcd(int i1,int i2);
int lcm(int i1,int i2);
int gcd(int i1,int i2)
{
int temp;
temp=i2;
while(temp!=0)
{
temp=i1%i2;
i1=i2;
i2=temp;
}
return i1;
}
int lcm(int i1,int i2)
{
return i1*i2/gcd(i1,i2);
}
int main()
{
int i1,i2;
printf("Input i1 and i2:");
scanf("%d%d",&i1;,&i2;);
printf("最大公约数:%d\n最小公倍数:%d\n",gcd(i1,i2),lcm(i1,i2));
return 0;
}
C程序结构:
(1)一个C程序可以由多个模块构成,每个模块可由若干个小模块构成,继续分解,直到分解成不可分割的最小模块单元为止,最小模块单元即为一个函数。C程序由多个函数构成。每个函数可以单独放在一个文件中,也可以将若干个功能相关的函数放在一个文件中,C语言程序可以由多个文件组成,文件负责组织存放若干函数。
(2)源程序文件是C程序的编译单位,每个文件单独编译,便于调试,方便团队开发。
(3)main函数是程序执行的入口,main函数可以调用其他函数,其他函数调用结束后要返回main函数,main函数执行完毕,整个程序就结束了。
(4)main函数可以出现在任何位置,其他函数的位置也不是强制的,每个函数有且仅有一个main函数。
(5)C程序的所有函数都是平行定义的,在一个函数内部不允许定义另外的函数,函数可以互相调用,也可以调用自己,但是不能调用main函数。
10.2 函数定义和分类
10.2.1 函数定义
函数定义的一般形式:
1.无参函数的一般形式:
类型说明符 函数名()
{
声明部分;
执行语句部分;
}
例:输出当前时间。
#include
#include
/*showTime函数返回1979年1月1日0时0分0秒到当前的秒数*/
long showTime()
{
long lct;
lct=time(0); /*time(0)返回1979年1月1日0时0分0秒到当前的秒数*/
return lct;
}
int main()
{
long lCurTime=showTime();
printf("%ld",lCurTime);
return 0;
}
函数由函数首部和函数体两部分构成。
(1)函数首部
函数首部包括类型说明符、函数名、形式参数。类型说明符指明了函数的类型,函数的类型实际上是函数返回值的类型。函数名是由用户自定义的标识符,函数名后有一个括号,无参函数的函数名括号中没有参数,但括号不可少。
(2)函数体
{}中的内容称为函数体。函数体包括声明部分和执行语句部分。声明部分对函数体内部用到的变量和函数的类型进行声明,执行语句部分是函数对数据进行加工完成函数功能的部分。
2.有参函数的一般形式:
类型说明符 函数名(形式参数表)
{
声明部分;
执行语句部分;
}
有参函数比无参函数多了形式参数表,形式参数表的格式为:
类型1 形参变量1,类型2 形参变量2,类型3 形参变量3,···,类型n 形参变量n
形参表中的变量称为形式参数,各参数之间用逗号间隔。在进行函数调用时,主调函数赋予形参实际的值。形参是变量,必须给以类型说明。
10.2.2 函数分类
从函数定义的角度看,函数可分为库函数和用户自定义函数。
(1)库函数:由C系统提供,用户无需定义,也不必在程序中作类型说明,只需在程序前包含该函数原型的头文件即可在程序中直接调用。如printf、scanf、sqrt等。
(2)用户定义函数:由用户按需要写的函数。对于用户自定义函数,不仅要在程序中定义函数本身,通常在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。被调函数与主调函数在同一文件中且被调函数在主调函数之前定义,可以不进行类型声明。
C语言的函数兼有其他语言中的函数和过程两种功能,可把函数分为有返回值函数和无返回值函数两种。
(1)有返回值函数:有返回值函数被调用执行完后向调用者返回一个执行结果,称为函数返回值。用户定义的需要返回函数值的函数,必须在函数定义和函数说明中明确返回值类型。
(2)无返回值函数:无返回值函数用于完成特定的处理任务,执行完成后不向调用者返回函数值。这类函数类似于其他语言的过程。用户定义无返回值函数时可指定函数的返回为“空类型”,空类型说明符为void。
例:输出当前时间。
#include
#include
/*showTime函数返回1979年1月1日0时0分0秒到当前的秒数*/
void showTime()
{
long lct;
lct=time(0); /*time(0)返回1979年1月1日0时0分0秒到当前的秒数*/
printf("%ld",lct);
}
int main()
{
showTime();
return 0;
}