| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 455 人关注过本帖
标题:关于数组问题求助,想了很久!
只看楼主 加入收藏
雨夜听风
Rank: 2
等 级:论坛游民
帖 子:22
专家分:16
注 册:2012-6-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
关于数组问题求助,想了很久!
题目:输入5个整数,将其中最小者与第一个数对调,最大者与最后一个数对调

我写的代码输入几个随机数字还可以实现,但是输入连续的,如:5 4 3 2 1,程序无法正常执行!

我写的代码:

# include <stdio.h>
# define N 5
int main(void)
{
    int a[N],i,x1,x2,max,min,t;            /* max,min,分别代表最大值,最小值 */
                                        /* x1,x2,分别代表最大值的下标与最小值的下标 */

    for (i = 0;i<N;i++)
    {
        printf("请输入a[%d] = ",i);
        scanf("%d",&a[i]);
    }
    max = min = a[0];        /* 初始化max,min的值都为a[0] */        
    x1 = x2 = 0;
    for (i = 1;i<N;i++)      /* 找出最大值,并把这个最大值的下标保存在x1中 */
    {
        if ( max < a[i] )
        {
            max = a[i];
            x1 = i;
        }
    }   
    for (i = 1;i<N;i++)        /* 找出最小值,并把这个最小值的下标保存在x2中 */
    {
        if ( min > a[i] )
        {
            min = a[i];
            x2 = i;
        }
    }   

    printf("max = %d,min = %d\n",max,min);
    printf("x1 = %d,x2 = %d\n",x1,x2);

    t = a[x2];
    a[x2] = a[0];
    a[0] = t;

    t = a[x1];
    a[x1] = a[N-1];
    a[N-1] = t;
   
    for (i = 0;i<N;i++)
    printf("a[%d]=%d\n",i,a[i]);
    return 0;
}
搜索更多相关主题的帖子: include 最大值 
2012-11-23 19:59
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:5 
能运行啊,但是结果不是对的,你没有考虑最大值,最小值同时在边界上的时候,你这样简单的交换是不行的,要分情况。我给你说了这一点,其他的我想你自己能解决的啊,学长只能帮你到这了~~

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-11-23 20:26
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:5 
回复 楼主 雨夜听风
   二楼说的很对,你的程序做了两次交换,如果最大值与最小值同时在边上的话,就相当于没有做交换了。
2012-11-23 20:37
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:5 
“将其中最小者与第一个数对调,最大者与最后一个数对调”
就是因为这个原因
开始的时候 54321
遍历的时候出现 最小的是 第5 个,最大的是第一个。

最小的和第一个对调,也就是第一个和第五个对调
变成 14325

之后你还有个最大的和最后的对调, 也是第一个和第五个对调
变成 54321


也就是你调换了两次了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-11-23 20:40
gtgtgh
Rank: 2
等 级:论坛游民
帖 子:10
专家分:31
注 册:2012-11-23
收藏
得分:5 
    if (a[0] == max)
    {
    t = a[x2];
    a[x2] = a[0];
    a[0] = t;
    }
 这样就好了。。
2012-11-23 20:41
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
或许你需要的是这样吧
#define N 5
    int main(void)
 {
     int a[N],i,x1,x2,max,min,t;            /* max,min,分别代表最大值,最小值 */
                                         /* x1,x2,分别代表最大值的下标与最小值的下标 */
 
    for (i = 0;i<N;i++)
     {
         printf("请输入a[%d] = ",i);
         scanf("%d",&a[i]);
     }
     max = min = a[0];        /* 初始化max,min的值都为a[0] */        
     x1 = x2 = 0;
// i从0开始
     for (i = 0;i<N;i++)      /* 找出最大值,并把这个最大值的下标保存在x1中 */
     {
         if ( max < a[i] )
         {
             max = a[i];
             x1 = i;
         }
     }     
// 这个提前了
    t = a[x1];
     a[x1] = a[N-1];
     a[N-1] = t;


    for (i = 0;i<N;i++)        /* 找出最小值,并把这个最小值的下标保存在x2中 */
     {
         if ( min > a[i] )
         {
             min = a[i];
             x2 = i;
         }
     }   

    //printf("max = %d,min = %d\n",max,min);
    // printf("x1 = %d,x2 = %d\n",x1,x2);
 
    t = a[x2];
     a[x2] = a[0];
     a[0] = t;
     
    for (i = 0;i<N;i++)
     printf("a[%d]=%d\n",i,a[i]);
     return 0;
 }

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-11-23 20:47
雨夜听风
Rank: 2
等 级:论坛游民
帖 子:22
专家分:16
注 册:2012-6-25
收藏
得分:0 
非常感谢各位,我修正问题去了。。
2012-11-23 22:27
快速回复:关于数组问题求助,想了很久!
数据加载中...
 
   



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

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