【发布时间】:2022-04-07 04:39:06
【问题描述】:
我一直在学习推荐的初学者书籍中的一些基本练习:C Programming: A Modern Approach (2nd Edition)
问题指出:使用尽可能少的 if 语句来确定用户输入的四个数字中的最大值和最小值。 四个 if 语句就足够了。 -- 因为这个问题是在本书介绍循环、数组和函数之前提出的,所以我假设不应该使用这些。
另外,我知道有一个与此类似的question,但是没有一个符合我想要实现的要求。
-
仅使用 4 个
if语句 - 没有 for 循环。
我首先想到的是使用逻辑 or 运算符,但如下所示,使用了八个 if 语句。而且这个方法很长而且效率不高:
int a, b, c, d;
printf("Enter 4 intgeres to find largest and smallest: ");
scanf_s("%d %d %d %d", &a, &b, &c, &d);
if (a > b && a > c && a > d)
printf("Largest: %d\n", a);
if (b > a && b > c && b > d)
printf("Largest: %d\n", b);
if (c > a && c > b && c > d)
printf("Largest: %d\n", c);
if (d > a && d > a && d > c)
printf("Largest: %d\n", d);
if (a < b && a < c && a < d)
printf("Smallest: %d\n", a);
if (b < a && b < c && b < d)
printf("Smallest: %d\n", b);
if (c < a && c < b && c < d)
printf("Smallest: %d\n", c);
if (d < a && d < a && d < c)
printf("Smallest: %d\n", d);
return 0;
接下来,我继续执行以下代码,这将是一个更好的解决方案:
int a, b, c, d;
printf("Enter 4 intgeres to find largest and smallest: ");
scanf_s("%d %d %d %d", &a, &b, &c, &d);
int max = a, min = a;
if (b > max)
max = b;
else if (b < min)
min = b;
if (c > max)
max = c;
else if (c < min)
min = c;
if (d > max)
max = d;
else if (d < min)
min = d;
printf("max: %d min : %d\n", max, min);
return 0;
但是,仍然不能满足使用 4 个if 语句的要求。我想知道我是否可以进一步缩短我的代码。请原谅这个问题的基本性质。任何建议将不胜感激。
【问题讨论】:
-
顺便说一句,即使没有
? :,也可以使用零ifs,只使用&&和||。 -
是的,我知道使用条件表达式可以通过
zeroif s 解决这个问题。但是要求声明我使用if语句来实现结果。 (4 个就足够了) -
只有
if,所以没有else or else if? -
虽然我不知道它是否有帮助(我还没有真正通过它)但如果
a > b && b > c那么它遵循a > c。 -
@Stefan,
else if可以使用但是,如果我弄错了,请纠正我,else if也被认为是一个 if 语句。因此,在我的最后一个解决方案中,我使用了 6 个 if 语句。
标签: c if-statement