标题:2维数组如何存储到1维数组中
只看楼主
caochuan2000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:35
注 册:2009-4-11
结帖率:76.47%
已结贴  问题点数:20 回复次数:4 
2维数组如何存储到1维数组中
#include <stdio.h>
void change(int a[],int n);
void main()
{
    int i,j,(*b)[5],*p;
    int a[5][5]={34,35,57,32,12,46,768,67,98,54,43,87,96,54,778,89,4,345,656,7,767,45,656,767,3};
    b=a;
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
            p=*(b+i)+j;
    change(p,25);
    for(i=0;i<25;i++)
    printf("%d\n",*(p+i));
}
void change(int a[],int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(*(a+j)<*(a+k))k=j;
if(k!=i){temp=*(a+k);*(a+k)=*(a+i);*(a+i)=temp;}
}
}

我本意是想把2维数组排序,可是不会写2维数组排序的程序...就写了个1维数组的排序,想把2维数组存到1维数组里排,可是程序运行不了,能帮我看看哪错了吗?

[ 本帖最后由 caochuan2000 于 2009-8-18 18:02 编辑 ]
搜索更多相关主题的帖子: change 
2009-08-18 17:58
凌彬严
Rank: 1
等 级:新手上路
帖 子:38
专家分:1
注 册:2009-7-13
得分:0 
不用存进一维数组吧,参考以下看对你是否有帮助,用一维数组方式遍历二维数组,计算第N个元素的二维标号方法:
第i个元素的二维位置是:
行标等于:row=(i/列数==0?i/列数-1:i/列数)
列标等于:col=(i%列数==0?列数-1:i%列数-)
2009-08-18 18:18
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
得分:20 
程序代码:
#include <stdio.h>
void change(int *p);

void main()
{
    int i,j,*p;
    int a[5][5]={34,35,57,32,12,46,768,67,98,54,43,87,96,54,778,89,4,345,656,7,767,45,656,767,3};
    p=&a[0][0];
    change(p);
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
            printf("%4d",a[i][j]);
        printf("\n");
    }
}
void change(int *p)
{
    int i,j,max;
    for(i=0;i<24;i++)
    {
        max=i;
        for(j=i+1;j<25;j++)
        {
            if(p[max]<p[j])
                max=j;
        }
        int temp;
        temp=p[i];
        p[i]=p[max];
        p[max]=temp;
    }
}
2009-08-18 18:19
caochuan2000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:35
注 册:2009-4-11
得分:0 
谢谢3楼!!
经过你的启发,我把程序了下就能正常运行了

#include <stdio.h>
void change(int a[],int n);
void main()
{
    int i,j,*p;
    int a[5][5]={34,35,57,32,12,46,768,67,98,54,43,87,96,54,778,89,4,345,656,7,767,45,656,767,3};
    p=&a[0][0];
    change(p,25);
    for(i=0;i<5;i++)
    for(j=0;j<5;j++)
    printf("%d\n",a[i][j]);
}
void change(int a[],int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(*(a+j)<*(a+k))k=j;
if(k!=i){temp=*(a+k);*(a+k)=*(a+i);*(a+i)=temp;}
}
}
2009-08-18 18:42
ggggwffgqeg
Rank: 2
等 级:论坛游民
帖 子:40
专家分:11
注 册:2009-5-10
得分:0 
不懂到底有什么特殊要求最简单的办法

#include <stdio.h>

void main()
{
    int i,j,k=0,b[25];
    int a[5][5]={34,35,57,32,12,46,768,67,98,54,43,87,96,54,778,89,4,345,656,7,767,45,656,767,3};

    for(i=0;i<5;i++)
     {
        for(j=0;j<5;j++)           
          {
            b[k]=a[i][j];
            k++;
          }
     }

}


2009-08-18 18:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-283131-1-1.html




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

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