哪位大佬可以幫我看看我這個相加的時候問題出在哪里了

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
#define ElementType int
#define ERROR 0
//三元組型別定義
typedef struct
{
int row,col;
ElementType e;
}Triple;
typedef struct
{
Triple data[MaxSize+1];//不用data[0]號單元
int m,n,len;
}TSMatrix;
//創建矩陣
int CreateTSMatrix(TSMatrix *M)
{
printf("輸入三元組的行數、列數、非零元素個數(以空格隔開):");
int cm,cn,cl;
scanf("%d %d %d",&cm,&cn,&cl);
M->m=cm;
M->n=cn;
M->len=cl;//非零元素個數
int i=0;
printf("----------------------------------------\n");
int cr,cc,ce;//臨時變數
while(i<cl)
{
printf("輸入第%d個非零元素的行號、列號、值:",i+1);
scanf("%d %d %d",&cr,&cc,&ce);
//如果輸入的行號、列號超出上邊定義的
if ( cr>cm || cc>cn)
{
printf("此組資料不合法,請重新輸入!\n");
continue;
}else
{
//因為不用data[0]號單元-->i+1
M->data[i+1].row=cr;
M->data[i+1].col=cc;
M->data[i+1].e=ce;
i++;
}
}
printf("----------------------------------------\n");
return 1;
}
//列印三元組
int PrintTSMatrix(TSMatrix M)
{
int cm,cn,cl;
cm=M.m;
cn=M.n;
cl=M.len;
int k=1;//計數器
for (int i=1;i<=cm;i++)
{
for (int j=1;j<=cn;j++)
{
if (i==M.data[k].row && j==M.data[k].col)
{
printf(" %d ",M.data[k].e);
k++;
}else{printf(" 0 ");}
}
printf("\n");
}
return 1;
}
//兩個三元組相加
void AddTSMatrix(TSMatrix M,TSMatrix T,TSMatrix *Sum)
{
int i=1,j=1,k=1;//都是代表非0元素的個數
Sum->m=T.m;
Sum->n=T.n;
//定位直接找非零的元素,并不是挨個回圈比較
while (i<=M.len && j<=T.len)
{
if (M.data[i].row<T.data[j].row)
{
Sum->data[k]=M.data[i];
i++;
k++;
}
else if (M.data[i].row > T.data[j].row)
{
Sum->data[k]=T.data[j];
j++;
k++;
}
else if ( M.data[i].row == T.data[j].row)
{
if ( M.data[i].col < T.data[j].col )
{
Sum->data[k]=M.data[i];
i++;
k++;
}
else if ( M.data[i].col > T.data[j].col )
{
Sum->data[k]=T.data[j];
j++;
k++;
}
else if ( M.data[i].col == T.data[j].col )
{
if ( M.data[i].e + T.data[j].e !=0 )
{
Sum->data[k].row=T.data[j].row;
Sum->data[k].col=T.data[j].col;
Sum->data[k].e= T.data[j].e+M.data[i].e;
k++;
}
//k++;
j++;
i++;
}
}
while ( i<= M.len )
{
Sum->data[k]=M.data[i];
k++;
i++;
}
while ( j<=T.len )
{
Sum->data[k]=T.data[j];
k++;
j++;
}
Sum->len=k-1;
}
}
int main()
{
TSMatrix M,T,Sum;
CreateTSMatrix(&M);
CreateTSMatrix(&T);
printf("--------第一矩陣-------\n");
PrintTSMatrix(M);
printf("--------第二矩陣-------\n");
PrintTSMatrix(T);
AddTSMatrix(M,T,&Sum);
printf("-----矩陣相加的結果----\n");
PrintTSMatrix(Sum);
return 0;
}
uj5u.com熱心網友回復:
你是要對應行資料相加吧?你這個期望結果應該是什么?uj5u.com熱心網友回復:
對 就是將兩個矩陣的內容顯示在sum矩陣里 同行同列的相加 不同的就直接放進去uj5u.com熱心網友回復:
對 就是將兩個矩陣放在sum矩陣里 同行同列的相加 不同的直接放進去uj5u.com熱心網友回復:
你的演算法好像有點問題
uj5u.com熱心網友回復:
對 就是將兩個矩陣放在sum矩陣里 同行同列的相加 不同的直接放進去 你是要對應行資料相加吧?你這個期望結果應該是什么?
你的演算法好像有點問題
哪里呢
uj5u.com熱心網友回復:
emmm 對 就是將兩個矩陣放在sum矩陣里 同行同列的相加 不同的直接放進去 你是要對應行資料相加吧?你這個期望結果應該是什么?
你的演算法好像有點問題
哪里呢
一會我幫你除錯一下,看能不能定位出來
uj5u.com熱心網友回復:
#include <stdio.h>#include <stdlib.h>
#define MaxSize 100
#define ElementType int
#define ERROR 0
//三元組型別定義
typedef struct
{
int row,col;
ElementType e;
}Triple;
typedef struct
{
Triple data[MaxSize+1];//不用data[0]號單元
int m,n,len;
}TSMatrix;
//創建矩陣
int CreateTSMatrix(TSMatrix *M)
{
printf("輸入三元組的行數、列數、非零元素個數(以空格隔開):");
int cm,cn,cl;
scanf("%d %d %d",&cm,&cn,&cl);
M->m=cm;
M->n=cn;
M->len=cl;//非零元素個數
int i=0;
printf("----------------------------------------\n");
int cr,cc,ce;//臨時變數
while(i<cl)
{
printf("輸入第%d個非零元素的行號、列號、值:",i+1);
scanf("%d %d %d",&cr,&cc,&ce);
//如果輸入的行號、列號超出上邊定義的
if ( cr>cm || cc>cn)
{
printf("此組資料不合法,請重新輸入!\n");
continue;
}else
{
//因為不用data[0]號單元-->i+1
M->data[i+1].row=cr;
M->data[i+1].col=cc;
M->data[i+1].e=ce;
i++;
}
}
printf("----------------------------------------\n");
return 1;
}
//列印三元組
int PrintTSMatrix(TSMatrix M)
{
int cm,cn,cl;
cm=M.m;
cn=M.n;
cl=M.len;
int k=1;//計數器
for (int i=1;i<=cm;i++)
{
for (int j=1;j<=cn;j++)
{
if (i==M.data[k].row && j==M.data[k].col)
{
printf(" %d ",M.data[k].e);
k++;
}else{printf(" 0 ");}
}
printf("\n");
}
return 1;
}
//兩個三元組相加
//void AddTSMatrix2(TSMatrix M,TSMatrix T,TSMatrix *Sum)
//{
// M.len
//}
void AddTSMatrix(TSMatrix M,TSMatrix T,TSMatrix *Sum)
{
int i=1,j=1,k=1;//都是代表非0元素的個數
Sum->m=T.m;
Sum->n=T.n;
//定位直接找非零的元素,并不是挨個回圈比較
while (i<=M.len && j<=T.len)
{
if (M.data[i].row<T.data[j].row)
{
Sum->data[k]=M.data[i];
i++;
k++;
}
else if (M.data[i].row > T.data[j].row)
{
Sum->data[k]=T.data[j];
j++;
k++;
}
else if ( M.data[i].row == T.data[j].row)
{
if ( M.data[i].col < T.data[j].col )
{
Sum->data[k]=M.data[i];
i++;
k++;
}
else if ( M.data[i].col > T.data[j].col )
{
Sum->data[k]=T.data[j];
j++;
k++;
}
else if ( M.data[i].col == T.data[j].col )
{
if ( M.data[i].e + T.data[j].e !=0 )
{
Sum->data[k].row=T.data[j].row;
Sum->data[k].col=T.data[j].col;
Sum->data[k].e= T.data[j].e+M.data[i].e;
k++;
}
//k++;
j++;
i++;
}
}
}
while ( i<= M.len )
{
Sum->data[k]=M.data[i];
k++;
i++;
}
while ( j<=T.len )
{
Sum->data[k]=T.data[j];
k++;
j++;
}
Sum->len=k-1;
}
int main()
{
TSMatrix M,T,Sum;
CreateTSMatrix(&M);
CreateTSMatrix(&T);
printf("--------第一矩陣-------\n");
PrintTSMatrix(M);
printf("--------第二矩陣-------\n");
PrintTSMatrix(T);
AddTSMatrix(M,T,&Sum);
printf("-----矩陣相加的結果----\n");
PrintTSMatrix(Sum);
return 0;
}
你把這個代碼拷貝過去,如果還有問題,再看
uj5u.com熱心網友回復:
好的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63032.html
標籤:C語言
下一篇:VS編譯C++報錯
