程序设计课程设计实验报告.pdf

上传人:wj151****6093 文档编号:73659409 上传时间:2023-02-21 格式:PDF 页数:14 大小:667.69KB
返回 下载 相关 举报
程序设计课程设计实验报告.pdf_第1页
第1页 / 共14页
程序设计课程设计实验报告.pdf_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《程序设计课程设计实验报告.pdf》由会员分享,可在线阅读,更多相关《程序设计课程设计实验报告.pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 程序设计课程设计实验报告 Last updated on the afternoon of January 3,2021 程序设计课程设计 姓名:学号:班级:软件工程 14 班 指导教师:成绩:1 消除类游戏【问题描述】消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n 行 m 列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。【基本要求】现在给你一个 n 行 m 列的棋盘(1n,m30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。请注

2、意:一个棋子可能在某一行和某一列同时被消除。输入数据格式:输入的第一行包含两个整数n,m,用空格分隔,分别表示棋盘的行数和列数。接下来 n 行,每行 m 个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用 1 至 9 编号。输出数据格式:输出 n 行,每行 m 个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。【测试数据】为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。测试数据一 输入:输出:45 22312 34514 232

3、13 22244 22302 34504 23203 00044 输出说明:棋盘中第 4 列的 1 和第 4 行的 2 可以被消除,其他的方格中的棋子均保留。测试数据二 输入:输出:45 22312 31111 23213 22333 22302 30000 23203 22000 输出说明:棋盘中所有的 1 以及最后一行的 3 可以被同时消除,其他的方格中的棋子均保留。【功能实现】#include#include usingnamespacestd;intmain()intm,n,i,j;inttemp;cinnm;temp=m;m=n;n=temp;int*map=newintm*n;in

4、t*mark=newintm*n;int*tmap=map;int*tmark=mark;intdif=0;ount=0;printf(请输入要输入数的个数n);scanf(%d,&n);/*输入要输入数的个数*/for(i=0;in;i+)scanf(%d,&i.number);/*输入 n 个数*/data10.number=0.number;data10.count+;for(i=1;in;i+)for(j=0;js;j+)ifi.number=data1j.number)data1j.count+;break;if(j=s)data1s.number=i.number;data1s.c

5、ount+;s+;for(i=1;is;i+)for(j=0;jdata1j+1.number)data2=data1j;data1j=data1j+1;data1j+1=data2;printf(结果如下n);for(i=0;is;i+)printf(%d,%dn,data1i.number,data1i.count);【结果和截图】27【心得体会】通过本次实验,我对 c 语言编译器和 n 个数的排序和统计有了更加深刻的认识和了解。3.画图【问题描述】用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为ASCIIArt的艺术。例如,下图是用ASCII 字符画出来的 CSPRO 字样

6、。._._._./._/._|._.|._./._.|.|._.|.|_).|.|_).|.|.|.|.|.|._/|._.|.|_|.|._|_/|_|.|_|._/.【基本要求】实现一个用 ASCII 字符来画图的程序,支持以下两种操作:画线:给出两个端点的坐标,画一条连接这两个端点的线段。简便起见题目保证要画的每条线段都是水平或者竖直的。水平线段用字符-来画,竖直线段用字符|来画。如果一条水平线段和一条竖直线段在某个位置相交,则相交位置用字符+代替。填充:给出填充的起始位置坐标和需要填充的字符,从起始位置开始,用该字符填充相邻位置,直到遇到画布边缘或已经画好的线段。注意这里的相邻位置只需

7、要考虑上下左右 4 个方向,如下图所示,字符只和 4 个字符*相邻。.*.*.*.输入数据格式如下:第 1 行有三个整数 m,n 和 q。m 和 n 分别表示画布的宽度和高度,以字符为单位。q 表示画图操作的个数。(2m,n100,0q100)第 2 行至第 q+1 行,每行是以下两种形式之一:0 x1y1x2y2:表示画线段的操作,(x1,y1)和(x2,y2)分别是线段的两端,满足要么x1=x2且 y1y2,要么 y1=y2且 x1x2。(0 x1,x2m,0y1,y2n)。1xyc:表示填充操作,(x,y)是起始位置,保证不会落在任何已有的线段上;c为填充字符,是大小写字母。(0 xm,

8、0yn)。画布的左下角是坐标为(0,0)的位置,向右为 x 坐标增大的方向,向上为 y 坐标增大的方向。这 q 个操作按照数据给出的顺序依次执行。画布最初时所有位置都是字符.(小数点)。输出数据格式如下:输出有 n 行,每行 m 个字符,表示依次执行这 q 个操作后得到的画图结果。【测试数据】测试数据一 输入:输出:423 100B 01020 100A AAAA A-A 测试数据二 输入:输出:16139 031121 0121123 012363 06369 069129 01291211 01211311 031131 142C.+-+.|CCCCCCCC|.|CC+-+.|CC|.|C

