如果有人帮我处理我的代码会很好。 根据任务我有几个数字(至少1个负数),如果我得到3个数字> 0或= 0然后回答为0.Cod应该找到最接近0的数字。这是我的鳕鱼,但它不起作用。
#include <stdio.h>
#include <conio.h>
int main()
{
int uno, dos, tres; //numbers
printf("enter your numbers");
scanf_s("%d %d %d", &uno, &dos, &tres);
if (uno > 0 || uno == 0 && dos > 0 || dos == 0 && tres > 0 || tres == 0)
printf("There is no negative numbers ...");
else if (uno == 0 || uno > 0 && dos > 0 || dos == 0 && tres < 0)
printf("Your number is %d", &tres);
else if (uno > 0 || uno == 0 && dos < 0 && tres < 0)
if (dos < tres || tres == dos)
printf("Your number is %d", &tres);
else
printf("Your number is %d", &dos);
else if (uno < 0 && dos < 0 && tres < 0)
if (uno < dos && uno < tres)
if (dos < tres || tres == dos)
printf("Your number is %d", &tres);
else printf("Your number is %d", dos);
else if (dos < uno && dos < tres)
if (uno < tres|| uno==tres)
printf("Your number is %d",& tres);
else printf("Your number is %d", &uno);
else if (tres < uno && tres < dos)
if (uno < dos || uno==dos)
printf("Your number is %d",&dos);
else printf("Your number id %d",&uno);
_getch();
return 0;
}
感谢任何帮助。
答案 0 :(得分:2)
逻辑OR(||)的优先级高于逻辑AND(&amp;&amp;),因此您应该添加一些括号。 例如
if (uno > 0 || uno == 0 && dos > 0 || dos == 0 && tres > 0 || tres == 0)
应该成为
if ((uno > 0 || uno == 0) && (dos > 0 || dos == 0) && (tres > 0 || tres == 0))
答案 1 :(得分:1)
保持简单!
假设我们有a,b和c。如何简单地检测谁是最低的? 也许我们可以使用一个变量来存储我们称之为最小值的最小值。
首先假设我们只有一个数字要测试,所以最低的数字是我们唯一的...所以min&lt; = a。
现在为这个问题添加b和c。
我们需要比较min和b,如果b低于min,则将min&lt; = b。然后我们只需要为c做同样的事情,我们可以永远这样继续。
如果我明白你的意思,你的目标是把最接近的0。因此,只需比较数字的绝对值,并将实际值存入最小值。
#include <stdlib.h>
#include <stdio.h>
int main(void) {
int a = 0;
int b = -1;
int c = 2;
int min = a;
if (abs(min) > abs(b)) {
min = b;
}
if (abs(min) > abs(c)) {
min = c;
}
printf("min = %d\n", min);
return 0;
}
如果你需要为了很多价值而看看here,你会在C中学习能够很容易地解决这个问题的数组。
printf("Your number is %d", &tres)
你在这里有一个很大的错误,你没有发送“tres”的价值,而是他的地址。 %d期望 int 而非 int * 某些文档here