C语言程序设计(理论课)第八章 函数与宏定义

第八章 函数与宏定义

8.1函数的概念

为什么要使用函数?

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

  • 使用函数可使程序清晰、精炼、简单、灵活。
  • 函数就是功能。一个函数实现一个功能。
    函数名应反映其代表的功能。
  • 在设计较大程序时,一般把它分为若干个程序模块,每一个模块实现一个特定的功能。
  • 一个C程序可由一个主函数和若干个其他函数构成。由主函数调用其他函数,其他函数也可以互相调用。
  • 同一个函数可以被一个或多个函数调用任意多次。

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

C语言的函数分为两类:
①系统定义的标准函数,又称为库函数。
  函数声明一般是放在系统的include目录下以.h为后缀的头文件中,如在程序中要用到某个库函数,必须在调用该函数之前用#include<头文件>命令将库函数信息包含到本程序中。
②自定义函数。
  按要求设计
C语言程序设计的核心之一:自定义函数。

8.1.1 函数的定义
  • 自定义函数
[存储类型符] [返回值类型符]  函数名([形参说明表])
{
   
	<函数语句体>
}

说明:
1.[存储类型符] 指的是函数的作用范围,只有两种形式:static和extern。
static说明的函数称为内部函数,只能作用于其所在的源文件,
extern说明的函数称为外部函数,可被其他源文件中的函数调用。

  • 缺省情况为extern

2.[返回值类型符] 指的是函数体语句执行完成后,函数返回值的类型。
如int,float,char等。

  • 若函数无返回值,则用空类型void来定义函数的返回值。
  • 默认情况为int型(有些编辑器不支持默认情况)。

3**.函数名**由任何合法的标识符构成

  • 建议将函数名的命名与函数内容有一定关系

4.[形参说明表] 是一系列用逗号分开的形参变量说明。
如:int x,int y,int z,
表示形参变量有三个:x,y,z。类型都是int型的。
注意: 不能直接写成:int x,y,z。
5.在古典式函数定义中,[形参表] 只要形参名,不要类型名。如:x,y,z。
表示形参变量有三个。形参变量的类型通过型参说明 语句说明。

  • [行参说明表]或[形参表]都可以缺省,缺省时表示函数无参数。


6. 函数语句体是放在一对花括号{ }中,由局部数据类型描述和功能实现两部分组成。

  • 函数返回语句。
    通常用返回语句来结束函数的调用。
  • 两种形式的返回语句:
    ①函数无返回值的情况
    return
    ②函数有返回值的情况
    return(表达式的值);
8.1.2 函数的声明和调用

通常情况下,自定义的函数在使用之前要先进行函数声明,才能在程序中进行函数调用
1.函数声明
函数声明语句的形式:
[存储类型符]   [返回值类型符]  函数名([形参说明表]);
如:int abs_sun(int m,int n);
(abs是求绝对值函数)
2.函数调用函数定义好后,若不通过函数调用,不会发挥任何作用。
函数调用是通过函数调用语句来实现的。
①函数无返回值情况:
函数名([实参表]);
②函数有返回值的情况:
变量名=函数名([实参表]);
注意: 变量名的类型必须与函数的返回值类型相同。
函数调用时,会去执行函数中的语句内容,函数在执行完毕后,回到函数的调用处,继续执行程序中函数调用后面的语句。

8.1.3 函数的传值方式

函数传值的4个要点:
①对于带有参数的函数,调用时,将实参表中每一个实参的值对应的传递给每一个形参变量;
②形参变量接收到实参传来的值后,会在内存临时开辟新的空间,保存形参变量的值;
③函数执行完毕时,释放临时开辟的内存空间;
④形参的值在函数中不论是否发生变化,实参变量的值均不会发生变化
自定义函数在程序中的使用方式有两种形式:
①先声明函数声明,再进行函数调用,函数定义放在main函数的后面。
②先定义函数,再调用函数(不需要在调用前函数声明)。
【例8.1】编写程序,通过调用函数int abs_sum(int a,int b),求任意两个整数的和。

第一种形式:先进行函数声明;
      再进行函数调用;
      最后给出函数定义。

#include<stdio.h>
int abs_sum(int m,int n);/*函数声明*/
main()
{
   
	int x,y,z;
	scanf("%d%d",&x,&y);
	z=abs_sum(x,y);	/*函数调用*/
	printf("|%d|+|%d|=%d\n",x,y,z);
}
int abs_sum(int m,int n)/*函数定义*/
{
   
	if(m<0)
		m=-m;
	if(n<0)
		n=-n;
	return m+n;
}

第二种形式:先定义函数;
      再调用函数
      (不需要在调用前函数声明)

#include<stdio.h>
int abs_sum(int m,int n)/*函数定义*/
{
   
	if(m<0)
		m=-m;
	if(n<0)
		n=-n;
	return m+n;
}
main()
{
   
	int x,y,z;
	scanf("%d%d",&x,&y);
	z=abs_sum(x,y);	/*函数调用*/
	printf("|%d|+|%d|=%d\n",x,y,z);
}

思考:
1.怎样求任意3个整数之和?
(自己写的)

 //注意if函数体后面有; 
 //双引号内是% 
 //返回值要赋值给一个定义好的变量
 //定义函数名后面有实参表,前面有存储类型符 

#include<stdio.h>                         
int abs_sum
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值