哪位大虾知道下面程序哪错了,怎么改啊,谢谢了
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20 /*矩阵中最大非零元的个数*/
typedef struct triple
{
int i; /*行标,本程序中从1开始的*/
int j; /*列标,本程序中从1开始的*/
int e; /*非零元*/
}Triple; /*三元组定义*/
typedef struct tabletype
{
int mu; /*矩阵的行数*/
int nu; /*列数*/
int tu; /*非零元个数*/
Triple data[MAXSIZE+1]; /*非零元的三元组表,*/
}Tabletype; /*三元组线性表*/
void out_matrix(Tabletype *); /*输出 矩阵*/
/*以下为转置程序,将a所指矩阵转置,将结果存入b所指的矩阵中*/
int TransposeSMatrix(Tabletype *,Tabletype *);
int main( void )
{
char ch;
while(1)
{
printf(" @@@@@@@@@@本程序的功能是实现稀疏矩阵的普通转置@@@@@@@@@@@@@@@@@@@\n");
printf(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
/*源矩阵a*/
Tabletype a= {6,7,8,{ {1,2,12},{1,3,9},{3,1,-3},{3,6,14},{4,3,24},{5,2,18},{6,1,15},{6,4,-7} }};
Tabletype b; /*声明矩阵b*/
printf("The source Matrix:\n");
out_matrix(&a);
if(TransposeSMatrix(&a,&b)) /*若a不为零矩阵则转置a,存入b中*/
{ printf("After TransposeSMatrix: \n");
out_matrix(&b);
}
else
{
printf("The matrix is zeros:\n");
out_matrix(&a);
}
do{
printf("Input 'q' to quit and ENTER run again:");
if((ch = getchar()) == 'q' || ch == 'Q')
exit(0);
}while(ch!='\n');
system("cls");
}
return 1;
}
void out_matrix(Tabletype *a) /* 打印矩阵*/
{
int i,j,k = 0;
for(i = 1 ;i <= a->mu; i++)
{
for(j = 1; j<= a->nu; j++)
{ /*判断是否为非零元*/
if((a->data[k].i == i)&&(a->data[k].j == j))
{
printf("%4d",a->data[k].e);
k++;
}
else
printf("%4d",0);
}
printf("\n");
}
}
int TransposeSMatrix(Tabletype *a,Tabletype *b)
{
int p,q,col;
b->mu = a->nu; /*原矩阵的行数为新矩阵的列数,愿列数为新行数,非零元个数不变*/
b->nu = a->mu;
b->tu = a->tu;
if(b->tu) /*若a不为零矩阵*/
{
q = 0; /*b->data下标*/
for(col = 1; col < a->nu; col++)
for(p = 0;p < a->tu;p++) /*p为a->data的下标*/
if(col == a->data[p].j) /*按b->data[q]中的列标对a->data[p]进行扫描*/
{
b->data[q].i = a->data[p].j;
b->data[q].j = a->data[p].i;
b->data[q].e = a->data[p].e;
q++;
}
return 1;
}
else /*a为零矩阵*/
return 0; getch();
}
c语言转置矩阵问题
在进行C语言转置矩阵操作时,若数组下标超界则不允许。当矩阵的行数与列数不相等时,交换元素可能导致下标越界。假设声明了整型数组为int array[M][M],若M与M正确匹配,当进行循环操作如for(j=0;j<M或N)时,需确保N<=M以确保循环范围内下标始终有效。正确操作可避免数组下标越界错误,确保转置矩...
c语言用指针求矩阵转置~
在C语言中,矩阵转置问题通过指针解决的方法有很多。首先,定义一个指针数组 int*p1[N],这里的N代表矩阵的行数。然而,当您传入参数a时,实际上传入的是一个指针,而非一个数组。这种参数类型不一致,导致了后续操作的错误。同时,转置函数trans()没有正确返回转置后的矩阵,使得main()函数中打印的...
C语言编程 关于行列式转置的问题
在C语言编程中,处理行列式的转置是一个常见的任务。对于这个问题,首先需要理解矩阵转置的基本概念。矩阵转置是指将一个矩阵的行变成列,列变成行,从而生成一个新的矩阵。如果原始矩阵是 A,则其转置矩阵用符号 \\(A^T\\) 表示。具体到编程实现,可以使用两层循环来完成矩阵转置的操作。外层循环负责遍...
c语言矩阵转置问题
其实只是小问题,你自己都编的很好了。就是保存屏幕不在按入Q和Enter键屏幕不会马上消失上面有问题:你可以用两个getchar()函数来读取键盘输入,前一个数缓冲enter键,后一个等待键盘输入,然后屏幕消失!代码已修改,如下:include <stdio.h> include <stdlib.h> define MAXSIZE 20 \/*矩阵中最大...
c语言中,3行3列矩阵的转置,这样编写fun函数为什么不对?该怎样??_百度...
改为下面就可以了 void fun(int array[3][3]){int i,j,temp;for (i=0;i<3;i++)for (j=0;j<;j++){ trmp=array[i][j];array[i][j]=array[j][i];array[j][i]=temp;} } 其实很好理解,打个比方 int a=5,b=6;a=b;b=a;其实 ab的值都被6覆盖了 ...
C语言我编了一个任意行数列数的矩阵转置程序,可为什么转置后的矩阵...
for(j=0;j<n;j++)scanf("%f",p[i]+j);\/\/主要指针不够熟悉,p[i]+j是指针 printf("矩阵:");for(i=0;i<m;i++) { printf("\\n");for(j=0;j<n;j++)printf("%4.0f",p[i][j]);\/\/p[i][j]是数据内容 } printf("\\n转置矩阵:\\n");tran(p,m,n);return 0;
这个c语言程序为什么转置不成功?
因为矩阵转置是以主对角线为对称轴对调两侧的相应元素,所以只要遍历半个矩阵(矩阵的下三角区域)与另半个矩阵对调,就行了.你遍历了整个矩阵,等于整个矩阵以主对角线为轴对调了两次(转置了两次),所以矩阵没变.解决方法 把自定义的转置函数的内循环(for_j循环)终止条件由j小于3改成j小于i,就行了.完整...
C语言-矩阵转置
① #include 包含头文件。② #include<stdlib.h> 包含标准库。③ 定义函数 void fun(int array[3][3]),用于矩阵转置。④ 函数内部,使用两个嵌套循环遍历右上半部分矩阵元素,并交换与左下半部分元素。⑤ 主函数 void main(),初始化矩阵 array[3][3],遍历输出原矩阵。⑥ 调用 fun(array) ...
用c语言将二维数组a表示的3x5矩阵进行转置
以下是使用C语言将3x5矩阵进行转置的程序:```c include <stdio.h> int main() { int a[3][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}};int transposed[5][3];\/\/ 对矩阵进行转置 for (int i = 0; i < 3; i++) { for (int j =...
C语言想要实现矩阵的转置,为什么出现的这样的结果
你这里i,j当下标的时候,需要printf(“%d\\t", a[i-1][j-1]),否则a[3][3]就越界了,下标是0开始的,要么就 for(int i = 0; i < 3; ++ i){ for(int j = 0; j < 3; ++ j){ printf("%d\\t", a[i][j]);} printf("\\n");} ...