悬赏100分,做一个C++编程题!急!做好就给分!

要求:
1:演示程序以用户和计算机对话方式进行。即在计算机上显示输入信息,由用户输入命令,相应输入数据和结果显示在其后。
2:题是这样的:输入矩阵1;输入矩阵2;求两矩阵之和;求两矩阵之差;求两矩阵之积;结束。
3:关于前两条的综合补充说明:最后做出的程序是这样的:显示“输入矩阵1”,然后你输入后回车,再显示“输入矩阵2”,你输入后回车;然后出现具体的选项(或类似的),输入"a"回车是求两矩阵之和;"b"是求两矩阵之差;"c"是求两矩阵之积;输入"q"是结束。
在线急等!!
大家好!谢谢大家的回答,这里有一些补充说明!
矩阵大小3*4左右就行,方阵也可以!
最好有注释!谢谢!
继续在线等!

include <iostream>
#include <vector>
#include <cassert>

using namespace std;

template < class T >
class CMatrix
{
public: //------------------ 构造部 -------------------------
CMatrix( void );
CMatrix( unsigned h, unsigned w );
CMatrix( const CMatrix& m );
CMatrix( const vector<T>& vec );
CMatrix( const vector<T>& vec,unsigned h,unsigned w );
~CMatrix(void);
private: //------------------- 数据部 ---------------------------
vector<T> m_vec_data;
unsigned m_u_width;
unsigned m_u_height;

public: // ------------------- 重载运算符 -------------------------

/// --- 以下均要求T具有如下运算能力:+ - += 等用到的。。。。

//取值运算
T& operator() ( unsigned row, unsigned col );
T operator() ( unsigned row, unsigned col ) const;

//赋值运算
CMatrix& operator = ( const CMatrix& );
CMatrix& operator += ( const CMatrix& );
CMatrix& operator -= ( const CMatrix& );
CMatrix& operator *= ( T );
CMatrix& operator /= ( T );

//二元运算符
CMatrix operator + ( const CMatrix& ) const;
CMatrix operator - ( const CMatrix& ) const;
CMatrix operator * ( const CMatrix& ) const;
CMatrix operator * ( T ) const;
CMatrix operator / ( T ) const;

bool operator == ( const CMatrix& ) const;
bool operator != ( const CMatrix& ) const;

public: // -------------------- 操作函数部 -------------------------
void transpose();
inline bool empty();
inline long size();
inline unsigned height();
inline unsigned width();

public: // ------------------ 输入输出 ----------------------
// 注意:矩阵元素必须支持输入输出,否则程序会错误!!
/*friend ostream& operator << ( ostream& os,const CMatrix& ma );*/
template < typename T > friend ostream& operator << ( ostream& os,const CMatrix<T>& ma );
//friend istream& operator >> ( istream& is,CMatrix& ma );
template < class T > friend istream& operator >> ( istream& is,CMatrix<T>& ma );
};
/**-----------------------------------------------------------------------------
* 输出
*------------------------------------------------------------------------------
*/
template < class T >
ostream& operator << ( ostream& os,const CMatrix<T>& ma )
{
if(!ma.m_u_height || !ma.m_u_width)
{
os<<"这是一个空矩阵!\n";
return os;
}
for(unsigned i=0;i<ma.m_u_height;i++)
{
for(unsigned j=0;j<ma.m_u_width;j++)
{
os<<ma.m_vec_data[i*ma.m_u_width + j]<<"\t";
}
os<<endl<<endl;
}
return os;
}
/**-----------------------------------------------------------------------------
* 输入
*------------------------------------------------------------------------------
*/
template < class T >
istream& operator >> ( istream& is,CMatrix<T>& ma )
{
if( !ma.m_u_height && !ma.m_u_width )
{
cerr<<"空矩阵!\n";
return is;
}
cout<<"请依次输入各个共"<<ma.m_u_height*ma.m_u_width<<"个成员:\n";
for( unsigned i=0;i<ma.m_u_height;i++ )
{
for( unsigned j=0;j<ma.m_u_width;j++ )
{
cout<<"["<<i<<"]["<<j<<"]=";
is>>ma.m_vec_data[i*ma.m_u_width + j];
}
}

return is;
}

这个我恰好又写过,还是上学的时候写的。网上没发布过。。

