南京邮电大学通达学院 程序设计(上机)报告
题 目: R009M R024M
专 业 软件工程 学 生 姓 名 xxx 班 级 学 号 xxx 指 导 教 师 韦 剑 日 期 2016年6月6日
1
评分项 平时成绩 软件验收 设计报告 优秀 良好 中等 及格 不及格 评分细则注:评分等级分为五种:优秀、良好、中等、及格、不及格
评分等级备注 2
教师签名: 年 月 日 题目一: 1、问题描述:
题目编号 内容 要求 200个学生不按身高任意排成10行﹑20列的长方形队列。在每一列中选出一个最矮者(如这样人有几个,可任选其中一个)。然后在所选的20个矮人中挑出最高者一人,叫做“矮人中的高个子”。然后,令这20个矮人各回原位。再在每一行中选出一个最高者,又从这10个高人中挑出最矮者一人,叫“高个子中的矮子”。请问“矮人中的高个子”和“高个子中的矮子”这二人中哪个高? 难度 R009M Middle 2、课题分析:
根据题目要求,可知这题需要运用数组和比较大小。先建立一个10行20列的数组,然后通过置换比较求得每一列的最小值和每一行的最大值,分别存入min[j]和max[i]中。再比较min[j]中的数,求得其中最大数minmax;比较max[i]中数,求得其中的最小数maxmin.最后比较minmax和maxmin,并输出结果。 3、算法描述:
算法流程图如下图1-1所示:
开始输入并显示数据 求每列最小值min[j]比较max[i]的值,找出高个子中的矮子maxmin求每行最大值max[i]比较min[j]的值,找出矮人中的高个子minmax比较minmax和maxmin并输出图1.1:算法流程图
4、源代码:
结束
#include for(j=0;j<20;j++) { min[j]=a[0][j]; //先把第一个值设为最小值,然后与后面的数逐一比较 for(i=0;i<10;i++) { if(a[i][j] 根据输入的数值,可知数组min[j]中存放的数按顺序为:157、154、158、159、157、157、159、 159、158、158、158、159、158、154、157、159、157、158、158、154,minmax为159,即矮人中的高个子身高为159cm.max[i]中存放的数按顺序为:185、190、190、196、186、197、187、191、187、196,maxmin为185,即高个子中的矮子的身高为185cm.最后比较minmax和maxmin,maxmin大于minmax,所以高个子中的矮子比矮人中的高个子高。程序输出的结果与实际相符。 题目二: 1、问题描述: 题目编号 内容 要求 设有n个人围坐在圆桌周围,从某个位置开始用自然数进行编号为1,2,…,n。然后从编号为k的人从1开始报数,数到m的人便出列;下一个人(第m十1个)又从1开始报数,数到m的人便是第二个出列的人。如此继续下去,直到最后一个人出列为止。要求输出这个出列的顺序。 这个问题称为雅瑟夫(Josephu)问题。 具体要求如下: (1)n、m、k由键盘输入,输入前要有提示。 (2)在输入n后,动态建立方法说明中所需要建立的数组空间;程序运行结束时释放该存储空间。 (3)分别用n=8,m=4,k=1以及n=10,m=12,k = 4调试运行你的程序。 难度 R024M Middle 2、课题分析: 根据题目要求,可知这题需要运用数组和删除数组元素的知识,关键在于把握删除的数组下标,可以通过循环结构顺序删除。 5 1) 建立一个长度为n的整型数组a[],顺序存储1到n,表示n个人。 2) 从第k个人开始报数。 3) 用i=k-1表示数组元素下标,从i指向的数组元素开始数,数到m,相当于i值增加m-1.如果在数 的过程中遇到数组最后一个元素,则要从数组第一个元素继续数,即将数组看成一个环,需要用到求余运算。综合起来可求得,被删除元素的下表计算公式为:i=(i+m-1)%n。 4) 重复执行步骤3,直到n等于1。 3、算法描述: 算法流程图如下图2-1所示: 开始输入n,m,k建立数组,顺序存储1至n从k开始报数n>0否数到m的人出列,即数组元素输出后删除是n--结束图2.1:算法流程图 6 4、源代码: #include n=10,m=12,k = 4 8 因篇幅问题不能全部显示,请点此查看更多更全内容