(功能)在c中交换两个数字

时间:2016-03-13 14:15:09

标签: c function if-statement swap

我正在尝试编写一个交换两个数字的程序。我试图修改我的代码,但答案仍然没有显示。请提前帮助和感谢。

变量为 x y z ,其值为 10 -1 < / em>和 5 。因此: x = 10 y = -1 z = 5 。预期的输出必须为 x = -1 y = 5 z = 10 。如您所见,订单是从最低编号到最大编号。所以请更正我的代码,我正在使用Dev-C ++ 5.11作为我的编译器。附:交换的公式不得根据我的指导员进行更改。 (虽然也许你知道)

以下是我的代码:

void swap(int *px, int *py)
{
    int temp;
    temp = *px;
    *px = *py;
    *py = temp;
}
int main(void)
{
    int x,y,z;
    x=10;
    y=-1;
    z=5;

    printf("x=%d y=%d z=%d\n",x,y,z);
    if(x>y)
    {
        x=y;
    }
    else if(y>z)
    {
        y=z;
    }
    else if(z>x)
    {
        z=x;
    }
    swap(&x,&y);
    printf("x=%d y=%d z=%d",x,y,z);

    return 0;
}

预期输出必须是:

x=-1, y=5, z=10

2 个答案:

答案 0 :(得分:0)

我认为你需要这样的东西:

// Make sure x is smaller than y
if(x>y)
{
    swap(&x, &y);
}

// Make sure x is smaller than z
if(x>z)
{
    swap(&x, &z);                      
} 
// Now x is smaller than both y and z

// Make sure y is smaller than z
if(y>z)
{
    swap(&y, &z);
}

所以完整的程序会看起来:

#include <stdio.h>

void swap(int *px, int *py)
{
    int temp;
    temp = *px;
    *px = *py;
    *py = temp;
}
int main(void)
{
    int x,y,z;
    x=10;
    y=-1;
    z=5;

    printf("x=%d y=%d z=%d\n",x,y,z);

    // Make sure x is smaller than y
    if(x>y)
    {
        swap(&x, &y);
    }

    // Make sure x is smaller than z
    if(x>z)
    {
        swap(&x, &z);                      
    } 
    // Now x is smaller than both y and z

    // Make sure y is smaller than z
    if(y>z)
    {
        swap(&y, &z);
    }

    printf("x=%d y=%d z=%d",x,y,z);

    return 0;
}

输出结果为:

  

x = 10 y = -1 z = 5

     

x = -1 y = 5 z = 10

答案 1 :(得分:0)

本练习的目的是编写一组使用swap()函数的条件,从最低到最高排序元素。

在此代码中,如果您使用赋值,则不会使用另一个值 - 您将使用另一个值覆盖一个值,从而丢失被覆盖的原始值:

if(x>y)
{
    x=y;
}

请记住,这里的想法是使用掉期。