1.二维数组的遍历输入,遍历输出
#include <stdio.h>
int main(int argc, const char *argv[])
{
int arr[2][3];
int (*parr)[3]=arr;
printf("请输入:\n");
for(int i=0; i<2; i++)//遍历输入
{
for(int j=0; j<3; j++)
{
scanf("%d",*(arr+i)+j);
}
}
for(int i=0; i<2; i++)//遍历输出
{
for(int j=0; j<3; j++)
{
printf("%-2d ",*(*(arr+i)+j));
}
printf("\n");
}
return 0;
}
运行结果
2.杨辉三角:用指针方式做
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
#include <stdio.h>
int main(int argc, const char *argv[])
{
int arr[10][10]={0};
int (*parr)[10]=arr;
for(int i=0; i<10; i++)//生成杨辉三角
{
*(*(parr+i)+0)=1;
for(int j=1; j<=i; j++)
{
(*(parr+i))[j]=*(*(parr+i-1)+(j-1))+*(*(parr+i-1)+j);
//arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
}
for(int i=0; i<10; i++)//输出杨辉三角
{
for(int j=0; j<=i; j++)
{
printf("%-2d ",*(*(parr+i)+j));
}
printf("\n");
}
return 0;
}
运行结果
可以优化一下输出
for(int i=0; i<10; i++)//优化输出
{
for(int k=9; k>i;k--)
{
printf(" ");//三个空格(设一个数字占三个位置)
}
for(int j=0; j<=i; j++)//数字,以及数字后面的空格
{
printf("%-6d",*(*(parr+i)+j));//数字占三个位置,空格也占三个
} //然后左对齐所以是-6
printf("\n");
}
return 0;
}
运行结果