版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
吉林工程技术师范学院信息工程学院《数据结构》课程设计报告题目:拉丁方阵专业:软件工程班级:R姓名:学号:指导教师:时间:摘要拉丁方阵是一种n×n的方阵,方阵中恰有n种不同的元素,每种元素恰有n个,并且每种元素在一行和一列中恰好出现一次。例如下图是一个3×3的拉丁方阵:321213132如果一个拉丁方阵的第一行和第一列按照元素的先后顺序来排列,那么这称为拉丁方阵的标准型,例如下图就是一个3x3的拉丁方阵标准型,第一行和第一列都是”123”123231312编写一个程序读入一个方阵,判断其是否为拉丁方阵;进一步地,判断是否为标准型。(1)输入包含多组数据。每组数据第一行为正整数n,表示方阵的大小。其后n行,每行有n个1到n之间的整数,整数之间恰有一个空格,表示方阵的内容。输入保证1≤n≤100输入以n=0结束,不要处理这个数据。(2)每组数据对应于一行输出。如果输入是拉丁方阵,但不是标准型则输出1;如果输入是标准型则输出2;如果输入不是拉丁方阵则输出0。(3)应用“数据结构与算法”课程知识建立该问题的数据结构模型;关键字:拉丁方阵,比较,数据结构与算法目录一、课程设计的目的……………………二、设计方案的论证(背景、意义、技术路线)……三、设计实现过程…………四、调试运行及结果分析………………五、测试及问题探讨……………………六、课设总结与体会…….………………七、致谢……………………八、参考文献……………九、附录…………………课程设计的目的数据结构课程设计的目的是使同学们能够根据数据对象的特性,合理的组织数据并能综合运用数据结构与程序设计基本知识解决实际问题,培养基本的、良好的程序设计技能。明确题目要求、确定数据的逻辑结构和存储结构;完成核心算法的设计、编码与调试;准备测试数据,对软件进行测试与调试并撰写课程设计报告;,验收及答辩。通过实践操作,能熟练运用C语言实现逻辑结构、存储结构及核心算法;掌握书写程序设计说明文档的能力和工程软件设计的基本方法。设计方案的论证(背景、意义、技术路线)据说普鲁士的腓特列大帝曾组成一支仪仗队,仪仗队共有36名军官,来自6支部队,每支部队中,上校、中校、少校、上尉、中尉、少尉各一名。他希望这36名军官排成6×6的方阵,方阵的每一行,每一列的6名军官来自不同的部队并且军衔各不相同。令他恼火的是,无论怎么绞尽脑汁也排不成。后来,他去求教瑞士著名的大数学家欧拉。欧拉发现这是一个不可能完成的任务。来自n个部队的n种军衔的n×n名军官,如果能排成一个正方形,每一行,每一列的n名军官来自不同的部队并且军衔各不相同,那么就称这个方阵叫正交拉丁方阵。欧拉猜测在n=2,6,10,14,18,…时,正交拉丁方阵不存在。然而到了上世纪60年代,人们用计算机造出了n=10的正交拉丁方阵,推翻了欧拉的猜测。现在已经知道,除了n=2,6以外,其余的正交拉丁方阵都存在,而且有多种构造的方法。意义:熟悉运用C语言实现数据结构的运算技术路线:工具WinTC设计实现过程3.1概要设计开始开始判断阶数是否超出范围输出方阵结束输入方阵阶数否是输入方阵的数字图3.1-1开始开始判断第一行,列判断每行数据方阵判断每列数据输出结束图3.1-23.2详细设计1)定义数组a[100][100]。2)输入方阵 for(i=0;i<n;i++){ for(j=0;j<n;j++)scanf("%d",&a[i][j]);}输出方阵for(i=0;i<n;i++){printf("\n");for(j=0;j<n;j++)printf("%d",a[i][j]);}3)判断各行是否有相等数据for(i=0;i<n;i++) { for(j=i;j<n;j++) { for(k=j+1;k<n;k++) { if(a[i][j]==a[i][k]) { ch=0; returnch;//行数中有相等数据返回L=0 } } } }returnch;//符合数组各行无相等数据返回L=14)判断各列是否有相等数据for(i=0;i<n;i++) { for(j=i;j<n;j++) {for(k=j+1;k<n;k++) { if(a[j][i]==a[k][i])//(不无法比较相邻的行列) { ch=0; returnch;//列数中有相等数据返回M=0 } } } }returnch;//符合数组各列无相等数据返回M=15)判断有序for(i=0;i<n;i++)//第一行有序{ if(a[0][i]<a[0][i+1]) { flag1=0; break; } }for(j=0;j<n;j++)//第一列有序 { if(a[j][0]<a[j+1][0]) { flag2=0; break; } }6)判断条件若有序情况下继续判断行列是否相等if((flag1==0)&&(flag2==0)) { for(i=1;i<n;i++) { if(a[0][i]==a[i][0])ch=0; returnch;//各行各列均有序且行与列相等返回N=0 } }returnch;//行与列不相等则不是标准型返回N=1}7)输出判断的方阵类型if(k==1&&s==1){if(m==1)printf("2");//是拉丁方阵但不是标准拉丁方阵elseprintf("1阵");//是标准拉丁方}elseprintf("0");//不是拉丁方阵调试运行及结果分析图4-1图4-2图4-3图4-4图4-5图4-6图4-7图4-8测试及问题探讨我们是通过在主函数中输入方阵数据,并调用子函数运行,输出结果,来实现的。第一次运行时,出现了很多错误。在我的逐条分析下,发现很多是语法错误。例如在语句后面没有加“;”,或是在输出的部分弄错了字符的表示格式等错误。我便仔细查看,一一改正过来。开始时,我所编写的程序,不能判断当输入的数大于n的情况。编写不符合要,我在主函数中添加了一条比较语句,得以实现。在编程序之前,我不知该如何实现方阵的排列,找到了C语言的课本,然后决定用二维数组来实现,在对方阵进行判断时,由于if语句比较多,运行时发现与要求不符,便重新对if语句进行排序,嵌套等操作,最终得以实现课设总结与体会通过这次课设我学会了如何利用C语言数组,在C语言的环境下实现方阵的形成,比较和判断,拉丁方阵具有悠久的历史,用现代的计算机编程语言,通过数据结构进行实现。在数据结构的课堂上有关数组我们学过了很多,例如:数组的定义。有关方阵,矩阵,我们也学过了很多例如方阵,矩阵的存储等知识,在这节课程设计之前,我花费了一些时间看书上的这些内容,以便我能更好的进行课程设计。这节课程设计不仅让我们巩固数据结构了知识,还让我们对C语言编程的实现,及语法进行了很好的巩固。不仅如此,也增强了我们的编程调试的能力,让我们能熟练的来运用C语言环境的各种工具。七、致谢在这次课程设计中,我要感谢我的课程设计老师帮助我完成了这次的课程设计,在许多技术性的问题上给予我帮助,在设计过程中给了我很多的意见和建议,在调试的时候也帮助我,把一些不晚上的想法完善了。还有,我要感谢我的同学们,在最早的选题时,都是同学们帮助我,geile我很多建议。最后我要感谢我的学校,给我们提供了一个良好的课程设计环境,在这次课设中我学到了很多,得到了很多,所以我还要再次感谢这些我要感谢的人八、参考文献[1]王昆仑,李红.数据结构与算法.北京:中国铁道出版社,2006年5月。[2]胡学钢.数据结构与算法指导.北京:清华大学出版社,1999。[3]胡学钢.数据结构.北京:高等教育出版社,2006。[4]王红梅,胡明,王涛编著.数据结构(C++版).北京:清华大学出版社,2005.7.[5]谭浩强编著.C++面向对象程序设计.北京:清华大学出版社,2006.1.九,附录源程序:#include"stdio.h"#include"stdlib.h"intpanduan1(inta[100][100],intn)//判断各行是否有相等数{intch=1;inti,j,k;for(i=0;i<n;i++){ for(j=0;j<n;j++) { for(k=j+1;k<n;k++) { if(a[i][j]==a[i][k]) {ch=0;returnch;}//行数有相等k=0 } } }returnch;//符合数组各行不相等返回K=1}intpanduan2(inta[100][100],intn)//判断各列是否有相等数{intch=1;inti,j,k;for(i=0;i<n;i++) { for(j=0;j<n;j++) { for(k=j+1;k<n;k++) { if(a[j][i]==a[k][i]) { ch=0;returnch;}//列数有相等s=0 } } }returnch;//符合数组各列不相等返回S=1}intpanduan3(inta[100][100],intn)//判断首行首列是否相等{intch=1,flag1=1,flag2=1;inti,j;for(i=0;i<n;i++)//第一行有序 if(a[0][i]<a[0][i+1]) {flag1=0;break;}for(j=0;j<n;j++)//第一列有序 if(a[j][0]<a[j+1][0]) {flag2=0;break;}if(flag1==0&&flag2==0){ for(i=1;i<n;i++) { if(a[0][i]==a[i][0])//有序且行列相等m=0ch=0;returnch;}}returnch;//不相等不是标准m=1}voidmain(){intn,i,j;intk,s,m;inta[100][100];printf("请输入方阵阶数:\n");scanf("%d",&n);if(n<=1||n>=100){printf("此数据不符合要求\n");}else{printf("输入矩阵的数据%d个\n",n*n);k=panduan1(a,n);for(i=0;i<n;i++){ for(j=0;j<n;j++)scanf("%d",&a[i][j]);if(a[i][j]>n){k=0;}}for(i=0;i<n;i++){printf("\n");for(j=0;j<n;j++)printf("%d",a[i][j]);}s=panduan2(a,n);m=panduan3(a,n);printf("\n%d%d%d\n",k,s,m);if(k==1&&s==1){ if(m==0) {printf("\n2:此方阵是标准拉丁方阵");} else {printf("\n1:此方阵是拉丁方阵!");}}else{printf("\n0:此方阵不是拉丁方阵!");课程设计智能型温度测量仪设计设计功能要求①.配合温度传感器,实现温度的测量;②.具有开机自检、自动调零功能;③.具有克服随机误差的数字滤波功能;④.使用220V/50Hz交流电源,设置电源开关、电源指示灯和电源保护功能。主要技术指标①.测量温度范围:-50~150℃②.测量误差:≤1%③.显示方式:4位LED数码管显示被测温度值。总体方案论证与选择1.从功能要求看,系统功能并不复杂,52系列即8052单片机完全可以胜任主机的角色。2.从测温范围看,电流型两线制集成温度传感器AD590可满足设计要求。3.从测量误差看,普通运放和10位以上的A/D转换器可以满足精度要求。方案1
集成电路温度传感器AD590→AD转换器→单片机→放大器→LED显示器。方案2热电阻传感器→电压放大器→AD转换器→单片机→放大器→LED显示器。以上两个方案的主要区别是选用的传感器不同,两种传感器都具有测量精度较高的特点。热电阻传感器测温范围更宽,但需要非线性校正;集成电路温度传感器测温范围较窄,但线性很好,不需要非线性校正,软、硬件设计较简单。硬件选择与设计1.AD590温度传感器主要特性:它是一种已经IC化的温度感测器,它产生的电流与绝对温度成正比(如下表所示摄氏温度0℃10℃20℃30℃40℃50℃60℃100℃;AD590电流273.2uA283.2uA293.2uA303.2uA313.2uA323.2uA333.2uA373.2uA)。测温范围为-55℃~+150℃,而且精度高。其中M档精度最高,在-55℃~+150℃范围内,非线性误差为±0.3℃。它可接收的工作电压为4V-30V,因而器件反接也不会被损坏。度每增加1℃,它会增加1μA输出电流。AD590的接口电路十分简单,具有线性优良、性能稳定、灵敏度高、无需补偿、热容量小、抗干扰能力强、可远距离测温且使用方便等优点。工作原理:在被测温度一定时,AD590相当于一个恒流源,把它和5~30V的直流电源相连,并在输出端串接一个10kΩ的恒值电阻,那么,此电阻上流过的电流将和被测温度成正比,此时电阻两端将会有10mV/K的电压信号。2.ADC0809ADC0809是逐次逼近型8位A/D转换器,片内有8路模拟开关,可对8路模拟电压量实现分式转换。典型转换时间为100us。片内带有三态输出缓冲器,可直接与单片机的数据总线相连。由图可见,ADC0809由8位模拟开关、8位逐次逼近式A/D转换器、地址锁存器、控制与时序电路及输出锁存器组成。IN0~IN7:8路模拟量的输入端。2.1~2.7:8位数字量输出端口,2.1为最高为有效,2.7为最低为有效。START:启动控制输入量,加正脉冲,立即启动A/D转换。ALE:地址锁存控制端。ECO:转换结束信号输出端。OE:输出允许控制端。CLK:时钟信号输出端。REF(+),REF(-):参考电压输入端,一般REF(+)接Vcc,REF(-)接GND。ADDA,ADDB,ADDC:8位模拟开关的3位地址选通输入端,用来选择对应的输入通道。3.89C89C52的主要参数a.主要特性:4K字节可编程闪烁存储器;全静态工作:0Hz-24Hz,三级程序存储器锁定,128*8位内部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源,可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路 。b.管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下所示。P3口管脚(备选功能)P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。4.单片机电路设计(1)89C52的复位电路:(2)89C52的时钟电路:AT89C52的+5V电源由40脚引入,第20脚接地,第18脚和第19脚间由12MHz的晶振及两个30pF的无极性电路组成一个时钟振荡电路。5.数码管1.数码管结构09、字符AG数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0”。数码管的外型结构如图”及小数点“F、H、L、P、R、U、Y、符号“2.8位数码管工作原理共阳(阴)极数码管的8个发光二极管的阳(阴)极(二极管正(负)端)连接在一起,通常,公共阳(阴)极接高电平(一般接(地)电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低(高)电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。6.供电电源电路本设计中采用了5V电源供电。软件设计分析主函数流程图#includeunsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};unsignedchardispbuf[8]={10,10,10,10,10,0,0,0};unsignedchardispcount;sbitEOC=P2^0;sbitOE=P2^1;sbitST=P2^2;unsignedcharchannel=0x00;unsignedchargetdata;voidmain(void){TMOD=0x01;TH0=(65536-4000)/256;TL0=(65536-4000)%256;TR0=1;ET0=1;EA=1;P3=channel;while
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论