Linux C编程 函数

本文介绍了函数的基本概念,包括定义、声明、返回值、参数及调用方式等,并详细阐述了形参与实参的区别和递归函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第六章  函数

1.函数的定义与声明

为了使程序大而不繁,简单明了,程序设计者要根据软件的总体要求,把相同的功能或相似的操作归纳成模块的形式,并设计成函数,以实现程序设计的结构化。

函数定义的一般格式:

类型说明符 函数名(类型说明符 形参变量1,类型说明符 形参变量2...)
{
声明语句部分;
执行语句部分;
}
函数头

包括函数名,函数的类型及形式参数表。

(1)函数名。用标识符表示,用来表示一个函数的名字,函数名后面必须有一对圆括号。

(2)函数类型。函数名前的函数类型是指函数返回值的类型。如果函数是整型,int可省略不写;如果函数无返回值,以void类型明示。

(3)形式参数表。圆括号内为形式参数列表部分,其中的参数称为形式参数,它包括函数的自变量部分。

函数体

函数体是函数头下面最外层一对花括号内的代码,它是由一系列语句构成的,用以实现函数的功能,函数体内可以有函数说明,变量说明及可执行语句。例:

void function(void)
{
}

2.函数的返回值

(1)函数的值只能通过return语句返回主调函数,当遇到return时,方法执行将终止。

(2)一个函数最多可以返回一个值,不能返回多个值;不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。

(3)返回值的数据类型必须与函数声明时返回值的数据类型匹配。如果两者不一致,则以函数类型为准,自动进行类型转换。

(4)如函数值为整形,在函数定义时可以省去类型说明。

例:

max(Int a,Int b){
return a>b?a:b;
}

main(){
Int max(Int a,Int b);
Int x,y;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
double z=max(x,y);
printf("maxmum=%f",z);
}

3.函数的参数(形参和实参)

函数的参数分为形参和实参两种,作用是实现数据的传送。有参函数在调用时,主调函数和被调函数之间有数据传递,主调函数传递数据给被调函数。主调函数传递来的数据称为实际参数,简称实参。

定义函数式,函数名后的参数称为形式参数,简称形参。

实参和形参之间的关系如下:

(1)实参的个数,类型应该和形参的个数和类型一致。调用函数时,系统给形参分配存储单元,并且把实参的数值传递给形参。

(2)实参和形参分别属于主调函数和被调函数,具有不同的内存单元。所以,在函数调用时形参发生改变,不会影响到实参。

(3)C语言中实参和形参的结合采取的是“单向值传递”方式,只有实参传递参数给形参,形参不会传参数给实参。例:

#include <stdio.h>
main()
{
float a,b,sum;
float add(float x,float y);
scanf("%f,%f",&a,&b);
sum=add(a,b);
printf("sum=%f\n",sum);
}
float add(float x,float y)
{
float z;
z=x+y;
return z;
}

4.函数的调用

(1)函数的调用方式
函数表达式。函数作为表达式的一项,出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例:
z=max(x,y);

函数语句。C语言中的函数可以只进行某些操作而不返回函数值,这时的函数调用可作为一条独立的语句。例:

printf("%d",a);
函数参数。函数最为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。例:
d=add(a,add(b,c));
(2)函数的调用说明

函数名称必须与具有该功能的自定义函数名称完全一致。

实参的类型与形参必须一一对应和匹配。

函数调用也是一种表达式,其值是函数的返回值。

被调函数可以是自定义函数,也可以是系统函数,还可以调用自身。

被调函数中还可以调用函数。

例:

Int GDC(Int m,Int n){
Int p=0;
while(m%n){
p=m%n;
m=n;
n=p;
}
return n;
}
Int LCM(Int m,Int n){
Int p=GDC(m,n);
return m*n/p;
}
void main(){
Int x,y;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
Int gdc=GDC(x,y);
Int lcm=LCM(x,y);
printf("gdc=%d,lcm=%d",gdc,lcm);
}

5.递归函数

递归是一种方法(函数)调用自己的编程技术,它在定义自身的同时又出现了对自身的引用,有点类似我们高中学的数学归纳法。用递归的目的在于解决一个常见的问题,即子任务不过是开始试图解决的相同问题的一个较简单的方法。

(1)发现逻辑“相似性”

(2)不要忘记递归出口

递归的条件:

(1)将要解决的问题分解为一个新的问题,而这个新问题是原问题的一个子问题,即新问题的解决仍与原问题相同,只是原问题的处理对象有规律的变化。

(2)这种转换过程可以使问题得到解决。

(3)必须有一个确定的结束条件,在满足条件时返回。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值