当前位置: 代码迷 >> C语言 >> 新手求教, 一个让我很晕的问题
  详细解决方案

新手求教, 一个让我很晕的问题

热度:241   发布时间:2008-05-11 23:03:44.0
新手求教, 一个让我很晕的问题
这个程序的作用是: 输入三个整数,然后按从小到大的顺序输出。
原代码是:
#include <stdio.h>
int max(int x,int y)
{
int z;
if(x>y) z=x;
else z=y;
return (z);
}
void main()
{
int a,b,c,z,t,p;
int max(int x,int y);
int min(int x,int y);
printf("请输入三个数\n");
scanf("%d,%d,%d",&a,&b,&c);
t=max(a,max(b,c));
z=min(a,max(b,c));
if((a<b&&b<c)||(b<c&&b<a)) p=b;
if((b<a&&a<c)||(c<a&&a<b)) p=a;
if((a<c&&c<b)||(b<c&&c<a)) p=c;
printf("%d,%d,%d",z,p,t);
}
int min(int x,int y)
{
int z;
if(x<y)  z=x;
else z=y;
return (z);
}

但运行时候有很奇怪的问题:
①  输入:1,2,3     结果:1,2,3   正确结果
②  输入:2,1,3     结果: 2,2,3   错误结果
③  输入:3,2,1     结果: 2,187,3 错的离谱
不知道什么````

IDE:WIN-TC
谨请指教
谢谢
搜索更多相关的解决方案: max  void  include  return  

----------------解决方案--------------------------------------------------------
用数组和FOR循环来写 
----------------解决方案--------------------------------------------------------
不好意思,
我只学到数组前面的循环语句,
想用IF语句和逻辑关系来写这个程序
还望指出错误
----------------解决方案--------------------------------------------------------
这个解题方式也让我很晕
一定是在转换的时候有未转换过的变量,然后输出,就出现很奇怪的格式了。

但排序用到这种方式,我是头一回见到。其实用一种很简单的方法就行了。
----------------解决方案--------------------------------------------------------
程序代码:

/*******************************************************************

        根据题意所写,未用到数组与指针,也未用到函数。
********************************************************************/
#include<stdio.h>
int main(void)
{
        int a,b,c,t;
        printf("请输入三个整数,空格格开,enter结束输入:\n");
        scanf("%d %d %d",&a,&b,&c);
        if(a>b)
        {
                t=a;
                a=b;
                b=t;
        }
        if(a>c)
        {
                t=a;
                a=c;
                c=t;
        }
        if(b>c)
        {
                t=b;
                b=c;
                c=t;
        }
        printf("\n转换后为:\n%d,%d,%d\n",a,b,c);


        getch();
}


----------------解决方案--------------------------------------------------------
PS:
另外,如果函数在main前面,就不用声明了吧?
----------------解决方案--------------------------------------------------------
谢谢 楼上的兄弟
谢谢 楼上的兄弟
我也知道这个替换t的方法

谭浩强 的书上例题就是用的楼上兄弟的方法,

但是我看到这个题的时候就是想用

想用IF语句和逻辑关系来改写这个程序

结果就发生了这个百思不得其解的问题

望大家指正``
不要说我钻牛角尖呀``
----------------解决方案--------------------------------------------------------
void main()
{
int a,b,c,Max,Min,Mid;
printf("请输入三个数\n");
scanf("%d%d%d",&a,&b,&c);//这里你又错了 你是不是刚才没输入逗号 原来你是scanf("%d,%d,%d",&a,&b,&c);
Max=max(a,max(b,c));
Min=min(a,min(b,c));//这里出错了
if((a<b&&b<c)||(c<b&&b<a)) Mid=b;
if((b<a&&a<c)||(c<a&&a<b)) Mid=a;
if((a<c&&c<b)||(b<c&&c<a)) Mid=c;
printf("%d%d%d",Max,Min,Mid);
}
你逻辑上没什么问题了  我也糊涂了 我再看看 你写的很乱
我改了你把我的放进去看看

[[it] 本帖最后由 走一圈 于 2008-5-12 00:08 编辑 [/it]]
----------------解决方案--------------------------------------------------------
回复 9# 的帖子
先谢谢楼上的兄弟了,
我试着去掉 int max(int x,int y); 中的 int
但提示编译失败```  
它说:表达式语法错在 main 函数中
``
不过还是感谢关注

另外
我朋友说这里不是不要int 而是不要int max(int x,int y);整个语句
我按他说的试了下,过然通过了```,但还是会出现1楼的那些错误,我朋友说他也不清楚为什么

还望广大高手赐叫

[[it] 本帖最后由 black_boy 于 2008-5-11 23:45 编辑 [/it]]
----------------解决方案--------------------------------------------------------
我改过了你再试试  我调试不方便
----------------解决方案--------------------------------------------------------
  相关解决方案