在C中寻找中间数
这是家庭作业。我想我会让你知道的。如果你能为我指明方向,帮助我发现为什么会发生这个错误,我将不胜感激。 是我的当前代码(包括在下面)。当我输入(按此顺序)5、6、7或其他序列时,它为什么返回一个在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
#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
是一个大小为2的数组,它只能容纳2个数字。将大小声明更改为3myNumbers[2]
- 考虑一下如果两个或多个值相等会发生什么
最低的
是一个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;
正如预期的那样,布尔类型基本上可以包含两种状态:true和false。出于历史原因(即,主要是由于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);