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

上传人:b****1 文档编号:14170864 上传时间:2023-06-21 格式:DOCX 页数:15 大小:19.17KB
下载 相关 举报
程序设计课程设计实验报告.docx_第1页
第1页 / 共15页
程序设计课程设计实验报告.docx_第2页
第2页 / 共15页
程序设计课程设计实验报告.docx_第3页
第3页 / 共15页
程序设计课程设计实验报告.docx_第4页
第4页 / 共15页
程序设计课程设计实验报告.docx_第5页
第5页 / 共15页
程序设计课程设计实验报告.docx_第6页
第6页 / 共15页
程序设计课程设计实验报告.docx_第7页
第7页 / 共15页
程序设计课程设计实验报告.docx_第8页
第8页 / 共15页
程序设计课程设计实验报告.docx_第9页
第9页 / 共15页
程序设计课程设计实验报告.docx_第10页
第10页 / 共15页
程序设计课程设计实验报告.docx_第11页
第11页 / 共15页
程序设计课程设计实验报告.docx_第12页
第12页 / 共15页
程序设计课程设计实验报告.docx_第13页
第13页 / 共15页
程序设计课程设计实验报告.docx_第14页
第14页 / 共15页
程序设计课程设计实验报告.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《程序设计课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《程序设计课程设计实验报告.docx(15页珍藏版)》请在冰点文库上搜索。

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

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

《程序设计》课程设计

姓名:

学号:

班级:

软件工程14班

指导教师:

成绩:

1.消除类游戏

【问题描述】

消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。

当有多处可以被消除时,这些地方的棋子将同时被消除。

【基本要求】

现在给你一个n行m列的棋盘(1≤n,m≤30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。

请注意:

一个棋子可能在某一行和某一列同时被消除。

输入数据格式:

输入的第一行包含两个整数n,m,用空格分隔,分别表示棋盘的行数和列数。

接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。

颜色使用1至9编号。

输出数据格式:

输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。

如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。

【测试数据】

为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。

测试数据一

输入:

输出:

45

22312

34514

23213

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;

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;

ount=0;

}

printf("请输入要输入数的个数\n");

scanf("%d",&n);/*输入要输入数的个数*/

for(i=0;i

{

scanf("%d",&[i].number);/*输入n个数*/

}

data1[0].number=[0].number;

data1[0].count++;

for(i=1;i

{

for(j=0;j

if[i].number==data1[j].number)

{

data1[j].count++;

break;

}

if(j==s)

{

data1[s].number=[i].number;

data1[s].count++;

s++;

}

}

for(i=1;i

for(j=0;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

{

printf("%d,%d\n",data1[i].number,data1[i].count);

}

}

【结果和截图】

2.7【心得体会】

通过本次实验,我对c语言编译器和n个数的排序和统计有了更加深刻的认识和了解。

3.画图

【问题描述】

用ASCII字符来画图是一件有趣的事情,并形成了一门被称为ASCIIArt的艺术。

例如,下图是用ASCII字符画出来的CSPRO字样。

....____..____...___..

./.___/.___||.._.\|.._.\./._.\.

|.|...\___.\|.|_).|.|_).|.|.|.|

|.|.|..__/|.._.<|.|_|.|

.\____|____/|_|...|_|.\_\\___/.

【基本要求】

实现一个用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

1xyc:

表示填充操作,(x,y)是起始位置,保证不会落在任何已有的线段上;c为填充字符,是大小写字母。

(0≤x

画布的左下角是坐标为(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|.........

...|CC|.........

...|CC|.........

...|CC|.........

...|CC|.........

...|CC+-----+...

...|CCCCCCCC|...

...+--------+...

................

【功能实现】

#include<>

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]='|';

}

}

}

if(x2!

=x1&&y2==y1)

{

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

{

fillchar(a,m,n,right,y,b);

}

if(left>=0)

{

fillchar(a,m,n,left,y,b);

}

if(top

{

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

{

for(intj=0;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

for(intj=0;j

canvas[ii][j]='.';

for(i=0;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);

}

【结果和截图】

【心得体会】

通过本次实验,我对c语言编译器和图形坐标和关系上的处理有了更加深刻的认识和了解。

4.送货

【问题描述】

为了增加公司收入,F公司新开设了物流业务。

由于F公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道。

然而,F公司现在只安排了小明一个人负责所有街道的服务。

任务虽然繁重,但是小明有足够的信心,他拿到了城市的地图,准备研究最好的方案。

城市中有n个交叉路口,m条街道连接在这些交叉路口之间,每条街道的首尾都正好连接着一个交叉路口。

除开街道的首尾端点,街道不会在其他位置与其他街道相交。

每个交叉路口都至少连接着一条街道,有的交叉路口可能只连接着一条或两条街道。

【基本需求】

小明希望设计一个方案,从编号为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最小,依此类推。

如果不存在方案使得小明经过每条街道正好一次,则输出一个整数-1。

【测试数据】

测试数据一

输入:

输出:

45

12

13

14

24

34

124134

输出说明:

城市的地图和小明的路径如下图所示。

测试数据二

输入:

输出:

46

12

13

14

24

34

23

-1

输出说明:

城市的地图如下图所示,不存在满足条件的路径。

4.4【功能实现】

#include<>

typedefstructroute{

longintx;

longinty;

}Element;/*路线x代表开始,y代表结尾*/

voidmain()

{

printf("请输入节点数和路线数:

\n");

inti,j=0,k,m,n;

scanf("%d%d",&m,&n);

routea[50],b[50];

for(i=0;i

scanf("%d%d",&a[i].x,&a[i].y);/*放入n组数据*/

for(j=i,k=0;j<2*n;j++,k++)

{

a[j].x=a[k].y;

a[j].y=a[k].x;

}

b[0]=a[0];

for(i=0,j=0;i<2*n;i++)

{

if(b[j].y==a[i].x&&a[i].y!

=b[j].x)

{

j++;

b[j]=a[i];

i=0;

}

if(j==n)

break;

for(intf=0;f

{

if(b[f].x==b[j].x&&b[f].y==b[j].y)

break;

}

if(f!

=j)

break;

else

continue;

}

if(j==n)

{

for(i=0;i

{

printf("%d\n",b[i].x);

}

printf("%d\n",b[j].x);

}

else

printf("不对");

}

【结果和截图】

【心得体会】

通过本次实验,我对c语言编译器和实际生活中的一些简单问题程序化有了更加深刻的认识和了解。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2