标题:麻烦帮忙看一下,为什么输出的不对啊
只看楼主
与君相见
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2017-12-8
结帖率:100%
已结贴  问题点数:20 回复次数:8 
麻烦帮忙看一下,为什么输出的不对啊
#include<stdio.h>
void input(int n1,int *t1);
void swapmin(int n2,int *t2);
void swapmax(int n3,int *t3);
void output(int n4,int *t4);
int main(void)
{
    int i,a[10];
    input(10,a);
    swapmin(10,a);
    swapmax(10,a);
    output(10,a);
}
void input(int n1,int *t1)
{
    int i;
    printf("Input %d integers:\n",n1);
    for(i=0;i<n1;i++)
        scanf("%d",t1+i);
}
void swapmin(int n2,int *t2)
{
    int i,min,m,k;
    min=*(t2+0);
    for(i=0;i<n2;i++)
        if(min>*(t2+i))
        {
            m=min;
            min=*(t2+i);
            k=i;
        }
        *(t2+0)=min;
        *(t2+k)=m;
}
void swapmax(int n3,int *t3)
{
    int i,max,m,k;
    max=*(t3+0);
    for(i=0;i<n3;i++)
        if(max<*(t3+i))
        {
            m=max;
            max=*(t3+i);
            k=i;
        }
        *(t3+n3-1)=max;
        *(t3+k)=m;
}
void output(int n4,int *t4)
{
    int i;
    for(i=0;i<n4;i++)
    printf("%10d",*(t4+i));
    printf("\n");
}
搜索更多相关主题的帖子: void int min max i++ 
2018-03-21 13:33
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:0 
真实目的是啥?我看你的代码是把第0位保存最小值,以前最小值的位保存次小值;最高位保存最大值,原最大值的位保存次大值。并且代码不完善,即使这样的保存方法也有bug。比如最小值在第0位,最大值在最高位,就会出问题。
2018-03-21 15:19
与君相见
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2017-12-8
得分:0 
回复 2楼 grmmylbs
数组里的最小值换到a[0],最大值换到a[9].并且用函数输入数组,函数换值,函数输出。就是要用四个函数完成。


[此贴子已经被作者于2018-3-21 15:38编辑过]

2018-03-21 15:36
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:0 
a[0]和a[9]原来的值呢?
2018-03-21 16:50
话宝宝
Rank: 2
等 级:论坛游民
威 望:1
帖 子:8
专家分:20
注 册:2018-3-20
得分:5 
#include<stdio.h>

void input(int n1,int *t1);
void swapmin(int n2,int *t2);
void swapmax(int n3,int *t3);
void output(int n4,int *t4);

int main(void)
{
    int i=0;
    int a[10];
    input(10,a);
    swapmin(10,a);
   
    swapmax(10,a);
   
    output(10,a);
}
void input(int n1,int *t1)
{
    int i;
    printf("Input %d integers:\n",n1);
    for(i=0;i<n1;i++)
        scanf("%d",t1+i);
}
void swapmin(int n2,int *t2)
{
    int i,min,m,k=0;
    min=*(t2+0);
    for(i=0;i<n2;i++)
        if(min>*(t2+i))
        {
            m=min;
            min=*(t2+i);
         *(t2+i)=m;
        }
        *(t2+0)=min;
        
}
void swapmax(int n3,int *t3)
{
    int i,max,m,k=0;
    max=*(t3+n3-1);
    for(i=0;i<n3;i++)
        if(max<*(t3+i))
        {
            m=max;
            max=*(t3+i);
           *(t3+i)=m;
        }
        *(t3+n3-1)=max;
        
}
void output(int n4,int *t4)
{
    int i;
    for(i=0;i<n4;i++)
    {
        printf("%10d",*(t4+i));
        
    }
    printf("\n");
}

[此贴子已经被作者于2018-3-21 17:13编辑过]

2018-03-21 17:07
与君相见
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2017-12-8
得分:0 
回复 4楼 grmmylbs
a[0]原来的值换到原来最小值的地方,a[9]原来的值换到原来最大值的地方啊。比如输入 1 4 2 6 0 9 7 8 3 5 换完后是       0 4 2 6 1 5 7 8 3 9.

[此贴子已经被作者于2018-3-21 20:51编辑过]

2018-03-21 20:44
与君相见
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2017-12-8
得分:0 
回复 5楼 话宝宝
谢谢了,但我运行了还不是我想要的结果啊。
2018-03-21 21:16
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:0 
if(min>*(t2+i))
        {
            m=min;
            min=*(t2+i);
            k=i;
        }
        *(t2+0)=min;
        *(t2+k)=m;  //这里应该是把第一个数换到原来最小的位置,但你的m一直在变。这里的m应该就是数组的第一个数

if(max<*(t3+i))
        {
            m=max;
            max=*(t3+i);
            k=i;
        }
        *(t3+n3-1)=max;
        *(t3+k)=m;   //和前面一样,应该吧最后一个值换到这里来。不过应该先将最后一个值保存,因为前面已经变了,或者把这条语句和上条语句对换。
2018-03-21 22:29
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:15 
先把思路理清,找最小和第一个数对换,找最大和最后一个数对换
2018-03-21 22:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-485467-1-1.html




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

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