在C中找到中间数字

时间:2011-02-03 03:48:54

标签: c syntax

这是家庭作业。以为我会告诉你的。如果你能指出我的方向,这将有助于我发现为什么会发生这种错误,我会很感激。 http://pastebin.com/hDUpfrsu是我目前的代码(包含在下面)。当我输入(按此顺序)5, 6, 7或其他序列时,为什么会返回一个?

#include <stdio.h>
#include <simpio.h>
#include <genlib.h>

/* finds the minimum among three integers using minimal amount of relational operations */

int main()
{
    int myNumbers[2];
    bool lowest;
    printf("Enter the first integer...\t");
    myNumbers[0] = GetInteger();
    printf("Enter the second integer...\t");
    myNumbers[1] = GetInteger();
    printf("Enter the third integer...\t");
    myNumbers[2] = GetInteger();

    if (myNumbers[0] < myNumbers[1] && myNumbers[0] < myNumbers[2])
    {
       lowest = myNumbers[0];
    }

    if (myNumbers[0] > myNumbers[1] && myNumbers[1] < myNumbers[2])
    {
       lowest = myNumbers[1];
    }

    if (myNumbers[0] > myNumbers[2] && myNumbers[1] > myNumbers[2])
    {
       lowest = myNumbers[2];
    }

    printf("\n%d", lowest);
    getchar();
    return 0;

}

9 个答案:

答案 0 :(得分:3)

一些问题:

  • 最低被定义为bool,它应该是int以及您如何使用它

  • myNumbers[2]是一个大小为2的数组,它只能容纳2个数字。将大小声明更改为3。

  • 考虑如果两个或多个值相等会发生什么......

答案 1 :(得分:2)

替换

bool lowest;

通过

int lowest;

因为你想在“最低”中存储整数,而不是布尔值。

答案 2 :(得分:1)

lowestbool。不应该是更大的东西吗?

答案 3 :(得分:1)

您的问题的答案是,正如许多其他人指出的那样,您使用最低作为布尔类型,而不是数字类型,例如 int ,这将与您的其他程序保持一致。

bool lowest;

布尔类型,如预期的那样,基本上可以包含两种状态: true false 。由于历史原因(即,主要是因为 C 继承),布尔值已与整数相关联,其中0表示false,任何其他值表示为true。

这就是为什么布尔类型仍然与整数兼容(这是一种说法),当你将它分配给零时,它保持为假。如果为其分配任何其他int值,它将成立。这种情况发生在这样的行中:

lowest = myNumbers[0];

最后,执行时:

printf("\n%d", lowest);

发生逆过程, true 转换为 int (因为您在 printf中指定了%d format string), true 转换为1,这是 bool 类型的默认整数值,其整数值为(int) true(在您的计划中:(int) lowest)被问到。

可以想象,超过90%的输入整数值将与零不同,这就是你获得1的原因,无论输入是什么。

答案 4 :(得分:0)

添加到其他人的答案。

你有:

int myNumbers[2];
...
myNumbers[2] = GetInteger();

这是不正确的。 myNumbers是一个包含2个元素的数组,有效的数组索引是01。由于您希望在数组中存储3个元素,请将其大小更改为3

答案 5 :(得分:0)

警告:你的阵列不够大。声明数组时,索引不是数组的最大索引,而是元素数,即最大索引+ 1.

答案 6 :(得分:0)

您可以使用 Ternary Operator ( ? :) 使用最小关系运营商数量(正如您所说)来查找最低号码或最高b / w三个号码。

int low, lowest;
low = (number[0] < number[1]) ? number[0] : number[1];
lowest =(low < number[2]) ? low : number[2];
printf("%d",lowest);

答案 7 :(得分:0)

其他人指出了程序中明显的缺陷(即数组大小,结果的数据类型)。 这里有一点可以让你理解数组的索引,特别是w hy they start from zero

PS:我喜欢评价最高的答案,但我建议你阅读整篇文章。

答案 8 :(得分:0)

这个问题已经回答了,所以我将发布一个更简单的解决方案:

int lowest = myNumbers[0];
if (myNumbers[1] < lowest)
{
    lowest = myNumbers[1];
}
if (myNumbers[2] < lowest)
{
    lowest = myNumbers[2];
}
printf("lowest value is: %d\n", lowest);

你只需要很多条件!