69,336
社区成员
发帖
与我相关
我的任务
分享
input matrix 1
enter dimensions : 2,4
enter 00 : 1
enter 01 : 1
enter 02 : 1
enter 03 : 1
enter 10 : 2
enter 11 : 2
enter 12 : 2
enter 13 : 2
matrix 1 :
1.00 1.00 1.00 1.00
2.00 2.00 2.00 2.00
init matrix 2
enter dimensions : 4,2
enter 00 : 1
enter 01 : 1
enter 10 : 2
enter 11 : 2
enter 20 : 3
enter 21 : 3
enter 30 : 4
enter 31 : 4
matrix 2 :
1.00 1.00
2.00 2.00
3.00 3.00
4.00 4.00
matrix 1 + matrix 2 =
no resault
matrix 1 - matrix 2 =
no resault
matrix 1 * matrix 2 =
10.00 10.00
20.00 20.00
请按任意键继续. . .
改了下,程序太乱了,你看着改吧,只给你参考的
return 0 表示错误(main除外)
return 1 表示正确
#include "stdio.h"
typedef struct {
float** datas;
int dim_x;
int dim_y;
} matrix;
void release_matrix(matrix* mat){
int i;
if (!mat)
return;
if (mat->datas) {
for (i = 0; i < mat->dim_x; ++i)
if (mat->datas[i])
free(mat->datas[i]);
free(mat->datas);
}
}
int input_matrix(matrix* mat) {
int i;
int j;
if (!mat)
return 0;
release_matrix(mat);
printf("enter dimensions : ");
scanf("%d,%d", &mat->dim_x, &mat->dim_y);
if (mat->dim_x <= 0 || mat->dim_y <= 0)
return 0;
mat->datas = (float**)malloc(mat->dim_x * sizeof(float*));
for (i = 0; i < mat->dim_x; ++i)
mat->datas[i] = (float*)malloc(mat->dim_y * sizeof(float));
for (i = 0; i < mat->dim_x; ++i)
for (j = 0; j < mat->dim_y; ++j) {
printf("enter %d%d : ", i, j);
scanf("%f", &mat->datas[i][j]);
}
return 1;
}
void print_matrix(matrix* mat) {
int i;
int j;
for (i = 0; i < mat->dim_x; ++i)
{
for (j = 0; j < mat->dim_y; ++j)
printf("%.2f ", mat->datas[i][j]);
printf("\n");
}
}
int add(matrix* mat, const matrix* m1, const matrix* m2) {
int i;
int j;
if (!mat || !m1 || !m2)
return 0;
release_matrix(mat);
if (m1->dim_x != m2->dim_x || m1->dim_y != m2->dim_y)
return 0;
mat->dim_x = m1->dim_x;
mat->dim_y = m1->dim_y;
mat->datas = (float**)malloc(mat->dim_x * sizeof(float*));
for (i = 0; i < mat->dim_x; ++i)
mat->datas[i] = (float*)malloc(mat->dim_y * sizeof(float));
for (i = 0; i < mat->dim_x; ++i)
for (j = 0; j < mat->dim_y; ++j)
mat->datas[i][j] = m1->datas[i][j] + m2->datas[i][j];
return 1;
}
int sub(matrix* mat, const matrix* m1, const matrix* m2) {
int i;
int j;
if (!mat || !m1 || !m2)
return 0;
release_matrix(mat);
if (m1->dim_x != m2->dim_x || m1->dim_y != m2->dim_y)
return 0;
mat->dim_x = m1->dim_x;
mat->dim_y = m1->dim_y;
mat->datas = (float**)malloc(mat->dim_x * sizeof(float*));
for (i = 0; i < mat->dim_x; ++i)
mat->datas[i] = (float*)malloc(mat->dim_y * sizeof(float));
for (i = 0; i < mat->dim_x; ++i)
for (j = 0; j < mat->dim_y; ++j)
mat->datas[i][j] = m1->datas[i][j] - m2->datas[i][j];
return 1;
}
int mul(matrix* mat, const matrix* m1, const matrix* m2) {
int i;
int j;
int n;
if (!mat || !m1 || !m2)
return 0;
release_matrix(mat);
if (m1->dim_x != m2->dim_y || m1->dim_y != m2-> dim_x)
return 0;
mat->dim_x = m1-> dim_x;
mat->dim_y = m2-> dim_y;
mat->datas = (float**)malloc(mat->dim_x * sizeof(float*));
for (i = 0; i < mat->dim_x; ++i)
mat->datas[i] = (float*)malloc(mat->dim_y * sizeof(float));
for (i = 0; i < mat->dim_x; ++i) {
for (j = 0; j < mat->dim_y; ++j) {
mat->datas[i][j] = 0;
for(n = 0; n < m1->dim_y; ++n){
mat->datas[i][j] += m1->datas[i][n] * m2->datas[n][j];
}
}
}
}
int main()
{
matrix m1;
matrix m2;
matrix ms;
memset(&m1, 0, sizeof(m1));
memset(&m2, 0, sizeof(m2));
memset(&ms, 0, sizeof(ms));
printf("input matrix 1\n");
input_matrix(&m1);
printf("\n");
printf("matrix 1 : \n");
print_matrix(&m1);
printf("\n");
printf("init matrix 2\n");
input_matrix(&m2);
printf("\n");
printf("matrix 2 : \n");
print_matrix(&m2);
printf("\n");
printf("matrix 1 + matrix 2 = \n");
if (add(&ms, &m1, &m2)) {
print_matrix(&ms);
printf("\n");
} else {
printf("no resault\n");
}
printf("matrix 1 - matrix 2 = \n");
if (sub(&ms, &m1, &m2)) {
print_matrix(&ms);
printf("\n");
} else {
printf("no resault\n");
}
printf("matrix 1 * matrix 2 = \n");
if (mul(&ms, &m1, &m2)) {
print_matrix(&ms);
printf("\n");
} else {
printf("no resault\n");
}
release_matrix(&m1);
release_matrix(&m2);
release_matrix(&ms);
}
#include "stdafx.h"
#include "stdio.h"
typedef struct {
float** datas;
int dim_x;
int dim_y;
} matrix;
int init_matrix(matrix* mat) {
int i;
int j;
if (!mat)
return 0;
printf("enter dimensions : ");
scanf("%d,%d", &mat->dim_x, &mat->dim_y);
if (mat->dim_x <= 0 || mat->dim_y <= 0)
return 0;
mat->datas = (float**)malloc(mat->dim_x * sizeof(float*));
for (i = 0; i < mat->dim_x; ++i)
mat->datas[i] = (float*)malloc(mat->dim_y * sizeof(float));
for (i = 0; i < mat->dim_x; ++i)
for (j = 0; j < mat->dim_y; ++j) {
printf("enter %d%d : ", i, j);
scanf("%f", &mat->datas[i][j]);
}
return 1;
}
void release_matrix(matrix* mat){
int i;
if (!mat)
return;
for (i = 0; i < mat->dim_x; ++i)
free(mat->datas[i]);
free(mat->datas);
}
void print_matrix(matrix* mat) {
int i;
int j;
for (i = 0; i < mat->dim_x; ++i)
{
for (j = 0; j < mat->dim_y; ++j)
printf("%.2f ", mat->datas[i][j]);
printf("\n");
}
}
int add(matrix* mat, const matrix* m1, const matrix* m2) {
int i;
int j;
if (!mat || !m1 || !m2)
return 0;
if (m1->dim_x != m2->dim_x || m1->dim_y != m2->dim_y)
return 0;
mat->dim_x = m1->dim_x;
mat->dim_y = m1->dim_y;
mat->datas = (float**)malloc(mat->dim_x * sizeof(float*));
for (i = 0; i < mat->dim_x; ++i)
mat->datas[i] = (float*)malloc(mat->dim_y * sizeof(float));
for (i = 0; i < mat->dim_x; ++i)
for (j = 0; j < mat->dim_y; ++j)
mat->datas[i][j] = m1->datas[i][j] + m2->datas[i][j];
return 1;
}
int sub(matrix* mat, const matrix* m1, const matrix* m2) {
int i;
int j;
if (!mat || !m1 || !m2)
return 0;
if (m1->dim_x != m2->dim_x || m1->dim_y != m2->dim_y)
return 0;
mat->dim_x = m1->dim_x;
mat->dim_y = m1->dim_y;
mat->datas = (float**)malloc(mat->dim_x * sizeof(float*));
for (i = 0; i < mat->dim_x; ++i)
mat->datas[i] = (float*)malloc(mat->dim_y * sizeof(float));
for (i = 0; i < mat->dim_x; ++i)
for (j = 0; j < mat->dim_y; ++j)
mat->datas[i][j] = m1->datas[i][j] - m2->datas[i][j];
return 1;
}
int mul(matrix* mat, const matrix* m1, const matrix* m2) {
int i;
int j;
int n;
if (!mat || !m1 || !m2)
return 0;
if (m1->dim_x != m2->dim_y || m1->dim_y != m2-> dim_x)
return 0;
mat->dim_x = m1-> dim_x;
mat->dim_y = m2-> dim_y;
mat->datas = (float**)malloc(mat->dim_x * sizeof(float*));
for (i = 0; i < mat->dim_x; ++i)
mat->datas[i] = (float*)malloc(mat->dim_y * sizeof(float));
for (i = 0; i < mat->dim_x; ++i) {
for (j = 0; j < mat->dim_y; ++j) {
mat->datas[i][j] = 0;
for(n = 0; n < mat->dim_y; ++n){
mat->datas[i][j] += m1->datas[i][n] * m2->datas[n][j];
}
}
}
return 1;
}
int main()
{
matrix m1;
matrix m2;
matrix m;
printf("init matrix 1\n");
init_matrix(&m1);
printf("\n");
printf("matrix 1 : \n");
print_matrix(&m1);
printf("init matrix 2\n");
printf("\n");
init_matrix(&m2);
printf("\n");
printf("matrix 2 : \n");
print_matrix(&m2);
printf("\n");
printf("matrix 1 + matrix 2 = : \n");
add(&m, &m1, &m2);
print_matrix(&m);
printf("\n");
printf("matrix 1 - matrix 2 = : \n");
release_matrix(&m);
sub(&m, &m1, &m2);
print_matrix(&m);
printf("\n");
printf("matrix 1 * matrix 2 = : \n");
release_matrix(&m);
mul(&m, &m1, &m2);
print_matrix(&m);
release_matrix(&m);
release_matrix(&m1);
release_matrix(&m2);
}
运行
init matrix 1
enter dimensions : 2,2
enter 00 : 1
enter 01 : 1
enter 10 : 1
enter 11 : 1
matrix 1 :
1.00 1.00
1.00 1.00
init matrix 2
enter dimensions : 2,2
enter 00 : 2
enter 01 : 2
enter 10 : 2
enter 11 : 2
matrix 2 :
2.00 2.00
2.00 2.00
matrix 1 + matrix 2 = :
3.00 3.00
3.00 3.00
matrix 1 - matrix 2 = :
-1.00 -1.00
-1.00 -1.00
请按任意键继续. . .
胡乱写了一些,仅共参考
#include "stdio.h"
typedef struct {
float** datas;
int dim_x;
int dim_y;
} matrix;
int init_matrix(matrix* mat) {
int i;
int j;
if (!mat)
return 0;
printf("enter dimensions : ");
scanf("%d,%d", &mat->dim_x, &mat->dim_y);
if (mat->dim_x <= 0 || mat->dim_y <= 0)
return 0;
mat->datas = (float**)malloc(mat->dim_x * sizeof(float*));
for (i = 0; i < mat->dim_x; ++i)
mat->datas[i] = (float*)malloc(mat->dim_y * sizeof(float));
for (i = 0; i < mat->dim_x; ++i)
for (j = 0; j < mat->dim_y; ++j) {
printf("enter %d%d : ", i, j);
scanf("%f", &mat->datas[i][j]);
}
return 1;
}
void release_matrix(matrix* mat){
int i;
if (!mat)
return;
for (i = 0; i < mat->dim_x; ++i)
free(mat->datas[i]);
free(mat->datas);
}
void print_matrix(matrix* mat) {
int i;
int j;
for (i = 0; i < mat->dim_x; ++i)
{
for (j = 0; j < mat->dim_y; ++j)
printf("%.2f ", mat->datas[i][j]);
printf("\n");
}
}
int add(matrix* mat, const matrix* m1, const matrix* m2) {
int i;
int j;
if (!mat || !m1 || !m2)
return 0;
if (m1->dim_x != m2->dim_x || m1->dim_y != m2->dim_y)
return 0;
mat->dim_x = m1->dim_x;
mat->dim_y = m1->dim_y;
mat->datas = (float**)malloc(mat->dim_x * sizeof(float*));
for (i = 0; i < mat->dim_x; ++i)
mat->datas[i] = (float*)malloc(mat->dim_y * sizeof(float));
for (i = 0; i < mat->dim_x; ++i)
for (j = 0; j < mat->dim_y; ++j)
mat->datas[i][j] = m1->datas[i][j] + m2->datas[i][j];
return 1;
}
int sub(matrix* mat, const matrix* m1, const matrix* m2) {
int i;
int j;
if (!mat || !m1 || !m2)
return 0;
if (m1->dim_x != m2->dim_x || m1->dim_y != m2->dim_y)
return 0;
mat->dim_x = m1->dim_x;
mat->dim_y = m1->dim_y;
mat->datas = (float**)malloc(mat->dim_x * sizeof(float*));
for (i = 0; i < mat->dim_x; ++i)
mat->datas[i] = (float*)malloc(mat->dim_y * sizeof(float));
for (i = 0; i < mat->dim_x; ++i)
for (j = 0; j < mat->dim_y; ++j)
mat->datas[i][j] = m1->datas[i][j] - m2->datas[i][j];
return 1;
}
int main()
{
matrix m1;
matrix m2;
matrix m;
printf("init matrix 1\n");
init_matrix(&m1);
printf("\n");
printf("matrix 1 : \n");
print_matrix(&m1);
printf("init matrix 2\n");
printf("\n");
init_matrix(&m2);
printf("\n");
printf("matrix 2 : \n");
print_matrix(&m2);
printf("\n");
printf("matrix 1 + matrix 2 = : \n");
add(&m, &m1, &m2);
print_matrix(&m);
printf("\n");
printf("matrix 1 - matrix 2 = : \n");
sub(&m, &m1, &m2);
print_matrix(&m);
release_matrix(&m);
release_matrix(&m1);
release_matrix(&m2);
}
#include <iostream>
#include <fstream>
using namespace std;
class CMatrix{
public:
CMatrix(int m,int n);
void initByDoc(const string& file = "");
size_t sizeL()const{
return row;
}
size_t sizeR()const{
return col;
}
double& at(const int& i,const int& j)const{
return mat[i][j];
}
friend ostream& operator<<(ostream&, const CMatrix&);
public:
virtual ~CMatrix(){delete [] mat;}
private:
size_t row,col;
double **mat;
};
CMatrix::CMatrix(int m, int n)
:row(m),col(n)
{
mat = (double**)new double*[row];
for(int i=0;i<row;++i)
{
mat[i] = (double*)new double[col];
}
for(int i=0;i<row;++i)
for(int j=0;j<col;++j)
mat[i][j] = 0.0;
}
/*
将矩阵的值写入文件中,通过文本文件初始化矩阵
*/
void CMatrix::initByDoc(const string& file){
if(file.empty())
throw "File Error!\n";
double reading;
ifstream fin(file.c_str());
for(int i=0;!fin.eof() && i<row;++i){
for(int j=0;!fin.eof() && j<col;++j){
fin>>reading;
mat[i][j] = (double)reading;
}
}
}
ostream& operator<<(ostream& os,const CMatrix& m){
for(int i=0;i<m.sizeL();++i){
for(int j=0;j<m.sizeR();++j){
os.width(10);
os<<left<<m.mat[i][j];
}
os<<'\n';
}
os<<'\n';
return os;
}