求大神指点c语言错误。题目和我写的编程如下: 写一个函数使给定的一个二维数组(3*3)转置即行列互换。

#include<stdio.h>
void main()
{
int average(int i,int j);
int a[3][3],b[3][3];
{
printf("average a:\n");
scanf("%d",&a[3][3]);
b=[j][i]=a[i][j];
}
printf("%d",b[3][3]);
}
int average(int i,int j)
int a[3][3],b[3][3];
{
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");
}
}
我是新手,可以的话,请写详细点。非常感谢!

对于方阵a[n][ n],转置的实质是交换a[i][j]和a[j][i],主对角线不变,所以二重循环即可完成。

#include <stdio.h>

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;
}
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-24
#include<stdio.h>
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");
}
}
}

第2个回答  2014-11-24
问题很多,首先是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");
}

}
你程序中很多错误,你试着改正过来再看吧,有什么不懂可以指点下,我帮你写出来对你作用不大。本回答被提问者采纳