在C中寻找中间数

在C中寻找中间数,c,syntax,C,Syntax,这是家庭作业。我想我会让你知道的。如果你能为我指明方向,帮助我发现为什么会发生这个错误,我将不胜感激。 是我的当前代码(包括在下面)。当我输入(按此顺序)5、6、7或其他序列时,它为什么返回一个 #include <stdio.h> #include <simpio.h> #include <genlib.h> /* finds the minimum among three integers using minimal amount of relation

这是家庭作业。我想我会让你知道的。如果你能为我指明方向,帮助我发现为什么会发生这个错误,我将不胜感激。 是我的当前代码(包括在下面)。当我输入(按此顺序)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;
#包括
#包括
#包括
/*使用最少的关系操作查找三个整数中的最小值*/
int main()
{
int myNumbers[2];
布尔最低;
printf(“输入第一个整数…\t”);
myNumbers[0]=GetInteger();
printf(“输入第二个整数…\t”);
myNumbers[1]=GetInteger();
printf(“输入第三个整数…\t”);
myNumbers[2]=GetInteger();
if(myNumbers[0]myNumbers[1]&&myNumbers[1]myNumbers[2]&&myNumbers[1]>myNumbers[2])
{
最低=我的数字[2];
}
printf(“\n%d”,最低);
getchar();
返回0;
}几个问题:

  • 最低的定义是一个
    bool
    ,它应该是一个
    int
    ,说明如何使用它

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

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

  • 最低的
    是一个
    bool
    。它不应该是更大的吗?

    替换

    bool lowest;
    


    因为您希望将整数存储在“lower”中,而不是布尔值。

    添加到其他人的答案中

    你有:

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

    这是不正确的
    myNumbers
    是一个由2个元素组成的数组,有效数组索引为
    0
    1
    。由于要在数组中存储
    3
    元素,请将其大小更改为
    3

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

    您可以使用找到最小数量的关系运算符(如您所说)的最低数量或最高b/w三个数字

    int low, lowest;
    low = (number[0] < number[1]) ? number[0] : number[1];
    lowest =(low < number[2]) ? low : number[2];
    printf("%d",lowest);
    
    int低,最低;
    低=(数字[0]<数字[1])?编号[0]:编号[1];
    最低=(低<数字[2])?低:数字[2];
    printf(“%d”,最低);
    
    其他人指出了程序中的明显缺陷(即数组大小、结果的数据类型)。 这里有一点可以让你理解数组的索引,特别是w


    PS:我喜欢排名靠前的答案,但我建议你阅读整篇文章。

    你的问题的答案是,正如许多其他人所指出的,你使用的是最低的布尔类型,而不是数字类型,如int,这将与你程序的其余部分相协调

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

    这就是为什么布尔类型仍然与整数兼容(这是一种说法),当您将其赋值为零时,它将保持false。如果您为它指定任何其他int值,它将保持为true。这是在这样的行中发生的:

    lowest = myNumbers[0];
    
    最后,执行时:

    printf("\n%d", lowest);
    
    逆过程发生,true被转换为int(因为您在printf格式字符串中指定了%d),true被转换为1,当其整数值为
    (int)true
    (在您的程序中:
    (int)询问最低的


    可以想象,90%以上的输入整数值与零不同,这就是为什么无论输入如何,都会得到1。

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

    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);
    
    int lower=myNumbers[0];
    if(MyNumber[1]<最低值)
    {
    最低=我的数字[1];
    }
    if(MyNumber[2]<最低值)
    {
    最低=我的数字[2];
    }
    printf(“最低值为:%d\n”,最低);
    

    你只需要这么多的条件!

    你的评论说“使用最少的关系运算在三个整数中找到最小值”,但这些运算并不是真正实现的最小值。你认为我该如何解决这个问题?你可以通过嵌套if语句来解决它。例如,第一个测试可以是myNumbers[0]int-myNumbers[2]是一个大小为2的数组,因此有效索引是
    myNumbers[0]
    myNumbers[1]
    。为了使用
    myNumbers[2]
    您需要声明数组的大小为3(例如,
    int myNumbers[3]
    )。根据其他注释,您似乎误解了数组的大小。定义数组的大小[n]使其具有n个“插槽”,并且由于索引为零,因此有效索引为0..n-1。数组声明中给出的数字是元素数,而不是最后一个索引。
    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);