《程序设计课程设计》实验报告_第1页
《程序设计课程设计》实验报告_第2页
《程序设计课程设计》实验报告_第3页
《程序设计课程设计》实验报告_第4页
《程序设计课程设计》实验报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《程序设计课程设计》实验报告PAGE0《程序设计》课程设计姓名:学号:班级:软件工程14班指导教师:成绩:《程序设计课程设计》实验报告全文共16页,当前为第1页。《程序设计课程设计》实验报告全文共16页,当前为第1页。-PAGE1-《程序设计课程设计》实验报告全文共16页,当前为第2页。《程序设计课程设计》实验报告全文共16页,当前为第2页。消除类游戏1.1【问题描述】消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。1.2【基本要求】现在给你一个n行m列的棋盘(1≤n,m≤30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。请注意:一个棋子可能在某一行和某一列同时被消除。输入数据格式:输入的第一行包含两个整数n,m,用空格分隔,分别表示棋盘的行数和列数。接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。输出数据格式:输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。1.3【测试数据】为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。测试数据一输入:输出:452231234514232132224422302345042320300044输出说明:棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。测试数据二输入:输出:452231231111232132233322302300002320322000输出说明:棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。1.4【功能实现】#include<iostream>#include<windows.h>《程序设计课程设计》实验报告全文共16页,当前为第3页。usingnamespacestd;《程序设计课程设计》实验报告全文共16页,当前为第3页。intmain(){intm,n,i,j;inttemp;cin>>n>>m;temp=m;m=n;n=temp;int*map=newint[m*n];int*mark=newint[m*n];int*tmap=map;int*tmark=mark;intdif=0;//输入for(i=0;i<m;i++)for(j=0;j<n;j++)cin>>*(tmap+i*n+j);for(i=0;i<m;i++)for(j=0;j<n;j++){//横行if((tmap+2-map)%n!=0||(tmap+1-map)%n!=0)if(*(tmap)==*(tmap+1)&&*(tmap+1)==*(tmap+2)){dif=tmap-map;*(tmark+dif)=0;*(tmark+dif+1)=0;*(tmark+dif+2)=0;}//竖列if(tmap+2*n-map<m*n||tmap+n-map<m*n)if(*(tmap)==*(tmap+n)&&*(tmap+n)==*(tmap+2*n)){dif=tmap-map;*(tmark+dif)=0;*(tmark+dif+n)=0;*(tmark+dif+2*n)=0;}tmap=map+(j+1)+i*n;}//输出cout<<endl;tmap=map;《程序设计课程设计》实验报告全文共16页,当前为第4页。for(i=0;i<m;i++)《程序设计课程设计》实验报告全文共16页,当前为第4页。for(j=0;j<n;j++)if(*(tmark+i*n+j)==0)*(tmap+i*n+j)=0;for(i=0;i<m;i++){for(j=0;j<n;j++)cout<<*(tmap+i*n+j)<<"";cout<<endl;}system("pause");return0;}1.5【结果和截图】1.6【心得体会】《程序设计课程设计》实验报告全文共16页,当前为第5页。通过这次试验,我对c语言编译器和对棋盘类游戏中的棋子行列删除有了更加深刻的认识和了解。

2数字统计《程序设计课程设计》实验报告全文共16页,当前为第5页。2.1【问题描述】某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。2.2【基本要求】现给你n个自然数,统计这些自然数中每个不相同数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。输入数据有n+1行。第1行是整数n(1≤n≤200000),表示自然数的个数;第2~n+1行每行一个自然数。输出有m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。2.3【测试数据】为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。输入输出82424510021002342511002由于数据量可能很大,要注意程序的运行效率。2.4【实现提示】定义顺序表,元素类型为:Element,顺序表类型为:SeqList,用顺序表的数组data记录自然数和该数出现的次数。定义如下:typedefstructdata{longintnumber;longintcount;}Element;typedefstructlist{Elementdata[10000];/*存储自然数和该数出现的次数*/intlength;/*存储不同自然数的个数,即顺序表的长度*/}SeqList;《程序设计课程设计》实验报告全文共16页,当前为第6页。对输入的每一个数据,在顺序表中查找,若存在,则该数出现次数增1,否则将该数插入顺序表中,出现次数为1,插入后使顺序表中的数据按自然数有序。《程序设计课程设计》实验报告全文共16页,当前为第6页。2.5【功能实现】#include<stdio.h>voidmain(){ typedefstructdata{longintnumber;longintcount;}Element;typedefstructlist{Elementdata[10000];/*存储自然数和该数出现的次数*/intlength;/*存储不同自然数的个数,即顺序表的长度*/}SeqList; SeqLista; Elementdata1[10000],data2; intn=0,s=1,i,j;/*n代表输入数的个数,s等同于a.length,代表不同数的个数*/ for(i=0;i<10000;i++) { data1[i].count=0; } printf("请输入要输入数的个数\n"); scanf("%d",&n);/*输入要输入数的个数*/ for(i=0;i<n;i++) { scanf("%d",&a.data[i].number);/*输入n个数*/ } data1[0].number=a.data[0].number; data1[0].count++;for(i=1;i<n;i++) { for(j=0;j<s;j++) if(a.data[i].number==data1[j].number) {data1[j].count++; break; } if(j==s) { data1[s].number=a.data[i].number; data1[s].count++; s++; } 《程序设计课程设计》实验报告全文共16页,当前为第7页。 }《程序设计课程设计》实验报告全文共16页,当前为第7页。for(i=1;i<s;i++) for(j=0;j<s-i;j++) if(data1[j].number>data1[j+1].number) { data2=data1[j]; data1[j]=data1[j+1]; data1[j+1]=data2;}printf("结果如下\n"); for(i=0;i<s;i++) { printf("%d,%d\n",data1[i].number,data1[i].count); }}2.6【结果和截图】2.7【心得体会】《程序设计课程设计》实验报告全文共16页,当前为第8页。通过本次实验,我对c语言编译器和n个数的排序和统计有了更加深刻的认识和了解。

《程序设计课程设计》实验报告全文共16页,当前为第8页。3.画图3.1【问题描述】用ASCII字符来画图是一件有趣的事情,并形成了一门被称为ASCIIArt的艺术。例如,下图是用ASCII字符画出来的CSPRO字样。..____.____..____..____...___.../.___/.___||.._.\|.._.\./._.\.|.|...\___.\|.|_).|.|_).|.|.|.||.|___.___).|..__/|.._.<|.|_|.|.\____|____/|_|...|_|.\_\\___/.3.2【基本要求】实现一个用ASCII字符来画图的程序,支持以下两种操作:画线:给出两个端点的坐标,画一条连接这两个端点的线段。简便起见题目保证要画的每条线段都是水平或者竖直的。水平线段用字符-来画,竖直线段用字符|来画。如果一条水平线段和一条竖直线段在某个位置相交,则相交位置用字符+代替。填充:给出填充的起始位置坐标和需要填充的字符,从起始位置开始,用该字符填充相邻位置,直到遇到画布边缘或已经画好的线段。注意这里的相邻位置只需要考虑上下左右4个方向,如下图所示,字符@只和4个字符*相邻。.*.*@*.*.输入数据格式如下:第1行有三个整数m,n和q。m和n分别表示画布的宽度和高度,以字符为单位。q表示画图操作的个数。(2≤m,n≤100,0≤q≤100)第2行至第q+1行,每行是以下两种形式之一:0x1y1x2y2:表示画线段的操作,(x1,y1)和(x2,y2)分别是线段的两端,满足要么x1=x2且y1≠y2,要么y1=y2且x1≠x2。(0≤x1,x2<m,0≤y1,y2<n)。1xyc:表示填充操作,(x,y)是起始位置,保证不会落在任何已有的线段上;c为填充字符,是大小写字母。(0≤x<m,0≤y<n)。画布的左下角是坐标为(0,0)的位置,向右为x坐标增大的方向,向上为y坐标增大的方向。这q个操作按照数据给出的顺序依次执行。画布最初时所有位置都是字符.(小数点)。输出数据格式如下:输出有n行,每行m个字符,表示依次执行这q个操作后得到的画图结果。3.3【测试数据】测试数据一输入:输出:423100B01020100AAAAAA--A《程序设计课程设计》实验报告全文共16页,当前为第9页。测试数据二《程序设计课程设计》实验报告全文共16页,当前为第9页。输入:输出:161390311210121123012363063690691290129121101211311031131142C++|CCCCCCCC||CC++|CC||CC||CC||CC||CC||CC++|CCCCCCCC|++3.4【功能实现】#include<stdio.h>voiddrawline(chara[][100],intm,intn,intx1,inty1,intx2,inty2){ if(x2==x1&&y2!=y1) { if(y1<=y2) { for(inti=n-1-y2;i<=n-1-y1;i++) {if(a[i][x1]=='-') a[i][x1]='+'; else a[i][x1]='|'; } } else { for(inti=n-1-y1;i<=n-1-y2;i++) {if(a[i][x1]=='-') a[i][x1]='+'; else a[i][x1]='|'; } } }《程序设计课程设计》实验报告全文共16页,当前为第10页。 if(x2!=x1&&y2==y1)《程序设计课程设计》实验报告全文共16页,当前为第10页。 { if(x2>=x1) { for(inti=x1;i<=x2;i++) { if(a[y2][i]=='|') a[y2][i]='+';else a[y2][i]='-'; } } else { for(inti=x2;i<=x1;i++) { if(a[y2][i]=='|') a[y2][i]='+';else a[y2][i]='-'; } } }}voidfillchar(chara[][100],intm,intn,intx,inty,charb){intright=x,left=x,top=y,low=y;if(a[n-1-y][x]!='|'&&a[n-1-y][x]!='-'&&a[n-1-y][x]!='+'&&a[n-1-y][x]!=b){ a[n-1-y][x]=b; right++; left--; top++; low--; if(right<m) { fillchar(a,m,n,right,y,b); } if(left>=0) { fillchar(a,m,n,left,y,b); } if(top<n)《程序设计课程设计》实验报告全文共16页,当前为第11页。 {《程序设计课程设计》实验报告全文共16页,当前为第11页。 fillchar(a,m,n,x,top,b); } if(low>=0) { fillchar(a,m,n,x,low,b); }}}voidprintcanvas(chara[][100],intn,intm){for(inti=0;i<n;i++) { for(intj=0;j<m;j++) printf("%c",a[i][j]); printf("\n"); }}voidmain(){charcanvas[100][100],b;inti,k,x1,y1,x2,y2;intn,m,q; printf("请输入n,m,q:\n"); scanf("%d%d%d",&m,&n,&q); for(intii=0;ii<n;ii++) for(intj=0;j<m;j++) canvas[ii][j]='.';for(i=0;i<q;i++){scanf("%d",&k);if(k==0){scanf("%d%d%d%d",&x1,&y1,&x2,&y2); drawline(canvas,m,n,x1,y1,x2,y2);} elseif(k==1) {scanf("%d%d%c",&x1,&y1,&b); fillchar(canvas,m,n,x1,y1,b);}}printcanvas(canvas,n,m);}《程序设计课程设计》实验报告全文共16页,当前为第12页。3.5【结果和截图】《程序设计课程设计》实验报告全文共16页,当前为第12页。3.6【心得体会】通过本次实验,我对c语言编译器和图形坐标和关系上的处理有了更加深刻的认识和了解。4.送货4.1【问题描述】为了增加公司收入,F公司新开设了物流业务。由于F公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道。然而,F公司现在只安排了小明一个人负责所有街道的服务。任务虽然繁重,但是小明有足够的信心,他拿到了城市的地图,准备研究最好的方案。城市中有n个交叉路口,m条街道连接在这些交叉路口之间,每条街道的首尾都正好连接着一个交叉路口。除开街道的首尾端点,街道不会在其他位置与其他街道相交。每个交叉路口都至少连接着一条街道,有的交叉路口可能只连接着一条或两条街道。4.2【基本需求】小明希望设计一个方案,从编号为1的交叉路口出发,每次必须沿街道去往街道另一端的路口,再从新的路口出发去往下一个路口,直到所有的街道都经过了正好一次。输入数据格式输入的第一行包含两个整数n,m(1≤n≤10,n-1≤m≤20),表示交叉路口的数量和街道的数量,交叉路口从1到n标号。接下来m行,每行两个整数a,b,表示和标号为a的交叉路口和标号为b的交叉路口之间有一条街道,街道是双向的,小明可以从任意一端走向另一端。两个路口之间最多有一条街道。输出输出格式如果小明可以经过每条街道正好一次,则输出一行包含m+1个整数p1,p2,p3,...,pm+1,表示小明经过的路口的顺序,相邻两个整数之间用一个空格分隔。如果有多种方案满足条件,则输出字典序最小的一种方案,即首先保证p1最小,p1最小的前提下再保证p2最小,依此类推。《程序设计课程设计》实验报告全文共16页,当前为第13页。如果不存在方案使得小明经过每条街道正好一次,则输出一个整数-1。《程序设计课程设计》实验报告全文共16页,当前为第13页。4.3【测试数据】测试数据一输入:输出:451213142434124134输出说明:城市的地图和小明的路径如下图所示。测试数据二输入:输出:46121314243423-1输出说明:城市的地图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论