C语言编程(两矩阵加减乘,转置,读入,保存,要求有菜单)

C课程设计【题目描述】
定义两个矩阵,本系统应能对矩阵进行数据录入、输出、格式化保存(至文件)、格式化读出(从文件中)功能;系统可以进行两矩阵求和、求差和求积运算,可实现两矩阵互为转置存放。
【题目要求】
(1)为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目;
(2)定义两个矩阵,数据类型自定。本系统应能对矩阵进行数据录入、输出、格式化保存(至文件)、格式化读出(从文件中)功能;系统可以进行两矩阵求和、求差和求积运算,可实现两矩阵互为转置存放。
(3)要求以上功能分别用函数实现。并要求用C语言的文件操作语句将以上所有结果保存在文件XX.out中。
【输入/输出要求】
(1)应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。进入每个操作后,根据程序的提示输入相应的信息;
(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
编程环境为VC++6.0

第1个回答  2009-07-01
菜单自己弄,就给你个范例。可以实现矩阵加,减,乘,及转置

两个文件,一个叫Matrix.h, 一个叫Matrix.cpp

//Matrix.h

#ifndef _MATRIX_H_
#define _MATRIX_H_

#include <math.h>
#include <stdlib.h>
#include <float.h>
#include<iostream.h>
class matrixobj
{
float matrix[3][3];
float cofactor(int i,int j);

public:
void displayMatrix();
void readMatrix();

friend matrixobj operator+(matrixobj &x, matrixobj &y);
friend matrixobj operator-(matrixobj &x, matrixobj &y);
friend matrixobj operator*(matrixobj &x, matrixobj &y);
friend matrixobj operator/(matrixobj &x, float d);

float matrixDeterminent();
matrixobj matrixInverse();
matrixobj matrixTranspose();

};

void matrixobj::displayMatrix()
{
int i,j;
for (i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
cout<<matrix[i][j];
cout<<"\n"<<endl;
}
}

void matrixobj::readMatrix()
{
int i,j;
float x=0;
for (i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
{
cin>>x;
matrix[i][j] = x;
}
}

float matrixobj::cofactor(int i,int j)
{
float cofactorValue;
int a1,b1,c1,d1,a2,b2,c2,d2;

a1 = (i + 1) % 3;
b1 = (j + 1) % 3;
c1 = (i + 2) % 3;
d1 = (j + 2) % 3;

a2 = (i + 2) % 3;
b2 = (j + 1) % 3;
c2 = (i + 1) % 3;
d2 = (j + 2) % 3;

cofactorValue = matrix[a1][b1] * matrix[c1][d1] - matrix[a2][b2] * matrix[c2][d2];

return cofactorValue;
}

float matrixobj::matrixDeterminent()
{
float det;

det = matrix[0][0] * cofactor(0,0);
det += matrix[0][1] * cofactor(0,1);
det += matrix[0][2] * cofactor(0,2);

return det;
}

matrixobj matrixobj::matrixInverse()
{
float det;
int i,j;
matrixobj z,y;

det = matrixDeterminent();

for (i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
z.matrix[i][j] = cofactor(i,j);

z = z.matrixTranspose();

if (det == (float) 0)
{

exit(0);
}

y = z / det;

return y;
}

matrixobj matrixobj::matrixTranspose()
{
int i,j;
matrixobj z;

for (i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
z.matrix[j][i] = matrix[i][j];

return z;
}

matrixobj operator+(matrixobj &x, matrixobj &y)
{
matrixobj z;
int i,j;

for (i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
z.matrix[i][j] = x.matrix[i][j] + y.matrix[i][j];

return z;
}

matrixobj operator-(matrixobj &x, matrixobj &y)
{
matrixobj z;
int i,j;

for (i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
z.matrix[i][j] = x.matrix[i][j] - y.matrix[i][j];

return z;
}

matrixobj operator*(matrixobj &x, matrixobj &y)
{
matrixobj z;
int i,j,k;

for (i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
z.matrix[i][j] = 0;

for (i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
for(k = 0; k < 3; k++)
z.matrix[i][j] += x.matrix[i][k] * y.matrix[k][j];

return z;
}

matrixobj operator/(matrixobj &x, float d)
{
int i,j;
matrixobj z;

for (i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
z.matrix[i][j] = x.matrix[i][j] / d;
cout<<"\n"<<endl;
return z;
}

#endif

// Matrix.cpp

#include <stdio.h>
#include <conio.h>
#include "matrix.h"
#include <float.h>
#include<iostream.h>
void main()
{
matrixobj a,b,c;
float x;

cout<<"Enter a 3 by 3 matrix (A): \n";
a.readMatrix();

cout<<"Enter a 3 by 3 matrix (B): \n";
b.readMatrix();

cout<<"Matrices (A) + (B) is : \n";
c = a + b;
c.displayMatrix();
getch();

cout<<"Matrices (A) - (B) is : \n";
c = a - b;
c.displayMatrix();
getch();

cout<<"Matrices (A) * (B) is : \n";
c = a * b;
c.displayMatrix();
getch();

x = a.matrixDeterminent();

getch();

c = a.matrixInverse();
c.displayMatrix();

getch();
}
第2个回答  2009-07-01
发给你了~~有错找我~本回答被提问者采纳
相似回答