【Sovled】C语言的三个数求最大数 遇到了些问题~
本帖最后由 TAOGLA 于 2022-9-3 14:15 编辑刚学C语言,做《C程序设计(第五版)》里的习题是碰到了这样一个问题:
编写一个C程序,运行时输入a,b,c三个值,输出其中值最大者。
我就开始动手编写,源码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int max(int x, int y, int z);
int a, b, c, d;
printf("请输入第1个数字:\n");
scanf_s("%d", &a);
printf("请输入第2个数字:\n");
scanf_s("%d", &b);
printf("请输入第3个数字:\n");
scanf_s("%d", &c);
d = max(a, b, c);
printf("max=%d\n", d);
system("pause");
return 0;
}
int max(int x, int y, int z)
{
int m;
if (x>y&&y>z)
m = x;
else
if (y>z)
m = y;
else
m = z;
return(m);
}
我从网上找到了&&是逻辑与的意思
我也知道这种判断有很多种路可以走
主要是想知道哪里出了问题,每当我依次输入诸如8,4,6之类的值时,程序并不会输出8!
如图:
提前感谢各位大佬解答~
其实就是如何达到判断x>y>z的效果 第22行“if (x>y&&y>z)”表示x>y>z,下面的第一个else:"else if y>z"是不可能成立的,”if (x>y&&y>z)“对应的else为 "!(x>y&&y>z)"即"x<=y||y<=z"所以第25行的else不会执行。
正确应为:
if(x>=y && y>=z) m = x;
else if (y>=x && y>=z) m =y;
else if(z>=x&&z>=y) m = z;
return m; 大括号。if, elseif, else。 本帖最后由 submariner 于 2022-9-3 14:14 编辑
输出的结果是6,对吧?算法逻辑错误;第一个if不成立,进入else字句,字句里的if也不成立,走else,也就是输出z,也就是6
Incoparab 发表于 2022-9-3 14:11
第22行“if (x>y&&y>z)”表示x>y>z,下面的第一个else:"else if y>z"是不可能成立的,”if (x>y&&y>z)“对 ...
噢噢 懂了 我犯了个好低级的错误 谢谢大佬!{:1_919:} tyler007 发表于 2022-9-3 14:12
大括号。if, elseif, else。
跟大括号没关,if下面只有一条语句可以不用大括号,else、for同理 int m;
if (x>y&&y>z)
m = x;//x>y>z时
else
if (y>z)
m = y;//y>z与y>x时
else
m = z;//y<z成立,但x与z还没有做比较
return(m); 逻辑错了 bryanhan 发表于 2022-9-3 14:21
逻辑错了
对 很低级的逻辑错误{:1_896:} answdl 发表于 2022-9-3 14:17
int m;
if (x>y&&y>z)
m = x;//x>y>z时
感觉这个逻辑更完整一些!