一维数组转二维数组

假设你一维数组的大小为100 
你需要把它拆分为20*5的一个二维矩阵。 

不妨这样去实现: 
假设一维数组的下标为X,可以把它在逻辑上转换为二维数组的下标: 
m = X / 5 
n = X % 5 

比如你要找第一行第二列的元素,那在一维数组中就是a[1] 
转化为二维坐标就是b[0][1]。 

其实多维数组和一维数组一样,在计算机中都是用的一段连续的内存。只是他们的表现形式不一样。 

另外,C里边没有动态的二维数组,第二维的大小必须指定的。


引用这个二维矩阵的时候,直接使用B[3][4]来引用第三行第四列的元素?
用宏定义(以下宏定义并没有上机调试,只是提供思路)
#define B[(x)][(y)]  A[((x*m)+(y%n)]

解释一下:x*m,加入你需要B[3][4],那么就是对应一维数组第3*8+4%9=28个元素。

代码一:
#include<stdio.h> 
<span style="white-space:pre">	</span>int MAX,MIN; 
<span style="white-space:pre">	</span>int maxi,maxj,mini,minj;
 void main() 
{  <span style="white-space:pre">	</span>void result(int x[][5],int m,int n); 
 <span style="white-space:pre">	</span>int a[5][5],max,min,i,j; 
<span style="white-space:pre">	</span> for(i=0;i<5;i++)   
<span style="white-space:pre">		</span>for(j=0;j<5;j++)   
 <span style="white-space:pre">		</span>scanf("%d",&a[i][j]); 
 <span style="white-space:pre">	</span>MAX=MIN=a[0][0]; 
 <span style="white-space:pre">	</span>maxi=maxj=mini=minj=0;    
<span style="white-space:pre">	</span> result(a,5,5); 
 <span style="white-space:pre">	</span>printf("MAX=%d,maxi=%d,maxj=%d\n",MAX,maxi,maxj); 
 <span style="white-space:pre">	</span>printf("MIN=%d,mini=%d,minj=%d\n",MIN,mini,minj);
</pre><pre name="code" class="cpp">void result(int x[][5],int m,int n) 
{  <span style="white-space:pre">	</span>int i,j; 
<span style="white-space:pre">	</span> for(i=0;i<m;i++)  
 <span style="white-space:pre">		</span>for(j=0;j<n;j++)  
 <span style="white-space:pre">	</span>{    if(x[i][j]>MAX)    
<span style="white-space:pre">		</span>{     MAX=x[i][j];    
<span style="white-space:pre">	</span> <span style="white-space:pre">	</span>      maxi=i;     
 <span style="white-space:pre">		</span>      maxj=j;    
<span style="white-space:pre">		</span>}   
<span style="white-space:pre">	</span>    if(x[i][j]<MIN)   
 <span style="white-space:pre">		</span>{     MIN=x[i][j];   
 <span style="white-space:pre">		</span>       mini=i;     
                       minj=j;   
<span style="white-space:pre">		</span> }   
<span style="white-space:pre">	</span>} 
}  

但代码一有个缺点,那就是如果有多个最值,只能输出最后一个。下面的代码是经过改进的。 
代码二:
 #include<stdio.h>
 <span style="white-space:pre">	</span>int MAX,MIN; 
<span style="white-space:pre">	</span>int maxi,maxj,mini,minj; 
void main() 
{  <span style="white-space:pre">	</span>void result(int x[][5],int m,int n); 
 <span style="white-space:pre">	</span>int a[5][5],max,min,i,j;  
<span style="white-space:pre">	</span>for(i=0;i<5;i++)  <span style="white-space:pre">	</span>
<span style="white-space:pre">		</span>for(j=0;j<5;j++)    
<span style="white-space:pre">		</span>scanf("%d",&a[i][j]);  
<span style="white-space:pre">		</span>MAX=MIN=a[0][0];  
<span style="white-space:pre">		</span>maxi=maxj=mini=minj=0;    
<span style="white-space:pre">		</span>result(a,5,5); 
}
 void result(int x[][5],int m,int n) 
{  <span style="white-space:pre">	</span>int i,j;  
<span style="white-space:pre">	</span>for(i=0;i<m;i++)   
<span style="white-space:pre">		</span>for(j=0;j<n;j++)   
<span style="white-space:pre">		</span>{    if(x[i][j]>MAX)    
<span style="white-space:pre">		</span>        MAX=x[i][j];   
                     if(x[i][j]<MIN)     
<span style="white-space:pre">			</span>MIN=x[i][j];  
<span style="white-space:pre">		</span> }  
<span style="white-space:pre">	</span>for(i=0;i<m;i++)   
<span style="white-space:pre">		</span>for(j=0;j<n;j++)   
<span style="white-space:pre">	</span>        {    if(x[i][j]==MAX)    
<span style="white-space:pre">			</span>{     MAX=x[i][j];     
<span style="white-space:pre">				</span>maxi=i;     
<span style="white-space:pre">				</span>maxj=j;     
<span style="white-space:pre">				</span>printf("MAX=%d,maxi=%d,maxj=%d\n",MAX,maxi,maxj);  
<span style="white-space:pre">			</span>  }    
<span style="white-space:pre">		</span>     if(x[i][j]==MIN)    
<span style="white-space:pre">		</span>{     MIN=x[i][j];    
<span style="white-space:pre">		</span>      mini=i;    
<span style="white-space:pre">		</span>      minj=j;        
<span style="white-space:pre">		</span>      printf("MIN=%d,mini=%d,minj=%d\n",MIN,mini,minj);   
<span style="white-space:pre">		</span> }   
<span style="white-space:pre">	</span>} 
}


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页