南京邮电大学通达学院c语言程序报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

南京邮电大学通达学院程序设计(上机)报告题目:R015MP008E专业学生姓名班级学号指导教师日期2015年5月评分细则评分项优秀良好中等及格不及格遵守机房规章制度上机表现学习态度基础知识水平程序设计能力课题功能实现情况算法设计合理性用户界面友好性报告书写认真程度报告内容完整性文字表达清楚程度问题回答准确性评分等级教师签名:年月日备注实验一R015M判断点与多边形位置关系问题一、问题描述:课题要求及总体功能描述课题要求:给定n个点的坐标,这n个点依次围成一闭合多边形,再给一点(x,y),判断它是否在多边形中。总体功能描述:1.首先随机输入一个大于2小于1000的整数n2.利用循环结构产生n个坐标3.输入需要判断的坐标(x,y)4.利用判断语句与之前产生的n个坐标进行依次比较5.得出判断结果二、课题分析:分析解决问题的思路,描述功能模块分解及每个模块的输入,输出和功能通过仔细分析问题,首先发现以下几个问题:1、如何随机产生n个坐标?2、如何将确定的坐标(x,y)与产生的n个坐标进行比较?总结:发现本问题着重对循环结构、判断语句、输入输出语句有很高的要求。本问题可以分解为4个功能模块:模块一:n个坐标产生模块二:输入目的坐标模块三:判断模块利用循环语言,定义一个1000行2列的数组,每一行看成一个坐标点,在1000内输入一个n值,再输入n个坐标点,找出这些点x坐标的最大值和最小值,y坐标的最大值和最小值输入确定的坐标(x,y)利用判断语言,将目的坐标(x,y)坐标与n个坐标进行比较判断,判断是否在多边形内。三、算法描述:自然语言自然语言(其中S1,S2,S3…为算法步骤);S1输入一个大于2小于1000的整数n;S2输入n个坐标点;S3如果前一个坐标x值大于后一个,则max1=前一个x值,否则max1=后一个x值;S4如果前一个坐标x值小于后一个,则min1=前一个x值,否则min1=后一个x值;S5如果前一个坐标y值大于后一个,则max2=前一个y值,否则max2=后一个y值;S6如果前一个坐标y值大于后一个,则min2=前一个y值,否则min2=后一个y值;S7输入需要判断的坐标x,y;S8如果xmin1||xmax1||ymin2||ymax2,则在多边形外,否则,在多边形内;四、源程序:重要的代码及其说明#includestdio.hvoidmain(){intn,i,j;floatx,y,a[1000][2],min1,max1,min2,max2;printf(请输入一个大于2小于1000的整数:\n);scanf(%d,&n);printf(请输入%d个坐标点\n,n);for(i=0;in;i++)for(j=0;j=1;j++)scanf(%f,&a[i][j]);max1=a[0][0];min1=a[0][0];模块四:得出判断结果通过对坐标的判断得出结果for(i=0;i=n;i++){if(a[i][0]=a[i-1][0])max1=a[i][0];elsemax1=a[i-1][0];if(a[i][0]=a[i-1][0])min1=a[i][0];elsemin1=a[i-1][0];}max2=a[0][1];min2=a[0][1];for(i=0;i=n;i++){if(a[i][1]=a[i-1][1])max2=a[i][1];elsemax2=a[i-1][1];if(a[i][1]=a[i-1][1])min2=a[i][1];elsemin2=a[i-1][1];}printf(请输入(x,y)坐标:\n);scanf(%f%f,&x,&y);if(xmin1||xmax1||ymin2||ymax2)printf(Notinthepolygon);elseprintf(inthepolygon);}五、实验结果分析与讨论:描述不同条件下得到的实验结果;并讨论你所实现代码的优缺点,以及扩展思路调试记录:测试1:出现数据错误,需要输入大于5个的坐标,输入2个(x,y)的坐标******以下运行结果窗口截图*****反思:经过认真查找,发现缺少语句printf(Inputn:\n);测试2:仍然出现数据错误,需要输入大量坐标数据,且跳过输入(x,y)的值便得出结果。******以下运行结果窗口截图*****反思:依然是漏掉了语句,反复排查后发现是scanf(%lf%lf,&x,&y);******以下是正确程序后运行结果窗口截图****结果分析:程序可依照输入,得到想要的结果,依次判断出坐标是否在多边形内;优点:可快速得到结果缺点:程序较为繁琐,编译较为困难。出现这个问题源于在程序分析之初没有仔细推敲程序的结构。在编程的实验过程中我发现我的程序由许多的小问题在实验最后进行检查的时候发现一段多余的代码,经过分析这段代码是完全可以去除的。该算法仍然存在一定不足,比如该算法适用于规则多边形,在遇到不规则多边形时,很有可能点在多边形内部,仍然可能出现交点为偶数的情况。以后我会将从两个方面进一步学习:1.从深度上将进一步对判断条件进行研究,考虑复杂多边形和不规则多边形的特殊情况。2.从广度上将引入别的算法进行综合判断,比较各算法的优缺点。实验二P008E分数统计排序问题一.问题描述:课题要求及总体功能描述课程要求:分数统计要求:(1)输入某班级学生的姓名、分数;(2)对(1)的分数进行排序,按分数从大到小输出;总体功能描述:(1)首先定义输入函数,分别输入学生姓名和分数。(2)再制作循环结构,对输入内容进行核对,对学生分数进行排序。(3)再利用if条件结构,配合循环核对内容符合条件与否选择对应的操作。(4)定义输出函数,输出已经排好顺序的学生姓名及分数。二.课题分析:分析解决问题的思路,描述功能模块分解及每个模块的输入,输出和功能通过仔细分析问题,首先发现以下几个问题:如何高效的输入班级的学生姓名和分数?1、利用何种方法能够快速对分数进行排序?总结:发现本问题着重冒泡排序有很高的要求。课题分析:A.输入函数scanf()B.输出函数printf()C.主函数main()D.for循环结构(对输入内容进行核对)E.if条件结构(配合for循环核对内容符合条件与否选择对应的操作)输入人数输入信息输入班级人数输入班级学生姓名以及对于的分数三.算法描述:采用自然语言、流程图、N-S图或伪代码描述本课题中涉及到的关键算法四.源程序:重要的代码及其说明输出模块排序模块对学生分数进行由大到小的排序按分数大小将学生、分数输出输入学生人数name和分数fen用程序将学生分数排序开始输出排序后的学生输入学生人数结束#defineN3//人数intmain(void)structstudentcharname[20];floatscore;st[N],temp;if(yn==1)for(i=0;iN-2;i++)for(j=i;jN;j++)if(st[i].scorest[j].score)temp=st[i];st[i]=st[j];st[j]=temp;for(i=0;iN;i++)五.实验结果分析与讨论:描述不同条件下得到的实验结果;并讨论你所实现代码的优缺点,以及扩展思路。调试记录:测试:出现乱码现象******以下运行结果窗口截图*****反思:结果出现乱码,%输出时,是以字符串输出,该字符串必须以零字符结束,如果没有,那么计算机一直向后寻找,直到找到零字符为止,因此在找到零字符前会有可能碰到一些不确定的内容,可能就是乱码。查错的过程中程序没有提示error或者warning。经过漫长时间查找发现错误代码。******以下有精简程序后运行结果窗口截图*****扩展思路(总结):将表示分数的变量定义成字符串型的,然后转换成十进制数。这样可避免分数输入的字母导致程序运行出错。通过这几天的学习,我对编程的一些注意点和算法有了更深的理解,但是有很多掌握的还不是很好。我在编程初期出现了很多错误,编译时也出现了很多错误,但是经过系统的提和自己的不断努力,最终还是成功了,在编程过程中,我学会了很多。通过两个实验的设计,我大大加深了对于C语言编程的了解,在编程中出现的各种小问题比如缺少符号,逻辑错误等等问题都能够逐步自我排查,自我解决。对我的耐心有了极大的锻炼。对我日后进一步学习编程打下来扎实的基础,对我以后要参加的全国计算机二级考试也有极大的帮助作用。经过两周的编程,独立完成实验,独立完成实验报告,对我个人都是极大的锻炼。

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功