对于方阵a[n][ n],转置的实质是交换a[i][j]和a[j][i],主对角线不变,所以二重循环即可完成。
#include
const int N = 3;
void main() {
void transpose(int a[][N],int n);
int a[N][N] = {1,2,3,4,5,6,7,8,9};
int i,j;
printf("转置前:\n");
for(i = 0; i < N; ++i) {
for(j = 0; j < N; ++j)
printf("%3d",a[i][j]);
printf("\n");
}
transpose(a,N);
printf("转置后:\n");
for(i = 0; i < N; ++i) {
for(j = 0; j < N; ++j)
printf("%3d",a[i][j]);
printf("\n");
}
}
void transpose(int a[][N],int n) {
int i,j,t;
for(i = 0;i < n - 1; ++i) {
for (j = i; j < n; ++j) {
t = a[i][j];
a[i][j] = a[j][i];
a[j][i] = t;
}
}
}
#include
void func1(int a[3][3])
{
for(int i = 0; i < 3;i++)
{
for(int j = i+1;j<3;j++)
{
int temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
}
}
int main(void)
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
func1(a);
for(int i=0 ; i < 9; i++)
{
printf("%d",a[i/3][i%3]);
if((i % 3) == 2)
{
printf("\n");
}
}
}
问题很多,首先是scanf("%d",&a[3][3]);//这里只是输入一个元素,应用循环输入。
int i, j;
for(i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%d",&a[i][j]);
另一个更大的错误是:什么是函数?这个你好像没搞懂。
int average(int i,int j) // 这个函数从哪开始?又从哪结束?
函数体都是在一个大括号里面的,例如:
int average(int i,int j)
{
for (i=0;i<=2;i++)
{
for (j=0;j<=2;j++)
b[j][i]=a[i][j];
}
printf("average b:\n");
for (i=0;i<=2;i++)
{
for (j=0;j<=2;j++)
printf("%d",b[i][j]);
printf("\n");
}
}
你程序中很多错误,你试着改正过来再看吧,有什么不懂可以指点下,我帮你写出来对你作用不大。