ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:104.24KB ,
资源ID:12014096      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12014096.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序设计实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

程序设计实验报告.docx

1、程序设计实验报告程序设计方法实验报告 电子与信息工程学院计算机科学与技术专业实验指导老师:徐宏喆 实验地点:计算机教学实验中心 实验结束日期:2006-9-2 实验报告提交日期:2006-9-15实验一:矩阵乘积 已知矩阵 当矩阵A的列数与矩阵B的行数相同时,则A与B可以相乘,其乘积为一个mp的矩阵D: 其中:(i=1,2,.,m; j=1,2,.,p)。简记为D=AB 在线性代数的学习中,我们知道了两个矩阵相乘的条件和法则。本次实验中我们是针对一种特殊的矩阵(稀疏矩阵),并在计算机的环境下,利用矩阵的三元组表示方法,来研究矩阵相乘问题。所谓稀疏矩阵是指矩阵中大多数元素都是零。稀疏矩阵的这种性

2、质使得我们可以方便的利用三元组i,j,a在计算机中进行表示矩阵第i行第j列的元素是a。为此,我们定义一个Matrix类,并通过具体的函数来完成这一操作,其中,构造函数Matrix()用来对矩阵的行和列进行赋制值;成员函数int &operator()用来进行处理元素之间的计算工作;当然最终的结果用show()来显出。由于,本程序是大量的数字乘积以及求和的重复,所以在整个程序设计总体上体现了一种循环的思想。一些关键的思想和注意事项为了方便解释,我们在下面的程序中将用用黑体字具体说明:#include #include #include using namespace std;class Matr

3、ixpublic: int row,col; Matrix(int,int); Matrix(); int &operator()(int,int); const int &operator()(int,int)const; Matrix &operator =(const Matrix &); void show();private: int *m; ;Matrix:Matrix(int row,int col) this-row=row; this-col=col; m=new introw*col; for(int i=0;irow*col;i+) /初始化为0 *(m+i)=0; Ma

