| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
学习型 ASP/PHP/ASP.NET 主机 35元/年全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
赛孚耐:软件保护加密专家身份认证令牌USB KEY虚拟主机 域名注册 主机托管 
共有 1208 人关注过本帖
标题:新手求教, 一个让我很晕的问题
收藏  推荐  打印 
black_boy
Rank: 1
来自:湖北
等级:新手上路
帖子:16
积分:252
注册:2008-3-25
结帖率:0/0
  问题点数:0  回复次数:29   
新手求教, 一个让我很晕的问题

这个程序的作用是: 输入三个整数,然后按从小到大的顺序输出。
原代码是:
#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
谨请指教
谢谢
2008-5-11 23:03
走一圈
Rank: 2
等级:注册会员
帖子:156
积分:1618
注册:2008-5-9
  得分:0 

用数组和FOR循环来写 
2008-5-11 23:10
black_boy
Rank: 1
来自:湖北
等级:新手上路
帖子:16
积分:252
注册:2008-3-25
  得分:0 

不好意思,
我只学到数组前面的循环语句,
想用IF语句和逻辑关系来写这个程序
还望指出错误
2008-5-11 23:14
广陵绝唱
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:3008
积分:31098
注册:2008-2-15
  得分:0 
这个解题方式也让我很晕

一定是在转换的时候有未转换过的变量,然后输出,就出现很奇怪的格式了。

但排序用到这种方式,我是头一回见到。其实用一种很简单的方法就行了。
2008-5-11 23:15
广陵绝唱
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:3008
积分:31098
注册:2008-2-15
  得分:0 


程序代码:
/*******************************************************************

        根据题意所写,未用到数组与指针,也未用到函数。
********************************************************************/
#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();
}
2008-5-11 23:20
广陵绝唱
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:3008
积分:31098
注册:2008-2-15
  得分:0 
PS:

另外,如果函数在main前面,就不用声明了吧?
2008-5-11 23:21
black_boy
Rank: 1
来自:湖北
等级:新手上路
帖子:16
积分:252
注册:2008-3-25
  得分:0 
谢谢 楼上的兄弟

谢谢 楼上的兄弟
我也知道这个替换t的方法

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

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

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

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

望大家指正``
不要说我钻牛角尖呀``
2008-5-11 23:29
走一圈
Rank: 2
等级:注册会员
帖子:156
积分:1618
注册:2008-5-9
  得分:0 

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);
}
你逻辑上没什么问题了  我也糊涂了 我再看看 你写的很乱
我改了你把我的放进去看看

[ 本帖最后由 走一圈 于 2008-5-12 00:08 编辑 ]
2008-5-11 23:34
black_boy
Rank: 1
来自:湖北
等级:新手上路
帖子:16
积分:252
注册:2008-3-25
  得分:0 
回复 9# 的帖子

先谢谢楼上的兄弟了,
我试着去掉 int max(int x,int y); 中的 int
但提示编译失败```  
它说:表达式语法错在 main 函数中
``
不过还是感谢关注

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

还望广大高手赐叫

[ 本帖最后由 black_boy 于 2008-5-11 23:45 编辑 ]
2008-5-11 23:42
走一圈
Rank: 2
等级:注册会员
帖子:156
积分:1618
注册:2008-5-9
  得分:0 

我改过了你再试试  我调试不方便
2008-5-11 23:45
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.049558 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved