TAOGLA 发表于 2022-9-3 13:58

【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的效果

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)“对应的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;

tyler007 发表于 2022-9-3 14:12

大括号。if, elseif, else。

submariner 发表于 2022-9-3 14:12

本帖最后由 submariner 于 2022-9-3 14:14 编辑

输出的结果是6,对吧?算法逻辑错误;第一个if不成立,进入else字句,字句里的if也不成立,走else,也就是输出z,也就是6

TAOGLA 发表于 2022-9-3 14:14

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:}

Incoparab 发表于 2022-9-3 14:15

tyler007 发表于 2022-9-3 14:12
大括号。if, elseif, else。

跟大括号没关,if下面只有一条语句可以不用大括号,else、for同理

answdl 发表于 2022-9-3 14:17

      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

逻辑错了

TAOGLA 发表于 2022-9-3 14:21

bryanhan 发表于 2022-9-3 14:21
逻辑错了

对 很低级的逻辑错误{:1_896:}

TAOGLA 发表于 2022-9-3 14:23

answdl 发表于 2022-9-3 14:17
int m;
      if (x>y&&y>z)
                m = x;//x>y>z时


感觉这个逻辑更完整一些!
页: [1] 2 3
查看完整版本: 【Sovled】C语言的三个数求最大数 遇到了些问题~