4、trix:Matrix() delete m;int &Matrix:operator ()(int r,int c) return (*(m+r*col+c);const int &Matrix:operator ()(int r,int c)const return (*(m+r*col+c);Matrix &Matrix:operator =(const Matrix &Ma) if(this=&Ma) return *this; delete m; m=new intMa.row*Ma.col; for (int i=0;iMa.row*Ma.col;i+) mi=Ma.mi; ret

5、urn *this;void Matrix:show() for(int i=0;irow*col;i+) if(i%col=0) coutendl; coutmi ; coutendl;int main() char a; int x,y,m,n,o,p; /*判断有多少行* ifstream infile(input.txt,ios:in); int HowManyLines=0; if(!infile) cerropen error!endl; return 1; while(!infile.eof() a=infile.get(); if(a=n) HowManyLines+; inf

6、ile.close(); coutThere is totally HowManyLines Linesendl;/*读入数据* ifstream in(input.txt,ios:in); /读入矩阵相关信息 if(!in) cerropen error!xymnop; in.close(); vectorvector Data(HowManyLines, vector(3); for (int i=0;iHowManyLines;i+) for (int j=0;j3;j+) Dataij=0; coutInitialization Finished.xymnop; /定位文件指针 Rea

7、dxymnop; char* TryLine=NULL; char* ReadLine; for(i=0;i Datai0 Datai1 Datai2; Read.getline(ReadLine,50,n); delete TryLine; delete ReadLine; Try.close(); Read.close(); coutShowing Data.endl; for (i=0;iHowManyLines;i+) /显示读入的数据 用于判断读入是否正确 for (int k=0;k3;k+) coutDataik ; coutendl; Matrix A(m,n),B(n,o),

8、C(o,p),D(m,p),E(m,o); for (i=1;iHowManyLines;i+) if(Datai0=0) break; A(Datai0-1,Datai1-1) = Datai2; i+; coutMatrix A is :endl; A.show(); for (;iHowManyLines;i+) if(Datai0=0) break; B(Datai0-1,Datai1-1) = Datai2; i+; coutMatrix B is :endl; B.show(); for (;iHowManyLines;i+) if(Datai0=0) break; C(Datai

9、0-1,Datai1-1) = Datai2; coutMatrix C is :endl; C.show(); for (i=0;iA.row;i+) for(int j=0;jB.col;j+) int temp=0; for(int k=0;kA.col;k+) temp+=A(i,k)*B(k,j); E(i,j)=temp; for (i=0;iE.row;i+) for(int j=0;jC.col;j+) int temp=0; for(int k=0;kE.col;k+) temp+=E(i,k)*C(k,j); D(i,j)=temp; coutMatrix D is :en

10、dl; D.show(); ofstream out(output.txt,ios:out); outD(x-1,y-1); out.close(); return 0; 下面我们的任务就是要完成D=A*B*C的工作。 输入文件: 第一行为:x y (x和y分别代表输出结果所在的行和列); 第二行为m,n,o,p(表示给出的正整数矩阵A为m*n矩阵,B为n*o矩阵,C为o*p矩阵); 第三行及以后各行的数字分别按照三元组的表示方法类推。 例如我们在调试时输入:1 23 4 2 31 1 31 4 52 2 13 1 21 2 22 1 13 1 23 2 41 2 21 3 32 1 12 2

11、 2 我们得到的结果为:12. 经验证,这一结果和我们用数学方法计算的结果相同。 实验二:寻找基数 在学习计算机之前,我们接触的数字计算都是在10进制的前提下进行的。而在现实生活中,为了更方便的解决不同领域的问题,我们往往需要在更多的基数中进行数字处理。现在我们熟悉的基数有10进制,12进制,60进制,2进制,8进制,16进制几种。同一个数因为采取不同的基数而使得表现形式完全不同,例如12用二进制表示是1100,用3进制表示是110,用8进制表示是14。 在本次实验中,我们所编的程序,就是解决了对于一个数对X和Y,找出一个最小的基数,使得这两个数在选择的基数上是一对相等的数的问题。在这里我们提

12、前声明,与X和Y相关联的有效基数值范围是236。 为此,我们定义pot()函数来计算X的Y次方;用dec()函数来将给定的数转化为十进制数;再利用max()函数来返回给定数值中的较大者,并以此循环下去,让它们在不同的基数中寻找到相同的十进制表达形式。具体的要点,我们在下面的程序中给予说明: #include#include/计算X的Y次方long pot(int x,int y) long result=1; int i; for(i=0;iy;i+) result*=x; return result;/将数组a表示的数转换为十进制long dec(int a,int num,int t) i

13、nt done,hh=num; long s=0; for (done=0;donenum;done+) s+=ahh-1*ppo(t,done); hh-; return s;/返回a中最大值int max(int a,int num) int i,m=1; for (i=0;inum;i+) if (mai) m=ai; return m+1;void main() char ch, s20,str18,str28; int i,j,ti,tj,a8=0,b8=0,o,p,q; FILE *fp1,*fp2; if(fp1=fopen(input2.txt,r)=NULL) printf(

14、Cannot open this filen); return; fp2=fopen(output2.txt,w); /扫描出数对的对数 p=0; fgets(s,20,fp1); while(s0!=0) p+; fgets(s,20,fp1); /寻找基数 rewind(fp1); for (q=1;q=0&ch=A&ch=0&ch=A&ch=Z) bj=ch-55; else printf(errorn); str2j=ch; j+; ch=fgetc(fp1); str2j=0; /寻找基数 for (ti=max(a,i);ti=36;ti+) o=0; for (tj=max(b,

15、j);tj=36;tj+) if (otc(a,i,ti)=otc(b,j,tj) fprintf(fp2,%s (base %d) = %s (base %d)n,str1,ti,str2,tj); printf(%s (base %d) = %s (base %d)n,str1,ti,str2,tj); o=1; break; if (o) break; if (!o) fprintf(fp2,%s is not equal to %s in any 2.36n,str1,str2); printf(%s is not equal to %s in any 2.36n,str1,str2)

16、; fclose(fp1); fclose(fp2); 在调试中我们输入两组数:13 823 70 最后一行用0表示输入结束。 运行的结果为:13 (base 5) = 8 (base 9)23 is not equal to 7 in any base 2.36 和实际相符合。 实验三 词汇统计统计输入文件中出现的不同的单词个数以及每个单词出现的频率,并且将这些单词按照词典顺序排列好输出到文件中。输入:以文件形式记录程序中所需要的数据。样例输入文件(word.in)This is a book. Its is name is “C programming”.输出:结果应该存放在一个文件中,该

17、文件中的第一行为不同的单词个数,从第二行开始则为每一个单词和其相应出现的频率单词与频率数之间用空格符分割,单词需要按字典顺序排列。样例输出文件(word.out)8a 1book 1c 1is 1its 1name 1 programming 1this 1此程序对所输入的数据主要采用数组进行存储,但同时为了程序运行的简单方便,我们的程序也用到了指针,因此,我们的程序主要采取顺序存储结构。至于算法,首先我们声明一个STAR类,用来存储输入的单词,并用来记录每个单词出现的次数。然后针对所输入的语句,去掉标点符号并把剩下的单词存入文件中,再将各个单词存入已建立的数组中。把各个字符改成小写字母,并统

18、计各单词出现的次数,再通过对各单词出现次数的比较,采用冒泡排序法将语句中出现的各单词按从小到大的顺序排列。最后,输出所输入语句的单词总数,并输出该语句中出现的单词以及各单词出现的次数。一些具体的细节我们将随着下面的程序进一步说明.include#include#include#include#includeusing namespace std;/类声明class STRpublic: string s; int count; STR(); void show(); ; STR:STR() count=0;void STR:show() couts ; coutcountendl;/函数原型v

19、oid push(STR *,int,int);void ToLower(std:string & );int main() string temp; int total=0,num,n=0;/去掉标点符号并把剩下的单词存入temp.txt中 ifstream in(word.in.txt,ios:in); ofstream outfile(temp.txt,ios:out); char c; while (!in.eof() in.get(c); if(c= ) outfile ;continue; if(c=?) outfile ;continue; if(!isalpha(c) outf

20、ile ;continue; outfiletemp) total+; num=total; STR *sptr; sptr=new STRtotal; ifstream input(temp.txt,ios:in);/读入单词 for(int i=0;isptri.s) sptri.count+;/将字符都改成小写字母 for (i=0;itotal;i+) ToLower(sptri.s);/统计词出现的个数 for(int k=0;knum;k+) for (i=0;inum;i+) for (int j=i+1;jnum;j+) if (sptri.s=sptrj.s) sptri.c

21、ount+=sptrj.count;num-;push(sptr,total,j); /冒泡排序 STR tem; for (i=0;inum;i+) for (int j=i+1;jsptrj.s) tem.count = sptri.count; sptri.count=sptrj.count; sptrj.count=tem.count; tem.s = sptri.s; sptri.s=sptrj.s; sptrj.s=tem.s; /输出 ofstream out(word.out.txt,ios:out); outnumendl; for (i=0;inum;i+) outsptr

22、i.s sptri.countendl; delete sptr; out.close(); coutStatistic Completed.endl; return 0; void push(STR * ptr,int total,int loc) STR temp=ptrloc; for (int i=loc;itotal-1;i+) ptri.s=ptri+1.s; ptri.count=ptri+1.count; ptrtotal-1.count=temp.count; ptrtotal-1.s=temp.s;void ToLower(std:string & s) size_t si

23、ze = s.size(); for (size_t k = 0; k size; +k) s k = tolower(sk); 四 、程序运行结果8a 1book 1c 1is 2its 1name 1programming 1this 1实验四 设计能够计算日期相减的计算器要求:1 使用对话框的形式实现一个可视化的计算器;2 实现+、-、*、/、C、CE、等数学计算功能;3 在文本框中输入格式为yyyy/mm/dd的数据,然后按-运算按钮,在输入一个yyyy/mm/dd的数据,紧接着按=按钮即可得到两个日期之间相差的天数。例如2006/03/20-2006/03/19=12006/03/20-2006/03/21=-1程序设计框架与步骤1、 创建应用程序框架;2、 创建对话资源,在工程工作区定义编辑对话框资源;3、 添加消息处理函数下面是设置各控件的属性的程序void CCalculatorDlg:On1Button() / TODO: Add your control notification handler code here if(start=false) m_edit=1; else if(start=true) m_edit+=1; start=true; UpdateData(false);void CCalculatorDlg:On2Button()

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1