9、C|.|CC|.|CC|.|CC|.|CC+-+.|CCCCCCCC|.+-+.【功能实现】#include voiddrawline(chara100,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(aix1=-)aix1=+;else aix1=|;else for(inti=n-1-y1;i=x1)for(inti=x1;i=x2;i+)if(ay2i=|)ay2i=+;else ay2i=-;else for(inti=x2;i=x1;i+)if(ay2i

10、=|)ay2i=+;else ay2i=-;voidfillchar(chara100,intm,intn,intx,inty,charb)intright=x,left=x,top=y,low=y;if(an-1-yx!=|&an-1-yx!=-&an-1-yx!=+&an-1-yx!=b)an-1-yx=b;right+;left-;top+;low-;if(right=0)fillchar(a,m,n,left,y,b);if(top=0)fillchar(a,m,n,x,low,b);voidprintcanvas(chara100,intn,intm)for(inti=0;in;i+

11、)for(intj=0;jm;j+)printf(%c,aij);printf(n);voidmain()charcanvas100100,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;iin;ii+)for(intj=0;jm;j+)canvasiij=.;for(i=0;iq;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=

12、1)scanf(%d%d%c,&x1,&y1,&b);fillchar(canvas,m,n,x1,y1,b);printcanvas(canvas,n,m);【结果和截图】【心得体会】通过本次实验,我对 c 语言编译器和图形坐标和关系上的处理有了更加深刻的认识和了解。4送货【问题描述】为了增加公司收入,F 公司新开设了物流业务。由于F 公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道。然而,F 公司现在只安排了小明一个人负责所有街道的服务。任务虽然繁重,但是小明有足够的信心,他拿到了城市的地图,准备研究最好的方案。城市中有 n 个交叉路口,m 条街道

13、连接在这些交叉路口之间,每条街道的首尾都正好连接着一个交叉路口。除开街道的首尾端点,街道不会在其他位置与其他街道相交。每个交叉路口都至少连接着一条街道,有的交叉路口可能只连接着一条或两条街道。【基本需求】小明希望设计一个方案,从编号为 1 的交叉路口出发,每次必须沿街道去往街道另一端的路口,再从新的路口出发去往下一个路口,直到所有的街道都经过了正好一次。输入数据格式 输入的第一行包含两个整数 n,m(1n10,n-1m20),表示交叉路口的数量和街道的数量,交叉路口从 1 到 n 标号。接下来 m 行,每行两个整数 a,b,表示和标号为 a 的交叉路口和标号为 b 的交叉路口之间有一条街道,街

14、道是双向的,小明可以从任意一端走向另一端。两个路口之间最多有一条街道。输出输出格式 如果小明可以经过每条街道正好一次,则输出一行包含 m+1 个整数p1,p2,p3,.,pm+1,表示小明经过的路口的顺序,相邻两个整数之间用一个空格分隔。如果有多种方案满足条件,则输出字典序最小的一种方案,即首先保证 p1最小,p1最小的前提下再保证 p2最小,依此类推。如果不存在方案使得小明经过每条街道正好一次,则输出一个整数-1。【测试数据】测试数据一 输入:输出:45 12 13 124134 14 24 34 输出说明:城市的地图和小明的路径如下图所示。测试数据二 输入:输出:46 12 13 14 2

15、4 34 23-1 输出说明:城市的地图如下图所示,不存在满足条件的路径。44【功能实现】#include typedefstructroute longintx;longinty;Element;/*路线 x 代表开始,y 代表结尾*/voidmain()printf(请输入节点数和路线数:n);inti,j=0,k,m,n;scanf(%d%d,&m,&n);routea50,b50;for(i=0;in;i+)scanf(%d%d,&ai.x,&ai.y);/*放入 n 组数据*/for(j=i,k=0;j2*n;j+,k+)aj.x=ak.y;aj.y=ak.x;b0=a0;for(i=0,j=0;i2*n;i+)if(bj.y=ai.x&ai.y!=bj.x)j+;bj=ai;i=0;if(j=n)break;for(intf=0;fj;f+)if(bf.x=bj.x&bf.y=bj.y)break;if(f!=j)break;else continue;if(j=n)for(i=0;ij;i+)printf(%dn,bi.x);printf(%dn,bj.x);else printf(不对);【结果和截图】【心得体会】通过本次实验,我对 c 语言编译器和实际生活中的一些简单问题程序化有了更加深刻的认识和了解。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