如果满足你需要的话请联系我,绝对不要RMB,我没那么无耻,呵呵。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-01-06
#include <stdio.h>
#include <iostream>
using namespace std;
#define SIZE 3 //定义矩阵大小
int a1[SIZE][SIZE],a2[SIZE][SIZE],b[SIZE][SIZE]; //a1 a2分别为矩阵1和2 b为结果数组

void add() { //求和
int i,j;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
b[i][j]=a1[i][j]+a2[i][j];
}

void sub() { //求差
int i,j;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
b[i][j]=a1[i][j]-a2[i][j];
}

void multiply() { //求积
int i,j,k;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
for(k=0;k<SIZE;k++)
b[i][j]+=a1[i][k]*a2[k][i];
}

void clear() { //结果数组清零,否则不能进行多次运算!
int i,j;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
b[i][j]=0;
}

void outputa1() { //输出矩阵1
int i,j;
cout<<"矩阵1是:"<<endl;
for(i=0;i<SIZE;i++) {
for(j=0;j<SIZE;j++)
cout<<a1[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}

void outputa2() { //输出矩阵2
int i,j;
cout<<"矩阵2是:"<<endl;
for(i=0;i<SIZE;i++) {
for(j=0;j<SIZE;j++)
cout<<a2[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}

void outputb() { //输出结果矩阵
int i,j;
cout<<"结果矩阵是:"<<endl;
for(i=0;i<SIZE;i++) {
for(j=0;j<SIZE;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}

void main(){

int i,j;
int flag=1;//退出标志
cout<<"输入矩阵1:"<<endl;
for(i=0;i<SIZE;i++) //取得矩阵1
for(j=0;j<SIZE;j++)
cin>>a1[i][j];
cout<<endl<<"输入矩阵2:"<<endl; //取得矩阵2
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
cin>>a2[i][j];

while(flag) { //判断退出标志
char c;
cout<<"输入操作"<<endl;
cout<<"a:求和"<<endl;
cout<<"b:求差"<<endl;
cout<<"c:求积"<<endl;
cout<<"q:退出"<<endl;
cout<<"请输入:";
cin>>c;
cout<<endl;
switch(c){
case 'a': clear();add();outputa1();outputa2();outputb();break;
case 'b': clear();sub();outputa1();outputa2();outputb();break;
case 'c': clear();multiply();outputa1();outputa2();outputb();break;
case 'q': flag=0;break;
default:
}
}
}本回答被提问者采纳
第2个回答  2009-01-06
已经编译运行确认:
按照你的新需求,又改了一些:

#include<conio.h>
#include<stdio.h>

#include <stdio.h>
#include <stdlib.h>
#define X 3
#define Y 3

int a[X][Y]; //储存结果用的数组a
int b[X][Y]; //储存第一个矩阵用的数组b
int c[X][Y]; //储存第二个矩阵用的数组c

void add(int b[][X],int c[][Y]) //矩阵加法
{
int i,j,k;
for(i=0;i<X;i++)
for(j=0;j<Y;j++)
{
for(k=0;k<Y;k++)
a[i][j]+=(b[i][k]+c[k][j]);
}
}

void sub(int b[][X],int c[][Y]) //矩阵减法
{
int i,j,k;
for(i=0;i<X;i++)
for(j=0;j<Y;j++)
{
for(k=0;k<Y;k++)
a[i][j]+=(b[i][k]-c[k][j]);
}
}

void matrix(int b[][X],int c[][Y]) //矩阵乘法
{
int i,j,k;
for(i=0;i<X;i++)
for(j=0;j<Y;j++)
{
for(k=0;k<Y;k++)
a[i][j]+=b[i][k]*c[k][j];
}
}

int main()
{
int i,j,temp;
char chr;

printf("请输入第一个矩阵\n",X,Y);
for(i=0;i<Y;i++)
for(j=0;j<Y;j++)
{
scanf("%d",&temp);
b[i][j]=temp;
}
printf("请输入第二个矩阵\n",X,Y);
for(i=0;i<X;i++)
for(j=0;j<Y;j++)
{
scanf("%d",&temp);
c[i][j]=temp;
}

printf("第一个矩阵为:",X,Y);
for(i=0;i<X;i++){
printf("\n");
for(j=0;j<Y;j++)
printf("%3d ",b[i][j]);
}
printf("\n");
printf("第二个矩阵为:",X,Y);
for(i=0;i<X;i++){
printf("\n");
for(j=0;j<Y;j++)
printf("%3d ",c[i][j]);
}
printf("\n");

while(1)
{
printf("\n\n请输入处理请求的种类: \n");
printf("a:两矩阵之和 \n");
printf("b:两矩阵之差 \n");
printf("c:两矩阵之积 \n");
printf("q:退出 \n");
fflush(stdin);
scanf("%c",&chr);
switch(chr)
{
case 'a':
add(b,c);
break;
case 'b':
sub(b,c);
break;
case 'c':
matrix(b,c);
break;
case 'q':
return 0;
break;
default:
printf("错误输入!!\n");
break;
}

printf("处理后的矩阵为:",X,Y);
for(i=0;i<X;i++)
{
printf("\n");
for(j=0;j<Y;j++)
printf("%3d ",a[i][j]);
}
}
fflush(stdin);
getchar();

return 0;
}

急!请C++高手帮忙编程。100分送上。
\/*(1)定义一个函数 int count(int a[],int n) 在n个元素的数组a中,统计出大于零的元素个数,此个数作为函数返回值。 在main()函数中,对数组b做如下初始化 int b[]={15,16,-23,7,-5,19,-2,0,28,11};然后调用你定义的函数,在主函数中输出数组b中小于零元素的个数。\/ include...

c++编程问题,求大神打出代码,只要没错误,能运行,100悬赏请拿好
include <iostream>#include <string>using namespace std;class Human {public: string name; string sex; int old; Human() {} ~Human() {} string getName(); void setName(string name); string getSex(); void setSex(string sex); int getOld(); ...

悬赏100分,求做一个C++编程题,在线急等!高手来做
1:有一篇英文文章存储在文件a.txt中,编个c++\/c程序将其中的单词word1替换为word2(替换和被替换单词都由键盘输入)2:需按照区分和不区分大小写两种情况讨论和编写。3:尽量不使用高... 1:有一篇英文文章存储在文件a.txt中,编个c++\/c 程序将其中的单词word1替换为word2(替换和被替换单词都由键盘输入)2:需按照...

现有一道 C++编程题,请各位高手能够鼎力相助。速求……急!
回答:长见识了啊...感谢楼主!

一道C++编程题目,求大神帮忙,有没有简单点的算法,求程序!!答得好可以...
\/ 思路如下:1.对于第八列,和计算完成后,不管找没找到值,寻找当前列下一行(即i+1),无需进入下一列;2.对于非第八列,有两种情况:a.和大于等于最大值10(如果矩阵中有零值存在,此处应为大于10),不满足路径条件,没必要进入下一列计算,进入当前列下一行进行计算(即i+1);b.满足条件...

c++编程题 1.编写一个函数,安所给的百分制的成绩分数,返回与该分数对应...
第一个函数 include <stdio.h> include <math.h> int main(void){ double a, b, c, temp, y, s;printf("input a,b,c:");scanf("%lf%lf%lf", &a, &b, &c);if (a < b){ temp = a;a = b;b = temp;} if (a < c){ temp = a;a = c;c = temp;} if (b <...

C++编程题,求程序代码,非常感谢!!
include <iostream>using namespace std;void main(){ int m,n; int **p; float avg = 0.0; cout<<"请输入行数和列数."<<endl; cin>>m>>n; p=new int*[m];\/\/动态申请二维数组 for (int i=0;i<m;i++) { p[i] = new int[n]; } cout...

请问大家这道C++编程题怎么做?求帮忙
先将输入的数保存到数组,然后遍历数字,判断相邻数字是否相同即可 使用一个变量记录当前是否处于数字连续的状态,用于输出中括号 一个小技巧是给数组多分配一个位置并将其置为-1,方便判断数组最后一个数 C++代码和运行结果如下:输出符合样例,望采纳~附源码链接:判断连续数字 ...

高分!c++编程问题!编写一个递归函数int max(a [ ],intn ),其功能是...
include<iostream>using namespace std;#define N 10int max(int *a,int n){ if ( n==1 ) return( a[0] ); else { int x=max(a+1,n-1); return( (a[0]>x )?(a[0]):(x) ); }}void main(){ int a[N],i; srand((unsigned int)time(NULL)); for ( i=0;...

【C++编程题】求大佬帮忙 求详细过程 万分感谢 急!!!
按下列要求编写程序 (1)从键盘输入若干名学生数据包括学号、姓名、三门课成绩),计算每位学生的总分,将原有数据和计算出的总分存入二进制文件stu.bin。 (2)从二进制文件stu.bin中依次输入每个学生的数据和该数据在 stu.bin文件中的位置指针值(即索引),按总分降序排序后,将已排序的学生数据的...

相似回答