c矩陣類課程設計
A. 跪求C++簡單的矩陣運算,課程設計,一定要用C++編寫啊 2.基本要
#include"stdafx.h"#includeusingnamespacestd;constintrows=8,cols=8;HINSTANCEhInst;HBITMAPball;HDChdc,mdc,bufdc;HWNDhWnd;DWORDtPre,tNow;char*str;intnowPos,prePos;boolfind;stackpath;intmapIndex[rows*cols]={0,2,0,0,0,0,0,0, //材10,1,0,1,1,1,1,0, //材20,1,0,1,0,1,1,0, //材30,1,0,0,0,1,1,0, //材40,1,1,1,1,1,1,0, //材50,1,0,0,0,0,1,0, //材60,0,1,1,1,1,1,0, //材70,0,0,0,0,0,3,0};//材8int record[rows*cols];ATOMMyRegisterClass(HINSTANCEhInstance);BOOLInitInstance(HINSTANCE,int);LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);voidMyPaint(HDChdc);intAPIENTRYWinMain(HINSTANCEhInstance, HINSTANCEhPrevInstance, LPSTR lpCmdLine, int nCmdShow){MSGmsg;MyRegisterClass(hInstance);if(!InitInstance(hInstance,nCmdShow)) {returnFALSE;} while(msg.message!=WM_QUIT) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); }else{tNow=GetTickCount();if(tNow-tPre>=100)MyPaint(hdc);} }returnmsg.wParam;}//****注冊窗口*************************ATOMMyRegisterClass(HINSTANCEhInstance){WNDCLASSEXwcex;wcex.cbSize=sizeof(WNDCLASSEX); wcex.style=CS_HREDRAW|CS_VREDRAW;wcex.lpfnWndProc=(WNDPROC)WndProc;wcex.cbClsExtra=0;wcex.cbWndExtra=0;wcex.hInstance=hInstance;wcex.hIcon=NULL;wcex.hCursor=NULL;wcex.hCursor=LoadCursor(NULL,IDC_ARROW);wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName=NULL;wcex.lpszClassName="canvas";wcex.hIconSm=NULL;returnRegisterClassEx(&wcex);}//****初始化*************************************BOOLInitInstance(HINSTANCEhInstance,intnCmdShow){HBITMAPbmp;hInst=hInstance;hWnd=CreateWindow("canvas","迷宮",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);if(!hWnd){returnFALSE;}MoveWindow(hWnd,10,10,430,450,true);ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);hdc=GetDC(hWnd);mdc=CreateCompatibleDC(hdc);bufdc=CreateCompatibleDC(hdc);bmp=CreateCompatibleBitmap(hdc,cols*50,rows*50);SelectObject(mdc,bmp);HBITMAPtile;introwNum,colNum;inti,x,y;tile=(HBITMAP)LoadImage(NULL,"tile.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);ball=(HBITMAP)LoadImage(NULL,"ball.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);for(i=0;i=0&&record[up]){path.push(up);record[up]=0;prePos=nowPos;nowPos=up; if(mapIndex[nowPos]==3)find=true;}elseif(down=rowNum*cols&&record[left]) {path.push(left);record[left]=0;prePos=nowPos;nowPos=left;if(mapIndex[nowPos]==3)find=true;}elseif(right<=(rowNum+1)*cols-1&&record[right]) {path.push(right);record[right]=0;prePos=nowPos;nowPos=right;if(mapIndex[nowPos]==3)find=true;}else{if(path.size()<=1)//str="xxxxx";else{path.pop();prePos=nowPos;nowPos=path.top();}}}else{str="找到出口";}TextOut(mdc,0,0,str,strlen(str));BitBlt(hdc,10,10,cols*50,rows*50,mdc,0,0,SRCCOPY);tPre=GetTickCount();}//****消息函數***********************************LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam){switch(message){caseWM_KEYDOWN:if(wParam==VK_ESCAPE)PostQuitMessage(0);break;caseWM_DESTROY:DeleteDC(mdc);DeleteDC(bufdc);DeleteObject(ball);ReleaseDC(hWnd,hdc);PostQuitMessage(0);break;default:returnDefWindowProc(hWnd,message,wParam,lParam); } return0;}// 可以運行 請採納 有不懂的可以聯系我這個可是標准c++的 這是結果這是源代碼 /s/1i3kjNtr
B. 大神求c++矩陣轉置與乘法計算的課程設計的編碼(^ω^)
1、完整代碼如下,已通過VS2012編譯及輸入測試,結果驗證
2、復制構造函數懶得寫,反正也沒用到指針分配位置。默認的對程序也是沒影響的
#include<iostream>
#include<string>
#include<vector>
#include<time.h>
#include<algorithm>
usingnamespacestd;
classCMatrix
{
public:
CMatrix():ivec(0,0){}
CMatrix(intr,intc):row(r),col(c),ivec(r*c,0)
{cout<<"Initial"<<r<<"X"<<c<<"matrix."<<endl;}
CMatrix(vector<int>v,intr,intc):ivec(v.begin(),v.end()),row(r),col(c){}
voidintialMatrix();
boolsameType(constCMatrix&)const;
CMatrixtransposition();
friendistream&operator>>(istream&,CMatrix&);
friendostream&operator<<(ostream&,constCMatrix&);
friendCMatrixoperator*(constCMatrix&matrix1,constCMatrix&matrix2);
private:
vector<int>ivec;
introw;
intcol;
};
voidCMatrix::intialMatrix()
{
intval;
for(vector<int>::iteratorbeg=ivec.begin();beg!=ivec.end();++beg)
{
cin>>val;
*beg=val;
}
}
boolCMatrix::sameType(constCMatrix&matrix)const
{
if(row==matrix.row&&col==matrix.col)
returntrue;
else
returnfalse;
}
istream&operator>>(istream&is,CMatrix&matrix)
{
is>>matrix.row>>matrix.col;
cout<<"Initial"<<matrix.row<<"X"<<matrix.col<<"matrix."<<endl;
returnis;
}
ostream&operator<<(ostream&os,constCMatrix&matrix)
{
intformat=1;
for(vector<int>::const_iteratorbeg=matrix.ivec.begin();beg!=matrix.ivec.end();++beg)
{
os<<*beg<<" ";
if(!(format%matrix.col))
os<<endl;
format++;
}
os<<endl;
returnos;
}
CMatrixoperator*(constCMatrix&matrix1,constCMatrix&matrix2)
{
CMatrixtempMatrix(matrix1);
if(matrix1.sameType(matrix2))
{
vector<int>::const_iteratorbeg2=matrix2.ivec.begin();
for(vector<int>::iteratorbeg=tempMatrix.ivec.begin();beg!=tempMatrix.ivec.end();++beg,++beg2)
*beg=(*beg)*(*beg2);
}
returntempMatrix;
}
CMatrixCMatrix::transposition()
{
vector<int>mvec;
for(inti=0;i!=this->col;i++)
{
for(intj=0;j!=this->row;j++)
{
mvec.push_back(*(ivec.begin()+i+j*this->col));
}
}
CMatrixtrans(mvec,this->col,this->row);
returntrans;
}
intmain()
{
CMatrixmat(2,3);
mat.intialMatrix();
cout<<mat<<endl;
CMatrixmat2(mat.transposition());
cout<<mat2<<endl;
CMatrixmat3(2,3);
mat3.intialMatrix();
cout<<mat*mat3<<endl;
}
C. Hilbert矩陣的條件數及其程序設計C語言課程設計
疏矩陣應用要求:實現三元組,十字鏈表下的稀疏矩陣的加、轉、乘的實現。sdsdsdsd 我剛寫了一個稀疏矩陣的代碼
D. C++課程設計:矩陣計算器,具體看補充
斷兩個矩陣是否可以相加,如可以,計算兩
E. c語言程序設計課程設計 圖書管理系統 求原代碼
高級語言程序設計(2)課程設計
一 程序設計說明書
【設計題目】 圖書館借閱管理
【問題描述】圖書館,適合用C++面向對象的功能來描述。圖書館管理系統分為借書、還書、圖書管理和讀者服務等四個部分。設計一個讀者類Reader,記錄每個讀者基本信息;讀者庫類Rdatabase,記錄所有讀者信息;圖書類Book, 記錄每本書的基本信息;圖書庫類Bdatabase, 記錄所有圖書信息。
【基本要求】
1讀者庫類RDatabase中,其構造函數中,將read.txt文件中所有讀入讀者記錄rede[]中。處理完畢,在析構函數中將read[]中的所有未刪記錄寫入到read.txt中。
2圖書庫類BDatabase中,其構造函數中,將book.txt文件中所有讀入圖書記錄book[]中。處理完畢,在析構函數中將book[]中的所有未刪記錄寫入到book.txt中。
3 利用構造函數完成讀者和圖書數據初始化,完成內存分配。程序結束前,析構函數完成所申請的堆內存空間。
4 編寫主函數,對所編寫的矩陣類進行全面測試。要求用戶界面採用菜單方式。測試中需要讀者和圖書數據通過I/O流從磁碟文件讀入,同時顯示在屏幕上。得到的數據通過I/O流寫入磁碟文件保存,同時顯示在屏幕上。
5 源程序中要有充分的注釋,報告中要有詳細的流程圖和文字材料。
【類的設計】
該程序包含了四個類,如下:
1.Reader類,有讀者的基本管理功能,具有以下私有數據:
int tag;//刪除標記 1:已刪;0:未刪
int no;//讀者編號
char name[10];//讀者姓名
int borbook[Maxbor];//所借圖書
2.讀者庫類Rdatabase, 具有以下私有數據:
int top;//讀者記錄指針
Reader read[Maxr];//讀者記錄
3.圖書庫類Book,有一本圖書的基本功能,有以下私有數據:
int tag;//刪除標記 1:已刪;0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否在架 1在架 0已借
4.圖書庫類BDatabase,有以下私有數據:
int top;//圖書記錄指針
Book book[Maxb];//圖書記錄
【特殊函數的設計說明】
構造函數
1.Reader類中構造函數Reader(),初始化函數;
2.讀者庫類RDatabase中,其構造函數Rdatabase(),將read.txt文件中所有讀入讀者記錄rede[]中。
3.Book類中構造函數Book(),初始化函數;
4.圖書庫類BDatabase中,其構造函數中,將book.txt文件中所有讀入圖書記錄book[]中。
拷貝構造函數
Reader類中的拷貝構造函數將getname()的返回值讀者姓名拷貝到setname()中,Book類中的拷貝構造函數將getname()函數的返回值圖書名拷貝到圖書名設置函數setname()中。
析構函數
1.讀者庫類RDatabase中,其析構函數~Rdatabase(),將read[]中的所有未刪記錄寫入到read.txt中;
2.圖書庫類BDatabase中,其析構函數~Bdatabase(),將book[]中的所有未刪記錄寫入到book.txt中。
運算符重載
重載了「=」,當比較讀者編號和圖書編號時,重載;重載位運算符「〈〈」和「〉〉」等。
【主要函數演算法流程圖】
【程序的使用方法】
1.進入操作頁面,按提示操作;
2.首先,新增圖書和讀者信息,之後就可以對以存在的信息進行操作;
3.操作當中,可以隨時增加,更改和刪除圖書或讀者信息;
4.當選擇退出時,進行清屏。
二 程序上機調試報告
【語法錯誤及其排除】
1.在敲程序時,有很多拼寫錯誤,例好多處把Readdata()誤打Readdate();結束的分號,在不同的輸入法狀態下輸入,這些小錯誤剛開始很難發現,不過有了經驗,就很容易了。
2.創建新的構造函數時,使用出現了錯誤。重載構造函數要注意函數的訪問許可權,結果就不會出現錯誤。
【演算法錯誤及其排除】
1.讀者類中借書操作函數中,採用循環語句時判斷讀者已借圖書量時for(int i=0;i<Maxbor;i++)誤寫為for(int i=1;i<Maxbor;i++),使循環發生錯誤。
2.指針使用錯誤,指針b和r混淆,導致編譯錯誤得到「error C2660: 'retbook' : function does not take 1 parameters」錯誤報告。
三 程序測試結果
【收獲及體會】
除了課堂外,課程設計是最能學到東西的,最考驗人的。在做課程設計這段時間,時刻都感覺自己有好多不懂,要學的太多了!經過這次課程設計,讓我對C++這門語言有了更深的認識,操作能力有了提高。要想得到敲的代碼運行出來後的滿足感,需要耐心細心,毅力以及充沛的體力。只有經過多次編輯,多次編譯,再多次運行,才能編寫出更好的程序,有時候需要多次的更正才達到所要的運行結果。學習編程,需要多揣摩,實踐,實踐,再實踐,編程技能才能更上一層樓,此外還得多向高手請教!
【源程序代碼】
//********************
//圖書館借閱管理
//班級:
//學號:
//姓名:
//********************
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<fstream.h>
const int Maxr=1000;//最多的讀者
const int Maxb=10000;//最多的圖書
const int Maxbor=8;//每位讀者最多借8本書
class Reader //讀者類
{
int tag;//刪除標記 1已刪;0未刪
int no;//讀者編號
char name[10];//讀者姓名
int borbook[Maxbor];//所借圖書
public :
Reader(){}//構造函數
char *getname(){return name;}//獲取讀者姓名
int gettag(){return tag;}//獲取刪除標記
int getno(){return no;}//獲取讀者編號
void setname(char na[])//設置讀者姓名
{
strcpy(name,na);
}
void delbook(){tag=1;}//設置刪除標記
void addreader(int n,char *na)//增加讀者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借書操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==0)
{
borbook[i]=bookid;
}
}
}
int retbook(int bookid)//還書操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()//輸出讀者信息
{
cout<<setw(5)<<no<<setw(10)<<name<<"借書編號:";
for(int i=0;i,Maxbor;i++)
if(borbook[i]!=0)
cout<<borbook[i]<<endl;
}
};
class RDatabase//讀者庫類
{
int top;//讀者記錄指針
Reader read[Maxr];//讀者記錄
public:
RDatabase()//構造函數,將reader.txt讀到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);
while(1)
{
file.read((char*)&s,sizeof(s));
if(!file)break;
top++;
read[top]=s;
}
file.close();
}
void clear()//刪除所有讀者信息
{
top=-1;
}
int addreader(int n,char *na)//添加讀者,檢查是否已存在
{
Reader *p=query(n);
if(p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;
}
Reader*query(int readerid)//按編號查找
{
for(int i=0;i<=top;i++)
if(read[i].getno()==readerid&&read[i].gettag==0)
return &read[i];
return NULL;
}
void disp()//刪除讀者所有信息
{
for(int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();//讀者庫維護
~RDatabase()//析構函數,將read[]寫入reader.txt文件中
{
fstream file("reader.txt",ios::out);
for(int i=0;i<=top;i++)
if(read[i].gettag()==0)
file.write((char*)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata()
{
int choice=1;
char rname[20];
int readerid;
Reader*r;
while(choice!=0)
{
cout<<"讀者服務 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出"<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"請輸入讀者編號:";
cin>>readerid;
cout<<"讀入讀者姓名:";
cin>>rname;
addreader(readerid,rname);
break;
case 2:
cout<<"請輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"讀者不存在"<<endl;
break;
}
cout<<"請輸入新讀者姓名:";
cin>>rname;
r->setname(rname);
break;
case 3:
cout<<"請輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"讀者不存在"<<endl;
break;
}
r->delbook();
break;
case 4:
cout<<"請輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"該讀者編號不存在"<<endl;
break;
}
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
class Book//圖書類
{
int tag;//刪除標記 1:已刪;0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否在架 1在架 0已借
public:
Book(){}
char*getname(){return name;}//獲取讀者姓名
int getno(){return no;}//獲取圖書編號
int gettag(){return tag;}//獲取刪除標記
void setname(char na[])//設置書名
{
strcpy(name,na);
}
void delbook(){tag=1;}//刪除圖書
void addbook(int n,char*na)//增加圖書
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借書操作
{
if(onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//還書操作
{
onshelf=1;
}
void disp()//輸出圖書
{
cout<<setw(6)<<no<<setw(18)<<name<<setw(10)<<(onshelf==1?"在架":"已借")<<endl;
}
};
class BDatabase//圖書庫類
{
int top;//圖書記錄指針
Book book[Maxb];//圖書記錄
public:
BDatabase()//構造函數,將book.txt讀到book[]中
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while(1)
{
file.read((char*)&b,sizeof(b));
if(!file)break;
top++;
book[top]=b;
}
file.close();
}
void clear()//全刪
{
top=-1;
}
int addbook(int n,char*na)//增加圖書
{
Book*p=query(n);
if(p==NULL)
{
top++;
book[top].addbook(n,na);
return 1;
}
cout<<"新增成功!"<<endl;
}
Book*query(int bookid)//查找圖書
{
for(int i=0;i<=top;i++)
if(book[i].getno()==bookid&&book[i].gettag()==0)
return NULL;
}
void bookdata();//圖書庫維護
void disp()
{
for(int i=0;i<=top;i++)
if(book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析構函數,將book[]寫入book.txt文件中
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if(book[i].gettag()==0)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata()
{
int choice;
char bname[40];
int bookid;
Book *b;
while(choice!=0)
{
cout<<"圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出"<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"輸入圖書編號:";
cin>>bookid;
cout<<"輸入圖書書名:";
cin>>bname;
addbook(bookid,bname);
break;
case 2:
cout<<"輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該圖書不存在"<<endl;
break;
}
cout<<"輸入新書名:";
cin>>bname;
b->setname(bname);
cout<<"更名成功!"<<endl;
break;
case 3:
cout<<"輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該圖書不存在!"<<endl;
break;
}
b->delbook();
break;
case 4:
cout<<"請輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該書不存在!"<<endl;
break;
}
b->disp();
break;
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
void main()
{
int choice=1,bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!=0)
{
cout<<" 1借書 "<<endl;
cout<<" 2還書 "<<endl;
cout<<" 3圖書維護 "<<endl;
cout<<" 4讀者維護 "<<endl;
cout<<" 0離開 "<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"借書,請輸入讀者編號:";
cin>>readerid;
cout<<"圖書編號:";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"哈哈,借書成功!";
break;
}
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<"不存在該書!"<<endl;
break;
}
if(b->borrowbook()==0)
{
cout<<"該書已借"<<endl;
break;
}
r->borrowbook(b->getno());
break;
cout<<"借書成功!"<<endl;
case 2:
cout<<"還書,請輸入讀者編號:";
cin>>readerid;
cout<<"請輸入圖書編號;";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"不存在該讀者!"<<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
cout<<"還書成功!"<<endl;
case 3:
BookDB.bookdata();
break;
case 4:
ReaderDB.readerdata();
break;
}
}
}
【輸出結果】
1借書
2還書
3圖書管理
4讀者服務
0退出
3
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
輸入圖書編號:1111
輸入圖書書名:武林外傳
新增成功!
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
輸入圖書編號:2222
輸入圖書書名:今夜無眠
新增成功!
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
0
1借書
2還書
3圖書管理
4讀者服務
0退出
4
讀者服務 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
請輸入讀者編號:001
讀入讀者姓名:周強
讀者服務 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
0
1借書
2還書
3圖書管理
4讀者服務
0退出
1
借書,請輸入讀者編號:001
圖書編號:1111
哈哈,借書成功! 1借書
2還書
3圖書管理
4讀者服務
0退出
2
還書,請輸入讀者編號:001
請輸入圖書編號;1111
還書成功!
1借書
2還書
3圖書管理
4讀者服務
0退出
3
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
2
輸入圖書編號:2222
輸入新書名:金庸全集
更名成功!
Press any key to continue
F. 利用C語言完成課程設計:矩陣的基本運算,如何完成
匿名2010-04-27 矩陣抄是線性代數和襲矩陣論研究的主要對象,失求解微分方程組的重要工具,也是計算機圖形學和計算機游戲開發的重要數學基礎。矩陣的主要運算有數乘矩陣、兩矩陣相加、相減、相乘和相除以及矩陣的轉置,由於矩陣的除法涉及奇異值分解的問題,比較復雜,本課程設計暫不要求,緊要求完成矩陣最大維數不大於五維的矩陣數乘、加法、減法、乘法以及轉置運算。 數學模型或問題分析: MA={ a00 a01 a02 ….. a0n a10 a11 a12 …... a1n . . . . . . . . am0 am1 am2 …… amn }= [ aij]i=1,2,3...m,j=1,2,3....n. MB= { b00 b01 b02 ….. b0q b10 b11 b12 …... b1q . . . . . . . . bp0 bp1 bp2 …… apq }=[brc]r=0,1,2...p,c=0,1,2...n。 利用實數k 相乘 。 我來回答匿名
G. 求高手寫個矩陣類的設計與實現的C++程序
#include <stdio.h>
#define N 10
/*輸入*/
void input(int a,int b,int (*in)[N])
{
int i,j,ele;
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
scanf("%d",&ele);
in[i][j]=ele;
}
}
}
/*輸出*/
void output(int a,int b,int (*out)[N])
{
int i,j,n=0;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{
printf("%6d",out[i][j]);
n++;
if(n%b==0) printf("\n");
}
printf("\n");
}
/*矩乘*/
void multi(int m,int s,int n,int (*a)[N],int (*b)[N],int (*c)[N])
{
int i,j,k,sum=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<s;k++)
sum+=a[i][k]*b[k][j];
c[i][j]=sum;
sum=0;
}
}
}
main()
{
int m,n,s;
int a[N][N],b[N][N],c[N][N];
char logic;
do
{
printf("請輸入相乘矩陣的行數與列數(m×s)*(s×n)(m,s,n<=%d):\n",N);
scanf("%d%d%d",&m,&s,&n);
printf("左行數=%d 左行、右列數=%d 右列數=%d\n",m,s,n);
printf("請依次輸入左、右矩陣的元素:\n");
input(m,s,a);
input(s,n,b);
printf("左矩陣為:\n");
output(m,s,a);
printf("右矩陣為:\n");
output(s,n,b);
printf("以上矩陣輸入正確嗎?(否(N))\n");
while(getchar()!='\n');
logic=getchar();
}
while((logic=='n')||(logic=='N'));
multi(m,s,n,a,b,c);
printf("所求矩陣為:\n");
output(m,n,c);
}
H. c++/c 課程設計 矩陣運算系統設定及實現
看看這個合不合你的要求,實現了任意大小矩陣的加減乘,有終端輸入矩陣大小和每個元素。
這是頭文件:
#include <iostream>
using std::cout;
using std::endl;
class Matrix{
public:
Matrix():row(0),column(0),m(0){}
Matrix(const Matrix& ma);
~Matrix();
void setMatrix(int r,int c,double **ma);
int getRow(){return row;}
int getColumn(){return column;}
void display();
Matrix& operator=(const Matrix& ma);
Matrix operator+(const Matrix& ma)const;
Matrix operator-(const Matrix& ma)const;
Matrix operator*(const Matrix& ma)const;
private:
int row;
int column;
double** m;
};
Matrix::Matrix(const Matrix &ma){
this->row=ma.row;
this->column=ma.column;
m=new double *[row];
for(int i=0;i<row;i++)
m[i]=new double[column];
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
m[i][j]=ma.m[i][j];
}
Matrix::~Matrix(){
for(int i=0;i<this->row;i++)
delete[] m[i];
delete[] m;
}
void Matrix::setMatrix(int r,int c,double** ma){
for(int i=0;i<this->row;i++)
delete[] m[i];
delete[] m;
this->row=r;
this->column=c;
m=new double *[row];
for(int i=0;i<row;i++)
m[i]=new double[column];
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
m[i][j]=ma[i][j];
}
void Matrix::display(){
if(m==0) cout<<"Matrix has not been initialised.\n";
else{
for(int i=0;i<row;i++){
for(int j=0;j<column;j++)
cout<<m[i][j]<<" ";
cout<<endl;
}
}
}
Matrix& Matrix::operator =(const Matrix &ma){
if(m!=0){
for(int i=0;i<this->row;i++)
delete[] m[i];
delete[] m;
}
this->row=ma.row;
this->column=ma.column;
m=new double *[row];
for(int i=0;i<row;i++)
m[i]=new double[column];
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
m[i][j]=ma.m[i][j];
return *this;
}
Matrix Matrix::operator +(const Matrix &ma) const{
double** result=new double *[this->row];
for(int i=0;i<this->row;i++)
result[i]=new double[this->column];
for(int i=0;i<this->row;i++)
for(int j=0;j<this->column;j++)
result[i][j]=this->m[i][j]+ma.m[i][j];
Matrix temp;
temp.setMatrix(this->row,this->column,result);
for(int i=0;i<this->row;i++)
delete[] result[i];
delete[] result;
return temp;
}
Matrix Matrix::operator -(const Matrix &ma) const{
double** result=new double *[this->row];
for(int i=0;i<this->row;i++)
result[i]=new double[this->column];
for(int i=0;i<this->row;i++)
for(int j=0;j<this->column;j++)
result[i][j]=this->m[i][j]-ma.m[i][j];
Matrix temp;
temp.setMatrix(this->row,this->column,result);
for(int i=0;i<this->row;i++)
delete[] result[i];
delete[] result;
return temp;
}
Matrix Matrix::operator *(const Matrix &ma) const{
double** result=new double *[this->row];
for(int i=0;i<this->row;i++)
result[i]=new double[this->column];
double entry;
for(int i=0;i<this->row;i++)
for(int j=0;j<ma.column;j++){
entry=0;
for(int k=0;k<this->column;k++)
entry=entry+(this->m[i][k])*(ma.m[k][j]);
result[i][j]=entry;
}
Matrix temp;
temp.setMatrix(this->row,ma.column,result);
for(int i=0;i<this->row;i++)
delete[] result[i];
delete[] result;
return temp;
}
這是主程序:
#include <iostream>
#include <cstring>
using std::cout;
using std::cin;
using std::endl;
#include "Matrix.h"
int main(){
int i;
Matrix op1;
Matrix op2;
Matrix result;
do{
cout<<"1.Enter operand 1 2.Enter operand 2 3.Add 4.Subtract 5.Multiply 6.Display 7.Quit"<<endl;
cout<<"Enter your choice: ";
cin>>i;
if(i==1){
int r,c;
cout<<"Enter the number of rows for operand 1: ";
cin>>r;
cout<<"Enter the number of columns for operand 1: ";
cin>>c;
double** m=new double *[r];
for(int j=0;j<r;j++)
m[j]=new double[c];
cout<<"Enter the elements of operand 1, from left to right and from top to bottom:"<<endl;
for(int j=0;j<r;j++)
for(int k=0;k<c;k++)
cin>>m[j][k];
op1.setMatrix(r,c,m);
for(int j=0;j<r;j++)
delete[] m[j];
delete m;
}
else if(i==2){
int r,c;
cout<<"Enter the number of rows for operand 2: ";
cin>>r;
cout<<"Enter the number of columns for operand 2: ";
cin>>c;
double** m=new double *[r];
for(int j=0;j<r;j++)
m[j]=new double[c];
cout<<"Enter the elements of operand 2, from left to right and from top to bottom:"<<endl;
for(int j=0;j<r;j++)
for(int k=0;k<c;k++)
cin>>m[j][k];
op2.setMatrix(r,c,m);
for(int j=0;j<r;j++)
delete[] m[j];
delete m;
}
else if(i==3){
if(op1.getRow()>0&&op1.getColumn()>0&&op2.getRow()>0&&op2.getColumn()>0&&op1.getRow()==op2.getRow()&&op1.getColumn()==op2.getColumn()){
result=op1+op2;
cout<<endl<<"The result of op1 plus op2 is:"<<endl;
result.display();
}
else cout<<"The dimensions of the two operands do not match. Unable to do the addition."<<endl;
}
else if(i==4){
if(op1.getRow()>0&&op1.getColumn()>0&&op2.getRow()>0&&op2.getColumn()>0&&op1.getRow()==op2.getRow()&&op1.getColumn()==op2.getColumn()){
result=op1-op2;
cout<<endl<<"The result of op1 minus op2 is:"<<endl;
result.display();
}
else cout<<"The dimensions of the two operands do not match. Unable to do the subtraction."<<endl;
}
else if(i==5){
if(op1.getRow()>0&&op1.getColumn()>0&&op2.getRow()>0&&op2.getColumn()>0&&op1.getColumn()==op2.getRow()){
result=op1*op2;
cout<<endl<<"The result of op1 times op2 is:"<<endl;
result.display();
}
else cout<<"The dimensions of the two operands do not match. Unable to do the multiplication."<<endl;
}
else if(i==6){
int j;
cout<<"Which matrices do you want to display?"<<endl;
cout<<"1.Operand 1 2.Operand 2 3.Result"<<endl;
cin>>j;
if(j==1) op1.display();
if(j==2) op2.display();
if(j==3) result.display();
}
else if(i==7) break;
}while(1);
return 0;
}
I. 矩陣類的設計,用C++,要求:定義矩陣類,包含行、列和矩陣數據元素;
我沒有重載函數,只重載了運算符,你看看行不行。
這是頭文件:
#ifndef MATRIX_H
#define MATRIX_H
#include <iostream>
using std::cout;
using std::endl;
class Matrix{
public:
Matrix():row(0),column(0),m(0){}
Matrix(const Matrix& ma);
~Matrix();
void setMatrix(int r,int c,double **ma);
int getRow(){return row;}
int getColumn(){return column;}
void display();
Matrix& operator=(const Matrix& ma);
Matrix operator+(const Matrix& ma)const;
Matrix operator-(const Matrix& ma)const;
Matrix operator*(const Matrix& ma)const;
private:
int row;
int column;
double** m;
};
Matrix::Matrix(const Matrix &ma){
this->row=ma.row;
this->column=ma.column;
m=new double *[row];
for(int i=0;i<row;i++)
m[i]=new double[column];
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
m[i][j]=ma.m[i][j];
}
Matrix::~Matrix(){
for(int i=0;i<this->row;i++)
delete[] m[i];
delete[] m;
}
void Matrix::setMatrix(int r,int c,double** ma){
for(int i=0;i<this->row;i++)
delete[] m[i];
delete[] m;
this->row=r;
this->column=c;
m=new double *[row];
for(int i=0;i<row;i++)
m[i]=new double[column];
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
m[i][j]=ma[i][j];
}
void Matrix::display(){
if(m==0) cout<<"Matrix has not been initialised.\n";
else{
for(int i=0;i<row;i++){
for(int j=0;j<column;j++)
cout<<m[i][j]<<" ";
cout<<endl;
}
}
}
Matrix& Matrix::operator =(const Matrix &ma){
if(m!=0){
for(int i=0;i<this->row;i++)
delete[] m[i];
delete[] m;
}
this->row=ma.row;
this->column=ma.column;
m=new double *[row];
for(int i=0;i<row;i++)
m[i]=new double[column];
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
m[i][j]=ma.m[i][j];
return *this;
}
Matrix Matrix::operator +(const Matrix &ma) const{
double** result=new double *[this->row];
for(int i=0;i<this->row;i++)
result[i]=new double[this->column];
for(int i=0;i<this->row;i++)
for(int j=0;j<this->column;j++)
result[i][j]=this->m[i][j]+ma.m[i][j];
Matrix temp;
temp.setMatrix(this->row,this->column,result);
for(int i=0;i<this->row;i++)
delete[] result[i];
delete[] result;
return temp;
}
Matrix Matrix::operator -(const Matrix &ma) const{
double** result=new double *[this->row];
for(int i=0;i<this->row;i++)
result[i]=new double[this->column];
for(int i=0;i<this->row;i++)
for(int j=0;j<this->column;j++)
result[i][j]=this->m[i][j]-ma.m[i][j];
Matrix temp;
temp.setMatrix(this->row,this->column,result);
for(int i=0;i<this->row;i++)
delete[] result[i];
delete[] result;
return temp;
}
Matrix Matrix::operator *(const Matrix &ma) const{
double** result=new double *[this->row];
for(int i=0;i<this->row;i++)
result[i]=new double[this->column];
double entry;
for(int i=0;i<this->row;i++)
for(int j=0;j<ma.column;j++){
entry=0;
for(int k=0;k<this->column;k++)
entry=entry+(this->m[i][k])*(ma.m[k][j]);
result[i][j]=entry;
}
Matrix temp;
temp.setMatrix(this->row,ma.column,result);
for(int i=0;i<this->row;i++)
delete[] result[i];
delete[] result;
return temp;
}
#endif
這是主程序:
#include <iostream>
#include <cstring>
using std::cout;
using std::cin;
using std::endl;
#include "Matrix.h"
int main(){
int i;
Matrix op1;
Matrix op2;
Matrix result;
do{
cout<<"1.Enter operand 1 2.Enter operand 2 3.Add 4.Subtract 5.Multiply 6.Display 7.Quit"<<endl;
cout<<"Enter your choice: ";
cin>>i;
if(i==1){
int r,c;
cout<<"Enter the number of rows for operand 1: ";
cin>>r;
cout<<"Enter the number of columns for operand 1: ";
cin>>c;
double** m=new double *[r];
for(int j=0;j<r;j++)
m[j]=new double[c];
cout<<"Enter the elements of operand 1, from left to right and from top to bottom:"<<endl;
for(int j=0;j<r;j++)
for(int k=0;k<c;k++)
cin>>m[j][k];
op1.setMatrix(r,c,m);
for(int j=0;j<r;j++)
delete[] m[j];
delete m;
}
else if(i==2){
int r,c;
cout<<"Enter the number of rows for operand 2: ";
cin>>r;
cout<<"Enter the number of columns for operand 2: ";
cin>>c;
double** m=new double *[r];
for(int j=0;j<r;j++)
m[j]=new double[c];
cout<<"Enter the elements of operand 2, from left to right and from top to bottom:"<<endl;
for(int j=0;j<r;j++)
for(int k=0;k<c;k++)
cin>>m[j][k];
op2.setMatrix(r,c,m);
for(int j=0;j<r;j++)
delete[] m[j];
delete m;
}
else if(i==3){
if(op1.getRow()>0&&op1.getColumn()>0&&op2.getRow()>0&&op2.getColumn()>0&&op1.getRow()==op2.getRow()&&op1.getColumn()==op2.getColumn()){
result=op1+op2;
cout<<endl<<"The result of op1 plus op2 is:"<<endl;
result.display();
}
else cout<<"The dimensions of the two operands do not match. Unable to do the addition."<<endl;
}
else if(i==4){
if(op1.getRow()>0&&op1.getColumn()>0&&op2.getRow()>0&&op2.getColumn()>0&&op1.getRow()==op2.getRow()&&op1.getColumn()==op2.getColumn()){
result=op1-op2;
cout<<endl<<"The result of op1 minus op2 is:"<<endl;
result.display();
}
else cout<<"The dimensions of the two operands do not match. Unable to do the subtraction."<<endl;
}
else if(i==5){
if(op1.getRow()>0&&op1.getColumn()>0&&op2.getRow()>0&&op2.getColumn()>0&&op1.getColumn()==op2.getRow()){
result=op1*op2;
cout<<endl<<"The result of op1 times op2 is:"<<endl;
result.display();
}
else cout<<"The dimensions of the two operands do not match. Unable to do the multiplication."<<endl;
}
else if(i==6){
int j;
cout<<"Which matrices do you want to display?"<<endl;
cout<<"1.Operand 1 2.Operand 2 3.Result"<<endl;
cin>>j;
if(j==1) op1.display();
if(j==2) op2.display();
if(j==3) result.display();
}
else if(i==7) break;
}while(1);
return 0;
}
J. 跪求C語言兩個矩陣相乘的課程設計報告!!急!!!!
你的程序有問題額~~
clrscr();未聲明?
main函數前面少了int