北京邮电大学 计算机实习报告.docx
北京邮电大学 计算机实习报告北京邮电大学 计算机实习报告 第一题: 设计一个程序,可输入文本,和加载txt格式的文本,统计输入或加载文本中出现频率最高的3个字或字母,并显示出现次数。 1、设计流程 开始选择输入或加载文本统计字符输出显示结束2、软件设计结果图 导入已有的txt文档的结果展示图 已有的TXT文本 手动输入统计结果展示图 3、设计总结 本题要求实现字符统计,我先用c+实现了题目所需的要求,之后再将其写入到QT中,并在QT中完成界面的设计。在用c+实现该程序的过程中用到了输入流来载入文本,并将字符存储在链表中,之后用了遍历法统计相同字符出现的次数,之后再用冒泡排序法将统计好的字符排序,以下是实现的关键代码。 /统计相同字符出现的次数 voidImgProcessor:FindItem(QList<Countchar>&list) QList<Countchar>:iteratora; QList<Countchar>:iteratorb; a=list.begin; while(a!=list.end) b=a+1; while(b!=list.end) if(b->data=a->data) a->counter+; b=list.erase(b); elseb+; a+; /按照出现的次数排序 voidImgProcessor:SortList(QList<Countchar>&list) for(inti=0;i<list.length-1;i+) for(intj=i+1;j<list.length;j+) if(listi.counter<listj.counter) list.swap(i,j); 第二题: 矩阵计算器:输入两个行列式,完成行列式的加法,减法和乘法。 1、设计流程 开始 输入行列式行数列数 判断 计算 输出 结束 2、软件设计结果图 操作结果图 3、设计总结 本题要求实现矩阵的运算,我采用的是C+编程实现,题目要求实现矩阵的加减和乘法,而为了使矩阵的运算更加完善,我又添加了关于矩阵的转置的实现的算法。再用C语言编程过程中,我先定义了关于矩阵加法,减法,乘法,转置实现的三个函数,之后再在主函数中调用以实现矩阵运算要求,以下为各函数关键代码。 /加法实现代码 for(i=0;i<m;i+) for(j=0;j<n;j+) cij=aij+bij; printf("%.2f ",cij); printf("n"); /减法实现代码 for(i=0;i<m;i+) for(j=0;j<n;j+) cij=aij-bij; printf("%2f ",cij); printf("n"); /乘法实现代码 for(i=0;i<n;i+) for(j=0;j<m;j+) scanf("%4f",&bij); for(i=0;i<m;i+) for(j=0;j<m;j+) s=0; for(k=0;k<n;k+) s=s+aik*bkj; cij=s; for(i=0;i<m;i+) for(j=0;j<m;j+) printf("%.2f ",cij); printf("n"); /转置运算的关键代码 for(i=0;i<m;i+) for(j=0;j<n;j+) scanf("%f",&aij); for(i=0;i<m;i+) for(j=0;j<n;j+) bij=aji; printf("%4f ",bij); printf("n"); 第三题: 动画、网页设计 设计一个关于自己特长的动画,时常不小于30 秒,最好有音效; 设计一个网页,将自己设计的动画加入到网页中,网页中加载字幕说明。 配置本地服务器,可通过本地IP 127.0.0.1 访问,网页为动态页面,可登陆后在后台修改字幕 配置网络服务器,可通过IP 访问网站 1、设计思路 v 用 Flash进行动画设计,渲染输出 v 使用Dreamweaver进行网页制作,并在网页中插入动画及字幕 v 配置本地服务器 v 配置网络服务器 2、设计结果展示 所设计的网页及插入的动画配置网络服务器通过IP访问显示图3、设计总结 本题我用flash制作了一个火材人动画,之后用dreamweaver设计网页,并将所设计的flash动画插入其中,并完成了滚动字幕和配置网络服务器的制作。不过,较遗憾的是在实现配置本地服务器和实现动态页面的加载的过程中,可能是因为本计算机64位系统和32位程序不兼容抑或是其他原因,此项功能未能实现。 第四题: 在电脑上设计一个倒计时器软件,时间到有声音提醒和画面提醒。 1、设计流程 2、软件设计结果图 软件操作结果图 3、设计总结 本题使用QT编程实现,用QT编写了界面和倒计时结束时的声画提醒,而在实现倒计时的主体功能时我还使用了QT里的进度条功能实现倒计时,使得计时更加形象和直观,以下为将倒计时剩余时间数字显示和同步到进度条的主要代码。 voidUTimer:showTime /转换剩余时间为时,分,秒 inth=m_time/3600; intm_time1; m_time1=m_time%3600; intm=m_time1/60; ints=m_time1%60; /同步进度条 ui->progressBar->setValue(100-m_time*100/total_time); ui->progressBar_2->setValue(100-m_time*100/total_time); /传递给模拟时钟 /ui->widget_6->time(m_time); /绘制数字时钟 ui->widget_h->setPalette(paletteh/10); ui->widget_h_1->setPalette(paletteh%10); ui->widget_m->setPalette(palettem/10); ui->widget_m_1->setPalette(palettem%10); ui->widget_s->setPalette(palettes/10); ui->widget_s_1->setPalette(palettes%10); /修改托盘提示以显示剩余时间 QStringstr,strh,strm,strs; strh.setNum(h); strm.setNum(m); strs.setNum(s); if(h=0) if(m!=0) str="还剩"+strm+"分"+strs+"秒" else str="还剩"+strs+"秒" else str="还剩"+strh+"小时"+strm+"分"+strs+"秒" 第五题: 图像编码、解码恢复软件 手绘单条曲线,读取鼠标事件获得坐标值,设置采样间隔,将曲线进行采样、量化、编码并存储。可读入已有编码数据并描点连线恢复原曲线。 1、设计流程 开始监控鼠标记录位置编码存储读取文件恢复图像结束2、软件设计结果图 操作结果图 存储的数据 可设置采样时间 3、设计总结 本题我是用Java编程实现的,通过Java里面的鼠标事件,对鼠标进行采样并编码存储在data文件中,之后通过打开data文件直接实现对所绘图样的重绘。设置的默认的采样间隔为10s,同时亦可在人为修改采样间隔。以下为绘图及采样编码解码的主要代码。 publicvoid paint(Graphics g) /绘图方法 if( judge = 1) if(first != null&&last != null) /绘图 g.setColor(Color.WHITE); g.drawLine(first.x, first.y, last.x, last.y); first = last; elseif(e.getSource=button_open) /打开 JFileChooser jfc=new JFileChooser("."); jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES ); jfc.showDialog(new JLabel, "选择"); java.io.File file=jfc.getSelectedFile; if(file.isDirectory) new wrong("请选择txt格式文件"); elseif(file.isFile) if(file.getName.endsWith(".txt") ) if(file.getName.endsWith(".txt") ) try catch(IOException ex) data="" FileReader fr=new FileReader(file); BufferedReader br = new BufferedReader(fr); String line; while(line=br.readLine)!=null) data=data+line; else new wrong("请选择txt格式文件"); canvas.setJudge(2); canvas.repaint; 第六题: 兑奖算法 问题描述 设兑奖方式为:从1 到22 选出5 个不重复的数a0,a1,a2,a3,a4,而主办方开出5 个号码P0、P1、P2、P3、P4,外加一个特别号P5,得奖方式如下: 头等奖:5 个号码完全相同,即a0,a1,a2,a3,a4= P0,P1,P2,P3,P4。 二等奖:a0,a1,a2,a3,a4中有4 个号码出现在 P0,P1,P2,P3,P4,另一个号码等于P5。 三得奖:a0,a1,a2,a3,a4中有4 个号码出现在 P0,P1,P2,P3,P4,另一个号码不等于P5。 四等奖:a0,a1,a2,a3,a4中有3 个号码出现在 P0,P1,P2,P3,P4。 五等奖:a0,a1,a2,a3,a4中有2 个号码出现在 P0,P1,P2,P3,P4。 问题是:根据投注情况,求出中奖的注。 2. 基本要求 设计投注的数据结构。 设计投注方式:键盘输入或从文件输入等。 设计求解中奖注的算法。 输出中奖注。 输入随机注,判断是否中奖,中几等奖。 1、设计流程 1开始生成中奖数组输入投注234对比判断输出中奖结果结束562、软件设计结果图 手动键入投注结果展示图 文本读取输入投注号结果展示图 文本中的数据 3、设计总结 本题我是用C+编程实现,之后将程序载入QT中,并用QT编写了界面。在实现时用到了随机数产生函数rand,通过将所产生的随机数除以22取余数的方法来产生中奖号码,之后将其与所输入的投注号码比较来判定是否中奖。同时也用到了C+中的输入输出流来实现文件数据输入投注号码,并判断是否中奖。以下为产生中奖号码的主要程序。 /产生随机数并显示在“官方号码”栏中 voidLottery:Produce_rand QTimetime; time=QTime:currentTime; qsrand(time.msec+time.second*1000); do p0=qrand%22; while(p0=0); do p1=qrand%22; while(p1=0|p1=p0); do p2=qrand%22; while(p2=0|p2=p0|p2=p1); do p3=qrand%22; while(p3=0|p3=p0|p3=p1|p3=p2); do p4=qrand%22; while(p4=0|p4=p0|p4=p1|p4=p2|p4=p3); do p5=qrand%22; while(p5=0|p5=p0|p5=p1|p5=p2|p5=p3|p5=p4); ui->officialNum->setText(QString:number(p0)+""+QString:number(p1)+""+QString:number(p2)+""+QString:number(p3)+""+QString:number(p4)+""+""+QString:number(p5)+"");