注册 登录
编程论坛 C++教室

数组对换,print函数传参有问题,请教

生命太短暂 发布于 2020-04-30 23:09, 2546 次点击
只有本站会员才能查看附件,请 登录

#include <iostream>
using namespace std;
int *cinp(int *a)
{
    for(size_t i=0;i!=4;++i)
    {cin>>a[i];}
    return &*a;//输入
}
int *ing(int*a)
{int b[10];int max=a[0];int min=a[0];
int x=0,y=0;//替换过程
for(size_t i=0;i!=4;++i)
    { b[i]=a[i];
      if(max<b[i])
        {max=b[i];
            x=i;}
      
   }
   for(size_t j=0;j!=4;++j)
    { b[j]=a[j];
      
       if(min>b[j])
        {min=b[j];
            y=j;}      
   }
   
int tem=0;int g=0;
 tem=a[3];
a[3]=a[x];
a[x]=tem;
g=a[0];
a[0]=a[y];
a[y]=g;//替换过程对的在这里打印是可以进行最小和第一位替换,最大和最后一位替换,但是单独做成输出函数就会出错

}
int print(int *a)//单独做成的输出函数
{    for(size_t i=0;i!=4;++i)
     {cout<< a[i];}//打印
}

int main() {
int a[4];
print (ing(cinp(a)));
    return 0;
}
1 4 6 2会输出1426
6 2 3 5会输出5360
我估计print参数是错的,请求帮助
7 回复
#2
rjsp2020-04-30 23:37
我这里编译失败,因为 int *ing(int*a) 没写返回值。

另外,算法也不对。你有没有考虑过,将最大数与最后一个数交换时,最小数的位置可能变了?
#3
rjsp2020-05-01 00:00
程序代码:
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;

template<typename T,size_t N>
void input( T (&arr)[N] )
{
    copy_n( istream_iterator<T>(cin), N, arr );
}

template<typename T,size_t N>
void foo( T (&arr)[N] )
{
    iter_swap( arr+0,   min_element(begin(arr),end(arr)) );
    iter_swap( arr+N-1, max_element(begin(arr),end(arr)) );
}

template<typename T,size_t N>
void output( const T (&arr)[N] )
{
    copy( begin(arr), end(arr), ostream_iterator<T>(cout," ") );
}

int main( void )
{
    int arr[4];
    input( arr );
    foo( arr );
    output( arr );
}
#4
生命太短暂2020-05-01 00:00
谢谢神,我改改
我是记录最大值与最小值的下标,然后根据下标进行互换,题目10个数太多了我换成四个数,在替换过程中打印可以得到想要的结果,就没考虑数值是否可变,第一想的是打印函数传参是否是错的,根据您的建议再改改,感谢
#5
生命太短暂2020-05-01 00:02
不知听谁说的今天是教师节,是的话,祝您教师节快乐,不是的话,也祝您教师节快乐
#6
生命太短暂2020-05-01 08:42
根据您的建议改了一下,是我太着急了,总想着一起完工,反而没考最大值和最小值下标会变,您说的很对,然后换个地方就可以了,感谢,您的模板代码会拿来研究的
#include <iostream>
using namespace std;
int *cinp(int *a)
{
    for(size_t i=0; i!=4; ++i)
    {
        cin>>a[i];
    }
    return a;
}
int *ing(int*a)
{   int b[10];
    int max=a[0];
    int min=a[0];
    int x=0,y=0;
    for(size_t i=0; i!=4; ++i)
    {   b[i]=a[i];
        if(max<b[i])
        {   max=b[i];
            x=i;
        }

    }
    int tem=0;
    int g=0;
    tem=a[3];
    a[3]=a[x];
    a[x]=tem;

    for(size_t j=0; j!=4; ++j)
    {   b[j]=a[j];

        if(min>b[j])
        {   min=b[j];
            y=j;
        }
    }
    g=a[0];
    a[0]=a[y];
    a[y]=g;
    return a;
}
int print(int *a)
{   for(size_t i=0; i!=4; ++i)
    {
        cout<< a[i];
    }
}

int main() {
    int a[4];
    print(ing(cinp(a)));
    return 0;
}
#7
韩普通2020-05-02 17:21
你好,我想做个软件  但是我不会编程  有人可以合作一下吗
#8
韩普通2020-05-02 17:23
联系方式1007245753    我不了解这方面的事情如果有人有兴趣  还请不吝赐教
1