寫了一個求轉置矩陣的代碼,運行無錯誤,可是不知道為什么輸出的轉置矩陣最后一行全都是0。代碼如下,求原因及解答,萬分感謝!

#include<stdio.h>
#define maxsize 20
typedef struct
{
int r;//行號
int c;//列號
int d;//值
}tupnode;
typedef struct
{
int row;//行數
int col;//列數
int num;//非零元個數
tupnode data[maxsize+1];
}tsm;
void createmat(tsm &m)
{
int i,k;
tupnode t;
printf("請輸入矩陣的行數,列數,非零元個數:");
scanf_s("%d,%d,%d",&m.row,&m.col,&m.num,3);
getchar();
if (m.num > maxsize)
printf("ERROR");
m.data[0].r = 0;
for (i = 1; i <= m.num; i++)
{
printf("請按行順序輸入第%d個非零元素所在的行、列、元素值:",i);
scanf_s("%d,%d,%d",&t.r,&t.c,&t.d);
m.data[i] = t;
}
}
void dispmat(tsm m)
{
int i, j, k = 1;
tupnode *p = m.data + 1;
for(i=1;i<=m.row;i++)
{
for (j = 1; j <= m.col; j++)
if (k <= m.num && p->r==i && p->c==j)
{
printf("%3d", (p++)->d);//輸出p所指元素的值并指向下一元素
k++;
}
else
printf("%3d",0);
printf("\n");
}
}
void trantat(tsm m,tsm &t) //t為轉置矩陣
{
int p, c, q = 1; //q指示轉置矩陣的當前元素
t.row = m.col;
t.col = m.row;
t.num = m.num;
if(t.num!=0)
for (c = 1; c < m.row; c++)
for (p = 1; p <= m.num; p++)
if(m.data[p].c==c)
{
t.data[q].r = m.data[p].c;
t.data[q].c = m.data[p].r;
t.data[q].d = m.data[p].d;
q++;
}
dispmat(t);
}
void main()
{
tsm a, b;
printf("創建矩陣a\n");
createmat(a);
dispmat(a);
printf("a的轉置矩陣為:\n");
trantat(a, b);
}
uj5u.com熱心網友回復:
你在輸出的地方或者轉置的地方設定一下斷點,看一下,是轉置錯了,還是輸出錯了uj5u.com熱心網友回復:
//scanf_s("%d,%d,%d",&m.row,&m.col,&m.num, 3); //不需要最后的引數3
scanf_s("%d,%d,%d",&m.row,&m.col,&m.num);
去掉3引數,不需要。
另外,m.num還需要輸入嗎?如果輸入的個數不是m.row * m.col那怎么辦?
m.num不就是m.row * m.col的值嗎?
uj5u.com熱心網友回復:
m.num是非零元的個數,不是整個矩陣的元素個數
uj5u.com熱心網友回復:
是轉置的演算法出了問題,但是不知道應該如何修改
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/47682.html
標籤:C語言
上一篇:求解大佬
下一篇:為什么輸入任何數結果都是0?
