注册 登录
编程论坛 C语言论坛

c语言比较三个数大小

Z1020 发布于 2020-01-06 14:57, 6883 次点击
题目是用max函数比较三个数的大小,比较其他组的大小都没问题,但唯独比较-1 -2 -3这三个数时得到的max为-2,求大佬指明错误。谢谢!
我的代码:
#include<stdio.h>
int max(int a,int b)
{
    int re=a;
    if(b>a)
    re=b;
    return re;
}
int main()
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    printf("max=%d",max((a,b),c));
    return 0;
}
16 回复
#2
叶纤2020-01-06 15:18
#include<iostream>
using namespace std;

int maxchar(int a,int b)
{
    if(a>b)
        {return a;}
    else
        {return b;}
}
int main()
{
    int a,b,c,m;
    cin >> a>>b>>c;
   
    m=maxchar(maxchar(a,b),c);
    cout<<"3个字符串的最大值为"<<m<<endl;
}//楼主看着改吧,我只会用C++写
#3
叶纤2020-01-06 16:06
[quote]以下是引用Z1020在2020-1-6 14:57:13的发言:

题目是用max函数比较三个数的大小,比较其他组的大小都没问题,但唯独比较-1 -2 -3这三个数时得到的max为-2,求大佬指明错误。谢谢!
我的代码:
#include<stdio.h>
int max(int a,int b)
{
    int re=a;
    if(b>a)
    re=b;
    return re;
}
int main()
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    printf("max=%d",max((a,b),c));//改为printf("max=%d",max(max(a,b),c));
    return 0;
}//为什么这么改呢?因为max((a,b),c));实际上可以写为max(b,c));此时b为a,c为b,但是c又不大于b只只能老老实实返回b的值-2了
#4
叶纤2020-01-06 16:12
回复 楼主 Z1020
你用你的原代码测试以下数据试一试
2 1 0
1  0 -1
 10   5  6
11  -1     6
 等等等
#5
Z10202020-01-06 16:37
回复 3楼 叶纤
可爱的小姐姐你好呀,我想问一下为什么max((a,b),c)是等于max(b,c)的呢?它的意思不是先a和b比较出最大值,再用大者和c比较吗?我测试了你所给的数据,确实如你所说,另外,你所给的改后的程序运行成功了,非常感谢!希望小姐姐还可以解答一下为什么max((a,b),c)是等于max(b,c)而不是先a和b比较出最大值,再用大者和c比较...系谢谢谢谢!
#6
xianfajushi2020-01-06 16:48
只有本站会员才能查看附件,请 登录
#7
叶纤2020-01-06 16:55
回复 5楼 Z1020
因为我和你的语言不通,不过呢最好帮助你理解,,,这个符号的办法请按照我的操作来

请在你的编译器上分别打印(1,2)  (3,4)  (7,8)  (1,25)  (45,5)
    (11,12)最后总结一下为什么
给你个列子
#include<iostream>
using namespace std;

int main()
{
   
    cout << (1,2)<<","<< (3,4)<<endl;
}
#8
叶纤2020-01-06 17:17
回复 6楼 xianfajushi
大神我想问?这个符号是什么
因为我不知道?这个符号的意思
我只能这样理解就拿最小值来说
a大于b吗b大于c吗    是的话c就是b  要想b等于c需要c大于a吗a等于c
#9
forever742020-01-06 18:27
学习程序设计,语法上要把思想统一到C语言标准上来,不要你以为,要编译器以为。
(a,b)这个叫逗号表达式----翻教材吧
?: 这个叫条件运算符----翻教材吧
#10
叶纤2020-01-06 21:21
回复 10楼 forever74
谢谢楼上的提醒,送多花花以示感谢,此楼为备忘录,不过我做不到连写
#include<iostream>
using namespace std;
int main()
{  int a,b,c;
cin >> a>>b>>c;
int a_b =a>b?a:b;//比较a b大小对的话a否则为b
int b_c=b>c?b:c;//比较 b c大小  输出大的
int all=a_b>b_c?a_b:b_c;//把abc中最大的找到
cout << all << endl;//最大值
  
}
//LRbool?L (1):R(0)   "?:条件运算符"      
#11
xianfajushi2020-01-07 09:59
好学是好事,我也喜欢好学的人,三目运算可以搜索资料看看,理解也不难,把?当作if把:当作else看到即可,比较容易理解。
我写的是嵌套三目运算一个三目运算嵌套两个三目运算,连着写看不很清楚时分开看就很明白了:
程序代码:

cout << "最小" <<
(a > b ?
b > c ? c : b

 :

 c > a ? a : c
) << endl;

以下是引用Z1020在2020-1-6 14:57:13的发言:

题目是用max函数比较三个数的大小,比较其他组的大小都没问题,但唯独比较-1 -2 -3这三个数时得到的max为-2,求大佬指明错误。谢谢!
我的代码:
#include<stdio.h>
int max(int a,int b)
{
    int re=a;
    if(b>a)
    re=b;
    return re;
}
int main()
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    printf("max=%d",max((a,b),c));
    return 0;
}

你上门的函数调用理解问题,函数传递2个参数,因此,要先调用一次(a,b)返回值后再调用一次,因此,可分开2次写,连续写就要写为max(max(a,b),c)这样才对。
以下是引用叶纤在2020-1-6 17:17:11的发言:

大神我想问?这个符号是什么
因为我不知道?这个符号的意思
我只能这样理解就拿最小值来说
a大于b吗b大于c吗    是的话c就是b  要想b等于c需要c大于a吗a等于c

#12
叶纤2020-01-07 16:50
听楼上这样说我突然脑壳子一动一下子有个想法,然后我尝试着在编译器上敲,哈哈哈哈哈哈!!!!!!!居然可以还成功做了本题,兴奋死我了给个花花,以下是我的备忘录
#include<iostream>
using namespace std;
int main()
{ int a,b,c;
cin >> a>>b>>c;
cout<<((a>b?a:b)>(b>c?b:c)?(a>b?a:b):(b>c?b:c)
);}
#13
xianfajushi2020-01-08 09:35

爱动脑是好事,我的经验是过段时间得空闲有机会回头再看看以前写的东西,会有所悟.
屈指可数,你这写得是53式,我那个写的是32式,就像是倚天屠龙记中张三丰说的太极拳已无瑕疵.
#14
bcbbcclbbc2020-01-09 23:09
printf("max=%d",max((a,b),c));

你这是想递归调用?
可是事实是只调用了一次max函数其两个参数分别是(a,b)和c 。
#15
Z10202020-01-09 23:29
回复 15楼 bcbbcclbbc
感谢已懂
#16
Z10202020-01-09 23:31
回复 12楼 xianfajushi
谢谢大佬!
#17
jklqwe1112020-01-12 23:00
以下是引用叶纤在2020-1-7 16:50:53的发言:

听楼上这样说我突然脑壳子一动一下子有个想法,然后我尝试着在编译器上敲,哈哈哈哈哈哈!!!!!!!居然可以还成功做了本题,兴奋死我了给个花花,以下是我的备忘录
#include<iostream>
using namespace std;
int main()
{ int a,b,c;
cin >> a>>b>>c;
cout<<((a>b?a:b)>(b>c?b:c)?(a>b?a:b):(b>c?b:c)
);}


cout<<((a>b?a:b)>(b>c?b:c)?(a>b?a:b):(b>c?b:c))   为什么不能这样  cout<<((a>b?a:b)>c?(a>b?a:b):c)
对比下面这句
max(max(a,b),c)
一个是调用函数,一个是表达式求值,但实现的算法是一样的,写出其中之一,另一个应该不难写出
1