写一个函数,使给定的一个二维数组(3×3)转置,即行列互换.下面的编程

#define N 3
int array[N][N];
void convert(int array[3][3]) /*函数类型可定义为void,也可用默认的int*/
{int i,j,t; /*因为函数形实参是数组,按地址传递*/
/*两个数组所用空间相同,函数无需返回值*/
for(i=0;i<N;i++)
for(j=i+1;j<N;j++) /* j=i+1防止两元素对调后再次恢复原位 */
{t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
main()
{
int i,j;
void convert(int [][]); /*注意此处的 [ ][ ] 形式,表明是二维数组*/
printf("Input array:\n"); /* 因为函数原型处仅检查形参个数、类型名、
for(i=0;i<N;i++) /* 顺序,而不检查形参名。所以只写成[ ][ ] 形式
for(j=0;j<N;j++) /* 即可。仅对void时如此,对int似乎不成立?*/
scanf("%d",&array[i][j]);
printf("\noriginal array:\n");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%5d",array[i][j]);
printf("\n");
}
convert(array);
printf("convert array:\n");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%5d",array[i][j]);
printf("\n");
}
} for(j=i+1;j<N;j++) /* j=i+1防止两元素对调后再次恢复原位这句怎么理解阿,谢谢,写成J=0可以吗
麻烦帮我看一下,下面我自己写的错在哪,可以吗
#include <stdio.h>
void main()
{
int i,j;
int a[3][3];
int a[i][j];
for(i=0;i<3;i++);
for(j=0;j<3;j++);
scanf("%d",&a[i][j]);
printf("/yuanlaia[i],a[j]:/n");
for(i=0;i<3;i++);
{
for(j=0;j<3;j++);
printf("%d",a[i][j]);
printf("/n");

}
void zhuanghuan(int i,int j,int t);

for (i=0;i,3;i+=);
{for(j=0;j<3;j++);
printf("%d",a[i][j]);
printf("/n");
}
}
void zhuanghuan(int i,int j,int t)
{
for(i=0;i<3;i++);
for(j=i+1;j<3;j++);
{t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}

C语言数组定义,中括号中必须是一个常量,而不能是一个变量;
数组不能重名的;
转置函数参数列表中没有要转置的数组,就相当于没有操作对象,操作对象是不会有反应的,在里面使用要转置的数组也是行不通的;
核心语句也错了:
应该是:
for(i=0;i<3;i++)
for(j=0;j<i;j++) //这里控制条件是j<i;而不应该是j<3;
//否则调换之后再调换相当于没有调换。
// 就是下三角与上三角交换,当然,对角线不用参与;
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-14
不可以的,程序中的思想是将右上部分的与左下部分的交换,如果写成j=0,那就一个数交换两次了,这样就相当于没交换。
你可以但不执行(调试)一下感受一下。追问

麻烦帮我看一下补充中我自己写的,错在哪,可以吗

相似回答