【问题标题】:(Function) Swaping two numbers in c(功能)在c中交换两个数字
【发布时间】:2016-03-13 14:15:09
【问题描述】:

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

变量为xyz,取值为10-1 和 5。因此:x=10y=-1z=5。预期的输出必须是 x=-1y=5z=10。如您所见,顺序是从最小的数字到最大的数字。所以请更正我的代码,我正在使用 Dev-C++ 5.11 作为我的编译器。附言不能根据我的导师更改 swap 的公式。 (虽然你可能知道)

这是我制作的代码:

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

【问题讨论】:

  • 您编译时是否启用了警告。您甚至没有向您的printf 提供所有 3 个变量!你应该在所有if 中使用swap
  • 更重要的是:没有 Dev-C++ 5.11 编译器。
  • 海报不再构建和测试作业。该阶段被绕过,功能失调的源代码复制/粘贴直接到 SO :(
  • @AnttiHaapala 是的。我忘了。我的错误和抱歉
  • @Joel 是的,Dev-C++ 中有一个 5.11 编译器。

标签: c function if-statement swap


【解决方案1】:

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

// 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

【讨论】:

  • 让我试试你建议的那个
  • 输出和给出的是一样的。是不是缺少什么?
  • 有效!!!非常感谢你的帮助。我知道这对你来说是一个基本问题,但我觉得很难。再次感谢您的帮助。
【解决方案2】:

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

在这段代码中,您绝不应该使用赋值 - 您将用另一个值覆盖一个值,从而丢失被覆盖的原始值:

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

记住,这里的想法是使用交换。

【讨论】:

  • 那我该怎么做呢?如果“if 语句”相互覆盖,那应该是什么?
  • 'If 语句'不会覆盖任何东西 - 你对它们所做的事情会,在这种情况下,你有语句 x = y;。因此,x 中的任何值都会丢失,并替换为 y 的值。这就是覆盖的原因。相反,也许你应该使用交换。在编写任何代码之前,请考虑一下:如果您有列表 {10, -1, 5},那么交换顺序是什么让您进入列表 {-1, 5, 10}
  • x 与 z 交换,y 与 x 交换?
  • 是的,这行得通。现在,对于这三个中的任意值,您将如何组合一个对{x, y, z} 进行排序的过程?如果您有三个值,您必须进行的最大比较和交换次数是多少才能对它们进行排序? {10, 5, -1} 呢?有多少种可能的组合?
  • 通过使用 if 语句或 if-else 语句并将其与交换组合。正如我所模拟的,我认为只有 3 个?我说的对吗?
猜你喜欢
  • 2012-04-14
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多