//*Copyright (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :test.cpp*
//*作者:田长航*
//*完成时间:2017年9月7日*
//*版本号:v1.0*
//*问题描述:用于交换的主函数*
//*输入描述:输入要交换的两个数*
//*程序输出:与输入值顺序相反的两个数*
int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
__________________; //分三个程序,分别写上调用myswap的合适形式
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}
根据以下三种myswap函数对横线处填充内容进行修改
方式 1:
//*Copyright (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :test.cpp*
//*作者:田长航*
//*完成时间:2017年9月7日*
//*版本号:v1.0*
//*问题描述:传值的方法交换值函数*
//*输入描述:无*
//*程序输出:无*
//(1)传值
void myswap(int x, int y)
{
int t;
t=x;
x=y;
y=t;
}
在myswap函数中 整型变量x和y为形式参数,其值由主函数中调用次函数的实参传递,调用函数时,为x开辟内存空间,为y开辟内存空间,但是实参a,b与形参x,y都为独立的内存空间,调用myswap函数后,调换的是x与y的值,x与y的内存空间在myswap函数结束时释放空间,并不能使a,b的值调换,所以这种方式不能在此题的条件下不能完成主函数中a与b的调换,输出结果仍未原结果。
方式 2:
//*Copyright (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :test.cpp*
//*作者:田长航*
//*完成时间:2017年9月7日*
//*版本号:v1.0*
//*问题描述:传地址的方法交换值函数*
//*输入描述:无*
//*程序输出:无*
//(2)传地址
void myswap(int *p1, int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
这种方式下,myswap函数的形参使两个整型指针变量,在此函数结束后虽然指针变量会释放,但是可以改变指针变量所指向的变量,所以,主函数可修改为
//*Copyright (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :test.cpp*
//*作者:田长航*
//*完成时间:2017年9月7日*
//*版本号:v1.0*
//*问题描述:传地址的方法交换值主函数*
//*输入描述:两个数*
//*程序输出:反顺序输出两个数*
int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
myswap(&a,&b); //分三个程序,分别写上调用myswap的合适形式
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}
通过主函数传递a的地址和b的地址给myswap函数的p1,p2,通过改变指针所指向的变量(a,b)来调换a,b的值。
运行结果:
方式 3:
//*Copyright (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :test.cpp*
//*作者:田长航*
//*完成时间:2017年9月7日*
//*版本号:v1.0*
//*问题描述:引用作形参的方法交换值函数*
//*输入描述:无*
//*程序输出:无*
//(3)引用作形参
void myswap(int &x, int &y)
{
int t;
t=x;
x=y;
y=t;
}
在这个myswap函数中,形式参数改为了int &x,int &y,即为与主函数传递的实参共用一块内存空间,还可以说x,y是变量a,b的别名,所以主函数中只需要将变量a,b传递给myswap函数即可。
修改主函数为:
//*Copyright (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :test.cpp*
//*作者:田长航*
//*完成时间:2017年9月7日*
//*版本号:v1.0*
//*问题描述:引用作形参的方法交换值主函数*
//*输入描述:两个数*
//*程序输出:反顺序输出两个数*
int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
myswap(a,b); //分三个程序,分别写上调用myswap的合适形式
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}
运行结果: