我有三个数字,m,n和p。我试图使用嵌套的if..else if..else找到最大值。
以下是我的相同代码:
#include <stdio.h>
int main() {
// your code goes here
float m,n,p;
scanf("%f%f%f", &m,&n,&p);
if(m>n){
if(m>p){
printf("%f",m);
}
}
else if(n>p){
if(n>m){
printf("%f",n);
}
}
else{
printf("%f",p);
}
return 0;
}
但是当我输入m = 4时,n = 2,p = 11。它不打印任何东西!
最后的其他陈述是否应该起作用并将结果作为11?
答案 0 :(得分:5)
通过将查找最大值的逻辑移动到函数来简化代码。
QMetaCallEvent
答案 1 :(得分:4)
您的else
仅适用于之前的if
,嵌套if
语句无法按您的意图运行,而是应该使用&#34;和&#34;运算符检查同一if
中的两个条件是否为真。另外,如果两个最大的数字相等,您想要>=
而不只是>
。
int main() {
// your code goes here
float m,n,p;
scanf("%f%f%f", &m,&n,&p);
if(m >= n && m >= p){
printf("%f",m);
} else if(n >= p && n >= m) {
printf("%f",n);
} else{
printf("%f",p);
}
return 0;
}
更简单的例子,如果你有这样的代码:
if (a) {
if (b) {
printf("first\n");
}
} else {
print("second\n");
}
else
仅与a
是真还是假有关。如果您有a = true
和b = false
,则上述内容不会打印。您的程序将进入if (a)
正文(因此else
永远不会运行),然后在退出之前看if (b)
并跳过printf("first\n")
。
答案 2 :(得分:4)
迟到的答案。这个简单的解决方案不需要任何条件嵌套:
#include <stdio.h>
int main() {
float m, n, p, max;
if(scanf("%f%f%f", &m, &n, &p) != 3) {
puts("Bad input");
return 1;
}
max = m;
if(n > max) {
max = n;
}
if(p > max) {
max = p;
}
printf("%f", max);
return 0;
}
答案 3 :(得分:0)
您还可以创建一个愚蠢的宏
#include <stdio.h>
#define mo3(m,n,p) ( (m) > (n) ? ((m) > (p) ? (m) : (p)) : ((n) > (p) ? (n) : (p)))
int main(void) {
int m=4,n=2,p=11;
// your code goes here
printf("%d\n", mo3(m,n,p));
return 0;
}
答案 4 :(得分:0)
使用浮点数学的@Weather Vane答案的变体并正好处理Not a Numbers:
当存在NaN时,通常处理它们是忽视它们的存在。因此max5(-2.0, NAN, -1.0, NAN, -3.0)
是-1.0
。
double max3(double a, double b, double c) {
double mx = -INFINITY;
bool found = false;
if (a >= mx) {
mx = a;
found = true;
}
if (b >= mx) {
mx = b;
found = true;
}
if (c >= mx) {
mx = c;
found = true;
}
return found ? mx : NAN;
}
上面使用<, <=, >=, >
非常常见但不是C指定的行为,将NAN与数字进行比较,结果为false。当__STDC_IEC_559__
定义为值1时,此期望的比较结果是指定的行为。
#if __STDC_IEC_559__ == 1
的替代方案可以使用isnan()
宏。
当然,如果任何数字为NAN,则其他功能可以返回NAN。
答案 5 :(得分:-1)
它应该是这样写的:
#include <stdio.h>
int main() {
// your code goes here
float m,n,p;
scanf("%f%f%f", &m,&n,&p);
if(m>n){
if(m>p){
printf("%f",m);
}
else{
printf("%f", p);
}
}
else if(n>p){
printf("%f", n);
}
return 0;
}