搜索
您的当前位置:首页正文

南邮c语言程序设计(上机)报告

来源:筏尚旅游网


南京邮电大学通达学院 程序设计(上机)报告

题 目: 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 void main() { int i,j,maxmin,minmax; int a[10][20]; int min[20],max[10]; printf(\"输入10行﹑20列学生身高:\\n\"); for(i=0;i<10;i++) for(j=0;j<20;j++) { scanf(\"%d\输入数组的值 } 3

for(j=0;j<20;j++) { min[j]=a[0][j]; //先把第一个值设为最小值,然后与后面的数逐一比较 for(i=0;i<10;i++) { if(a[i][j]max[i]) max[i]=a[i][j]; //找到每行中的最大值,存放到max[i]数组里面 } } maxmin=max[0]; for(i=0;i<10;i++) { if(maxmin>max[i]) maxmin=max[i]; } printf(\"高个子中的矮子的身高为:%d\\n\//找到max[i]数组中的最小值,放到maxmin中,输出maxmin的值 if (maxmin>minmax) printf(\"高个子中的矮子 比 矮人中的高个子 高!%d\\n\ if (maxmin4

根据输入的数值,可知数组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 #include int main() { int i,j,m,n,k,*a; cout<<\"输入人数n和数到该数便出列m\"<>n>>m; cout<<\"输入从该编号开始报数k\"<>k; }while(k>n-1);//保证k符合要求 a=new int[n]; if(a==NULL) { cout<<\"输入错误\"; exit(1); } for(i=0;i0) { i=(i+m-1)%n; cout<7

n=10,m=12,k = 4

8

因篇幅问题不能全部显示,请点此查看更多更全内容

Top