有人帮我做下题么?越快越好! ..上个贴子结了..还差一道

babycindy413 2007-04-19 09:58:52
1.1要求:
1)使用数据结构管理矩阵的信息
2)用结构体来描述矩阵
3)建立数据输入输出控制平台
1.2矩阵的结构体:
1.2.2、结构体定义
typedef struct str_mat
{
int nRow; /* 矩阵行数 */
int nCol; /* 矩阵列数 */
int* pData; /* 指向矩阵实体的指针 */
}STR_MAT;
1.3函数说明:
1.3.1:MatBuild
函数形式:int MatBuild (STR_MAT * pMat, int nRow, int nCol);
函数功能:建立矩阵
返回值:VOS_OK(0)/VOS_ERR(1)
1.3.2:MatFree
函数形式:void MatFree (STR_MAT * pMat);
函数功能:销毁矩阵实体及管理信息
返回值:无
1.3.3:MatCopy
函数形式:int MatCopy (STR_MAT * pMat1, const STR_MAT * pMat2);
函数功能:将矩阵*pMat2的信息导入矩阵*pMat1。
返回值:VOS_OK(0)/VOS_ERR(1)
1.3.4:MatAdd
函数形式:int MatAdd (STR_MAT * pMat1, STR_MAT * pMat2, STR_MAT * pMat3);
函数功能:将矩阵*pMat1和矩阵*pMat2相加,结果存入到矩阵*pMat3中。
备注:矩阵*pMat1、*pMat2、*pMat3的行数、列数相同。
返回值:VOS_OK(0)/VOS_ERR(1)
1.3.5:MatSub
函数形式:int MatSub (STR_MAT * pMat1, STR_MAT * pMat2, STR_MAT * pMat3);
函数功能:将矩阵*pMat1减矩阵*pMat2的结果存入到矩阵*pMat3中。
返回值:VOS_OK(0)/VOS_ERR(1)
1.3.6:MatClear
函数形式:void MatClear (STR_MAT * pMat);
函数功能:将矩阵*pMat中的全部元素清0。
返回值:无
1.3.7:MatMul
函数形式:void MATMul (STR_MAT * pMat, int C);
函数功能:将矩阵*pMat中的所有元素乘以C,结果存入到矩阵*pMat中。
返回值:无
...全文
300 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
P6689 2007-04-20
  • 打赏
  • 举报
回复
I got the same problems, but I'll do it by myself.
lightnut 2007-04-20
  • 打赏
  • 举报
回复
#define VOS_OK 0
#define VOS_ERR 1

typedef struct str_mat
{
int nRow; /* 矩阵行数 */
int nCol; /* 矩阵列数 */
int* pData; /* 指向矩阵实体的指针 */
}STR_MAT;


bool IsValid(STR_MAT* pMat, bool checkRowCols)
{
if ( (NULL==pMat) || (NULL==pMat->pData) ) return false;
if ( ( checkRowCols) &&
((pMat->nCol<=0) || (pMat->nRow<=0)) ) return false;

return true;
}

bool IsSameDimension(STR_MAT* pMat1, STR_MAT* pMat2)
{
if ( !IsValid(pMat1, true) || !IsValid(pMat2, true) ) return false;

if ( (pMat1->nRow != pMat2->nRow) ||
(pMat1->nCol != pMat2->nCol) ) return false;

return true;
}

int MatBuild(STR_MAT* pMat, int nRow, int nCol)
{
if (NULL==pMat) return VOS_ERR;

pMat->pData = (int*)malloc(nRow*nCol*sizeof(int));
if (NULL==pMat->pData) return VOS_ERR;
pMat->nRow = nRow;
pMat->nCol = nCol;
return VOS_OK;

}


void MatFree(STR_MAT* pMat)
{
if ( IsValid(pMat, false)) free(pMat->pData);
}


int MatCopy (STR_MAT * pMat1, const STR_MAT * pMat2)
{
if (!IsSameDimension(pMat1, pMat2)) return VOS_ERR;

int numBytes = pMat1->nCol * pMat1->nRow * sizeof(int);
memcpy(pMat1->pData, pMat2->pData, numBytes);
return VOS_OK;
}


int MatAdd (STR_MAT * pMat1, STR_MAT * pMat2, STR_MAT * pMat3)
{
if ( IsSameDimension(pMat1, pMat2) && IsSameDimension(pMat2, pMat3) ) {

int numElements = pMat1->nCol * pMat2->nRow;
for (int i=0; i<numElements; ++i) {
pMat3->pData[i] = pMat1->pData[i] + pMat2->pData[i];
}
return VOS_OK;
}
else return VOS_ERR;

}


int MatSub (STR_MAT * pMat1, STR_MAT * pMat2, STR_MAT * pMat3)
{
if ( IsSameDimension(pMat1, pMat2) && IsSameDimension(pMat2, pMat3) ) {

int numElements = pMat1->nCol * pMat2->nRow;
for (int i=0; i<numElements; ++i) {
pMat3->pData[i] = pMat1->pData[i] - pMat2->pData[i];
}
return VOS_OK;
}
else return VOS_ERR;

}

void MatClear (STR_MAT * pMat)
{
if (IsValid(pMat, true)) {
int numElements = pMat->nCol * pMat->nRow;
for (int i=0; i<numElements; ++i) pMat->pData[i] = 0;
}
}


void MATMul (STR_MAT * pMat, int C)
{
if (IsValid(pMat, true) ) {
int numElements = pMat->nCol * pMat->nRow;
for (int i=0; i<numElements; ++i) pMat->pData[i] = C*pMat->pData[i];
}
}
babycindy413 2007-04-19
  • 打赏
  • 举报
回复
UP
hansin 2007-04-19
  • 打赏
  • 举报
回复
不会,帮你顶
babycindy413 2007-04-19
  • 打赏
  • 举报
回复
帮帮我啊
Baku 2007-04-19
  • 打赏
  • 举报
回复
作业题~ 无视

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