还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
©//”下大承《程序设计》课程设计姓名学号班级软件工程14班指导教师:成绩:[=|回1—3—J*C:\Users\Administrator\Documents\Tencent Files\1039131281\FileRecv\i^«^^l\Debu...【心得体会】
2.7通过本次实验,我对语言编译器和个数的排序和统计有了更加深刻的认识和了C n解.画图3【问题描述】
3.1用ASCII字符来画图是一件有趣的事情,并形成了一门被称为ASCII Art的艺术例如,下图是用ASCII字符画出来的CSPRO字样
1.|_|.|・・.\—I—//.U.\_\\__/.【基本要求】
3.2实现一个用ASCII字符来画图的程序,支持以下两种操作画线给出两个端点的坐标,画一条连接这两个端点的线段简便起见题目保证要画的每条线段都是水平或者竖直的水平线段用字符-来画,竖直线段用字符I来画如果一条水平线段和一条竖直线段在某个位置相交,则相交位置用字符+代替填充给出填充的起始位置坐标和需要填充的字符,从起始位置开始,用该字符填充相邻位置,直到遇到画布边缘或已经画好的线段注意这里的相邻位置只需要考虑上下左右4个方向,如下图所示,字符@只和4个字符东相邻・*.*@*・*.输入数据格式如下第1行有三个整数叫n和qm和n分别表示画布的宽度和高度,以字符为单位q表示画图操作的个数2m,nW100,0W q100第2行至第q+1行,每行是以下两种形式之一0xl ylx2y2:表示画线段的操作,xl,yl和x2,y2分别是线段的两端,满足要么xl=x2且ylWy2,要么yl=y2且xlWx2OWxl,x2m,OWyl,y2n1x yc表示填充操作,x,y是起始位置,保证不会落在任何已有的线段上;c为填充字符,是大小写字母0^xm,OWy〈n画布的左下角是坐标为0,0的位置,向右为x坐标增大的方向,向上为y坐标增大的方向这q个操作按照数据给出的顺序依次执行画布最初时所有位置都是字符.小数点输出数据格式如下输出有n行,每行m个字符,表示依次执行这q个操作后得到的画图结果
3.3【测试数据】测试数据一输入输出423AAAA A--A100B01020100A测试数据二输入输出161390311210121123…+---------------+・.....1CCCCCCCC|......|CC++...
1.4#includestdio.hvoid drawlinechar a[]
[100],int m,int n,int xl,int yl,int x2,int y2if x2==xly2!=ylif yl=y2{forint i=n-l-y2;i=n-l-yl;i++ifa[i][xl]==」a[i][xl]=,;elsea[i][xl]=,|J;else{forint i=n-l-yl;i=n-l-y2;i++if a[i][xl]==-a[i][xl]=,+5;elsea[i][xl]=,|;}if x2=xlforint i=xl;i=x2;i++if a[y2][i]=I a[y2][i]=;elsea[y2][i]=,-;elseforint i=x2;i=xl;i++if a[y2][i]==,|5a[y2][i]=,+5;elsea[y2][i]=,,;void fillcharchar a[]
[100],int m,int n,int x,int y,char b{int right=x,left=x,top=y,low=y;if a[n-l-y][x]!=’|a[n~l-y][x]!=’-a[n-l-y][x]!=+a[n~l-y][x]!=ba[n-l-y][x]=b;right++;left--;top++;一;1owifrightmfillchar a,m,n,right,y,b;if left=0{fillchar a,m,n,left,y,b;f i11char a,m,n,x,top,b;}iflow=0{f i11char a,m,n,x,low,b;void printcanvaschara[]
[100],int n,int mforint i=0;in;i++forint j=0;jm;j++printf a[i][j];printf〃\n〃;void main{char canvas
[100]
[100],b;int i,k,xl,yl,x2,y2;int n,m,q;printf〃请输入n,叫q:\n〃;scanf〃%d%d%d〃,n,q;forint ii=0;iin;ii++forint j=0;jm;j++canvas[ii];for i=0;iq;i++{scanf〃%d〃,k;if k==0{scanf z,%d%d%d%d〃,xl,yl,x2,y2;drawline canvas,m,n,xl,yl,x2,y2;}else ifk==l{scanf〃%d%d%c”,xl,yl,b;fillchar canvas,m,n,xl,yl,b;}printcanvascanvas,n,m;【结果和截图】
1.5回wC:\Users\Administrator\Documents\Tencent Files\1039131281\FileRecv\误设实验主\n,m-q001000any keyto continuenr
3.6【心得体会】通过本次实验,我对语言编译器和图形坐标和关系上的处理有了更加深刻的认识和了解cDE
23.送货4【问题描述】
3.1为了增加公司收入,公司新开设了物流业务由于公司在业界的良好口F F碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道然而,公司现在只安排了小明一个人负责所有街道的服务F任务虽然繁重,但是小明有足够的信心,他拿到了城市的地图,准备研究最好的方案城市中有n个交叉路口,m条街道连接在这些交叉路口之间,每条街道的首尾都正好连接着一个交叉路口除开街道的首尾端点,街道不会在其他位置与其他街道相交每个交叉路口都至少连接着一条街道,有的交叉路口可能只连接着一条或两条街道【基本需求】
3.2小明希望设计一个方案,从编号为1的交叉路口出发,每次必须沿街道去往街道另一端的路口,再从新的路口出发去往下一个路口,直到所有的街道都经过了正好一次输入数据格式输入的第一行包含两个整数n,md^n^lO,nTWnW20,表示交叉路口的数量和街道的数量,交叉路口从1到n标号接下来m行,每行两个整数a,b,表示和标号为a的交叉路口和标号为b的交叉路口之间有一条街道,街道是双向的,小明可以从任意一端走向另一端两个路口之间最多有一条街道输出输出格式如果小明可以经过每条街道正好一次,则输出一行包含m+1个整数pl,p2,p3,pm+1,表示小明经过的路口的顺序,相邻两个整数之间用一个空格分隔如果有多种方案满足条件,则输出字典序最小的一种方案,即首先保证pl最小,pl最小的前提下再保证p2最小,依此类推如果不存在方案使得小明经过每条街道正好一次,则输出一个整数【测试数据】
4.3测试数据一输入输出451241341213142434输出说明城市的地图和小明的路径如下图所示测试数据二输入输出-1输出说明城市的地图如下图所示,不存在满足条件的路径
411123262344434.4【功能实现】#includestdio.htypedef structroute{long intx;long inty;}Element;/*路线x代表开始,y代表结尾*/void main{printf〃请输入节点数和路线数:\n〃;inti,j=0,k,m,n;scanf〃%d%d〃,m,n;route a
[50],b
[50];for i=0;in;i++scanf/z%d%dz,,a[i].x,a[i].y;/*放入n组数据*/forj=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].xa[i].y!=b[j].x|j++;b[j]=a[i];i=0;if j==nbreak;for intf=O;fj;f++if b[f].x==b[j].xb[f].y==b[j].y break;}break;elsecontinue;}if j==nfor i=0;ij;i++printf〃%d\n〃,b[i].x;}printf〃%d\n”,b[j].x;elseprintf〃不对〃;
4.5【结果和截图】【心得体会】
4.6通过本次实验,我对语言编译器和实际生活中的一些简单问题程序化有了更加深刻c的认识和了解消除类游戏
1.【问题描述】
1.1消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行n列的游戏1棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除当有多处可以被消除时,这些地方的棋子将同时被消除【基本要求】
1.2现在给你一个n行m列的棋盘(lWn,n)<30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘请注意一个棋子可能在某一行和某一列同时被消除输入数据格式输入的第一行包含两个整数n,叫用空格分隔,分别表示棋盘的行数和列数接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色颜色使用1至9编号输出数据格式输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号【测试数据】
1.3为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据测试数据输入输出452230222312345043451423203232130004422244输出说明棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留测试数据二输入输出452230222312300003111123203232132200022333输出说明棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留
1.4【功能实现】ttinclude iostreamttincludewindows.husing namespacestd;int mainOintm,n,i,j;int temp;cin»n»m;temp=m;m=n;n=temp;int*map=new int[m*n];int*mark=new int[m*n];int*tmap=map;int*tmark=mark;int dif=0;〃输入fori=0;im;i++for j=0;jn;j++cin»*tmap+i*n+j;for i=0;im;.i++.for j=0;jn;j++.,〃横行if tmap+2-map%n!=0||tmap+1-map%n!=0if*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-mapm*n||tmap+n-mapm*nif*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;for i=0;im;i++for j=0;jn;j++if*tmark+i*n+j==0*tmap+i*n+j=0;for i=0;im;i++,for j=0;jn;j++cout*tmap+i*n+j cout«endl;・systempause;return0;【结果和截图】
1.5**C:\Users\Administrator\Documents\Tencent Files\1039131281\FileRecv\i^iS^^l\Debu...[0|回45请输入数字22312345142321322244行列的矩阵如下4522312345142321322244消除后的矩阵如下223023450423203100044I Pressany keyto continue通过这次试验,我对语言编译器和对棋盘类游戏中的棋子【心得体会】
1.6C行列删除有了更加深刻的认识和了解2数字统计【问题描述】
2.1某次科研调查时得到了n个自然数,每个数均不超过
15000000001.5*109已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果【基本要求】
2.2现给你n个自然数,统计这些自然数中每个不相同数各自出现的次数,并按照自然数从小到大的顺序输出统计结果输入数据有n+1行第1行是整数nlWnW200000,表示自然数的个数;第2~n+l行每行一个自然数输出有m行m为n个自然数中不相同数的个数,按照自然数从小到大的顺序输出每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开【测试数据】
2.3输出为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据输入23842251410022451002100由于数据量可能很大,要注意程序的运行效率【实现提示】
2.4定义顺序表,元素类型为Element,顺序表类型为SeqList,用顺序表的数组data记录自然数和该数出现的次数定义如下typedef struct data{long int number;long intcount;}Element;typedef structlist{Element data
[10000];/*存储自然数和该数出现的次数*/int length;/*存储不同自然数的个数,即顺序表的长度*/}SeqList;对输入的每一个数据,在顺序表中查找,若存在,则该数出现次数增1,否则将该数插入顺序表中,出现次数为1,插入后使顺序表中的数据按自然数有序
2.5【功能实现】#includestdio.h voidmain typedef structdatalong intnumber;long intcount;}Element;typedefstructlist{Element data
[10000];/*存储自然数和该数出现的次数*/int length;/*存储不同自然数的个数,即顺序表的长度*/}SeqList;SeqList a;Element datal
[10000],data2;intn=0,s=l,i,j;/*n代表输入数的个数,s等同于a.length,代表不同数的个数*/fori=0;i10000;i++datal[i].count=0;printf〃请输入要输入数的个数\n〃;scanf〃%d〃,n;/*输入要输入数的个数*/fori=0;in;i++scanf级d〃,a.data[i].number;/*输入n个数*/datal
[0].numbered.data
[0].number;datal
[0].count++;fori=l;in;i++forj=0;js;j++ifa.data[i].number二二data1[j].number{datal[j].count++;break ifj=sdatal[s].number=a.data[i].number;datal[s].count++;s++;}}fori=l;is;i++forj=0;js-i;j++ifdatal[j].numberdatal[j+1].numberdata2=datal[j];datal[j]=datal[j+1];datal[j+l]=data2;}printf结果如下\n〃;fori=0;is;i++printf〃%d,%d\n〃,datal[i].number,datal[i].count;
2.6【结果和截图】。
个人认证
优秀文档
获得点赞 0