试题 算法训练 数据交换
题目
资源限制
- 时间限制:1.0s 内存限制:256.0MB
问题描述
- 编写一个程序,输入两个整数,分别存放在变量x和y当中,然后使用自己定义的函数swap来交换这两个变量的值。
- 输入格式:输入只有一行,包括两个整数。
- 输出格式:输出只有一行,也是两个整数,即交换以后的结果。
- 要求:主函数负责数据的输入与输出,但不能直接交换这两个变量的值,必须通过调用单独定义的函数swap来完成,而swap函数只负责交换变量的值,不能输出交换后的结果。
输入输出样例
- 样例输入
4 7 - 样例输出
7 4
解题思路
- 算术运算交换(仅限于数字类型)
int a = 3;
int b = 5;
a = a - b; // a = -2 , b = 5;
b = a + b; // a = -2, b = 3;
a = b - a; // a = 5, b = 3;
- 常用方法交换(中间变量)
int a = 3;
int b = 5;
// 使用中间变量先保存a变量的值
int temp = a;
a = b;
b = temp;
既然有了这种两种思路,很有可能你的代码会这样写
#include<stdio.h>
void swap(int p,int q){
int t;
t = p;
p = q;
q = t;
}
int main(){
int x,y;
scanf("%d%d",&x,&y);
swap(x,y);
printf("%d %d",x,y);
return 0;
}
但是如果这样做的话,很显然两数交换不了,因为传递过去的是值而不是地址,所以此题用到了指针的使用
题解
#include<stdio.h>
void swap(int *p,int *q){
int t=*p;
*p=*q;
*q=t;
}
int main(){
int x,y;
scanf("%d%d",&x,&y);
swap(&x,&y);
printf("%d %d",x,y);
return 0;
}