【发布时间】:2013-10-05 15:37:00
【问题描述】:
你看,我自学了 C++(不完全是,我还在拖延 -_-)。所以,现在我开始上大学,他们在教 C,他们让我们做一个输入四个整数的程序,我们必须说出其中最大和最小的。很简单,不是吗?
问题是,我已经对函数和数组有了很好的理解。是的,我可以在数组中编程,没问题。但由于这是第一个实验室,我们还没有“学习”到这一点,所以我不能使用其中的任何一个,这样会很简单。
这是我在那里写的(感觉有点不对劲)。
#include<stdio.h>
int main(void)
{
int first, second, third, fourth;
printf("Enter four integers (separated by space): ");
scanf("%d %d %d %d", &first, &second, &third, &fourth);
if((first>second) && (first>third) && (first>fourth))
printf("\nFirst number is largest");
else if((second>first) && (second>third) && (second>fourth))
printf("\nSecond number is largest");
else if((third>second) && (third>first) && (third>fourth))
printf("\nThird number is largest");
else if((fourth>second) && (fourth>third) && (fourth>first))
printf("\nFourth number is largest");
if((first<second) && (first<third) && (first<fourth))
printf("\nFirst number is smallest");
else if((second<first) && (second<third) && (second<fourth))
printf("\nSecond number is smallest");
else if((third<second) && (third<first) && (third<fourth))
printf("\nThird number is smallest");
else if((fourth<second) && (fourth<third) && (fourth<first))
printf("\nFourth number is smallest");
printf("\n");
return 0;
}
如您所见,它太长、太无聊和太复杂了。但是看到我们现在在课堂上讨论的只是循环和决策语句。有没有更优雅的方式来做到这一点? 使用较少的ifs?并不是说这有什么问题,但它可能会更好。
附:这不完全是“家庭作业”或任何东西。我做了一个程序,我只是想知道我可以做些什么来让它变得更好并学习更好的编程实践。
【问题讨论】:
-
好吧,上面至少有一个问题:如果你输入相同的数字四次,它什么也不会打印。
-
您需要实现部分 4 线 sorting network(是的,这只是嵌套
if语句的花哨名称,但它显示了这些语句的最佳配置)。 -
@jon 即使任何两个相等...!
-
@Hamza Masud:要求同时找到最大和最小的问题的全部意义在于让您从每次比较中提取最大有价值的信息。例如,如果您知道
a > b为真,那么从该单一比较中您应该意识到a不再是最小的候选者,而b不再是最大的候选者。基本上,有 4 个数字,两个测试a > b和c > d已经清楚地将数字分成两个候选者最大和两个最小候选者。其余的都很简单。 -
if 用于选择数值的语句总是可以被位移操作(提取符号)和减法的适当组合替换;请参阅下面的答案。
标签: c