| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4460 人关注过本帖
标题:写十个数,将第一个与最小的交换,最大的与最后一个交换。
只看楼主 加入收藏
星野
Rank: 2
来 自:河北
等 级:论坛游民
帖 子:73
专家分:26
注 册:2016-4-13
结帖率:82.35%
收藏
已结贴  问题点数:20 回复次数:6 
写十个数,将第一个与最小的交换,最大的与最后一个交换。
程序代码:
#include<stdio.h>
int main()
{
    void inv(int b[],int n);
    int a[10];
    int i;
    printf("请输入十个数\n");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    inv(a,10);
    printf("转换之后是\n");
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
void inv(int b[],int n)
{
    int i,max,min,t1,t2;
     max=min=b[0];
    for(i=0;i<n;i++)
    {
        
        if(min>b[i])
        {
            
            min=b[i];
        }
        if(max<b[i])
        {
            
            max=b[i];
        }
    }

    t1=min;
    min=b[0];
    b[0]=t1;
    t2=max;
    max=b[n-1];
    b[n-1]=t2;

}


原来的数没有了  该怎么??
搜索更多相关主题的帖子: 最大的 
2016-06-17 06:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:7 
程序代码:
#include <stdio.h>

void inv( int a[], size_t n );

int main( void )
{
    int a[10];
    printf("请输入十个数: ");
    for( size_t i=0; i!=10; ++i )
        scanf( "%d", &a[i] );

    inv( a, 10 );

    printf("转换之后数列: ");
    for( size_t i=0; i!=10; ++i )
        printf( "%d ", a[i] );
    printf("\n");

    return 0;
}

void swap( int a[], size_t i, size_t j )
{
    int tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
}

void inv( int a[], size_t n )
{
    size_t min_pos=0, max_pos=0;
    for( size_t i=0; i!=10; ++i )
    {
        if( a[i] < a[min_pos] )
            min_pos = i;
        if( a[i] > a[max_pos] )
            max_pos = i;
    }

    // 将第一个与最小的交换
    swap( a, 0, min_pos );
    if( max_pos == 0 )
        max_pos = min_pos;

    // 最大的与最后一个交换
    swap( a, 9, max_pos );
}

请输入十个数: 9 8 7 6 5 0 1 2 3 4
转换之后数列: 0 8 7 6 5 4 1 2 3 9

请输入十个数: 4 3 2 1 0 9 8 7 6 5
转换之后数列: 0 3 2 1 4 5 8 7 6 9

2016-06-17 08:36
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:7 
程序代码:
#include<stdio.h>
int _min(int a[])
{
    int i=0,min=0,n=0;
    min=a[0];
    for(i=1;i<10;i++)
    {
        if(min>a[i])
            n=i;    
    }
    return n;
}
int _max(int a[])
{
    int i=0,max=0,m=0;
    max=a[0];
    for(i=1;i<10;i++)
    {
        if(max<a[i])
            m=i;    
    }
    return m;
}
int main()
{
    int a[10];
    int i,i_min,i_max,t_min,t_max;
    printf("请输入十个数\n");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    i_min=_min(a);
    t_min=a[0];
    a[0]=a[i_min];
    a[i_min]=t_min;
    i_max=_max(a);
    t_max=a[9];
    a[9]=a[i_max];
    a[i_max]=t_max;
    printf("转换之后是\n");
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
2016-06-17 09:02
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:7 
   if(min>b[i])
        {
            
            min=b[i];
            t1=i;
        }
        if(max<b[i])
        {
            max=b[i];
            t2=i;
        }
//红色这段代码应该要加上记录最大和最小的位置
t1=min;
    min=b[0];
    b[0]=t1;
    t2=max;
    max=b[n-1];
    b[n-1]=t2;
//原来的数字没掉是因为你不是掉换值,而是直接用最大最小两个值替换原来的值。有这样的提示相信你自己会改好蓝色这段代码。
2016-06-17 09:29
星野
Rank: 2
来 自:河北
等 级:论坛游民
帖 子:73
专家分:26
注 册:2016-4-13
收藏
得分:0 
回复 4楼 linlulu001
程序代码:
#include<stdio.h>
int main()
{
    void inv(int b[],int n);
    int a[10];
    int i;
    printf("请输入十个数\n");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    inv(a,10);
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
void inv(int b[],int n)
{
    int i,max,min,t1,t2;
    max=min=b[0];
    for(i=0;i<n;i++)
    {
        if(min>b[i])
        {
            min=b[i];
            t1=i;
        }
        if(max<b[i])
        {
            max=b[i];
            t2=i;
        }
    }
    t1=min;
    min=b[0];
    b[0]=t1;
    t2=max;
    max=b[n-1];
    b[n-1]=t2;

}


怎么还是不对啊
2016-06-17 22:14
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 5楼 星野
红色的是我改好的,蓝色部分我没有改让你自己改。你再试试,如果还不行我就写好代码给你。
  t1记的是数组最小值的下标,
    min记的是数组的最小值,
    t2记的是数组最大值的下标,
    max记的是数组的最大值,
你没有考虑最小值在数组最后一位,最大值在数组第一位的时候你的算法还能正确输出吗,所以你还要对t1和t2的下标进行判断。
建议分作两次循环,先找出最小的放到第一位,然后再找出最大的放到最后一位。一个循环要考虑的影响结果的因素有几个,难度更大,效率也没更高。

[此贴子已经被作者于2016-6-18 13:54编辑过]

2016-06-18 13:02
星野
Rank: 2
来 自:河北
等 级:论坛游民
帖 子:73
专家分:26
注 册:2016-4-13
收藏
得分:0 
以下是引用linlulu001在2016-6-18 13:02:52的发言:

红色的是我改好的,蓝色部分我没有改让你自己改。你再试试,如果还不行我就写好代码给你。
  t1记的是数组最小值的下标,
    min记的是数组的最小值,
    t2记的是数组最大值的下标,
    max记的是数组的最大值,
你没有考虑最小值在数组最后一位,最大值在数组第一位的时候你的算法还能正确输出吗,所以你还要对t1和t2的下标进行判断。
建议分作两次循环,先找出最小的放到第一位,然后再找出最大的放到最后一位。一个循环要考虑的影响结果的因素有几个,难度更大,效率也没更高。


程序代码:
#include<stdio.h>
int main()
{
    void inv(int b[],int n);
    int a[10];
    int i;
    printf("请输入十个数\n");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    inv(a,10);
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
void inv(int b[],int n)
{
    int i,max,min,t1,t2,k,m;
    max=min=b[0];
    for(i=0;i<n;i++)
    {
        if(min>b[i])
        {
            min=b[i];
            k=i;
        }
        if(max<b[i])
        {
            max=b[i];
            m=i;
        }
    }
    t1=b[k];
    b[k]=b[0];
    b[0]=t1;
    t2=b[m];
    b[m]=b[n-1];
    b[n-1]=t2;

}

谢谢指导  我改好了。
2016-06-18 18:16
快速回复:写十个数,将第一个与最小的交换,最大的与最后一个交换。
数据加载中...
 
   



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

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