吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1044|回复: 20
收起左侧

[已解决] 【Sovled】C语言的三个数求最大数 遇到了些问题~

[复制链接]
TAOGLA 发表于 2022-9-3 13:58
本帖最后由 TAOGLA 于 2022-9-3 14:15 编辑

刚学C语言,做《C程序设计(第五版)》里的习题是碰到了这样一个问题:
编写一个C程序,运行时输入a,b,c三个值,输出其中值最大者。

我就开始动手编写,源码如下:
[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!
如图:
1.png
提前感谢各位大佬解答~
其实就是如何达到判断x>y>z的效果

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
菜鸟小白 + 1 + 1 好天真的写法 哈哈 看到了我自己 加油呀

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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;

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
TAOGLA + 2 + 1 谢谢@Thanks!

查看全部评分

tyler007 发表于 2022-9-3 14:12
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)“对 ...

噢噢 懂了 我犯了个好低级的错误 谢谢大佬!
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);

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
TAOGLA + 1 + 1 谢谢@Thanks!

查看全部评分

bryanhan 发表于 2022-9-3 14:21
逻辑错了
 楼主| TAOGLA 发表于 2022-9-3 14:21

对 很低级的逻辑错误
 楼主| TAOGLA 发表于 2022-9-3 14:23
answdl 发表于 2022-9-3 14:17
int m;
        if (x>y&&y>z)
                m = x;//x>y>z时

感觉这个逻辑更完整一些!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-17 11:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表