蓝桥杯C++——试题 算法训练 数据交换

蓝桥杯试题集试题总汇(C++)

问题描述

编写一个程序,输入两个整数,分别存放在变量x和y当中,然后使用自己定义的函数swap来交换这两个变量的值。
  输入格式:输入只有一行,包括两个整数。
  输出格式:输出只有一行,也是两个整数,即交换以后的结果。
  要求:主函数负责数据的输入与输出,但不能直接交换这两个变量的值,必须通过调用单独定义的函数swap来完成,而swap函数只负责交换变量的值,不能输出交换后的结果。

输入输出样例

样例输入

4 7

样例输出

7 4

分析

使用swap()函数,要注意的是,想要交换a,b的值,其实就是相当于要在函数中改变变量的值,要做到这一点,就需要向形式参数传递实际参数的地址,因为这样把变量的地址复制到函数中的变量里,它们指向的是内存中的同一个地方,在函数中改变这个地方的值,那么外部的变量的值也就会改变。(其实C++本身是有swap函数的,但我们还是要按照题意做一下)

参考代码

#include<iostream>
using namespace std;

void myswap(int *a,int *b)
{
    int t;
    t=*a;
    *a=*b;
    *b=t;
}
int main(){
    int x,y;
    cin>>x>>y;
    myswap(&x,&y);
    cout<<x<<" "<<y;
    return 0;
}

备注

常见swap使用分析

swap1只进行了值传递,所以函数调用结束后形参被释放,不能实现实参的值交换;

swap2直接使用全局变量,这样swap2函数和main函数操作的是同一个变量(地址和值都一样),可以实现值交换;

swap3使用传地址的方式,通过修改内存块来实现变量的值交换,是可以的。

swap4使用引用(&)的方式,这样是给mian函数中待交换的变量起一个别名,并把把别名作为形参在swap4中进行处理,这其实就实现了形参和实参的地址和内容完全一样,当然可以实现值交换,swap4的效果和swap2的一样,但这种定义方式更利于程序的调试和维护,同时也可以减小内存开销。

swap5中虽然也把变量的地址传到了函数中,但在函数内部并没用修改地址指向的内存块而是把地址在形参上完成交换,swap5函数运行结束,所有的工作都会都是,而main函数中的变量也没有实现交换,这种情况和swap1类似。

代码如下

#include <iostream>
using namespace std;

void swap1 (int x,int y)
{
    int temp;
    temp=x;
    x=y;
    y=temp;
}

int a=3,b=5;
void swap2()
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}

void swap3(int *px,int *py)
{
    int temp;
    temp=*px;
    *px=*py;
    *py=temp;
}

void swap4(int &x,int &y)
{
    int temp;
    temp=x;
    x=y;
    y=temp;
}

void swap5(int *qx,int *qy)
{
    itn *q;
    q=qx;
    qx=qy;
    qy=q;
}

int main()
{
    int a=3,b=5;
    swap4(a,b);
    cout<<a<<" "<<b;
    return 0;
}


​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

行秋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值