-
终端输入两个整数,a=3, b=4。交换a和b中的数据。多方法
#include <stdio.h>
// 方法一:
/*
int main(void)
{
int num1 = 0, num2 = 0;
int temp = 0;
printf("请输入两个整数:");
scanf("%d %d",&num1,&num2);
printf("交换前:\nnum1=%d num2=%d\n",num1,num2);
temp = num1;
num1 = num2;
num2 = temp;
printf("交换后:\nnum1=%d num2=%d\n",num1,num2);
return 0;
}
*/
// 方法二:
/*
void swap(int *p1,int *p2)
{
int temp = 0;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main(void)
{
int num1 = 0, num2 = 0;
printf("请输入两个整数:");
scanf("%d %d",&num1,&num2);
printf("交换前:\nnum1=%d num2=%d\n",num1,num2);
swap(&num1,&num2);
printf("交换后:\nnum1=%d num2=%d\n",num1,num2);
return 0;
}
*/
// 方法三:数学加减法实现两数据交换,存在数据溢出风险
/*
int main(void)
{
int num1 = 0, num2 = 0;
printf("请输入两个整数:");
scanf("%d %d",&num1,&num2);
printf("交换前:\nnum1=%d num2=%d\n",num1,num2);
// num1 = 5; num2 = 3;
num1 = num1 + num2; //num1=5+3=8; num2=3;
num2 = num1 - num2; //num2=8-3=5; num1=8;
num1 = num1 - num2; //num1=8-5=3; num2=5;
printf("交换后:\nnum1=%d num2=%d\n",num1,num2);
return 0;
}
*/
// 方法四:两数互相异或交换数据,不存在溢出
/*
int main(void)
{
int num1 = 0, num2 = 0;
printf("请输入两个整数:");
scanf("%d %d",&num1,&num2);
printf("交换前:\nnum1=%d num2=%d\n",num1,num2);
// 假设num1=10, num2=3
num1 = num1 ^ num2; // num1=1010^num2=0011 ==> 1001
num2 = num1 ^ num2; // num2=1001^num2=0011 ==> 1010
num1 = num1 ^ num2; // num1=1001^num2=1010 ==> 0011
printf("交换后:\nnum1=%d num2=%d\n",num1,num2);
return 0;
}
*/
运行结果:
-
终端输入三个整数,a=10, b=3, c=6; 要求代码执行完毕后,a存储最小值,c存储最大值。 a=3 b=6 c=10
#include <stdio.h>
void swap(int *p1,int *p2)
{
int temp = 0;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main(void)
{
int num1=0,num2=0,num3=0;
int temp=0;
printf("请输入三个整数:");
scanf("%d %d %d",&num1,&num2,&num3);
printf("交换前:\nnum1=%d num2=%d num3=%d\n",num1,num2,num3);
// num1=8; num2=5; num3=2;
if(num1 > num2)
{
swap(&num1,&num2); // num1=5;num2=8;num3=2;
}
if(num1 > num3)
{
swap(&num1,&num3); // num1=2;num2=8;num3=5;
}
if(num2 > num3)
{
swap(&num2,&num3); // num1=2;num2=5;num3=8;
}
printf("交换后:\nnum1=%d num2=%d num3=%d\n",num1,num2,num3);
return 0;
}
运行结果: