C语言。写一个函数,使给定的一个3X3的二维整型数组转置,即行列互换。

帮我看下我这个错在那里:
#include <stdio.h>
void main()
{
int value(int array[][]);
int a[3][3];
int i,j;
clrscr();
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
value(a);
printf("\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d",a[i][j]);
}
}
getch();
}
int value(int array[][])
{
int i,j,t,k;
for(i=0;i<2;i++)
{
k=i;
for(j=i+1;j<3;j++)
{
t=array[k][j];
array[k][j]=array[j][k];
array[j][k]=t;
}
}
}

方法一、

#include&lt;stdio.h&gt;

void main(){

void switchArray(int[3][3]);

int array[][3]={{1,2,3},{4,5,6},{7,8,9}};

int i,j;

switchArray(array);

return 0;

}

void switchArray(int array[][3]){

int newArray[3][3];

int i,j;

for(i=0;i&lt;3;i++){

for(j=0;j&lt;3;j++){

newArray[j]&lt;i&gt;=array&lt;i&gt;[j];

}

}

for(i=0;i&lt;3;i++){

for(j=0;j&lt;3;j++){

printf("%d",newArray&lt;i&gt;[j]);

}

printf("\n");

}

}

方法二、用指针实现:

#include&lt;stdio.h&gt;

void main(){

void switchArray(int[3][3]);

int array[][3]={{1,2,3},{4,5,6},{7,8,9}};

int i,j;

int(*pToArray)[3];

pToArray=array;

switchArray(pToArray);

return 0;

}

void switchArray(int array[][3]){

int newArray[3][3],(*pTArr)[3],(*pTNewArr)[3];

int i,j;

pTArr=array;

pTNewArr=newArray;

for(i=0;i&lt;3;i++){

for(j=0;j&lt;3;j++){

*(*(pTNewArr+j)+i)=*(*(pTArr+i)+j);

}

}

for(i=0;i&lt;3;i++){

for(j=0;j&lt;3;j++){

printf("%d",*(*(pTNewArr+i)+j));

}

printf("\n");

}

}

扩展资料:

用法:

1、printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。

格式输出,它是c语言中产生格式化输出的函数(在stdio.h中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。

要输出的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

简单点理解就是,在一段程序中你正确使用该函数,可以在该程序运行的时候输出你所需要的内容。

2、printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用printf函数之前必须包含stdio.h文件。

printf()函数的调用格式为:printf("&lt;格式化字符串&gt;",&lt;参量表&gt;)。

其中格式化字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27
array[][]要初始化 即给定数组长度 比如array[3][3]
clrscr();这一句没用到,而且没定义
getch()未定义,而且这一句也没用
下面是我改正后的程序
#include <stdio.h>

void main()
{
int value(int array[3][3]);
int a[3][3];
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
value(a);
printf("\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",a[i][j]);
}printf("\n");
}
}
int value(int array[3][3])
{
int i,j,t,k;
for(i=0;i<2;i++)
{
k=i;
for(j=i+1;j<3;j++)
{
t=array[k][j];
array[k][j]=array[j][k];
array[j][k]=t;
}
}
}本回答被提问者和网友采纳
第2个回答  2009-06-10
有两处错误,1处语法错误,1处逻辑错误
sort(a[3][3]);修改成sort(a);就可以
但是你运行一下,你可以发现他没有转置

因为 for(i=0;i<3;i++)
for(j=0;j<3;j++)把所有的元素都循环了,例如a[1][2]对换了,然后a[2][1]也对换了,实际上没有作用了就,你可以改成for(i=0;i<3;i++)
for(j=i;j<3;j++)
这样就不会重复对换,就可以实现转置的目的了
第3个回答  2010-08-07
问题很多。首先给数组指定长度。其次,clrscr和getch不在stdio里,在conio里。而且你不是在用TC的话,clrscr还未必有,建议用system("cls");再者,你的value函数没有返回int,建议改成void。这些都改完了以后,你的程序可以运行了。最后顺便说一下,你value函数里有个3被打成了2。

修改后程序(我运行过了)
#include <stdio.h>
#include <conio.h>
void main()
{
void value(int array[3][3]);
int a[3][3];
int i,j;
system("cls");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
value(a);
printf("\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d",a[i][j]);
}
}
getch();
}
void value(int array[3][3])
{
int i,j,t,k;
for(i=0;i<3;i++)
{
k=i;
for(j=i+1;j<3;j++)
{
t=array[k][j];
array[k][j]=array[j][k];
array[j][k]=t;
}
}
}
第4个回答  2010-08-06
value(int array[][])=>value(int array[][3])
列要指定