| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
免费IT实战开发视频教程合集分享千里之行 始于足下
共有 730 人关注过本帖
标题:请大神看看,输入一个数组最大元素放第一位,最小的放最后一位,输出,为什 ...
只看楼主 加入收藏
白金之星
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2018-3-12
结帖率:92.86%
  已结贴   问题点数:20  回复次数:10   
请大神看看,输入一个数组最大元素放第一位,最小的放最后一位,输出,为什么我的数没交换 而是取代了
#include"stdio.h"
main()
{
    int i,j,k,l,t,p;
 int a[9],max,min;
    for(i=0;i<=9;i++)
        scanf("%d",&a[i]);
    printf("first\n");
    for(int m=0;m<=9;m++)
    {   
        printf("%d  ",a[m]);
    }

    min=max=a[0];
        for(k=0;k<=9;k++)
    {

        if(a[k]<min)
            min=a[k];

    }
         a[k]=a[0];
         a[0]=min;
    for(j=0;j<=9;j++)
    {
        if(a[j]>max)
            max=a[j];
    }
        a[j]=a[9];
        a[9]=max;
        printf("\nlater\n");
    for( l=0;l<=9;l++)
    {
   
        printf("%d  ",a[l]);
    }
}
附件: 您没有浏览附件的权限,请 登录注册
2018-03-12 09:21
loboce
Rank: 2
等 级:论坛游民
威 望:1
帖 子:24
专家分:96
注 册:2014-6-7
  得分:5 
把每个for循环里的<=9;改成<9,原因要自己多思考。
2018-03-12 09:53
Baimax
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-7-21
  得分:0 
数值交换时的逻辑(循环)是错的
2018-03-12 10:09
白金之星
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2018-3-12
  得分:0 
回复 3楼 Baimax
为什么  我感觉是对的啊


2018-03-12 10:26
rjsp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:267
帖 子:5919
专家分:33717
注 册:2011-1-18
  得分:5 
写的代码像道士画符似的
程序代码:
#include <stdio.h>

void swap_by_ptr( int* a, int* b )
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

int main( void )
{
    int buf[9];
    // 输入
    const size_t n = sizeof(buf)/sizeof(*buf);
    for( size_t i=0; i!=n; ++i )
        scanf( "%d", &buf[i] );

    // 原样输出
    printf( "first: " );
    for( size_t i=0; i!=n; ++i )
        printf( " %d", buf[i] );
    putchar( '\n' );

    // 求最大值最小值索引
    size_t min_idx=0, max_idx=0;
    for( size_t i=0; i!=n; ++i )
    {
        if( buf[min_idx] > buf[i] )
            min_idx = i;
        if( buf[max_idx] < buf[i] )
            max_idx = i;
    }

    // 最大元素放第一位
    swap_by_ptr( &buf[0], &buf[max_idx] );
    if( min_idx == 0 ) // 如果第一位原本是最小值,那么这样交换之后,最小值跑到max_idx的位置
        min_idx = max_idx;
    // 最小元素放最后一位
    swap_by_ptr( &buf[n-1], &buf[min_idx] );

    // 输出
    printf( "later: " );
    for( size_t i=0; i!=n; ++i )
        printf( " %d", buf[i] );
    putchar( '\n' );
}

输入 0 0 0 0 0 0 0 0 0,输出 0 0 0 0 0 0 0 0 0
输入 9 8 7 6 5 4 3 2 1,输出 9 8 7 6 5 4 3 2 1
输入 1 2 3 4 5 6 7 8 9,输出 9 2 3 4 5 6 7 8 1
输入 4 3 2 1 9 8 7 6 5,输出 9 3 2 5 4 8 7 6 1
2018-03-12 10:50
白金之星
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2018-3-12
  得分:0 
回复 5楼 rjsp
大佬    我为什么错了呢?
2018-03-12 11:24
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
  得分:10 
回复 6楼 白金之星
很好奇你这也能正常运行吗?明显越界了。
 min=max=a[0];
    for(k=0;k<=9;k++)
    {

        if(a[k]<min)
            min=a[k];

    }
         a[k]=a[0];             //a[10]=a[0]   你定义的数组为a[9],输入了10个数,还弄了个数组元素a[10]
         a[0]=min;              
    for(j=0;j<=9;j++)
    {
        if(a[j]>max)
            max=a[j];
    }
        a[j]=a[9];              //a[10]=a[9]
        a[9]=max;
2018-03-12 11:50
白金之星
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2018-3-12
  得分:0 
回复 7楼 李晨经纪人
谢谢大佬   但是我的值没有交换而是取代了  为什么?
附件: 您没有浏览附件的权限,请 登录注册
2018-03-12 12:30
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
  得分:0 
你仔细看我上面的注释啊
以你最开始的程序为例,你的for循环退出时k=10,j=10.
不是你所找到的那个最大值或最小值所在的位置。
以你的输入数据来说你先把6赋值给了a[10],然后把0赋值给了a[0]
再把1赋值给了a[10],再把9赋值给了a[9]
等于是把1和6 都移到一个你不输出的元素上去了,所以没了
2018-03-12 14:19
白金之星
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2018-3-12
  得分:0 
回复 9楼 李晨经纪人
哦 哦哦  原来是这样   谢谢谢谢!
2018-03-12 15:21







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

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