| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1898 人关注过本帖
标题:简单的排序问题 程序运行时出错
只看楼主 加入收藏
胡文涛
Rank: 1
来 自:北京 朝阳
等 级:新手上路
帖 子:29
专家分:0
注 册:2016-6-30
结帖率:87.5%
收藏
已结贴  问题点数:3 回复次数:11 
简单的排序问题 程序运行时出错
问题如下:输入四个整数,要求按由小到大的顺序输出。
#include<stdio.h>
int main()
{
    int a,b,c,d;
    printf("Enter four integers:\n");
    scanf("%d,%d,%d,%d",&a,&b,&c,&d);
    if (a>=b)
    {
        swap(a,b);
    }
    else;
    if (b>=c)
    {
        swap(b,c);
        if (a>=b)
        {
            swap(a,b);
        }
        else;
    }
    else;
    if (c>=d)
    {
        swap(c,d);
        if (b>=c)
        {
            swap(b,c);
            if (a>=b)
            {
                swap(a,b);
            }
            else;
        }
        else;
    }
    else;
    printf("%d,%d,%d,%d",a,b,c,d);
    return 0;
}
void swap(int a,int b)
{
    int i;
    i=a;
    a=b;
    b=i;
}
我知道这个代码不太精练,但至少应该可以输出结果,可是为什么实际上无法运行呢?
搜索更多相关主题的帖子: include Enter 
2016-06-30 13:13
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
1、调用函数不对。
2、if……else……也不是这样用的,不是每个if就一定要配一个else。
最后想说:基础学扎实来,现阶段的你多练习书上的代码,然后进行小范围的调整代码功能,对你有好处。这样乱写一通只是浪费时间和精力。
这个问题就不改了,也没必要改。
请你明白,改这段代码要用的时间比不上我打这些字的时间,
2016-06-30 13:38
胡文涛
Rank: 1
来 自:北京 朝阳
等 级:新手上路
帖 子:29
专家分:0
注 册:2016-6-30
收藏
得分:0 
回复 2楼 linlulu001
第一,非计算机专业学生表示没有基础,要说基础也是自己垒起来的;
第二,这就是书上的题目,书上的代码已经明白了,我只不过想理解得更透一些;
第三,这不是乱写一通,而是在踏踏实实学习后的努力尝试。
2016-06-30 14:00
低调低调
Rank: 3Rank: 3
来 自:四川省成都市
等 级:论坛游侠
威 望:1
帖 子:66
专家分:103
注 册:2016-6-23
收藏
得分:0 
我是自学的,不太会看问题,但是我觉得你的if判断语句出现了问题,其实不是判断四个数字的大小吗?我们不一定需要那么多个if else 的判断的,我们可以选择用for循环加if判断来书写,还有我个人遇见过一次就是像你一样的问题,在比较四个数字的大小时用if后面加上else一直报错的,你可以只是使用if语句而不加else语句就是说这样,我将我自己理解的结构写出来给你看看,希望能对你有所帮助,毕竟我也是菜鸟一个
for(i = 1;i <= 10;i++ )
{
    if(a >= b)
    {
        每个if判断中请自己去书写调用的函数;
    }
    if(b >= c)
    {
        每个if判断中请自己去书写调用的函数;
    }
    if(c >= d)
    {
        每个if判断中请自己去书写调用的函数;
    }
   
}
我的思想就是用第一个和第二个相比较,如果第一个大于第二个数将其交换位置,然后又用前一个在用第二个数和第三个数相比较,如果第二个数大于第三个数交换位置,然后一直这样相比较下去,将最大的一个值比较、交换到最后,在比较其他的三个;这是我自己理解的思维和格式,希望能对你有所帮助!
2016-06-30 14:24
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:1 
swap没有声明吧?你放在main后面能直接调用吗?
还有判断大小的算法你再考虑下

[此贴子已经被作者于2016-6-30 14:43编辑过]

2016-06-30 14:42
laosiji、
Rank: 2
等 级:论坛游民
帖 子:7
专家分:12
注 册:2016-6-30
收藏
得分:1 
首先,swap没有声明。你可以直接把swap函数拿到main上面去,其次,你用的是值传递,将两个数的值传到swap()里面,这样是不可取的,因为两个数仅限于该模块里使用。
2016-06-30 17:40
laosiji、
Rank: 2
等 级:论坛游民
帖 子:7
专家分:12
注 册:2016-6-30
收藏
得分:1 
改了一下虽然可以了,但是你的if,else还是用得有点糟糕,可以多看点别人相关的程序
include<stdio.h>
#include<stdio.h>
void swap(int *a,int *b);
int main()
{
        int a,b,c,d;
        printf("Enter four integers:\n");
        scanf("%d,%d,%d,%d",&a,&b,&c,&d);
        if (a>=b)
    {
                swap(&a,&b);
            
    }
        else;
        if (b>=c)
    {
                swap(&b,&c);
                if (a>=b)
        {
                        swap(&a,&b);
                    
        }
                else;
            
    }
        else;
        if (c>=d)
    {
                swap(&c,&d);
                if (b>=c)
        {
                        swap(&b,&c);
                        if (a>=b)
            {
                                swap(&a,&b);
                           
            }
                        else;
                    
        }
                else;
            
    }
        else;
        printf("%d,%d,%d,%d",a,b,c,d);
        return 0;

}
void swap(int *a,int *b)
{
        int i;
        i=*a;
        *a=*b;
        *b=i;

}
2016-06-30 17:50
laosiji、
Rank: 2
等 级:论坛游民
帖 子:7
专家分:12
注 册:2016-6-30
收藏
得分:0 
回复 2楼 linlulu001
就是用了值传递而已,要传地址进去。新手都是这样的,多练多写就好了,该这段代码真的不用费时间。。。
2016-06-30 17:52
胡文涛
Rank: 1
来 自:北京 朝阳
等 级:新手上路
帖 子:29
专家分:0
注 册:2016-6-30
收藏
得分:0 
回复 6楼 laosiji、
谢谢,你的回答准确地指出了我的问题所在。
2016-06-30 20:26
胡文涛
Rank: 1
来 自:北京 朝阳
等 级:新手上路
帖 子:29
专家分:0
注 册:2016-6-30
收藏
得分:0 
回复 4楼 低调低调
谢谢!
2016-06-30 20:37
快速回复:简单的排序问题 程序运行时出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053542 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved