现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

互换两个变量,不使用中间变量

2012-08-23 19:22 工业·编程 ⁄ 共 895字 ⁄ 字号 暂无评论

第一种方法

a=a+b;
b=a-b;
a=a-b;
 
代码如下:
#include "stdio.h" 
int main(void) 

    int a,b; 
    printf("请输入两个变量a和b:/n"); 
    scanf("%d %d",&a,&b); 
    printf("a和b交换前:/n"); 
    printf("a=%d b=%d/n",a,b); 
    a=a+b; 
    b=a-b; 
    a=a-b; 
    printf("a和b交换后:/n"); 
    printf("a=%d b=%d/n",a,b); 
    system("pause"); 
    return 0; 

缺点:可能越界
第二种方法

解决方法:(a、b异或的结果 ,和a异或得a ,和b异或得b)
a=a^b;
b=a^b;
a=a^b;
代码如下:

#include "stdio.h"
int main(void)
{
    int a,b;
    printf("请输入两个变量a和b:/n");
    scanf("%d %d",&a,&b);
    printf("a和b交换前:/n");
    printf("a=%d b=%d/n",a,b);
    a=a^b;
    b=a^b;
    a=a^b;
    printf("a和b交换后:/n");
    printf("a=%d b=%d/n",a,b);
    system("pause");
    return 0;
}

写成宏替换的方法如下

#include "stdio.h"
#define swap(a,b) (a)^=(b)^=(a)^=(b)
int main(void)
{
    int a,b;
    printf("请输入两个变量a和b:/n");
    scanf("%d %d",&a,&b);
    printf("a和b交换前:/n");
    printf("a=%d b=%d/n",a,b);
    swap(a,b);
    printf("a和b交换后:/n");
    printf("a=%d b=%d/n",a,b);
    system("pause");
    return 0;
}

给我留言

留言无头像?