提示:方阵的转置实际上是对称于主对角线的元素进行两两互换,即第i行j列元素和第j行i列元素的两两互换,及a[i][j]和a[j][i](下标法)的相互交换。现请用指向元素的指针方法实现方阵的输入,用指向一维数组的指针方法实现转置和输出。
#include<stdio.h>
void mat(int(*p)[3],int(*q)[3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
*(*(q+j)+i)=*(*(p+i)+j);
}
int main(int argc,char**argv)
{
int a[3][3]={1,2,3,4,5,6,7,8,9},b[3][3]={0};
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4d",a<i>[j]);
printf("\n");
}
mat(a,b);
printf("answer:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4d",b<i>[j]);
printf("\n");
}
return 0;
}
include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include<文件名>
2、#include"文件名"
#include "stdio.h"
int main()
{
int a[3][3],b[3][3];
int *p=NULL;
int (*q)[3]=NULL;
int i,j;
p=&a[0][0];
printf("请输入3X3方阵的元素:\n");
for(;p<&a[0][0]+9;p++)
scanf("%d",p);
p=&a[0][0];
q=a;
printf("转置后输出:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
b[i][j]=*(*(q+j)+i);
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
*(*(q+i)+j)=b[i][j];
printf("%d ",*(*(q+i)+j));
}
printf("\n");
}
}