64,652
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <limits.h>
#include <stdlib.h>
#include <iomanip>
using namespace std;
#define SWAP1(a,b) (a+=b,b=a-b,a=a-b);
#define SWAP2(a,t,b) (t=a,a=b,b=t);
void main()
{
int a, b, t;
printf("input a b:");
cin >> a >> b;
if (a >= INT_MAX || a <= INT_MIN || b >= INT_MAX || b <= INT_MIN) exit(0);
SWAP1(a, b);
printf("a=%d,b=%d\n", a, b);
cout << fixed << setprecision(4) << "input a b t:";
scanf("%d %d %d", &a, &b, &t);
SWAP2(a, t, b);
printf("a=%d,b=%d", a, b);
return;
}
干货满满#include <stdio.h>
#define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0)
char *p1="1" ,*p2="2" ;
char c1=1 , c2=2 ;
short s1=1 , s2=2 ;
int i1=1 , i2=2 ;
__int64 I1=1i64, I2=2i64;
float f1=1.0f, f2=2.0f;
double d1=1.0 , d2=2.0 ;
void main() {
SWAP((int)p1,(int)p2); printf("char * %5s, %5s\n",p1,p2);
SWAP(c1,c2); printf("char %5d, %5d\n",c1,c2);
SWAP(s1,s2); printf("short %5d, %5d\n",s1,s2);
SWAP(i1,i2); printf("int %5d, %5d\n",i1,i2);
SWAP(I1,I2); printf("__int64 %5I64d,%5I64d\n",I1,I2);
SWAP(*(int *)&f1,*(int *)&f2);printf("float %5g, %5g\n",f1,f2);
SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double %5lg, %5lg\n",d1,d2);
SWAP(c1,c1);
printf("%d\n",c1);
}
//char * 2, 1
//char 2, 1
//short 2, 1
//int 2, 1
//__int64 2, 1
//float 2, 1
//double 2, 1
//2
#include <stdio.h>
using namespace std;
void swap1(int a,int b){//相减法
a=a+b; //假设输入a=3 b=4两个数,a=3+4
b=a-b; //交换后的b=3+4-4=3;
a=a-b; //交换后的a=3+4-3=4
}
void swap2(int &a,int &b){//相减法
int temp;
temp=a;
a=b;
b=temp;
}
int main() {
int a, b, t;
printf("输入两个数 a b:\n");
scanf("%d%d",&a,&b);
swap1(a,b);//不借助中间变量
printf("第一次交换后a=%d,b=%d\n", a, b);
swap2(a,b);//借助中间变量
printf("第二次交换后a=%d,b=%d", a, b);
return 0;
}