|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编写一个函数 void transpose(int (*matrix)[10], int n),实现对一个矩阵的前n行和前n列转置。先在主函数中初始化如下矩阵,然后输入n(n<10),调用transpose函数前n行n列的转置。
1 3 5 7 9 6 5 4 3 2
2 4 6 8 0 7 6 5 4 3
3 5 7 9 1 8 7 6 5 4
4 6 8 0 2 9 8 7 6 5
5 7 9 1 3 0 9 8 7 6
6 8 0 2 4 1 0 9 8 7
7 9 1 3 5 2 1 0 9 8
8 0 2 4 6 3 2 1 0 9
9 1 3 5 7 4 3 2 1 0
0 2 4 6 8 5 4 3 2 1
【输入形式】
n
【输出形式】
转置结果
【样例输入】
4
【样例输出】
1 2 3 4 9 6 5 4 3 2
3 4 5 6 0 7 6 5 4 3
5 6 7 8 1 8 7 6 5 4
7 8 9 0 2 9 8 7 6 5
5 7 9 1 3 0 9 8 7 6
6 8 0 2 4 1 0 9 8 7
7 9 1 3 5 2 1 0 9 8
8 0 2 4 6 3 2 1 0 9
9 1 3 5 7 4 3 2 1 0
0 2 4 6 8 5 4 3 2 1
#include <stdio.h>
#include <stdlib.h>
void transpose(int (*matrix)[10], int n){
int a,b,c;
for(a=0;a<n;a++){
for(b=a;b<n;b++){
c=*(*(matrix+a)+b);
*(*(matrix+a)+b)*=*(*(matrix+b)+a);
*(*(matrix+b)+a)=c;
}
}
}
int main()
{
int a[10][10],i,j,k=0,m=0,n=12,b,c=1;
for(i=0;i<10;i++){
for(j=0;j<5;j++){
if((i+1)%2==0&&(i+1)!=1){
k=c-1+(j+1)*2;
if(k>=10){
k-=10;
}
a[i][j]=k;
}
else if((i+1)%2!=0||(i+1)==1)
{
k=c+j*2;
if(k>10){
k-=10;
}
a[i][j]=k;
}
}
for(;j<10;j++){
m=n-j;
if(m>=11){
a[i][j]=m-11;
}else if(m<11){
a[i][j]=m-1;
}
}if((i+1)%2==0&&(i+1)!=1&&c<10){
c+=2;
}else if((i+1)%2==0&&(i+1)!=1&&c>10){
c=-1;
}n++;
}
scanf("%d",&b);
transpose(a,b);
for(i=0;i<10;i++){
for(j=0;j<10;j++){
printf("%d ",a[i][j]);}
printf("\n");}
return 0;
}
这个为什么不对啊 求大神帮忙!!!!
[b]您的代码中存在一些问题,其中最主要的问题在于转置函数中的交换步骤,您的交换步骤中存在错误。让我们在这里纠正这个问题。
您的转置函数应该是这样的:
void transpose(int (*matrix)[10], int n){
int a,b,c;
for(a=0;a<n;a++){
for(b=a;b<n;b++){
c=matrix[a][b];
matrix[a][b]=matrix[b][a];
matrix[b][a]=c;
}
}
}
我修改了数组元素交换的方式。原来您使用的是一个间接寻址的方式(*(*(matrix+a)+b)),这里我改用了更直观的方式matrix[a] ,它们都是访问二维数组中元素的方法。
注意,这样的修改只能保证前n行n列的转置,超过n行n列的部分仍然保持原样。这也是题目的要求。
同时,我注意到你在主函数的初始化矩阵部分使用了复杂的计算方式,这虽然能够达到目的,但是增加了代码的理解和维护难度。在现实编程中,我们通常会推荐使用更简洁易懂的代码,例如直接定义一个二维数组:
int matrix[10][10] = {
{1, 3, 5, 7, 9, 6, 5, 4, 3, 2},
{2, 4, 6, 8, 0, 7, 6, 5, 4, 3},
{3, 5, 7, 9, 1, 8, 7, 6, 5, 4},
{4, 6, 8, 0, 2, 9, 8, 7, 6, 5},
{5, 7, 9, 1, 3, 0, 9, 8, 7, 6},
{6, 8, 0, 2, 4, 1, 0, 9, 8, 7},
{7, 9, 1, 3, 5, 2, 1, 0, 9, 8},
{8, 0, 2, 4, 6, 3, 2, 1, 0, 9},
{9, 1, 3, 5, 7, 4, 3, 2, 1, 0},
{0, 2, 4, 6, 8, 5, 4, 3, 2, 1}
};
这样的代码不仅更易于理解,也更易于修改和维护。
最后,我建议你在输出结果时,在每一行的末尾添加换行符"\n",这样的输出结果更易于阅读和理解。
|
|