写一个函数,使给定的一个二维数组(3×3)转置,即行列互换.下面的编程
#defineN3intarray[N][N];voidconvert(intarray[3][3])/*函数类型可定义为void,也可用默认的int*/{inti,j,...
#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;
}
} 展开
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;
}
} 展开
2个回答
展开全部
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;
}
数组不能重名的;
转置函数参数列表中没有要转置的数组,就相当于没有操作对象,操作对象是不会有反应的,在里面使用要转置的数组也是行不通的;
核心语句也错了:
应该是:
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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询