编制三个程序,分别调用三个版本的swap交换函数,观察结果,并对结果进行分析。

问题及代码:

/*
*Copyright (c) 2014 , 烟台大学计算机学院
*All right resvered .
*文件名称: test.cpp
*作    者: 郑兆涵
*完成日期: 2015年9月8日
*版 本 号: v1.0
*
*问题描述: 编制三个程序,分别调用三个版本的swap交换函数,观察结果
*输入描述: 输入两个整数。
*程序输出: 输出两个交换之后的整数。
*/


#include<stdio.h>
//(1)传值:
void swap(int x, int y)
{
    int t;
    t=x;
    x=y;
    y=t;
}
//(2)传地址:
void swap(int *p1, int *p2)
{
    int t;
    t=*p1;
    *p1=*p2;
    *p2=t;
}
//(3)引用作形参:
void swap(int &x, int &y)
{
    int t;
    t=x;
    x=y;
    y=t;
}

//以下是调用它们的主函数:
int main()
{
    int a,b;
    printf("请输入待交换的两个整数:");
    scanf("%d %d", &a, &b);
	//swap(a,b);
	//swap(&a,&b);
	//swap(a,b);
    printf("调用交换函数后的结果是:%d %d\n", a, b);
    return 0;
}


 


 

运行结果:

(1)传值:


(2)传地址:


(3)引用作形参:



 

 

知识点总结:

        通过以上的三个swap函数编写及调用,我们不难发现:

      (1)使用传值方法调用swap函数,虽然括号中的三条简单语句非常经典,但是却无法调换成功。观察(1)传值swap函数,我们发现,在程序里,有int a=2,int b=3,且我们需要调用swap(a,b)来交换2和3的位置,但是我们要清楚a和b占用两个空间,其中a和b是2和3。当在调用swap(x,y)的时候,系统会给x分配空间,也会给y分配空间,将a的值传递给x,将b的值传递给y,这样使得x=2,y=3.在执行算法的过程中,会借助于 t 这个变量,将 x 和 y 里面的值互相交换,使得 x=3,y=2 。而在我们交换之后,我们会清楚的看到,我们所交换的是 x 和 y 的值,也就是所谓的形式参数,而对于要交换的a和b却是无效的。因此我们在实际运行程序的时候,系统无法将a和b的值进行交换。

      (2)使用传地址的方法调用swap函数,我们在调用swap(a,b)时,我们所调用的是a的地址&a和b的地址&b,这时候,x和y分别作为指针指向a和b,这其中,a=2,b=3。随后,在执行过程中,t赋值为x所指向的值,使得t等于x所指向的值,得到t=2,而x所指向的值赋值为y所指向的值,最后是y指向的值赋值为t所代表的值2,,因此使用传地址的方法,我们可以将a,b的值进行交换。

      (3)使用引用作形参的方法调用swap函数,加入引用数据类型,原先的a=2,b=3,在使用引用的时候,我们会发现,对形式参数x,它是a的引用,x与a所占用的内存相同,同样的,y作为b的引用,y与b所占用的内存也是相同的,最终在执行过程中,进行x和y的交换,其实也就是交换了x和y所占用的空间,换句话说,也就是交换了a和b。因此使用引用作形参的方法也可以将a,b的值进行交换。

 

 

学习心得:

        通过以上的三个调用swap函数的事例,我发现,如果直接用程序设计语言去表示算法的话,由于我们必须去考虑,程序设计语言的语句和其中的机制,因此容易把问题变得复杂。所以在描述算法的时候,应该避免把算法搞复杂,而应该尽量的写清楚中间形式的表达。






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值