第七章 用函数实现模块化程序设计(简单函数调用)

7.1

函数就是功能,每一个函数用来实现一个特定的功能。函数的名字应反映其代表的功能。
例题:想输出以下的结果,用函数调用实现。

#include<stdio.h>
int main()
 {
 	void print_star();
 	void print_message();
 	print_star();
 	print_message();
 	print_star();
 	return 0;
 }
 void print_star()
 {
 	printf("******************\n");
 }
 void print_message()
 {
 	printf("  How do you do!\n");
 }

运行结果:在这里插入图片描述

7.2 函数定义

1.定义函数包括以下内容:
(1)指定函数的名字,以便以后按名调用。
(2)指定函数的类型,即函数返回值的类型。
(3)指定函数的参数的名字和类型,以便在调用函数时向它们传递数据。对无参函数不需要这项。
(4)指定函数应当完成什么操作,也就是函数是做什么的,即函数的功能。这是最重要的,是在函数体中解决的。
2.定义函数的方法
①定义无参函数
一般形式为:
类型名 函数名()
{
函数体
}
或 类型名 函数名(void)
{
函数体
}
②定义有参函数
一般形式为:
类型名 函数名(形式参数表列)
{
函数体
}
③定义空函数
形式为:
类型名 函数名()
{ }

7.3 调用函数

1.函数调用形式为:函数名(实参数列)
调用方式:

  • 函数调用语句
  • 函数表达式
  • 函数参数

2.函数调用时的数据传递
①形式参数和实际参数
在定义函数时函数名后面括号中的变量名称为“形式参数”或“虚拟参数”。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”。实际参数可以是常量、变量或表达式。
②实参和形参间的数据传递
例题:输入两个整数,要求输出其中值较大者。要求用函数来找到大数。

int max(int x,int y)
{
	int z;
	z=x>y? x:y;
	return(z);
}
#include<stdio.h>
int main()
{
	int max(int x,int y);
	int a,b,c;
	printf("please enter two integer numbers:");
	scanf("%d,%d",&a,&b);
	c=max(a,b);
	printf("max is %d\n",c);
	return 0;
}
 

运行结果:在这里插入图片描述
说明:
(1)实参可以是常量、变量或表达式;形参必须指定类型,只能是变量或数组名。
(2)实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配的错误。
(3)形式参量只有被调用时才分配内存单元,在调用结束时,即可释放所分配的内存单元,
(4)函数调用中发生的数据传送是单向的。
4.函数的返回值
(1)函数的返回值是通过函数中的return语句获得的。
(2)函数值的类型。既然函数有返回值,这个值当然应属于某一个确定的类型,应当在定义函数时指定函数值的类型。
(3)在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致。
例题:输入两个整数,要求输出其中值较大者。要求用函数求最大者。将在max函数中定义的z为float型。

#include<stdio.h>
int main()
{
	int max(float x,float y);
	float a,b;
	int c;
	scanf("%f,%f",&a,&b);
	c=max(a,b);
	printf("max is %d\n",c);
	return 0;
 }
 int max(float x,float y)
 {
 	float z;
 	z=x>y?x:y;
 	return (z);
  } 

运行结果:在这里插入图片描述

7.4 对被调用函数的声明和函数原型

在一个函数中调用另一个函数需要具备如下条件:
(1)首先被调用的函数必须已经定义的函数。但仅有这一条件还不够。
(2)如果使用库函数,应该在本文件开头用#include指令将调用有关库函数时所需用到的信息“包含”到本文件中来。
(3)如果使用用户自己定义的函数,而该函数的位置在调用它的函数的后面,应该在主调函数中对被调用的函数作声明。
例题:输入两个实数,用一个函数求出它们之和。

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

运行结果:在这里插入图片描述

7.5 函数的嵌套调用

两层嵌套的执行过程:
(1)执行main函数的开头部分;
(2)遇函数调用语句,调用函数a,流程转去a函数;
(3)执行a函数的开头部分;
(4)遇函数调用语句,调用函数b,流程转去函数b;
(5)执行b函数,如果再无其他嵌套的函数,则完成b函数的全部操作;
(6)返回到a函数中调用b函数的位置;
(7)继续执行a函数中尚未执行的部分,直到a函数结束;
(8)返回main函数中调用a函数的位置;
(9)继续执行main函数的剩余部分直到结束。
例题:输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。

#include<stdio.h> 
int main()
{
	int max4(int a,int b,int c,int d);
	int a,b,c,d,max;
	printf("Please enter 4 interger numbers:");
	scanf("%d %d %d %d",&a,&b,&c,&d);
	max=max4(a,b,c,d);
	printf("max=%d\n",max);
	return 0;
}
int max4(int a,int b,int c,int d)
{
	int max2(int a,int b);
	int m;
	m=max2(a,b);
	m=max2(m,c);
	m=max2(m,d);
	return (m);
}
int max2(int a,int b)
{
	if(a>=b)
	return a;
	else 
	return b;
}

运行结果:在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值