C基础 函数的形式参数和实际参数

本人是刚开始学写博文,很多东西都是第一次接触嘛,哪里有写的不好的希望大家指出来,然后一起学习、一起进步,我也会坚持更新的!

如何用函数实现模块化设计?

问题一:为什么要用函数呢?

答:因为有时候程序需要多次实现某一个功能,就得重复编写实现此功能的代码,若利用函数实现某一特定的功能,就能减少重复编写程序段的工作量。

一、几点说明

1、一个C程序由多个程序模块组成,每一个程序模块作为一个源程序文件。这样便于分别编写和编译,提高效率。
2、源程序文件就是一个编译单位,在编译时以此为单位进行编译,而不是以函数为单位进行编译的。
3、从main函数开始,如遇函数调用,调用完后,返回main函数
4、所有函数都是平行的,函数间可以相互调用,但不能调用main函数

二、函数

(一)函数的分类

从形式上看,函数分为有参数函数无参数函数两类。

(二)函数的定义

在C语言要求中,所有的函数必须“先定义,后使用”,定义时,应指定函数的 名字、类型 、功能和参数的名字及类型有参数函数才需要)

无参数函数
类型名 函数名()
  {
  函数体
  }
如下:
int p_word()//p_word()为自定义的函数
 {
 printf("word");
}//函数体

或者

类型名 函数名(void)
   函数体
有参数函数
类型名 函数名(形式参数)
{
函数体
} 
如下:
int max(int a,int b)
{
int c;
c=a>b ? a:b;//条件语句
return (c);
}
空函数的定义

空函数函数体是空的,调用时什么也不做,没有实际作用,但是可以先用空函数占一个位置,等以后扩充程序时再添加相应功能的函数。

定义如下:
void add()
{}

三、函数调用

函数调用,简单的说,就是暂时跳转到另一个位置执行,并且在适当的位置的时候返回到原来的位置在往后执行。

1、调用无参数函数
2、调用有参数函数:函数名(实参)

如:
word();//调用无参数函数,直接写函数名()
c=max(a,b);//调用有参数函数

(一)函数调用时数据的传递(虚实结合)

形式参数:定义函数时,括号中的变量名称
实际参数:函数调用时,括号中的参数(实际参数可以是常量、变量、表达式

数据的传递过程形参实参得到一个(或者说实参的值传递给形参),该值只在函数的调用期间有效,可参与运算。

(二)简单的总结一下变量的存储方式,后面会详细的总结知识点

有的变量在程序运行的整个过程中都是存在的,有的变量则是在调用时才临时分配存储单元,而调用结束后该存储单元就马上释放了,变量不存在了,例如函数的形参就是如此。

变量的存储方式分为 静态存储方式动态存储方式

动态存储方式:由系统动态的分配存储空间函数的形参

静态存储方式:由系统静态的分配存储空间

(三)函数调用代码示例

题目:输入两个整数,求最大值,要求用函数来找到最大数

#include<stdio.h>
int main()
{
	int max(int x,int y);//先声明,后使用
	int a,b,c;
	printf("请输入两个整数:");
	scanf("%d,%d",&a,&b);
	c=max(a,b);//调用函数max
	printf("最大值是%d\n",c);
	return 0;
}
int max(int x, int y)
{
	int z;
	z=x>y?x:y;//把x,y中的最大值赋值给z
	return z; //z作为返回值带回给main()主函数; main()主函数;
}  

运行结果:

在这里插入图片描述

注意:
1、函数类型决定了返回值的类型形参的类型,决定了值传递的类型(若实参的类型是浮点型,而在定义的时候 形参的类型是整型,那么实参的值传递给形参时要先转化成整型才传递给形参)。

例:

#include<stdio.h>
int main()
{
	int max(float x,float y);//先声明,后使用
	float a,b;
	int c;
	printf("请输入两个数:");
	scanf("%f %f",&a,&b);
	c=max(a,b);//调用函数max
	printf("最大值是%d\n",c);
	return 0;
}
int max(float x, float y)
{
	float z;
	z=x>y?x:y;//把x,y中的最大值赋值给z
	return z; //z作为返回值带回给main()主函数; main()主函数;
}

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

2、return语句表达式的类型要和在定义函数时指定的函数类型一致。

3、函数调用的过程单向的“值传递”,即实参的值传递给形参形参的值改变不会影响实参的值改变。

四、函数的嵌套调用

题目: 输入4个整数,要求输出最大数,用函数嵌套来处理

#include <stdio.h>
int main ()
{
	int max_1(int x,int y,int z,int w); //max_1函数的声明 
	int a,b,c,d,max;
	printf("请输入4个整数:\n");
	scanf("%d %d %d %d",&a,&b,&c,&d);
	max=max_1(a,b,c,d); //调用函数max_1,实参a,b,c,d传递给max_1函数的形参x,y,z,w 
	printf("最大的数是:%d\n",max);
	return 0;
}


int max_1(int x,int y,int z,int w)//定义max_1函数 
{
int max_2(int x,int y);//max_2函数的声明 
int m;
m=max_2(x,y);//调用函数max_2;此时max_1的形参x=a,y=b,值a,b再传递给函数max_2的形参x,y 
m=max_2(m,z);//第二次调用max_2,实参m,z的值为,m=(a,b中的最大者) ,z=c 
m=max_2(m,w);//第三次调用max_2,实参m,w的值为,m=(a,b,c中的最大者),w=d 
return m;//返回a,b,c,d,中的最大者 
}


int max_2(int x,int y)//函数max_2的声明 
{int z;
z=x>y?x:y;
return z;
}

max_1函数中,三次调用max_2函数的语句可以用下面一行代替


int max_1(int x,int y,int z,int w)//定义max_1函数 
{
int max_2(int x,int y);
int m;
m=max_2(max_2(max_2(x,y),z),w);//用一行代替三次函数max_2的调用
return m;
}

下一篇:继续复习 函数的递归调用

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值