是小狐狸啊 2016-05-06 14:46 采纳率: 63.6%
浏览 4525
已采纳

C++ 数组内元素互换的简单问题

//输入10个整数,将其中最小的数与第一个数交换,把最大的数与最后一个数交换。用指针实现
int main()
{

    int a[10]; 
    int *max,*min,*p,temp;
    cout<<"输入10个数"; 
    for (int i=0;i<10;i++)
        cin>>a[i];
        max=min=a;
    for(p=a+1;p<a+10;p++) 
        if(*p>*max) max=p;  
    else if(*p<*min) min=p; 
            temp=a[0];a[0]=*min;*min=temp;
        if(*max!=a[0]) 
        {       
            temp=a[9];a[9]=*max;*max=temp;
        }   
        else 
        { 
            temp=a[9];a[9]=*min;*min=temp; 
        }   
                cout<<"交换后的数组:";   
        for(p=a;p<a+10;p++) 
        cout<<*p<<" "; 
        cout<<endl;

}

这是段可以运行的能得到预期结果的程序,可是程序实现的思路让我很困惑,这里面的for···if···else if···if···else具体是怎样执行的?大神们可以详细解释一下这段程序吗?又或是,这段程序本身并不好读,那可以修改一下或提供一个更易执行的解决问题的思路吗?

  • 写回答

3条回答 默认 最新

  • tcg_gd 2016-05-06 15:18
    关注

    int main()
    {
    int a[10];
    int *max,*min,*p,temp;
    cout<<"输入10个数";
    for (int i=0;i cin>>a[i];//输入了10个数
    max=min=a;
    for(p=a+1;p if(*p>*max) max=p; //遍历,使max指向最大的数
    else if(*p<*min) min=p; //遍历,使min指向最小的数

            temp=a[0];a[0]=*min;*min=temp;//把a[0]和min的数交换
        if(*max!=a[0]) //这个if判断根本没用
        {       
            temp=a[9];a[9]=*max;*max=temp; //把a[9]和max交换。
        }   
        else  //这个根本没有用,因为只有一种情况,即当10个数都相等的时候才会if为假,走进else,并且根本不要这个if判断
        { 
            temp=a[9];a[9]=*min;*min=temp;//此时max=min,当然可以这么换了啊
        }   
                cout<<"交换后的数组:";   
        for(p=a;p<a+10;p++) 
        cout<<*p<<" "; 
        cout<<endl;
    

    }

    ///简化之:
    int main()
    {
    int a[10];
    int *max,*min,*p,temp;
    cout<<"输入10个数";
    for (int i=0;i cin>>a[i];//输入了10个数
    max=min=a;
    for(p=a+1;p if(*p>*max) max=p; //遍历,使max指向最大的数
    else if(*p<*min) min=p; //遍历,使min指向最小的数

            temp=a[0];a[0]=*min;*min=temp;//把a[0]和min的数交换
    
            temp=a[9];a[9]=*max;*max=temp; //把a[9]和max交换。 
                cout<<"交换后的数组:";   
        for(p=a;p<a+10;p++) 
        cout<<*p<<" "; 
        cout<<endl;
    

    }

    这样就行。

    ----建议研究下排序算法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?