编写一个程序来检查三个变量 - x,y和z - 和 打印其中最大的奇数。如果它们都不是奇数,那就是 应该打印一条消息。
这是我的源代码:
#include <stdio.h>
int main() {
int x,y,z;
x = 11;
y = 15;
z = 18;
if (x > y && x > z && x % 2 != 0)
printf("%d", x);
else if (y > z && y > x && y % 2 != 0)
printf("%d", y);
else if (z > x && z > y && z % 2 != 0)
printf("%d", z);
else
printf("error");
return 0;
}
该程序正在编译并运行但是给出了错误的答案。对于上面的内容,它给出了&#34;错误&#34;作为输出,但最大的奇数是15。
答案 0 :(得分:2)
如果它是奇数,你只是打印三个中最大的整数。为了不改变代码,如果您不关心其他值,可以将偶数变量设置为-INF。那就是:
//INF can be whatever big even value you think that works fine (1e9), 0x3ffffffe, etc
#define INF 1e9
if (x % 2 == 0) x = -INF;
if (y % 2 == 0) y = -INF;
if (z % 2 == 0) z = -INF;
//here the rest of your code
答案 1 :(得分:1)
在您的示例中,y是最大的奇数,但它不是最大的数字。 z更大,所以&#34; y&gt; z&#34;计算结果为false,并且不会获取所需的路径。
答案 2 :(得分:0)
代码不会打印最大的奇数,但如果恰好是奇数,则打印最大数字。
您需要跟踪您找到的最大奇数,然后打印出来。
例如:
int found = false, largest = 0;
if (x%2 != 0) {
found = 1;
largest = x;
}
if (y%2 != 0) {
found = 1;
if (y > largest) {
largest = y;
}
}
if (z%2 != 0) {
found = 1;
if (z > largest) {
largest = z;
}
}
if (found) {
printf("%d", largest);
} else {
printf("error");
}
答案 3 :(得分:0)
您可能已经注意到您的代码非常重复。本书中的下一个练习很可能是&#34;好的,现在为十个输入数字&#34;执行此操作,这对于考虑来说太繁琐,或者&#34; .. 。任意数量的输入数字&#34;,这显然无法按照您的方式完成。
所以你应该考虑像这样的代码结构:
int current_largest_odd_number = 0; /* note: zero is even */
for (;;) {
int n = read_a_number();
if (n == -1) break; /* read_a_number returns -1 on EOF */
if (is_even(n)) continue;
if (n > current_largest_odd_number)
current_largest_odd_number = n;
}
if (current_largest_odd_number > 0)
printf("largest odd number: %d\n", current_largest_odd_number);
答案 4 :(得分:0)
当且仅当为奇数时,您的代码才会显示最大的数字。
您可以依次测试每个数字,并将指针更新为最大奇数值(如果有)。
#include <stdio.h>
int main() {
int x = 11;
int y = 15;
int z = 18;
int *largest = NULL;
if (x % 2 != 0) {
largest = &x;
}
if (y % 2 != 0) {
if (!largest || y > *largest) {
largest = &y;
}
}
if (z % 2 != 0) {
if (!largest || z > *largest) {
largest = &z;
}
}
if (largest) {
printf("%d\n", *largest);
} else {
printf("error\n");
}
return 0;
}
这是一种替代方法,它使用指示器而不是指示器:
#include <stdio.h>
int main() {
int x = 11;
int y = 15;
int z = 18;
int largest = 0;
int found = 0;
if (x % 2 != 0) {
largest = x;
found = 1;
}
if (y % 2 != 0) {
if (!found || y > largest) {
largest = y;
found = 1;
}
}
if (z % 2 != 0) {
if (!found || z > largest) {
largest = z;
found = 1;
}
}
if (found) {
printf("%d\n", largest);
} else {
printf("error\n");
}
return 0;
}