1
题目难度: 中等
题目内容:
-
在主函数中一次读入三个整数的值存入a、b、c中;
-
以a、b、c (或者其地址)作为实参,连续调用两个不同swap函数;
-
最后输出a、b、c三个整数中最大的值,以及三个整数;
-
变量定义时均应赋初值0。
-
不得使用C语言中的输入输出函数
函数接口定义:
- int swap ( int& x, int& y, int& z); //三个参数均为引用类型
- int swap ( int* x, int* y, int* z); //三个参数均为指针类型
任一个swap()在交换三个整数的值后,返回x,y,z中最大的数的值
每个swap函数都可交换3个整数a,b,c的值。将a的值存入b,b的值存入c,c的值存入a
输入格式:
空格分隔的三个整数
整数1 整数2 整数3
(这三个整数按照输入次序存入a、b、c三个变量)
输出格式:
空格分隔的四个整数
最大数 a变量的值 b变量的值 c变量的值
(注意:a、b、c三个变量中的值是经过swap函数交换过的值)
输入样例:
1 2 3
(备注:程序中,1存入变量a,2存入变量b,3存入变量c)
输出样例:
3 2 3 1
(备注1:最大值3首先输出)
(备注2:第一次调用swap前,a值为1;b值为2;c值为3;第一次调用swap后,a值为3,b值为1,c值为2)
(备注3:第二次调用swap后,a值为3,b值为1,c值为2)
测试例说明:
-
输入的值超过int范围时,由编译器自动处理,无需在程序中做判别。
-
输入的值非int时,由编译器自动处理,无需再程序中做判别。
-
要考虑3个输入的值有两个或者三个相同的情况(是否需要专门写相关代码处理这种情况,你需要思考决定)
#include <iostream>
int swap(int& x, int& y, int& z); //三个参数均为引用类型
int swap(int* x, int* y, int* z); //三个参数均为指针类型
int main()
{
int a(0);//变量定义时均应赋初值0
int b(0);
int c(0);
std::cin >> a;
std::cin >> b;
std::cin >> c;
swap(a, b, c);
std::cout << swap(&a, &b, &c);
std::cout << " " << a << " " << b << " " << c << std::endl;
return 0;
}
int swap(int& x, int& y, int& z) //三个参数均为引用类型
{
int max;
int temp;
temp = x;
x = z;
z = y;
y = temp;
max = x > ((y > z) ? y : z) ? x : ((y > z) ? y : z);
return max;
}
int swap(int* x, int* y, int* z) //三个参数均为指针类型
{
int max;
int temp;
temp = *x;
*x = *z;
*z = *y;
*y = temp;
max = *x > ((*y > *z) ? *y : *z) ? *x : ((*y > *z) ? *y : *z);
return max;
}