练习:
1.计算二维数组的最大值,返回最大值
#include <stdio.h>
int Max(int *p[4],int line,int row)
{
int i,j,max;
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
{
if(i==0&&j==0)
max=*(*(p+i)+j);
if(max<*(*(p+i)+j))
max=*(8(p+i)+j);
}
}
return max;
}
int main(int argc,const char *argv[])
{
int num[][4]={12,3,23,45,32,18,19,47};
int line=sizeof(num)/sizeof(num[0]);
int row=sizeof(num[0])/sizeof(num[0][0]);
int max=Max(num,line,row);
printf("最大值是%d\n",max);
}
2.用指针的方式实现:杨辉三角
#include <stdio.h>
void YH(int n,int *p[n])
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(j==0||j==i)
*(*(p+i)+j)=1;
else
*(*(p+i)+j)=*(*(p+i-1)+j)+*(*(p+i-1)+j-1);
printf("%4d",*(*(p+i)+j));
}
printf("\n");
}
}
int main(int argc,const char *garv[])
{
int n;
printf("输入杨辉三角的尺寸:");
int arr[n][n];
YH(n,arr);
}
3.计算每一行的和
#include <stdio.h>
void linesum(int *p[3],int line,int row)
{
int i,j;
for(i=0;i<line;i++)
{
int sum=0;
for(j=0;j<row;j++)
{
sum+=*(*(p+i)+j);
}
printf("第%d行的和为%d\n",i+1,sum);
}
}
int main(int argc,const char *argv[])
{
int num[][3]={1,2,3,4,3,11,12,7,9};
int line=sizeof(num)/sizeof(num[0]);
int row=sizeof(num[0])/sizeof(num[0][0]);
linesum(num,line,row);
}
4.二维数组转置:行变列,列变行
#include <stdio.h>
void Transp(int *q[3],int *p[4],int line,int row)
{
int i,j;
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
{
*(*(q+j)+i)=*(*(p+i)+j);
}
}
for(i=0;i<row;i++)
{
for(j=0;j<line;j++)
{
printf("%d",*(*(q+i)+j));
}
}
}
int main(int argc,const char *argv[])
{
int num[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int line=sizeof(num)/sizeof(num[0];
int row=sizeof(num[0])/sizeof(num[0][0]);
int num1[row][line];
Transp(num,line,row);
}