实现一个计算输入的两数的和与差的简单函数。

实现一个计算输入的两数的和与差的简单函数。

首先 我们知道一般从子函数只能向主函数中返回一个值,可是本题却要求我们返回和与差,这样我们就无法通过返回值来进行完成,于是我相信很多初学者都会犯如下错误:在子函数中通过值传递的方式计算出加减的结果,让后在主函数中输出,我们先来看一下错误实例:

错误示例


#include<stdio.h>
void sum_diff(float op1, float op2, float psum, float pdiff);

int main()
{
	float op1, op2;//被加减的数
	float psum=0, pdiff=0;//结果
	scanf("%f%f", &op1,&op2);
	sum_diff(op1,op2,psum,pdiff);
	printf("%f,%f", psum, pdiff);


	return 0;
}
void sum_diff(float op1, float op2, float psum, float pdiff)
{
	psum = op1 + op2;
	pdiff = op1 - op2;
	printf("%f,%f ", psum, pdiff);

}

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

这里首先打印的是子函数中的psum与pdiff,再打印主函数中的psum与pdiff,在这里我们可以看出这俩个函数中的psum与pdiff是不一样的,这是为什么呢?因为值传递这种方式使用变量、常量、数组元素作为函数参数,实际是将实参的值复制到形参相应的存储单元中,即形参和实参分别占用不同的存储单元,这种传递方式称为“参数的值传递”或者“函数的传值调用”。

值传递的特点是单向传递,即主调函数调用时给形参分配存储单元,把实参的值传递给形参,在调用结束后,形参的存储单元被释放,而形参值的任何变化都不会影响到实参的值,实参的存储单元仍保留并维持数值不变。

正确实例

所以在这里我们选用地址传递的方式 通过传递地址来间接访问我们要进行操作的数值。
附上代码

/*本题要求实现一个计算输入的两数的和与差的简单函数。

函数接口定义:
void sum_diff(float op1, float op2, float psum, float pdiff);
其中op1和op2是输入的两个实数,psum和pdiff是计算得出的和与差。
*/



#include<stdio.h>
void sum_diff(float op1, float op2, float *psum, float *pdiff);//op1与op2是从主函数中传下来的值  psum与pdiff分别是俩数相加与相减的值


int main()
{
	float op1, op2;//被加减的数
	float psum=0, pdiff=0;//结果
	scanf("%f%f", &op1,&op2);
	sum_diff(op1,op2,&psum,&pdiff);
	printf("%f,%f", psum, pdiff);


	return 0;
}
void sum_diff(float op1, float op2, float *psum, float *pdiff)//这里op1与op2是形参 在主函数中op1与op2是实参 在我们这个加减函数中不管op1与op2怎么改变也不会影响到主函数中实参op1与op2的值
{															  //然而这里我们传的psum与pdiff的地址 可以通过指针访问地址来间接的改变主函数里的实参

	*psum = op1 + op2;
	*pdiff = op1 - op2;
	//printf("%f,%f", psum, pdiff);
}

运行结果
在这里插入图片描述
请注意我们再声明函数和调用函数中的形参的样式。
通过如此方式我们就可以完成再子函数中实现加减法,也可以理解实参和形参的概念以及值传递与地址传递的不同。

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wy-1226

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值