实验报告终结版.docx

上传人:b****5 文档编号:5856360 上传时间:2023-01-01 格式:DOCX 页数:31 大小:39.14KB
下载 相关 举报
实验报告终结版.docx_第1页
第1页 / 共31页
实验报告终结版.docx_第2页
第2页 / 共31页
实验报告终结版.docx_第3页
第3页 / 共31页
实验报告终结版.docx_第4页
第4页 / 共31页
实验报告终结版.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

实验报告终结版.docx

《实验报告终结版.docx》由会员分享,可在线阅读,更多相关《实验报告终结版.docx(31页珍藏版)》请在冰豆网上搜索。

实验报告终结版.docx

实验报告终结版

 

学生实习报告

课程名称___程序设计综合实践___

题目名称___保龄球计分_________

学生学院___计算机分院_

专业班级_信管1004_

学号___31001444____________

学生姓名___丁汀________________

指导教师___张高燕________

 

2011年8月14日

摘要

问题陈述

保龄球具有娱乐性、趣味性、抗争性和技巧性,给人以身体和意志的锻炼,可以培养和增强人的自信心。

由于该项运动是在室内进行,不受时间、气候等外界条件的影响,简单并且容易掌握,要想获得好的成绩,只需要多加练习和技巧训练就好。

而模拟的保龄球赛事,摆脱了现实的比赛种种规则和规范的约束和繁复,能更加简单快速、简洁明了地得出比赛成绩。

同时保龄球每轮得分不仅与本轮的滚球情况有关,还可能与后一轮或两轮的滚球情况有关,这样的赛制使得保龄球的比赛更有连贯性和整体感。

保龄球一局由10轮组成。

球员前9轮中,除了打出全中球外,每轮都有两次投球机会。

第10轮全中时再奖励两次投球机会,奖励球的得分应累计在该局的总分内。

如果第10轮为补中,则再奖励一次投球机会,所得分同样累计在该局的总分内。

如果从第1轮的第一个球到第10轮的两个奖励全部是一次击倒球瓶的话,即为满分300分。

特别需要强调的是第十句的比分,第一次投球如果投得全中,仍要继续投完最后两个球;如果是补中,就要继续投完最后一球,结束全局。

值得强调的是,如果两次投球都没有将10个瓶全部击倒,那么第三次机会就会被自动取消。

 

关键分析

1、模拟:

10人逐人逐轮逐次输入每次滚球所击倒的瓶数,这样的数据,根据具体的情况相应给出;

2、统计:

计算得出每个选手一局比赛中每轮后的总数

3、累计:

将每名选手的每轮总分累计相加,依次得出累积分数,进而得到个人的累计总分

4、排序:

将个人的累计总分进行由低到高地排序

5、显示:

将每名选手的得分情况打印得出,同时显示出10人的排名情况

 

目录

1、设计目的与要求

2、总体设计:

方案的大体流程图

3、详细设计:

特殊阶段特殊分析,详细的流程图

4、调试分析:

特殊数据不同情况的分析

4.1输入分数后的纠错分析

4.2每轮得分和累计的得分的计算方法的分析

4.3排序结果打印输出的分析

5、总结回顾

5.1程序可以达到的目的和要求

5.2程序功能的扩展和可行性分析

6、心得体会

7、答辩记录

8、教师意见

1、设计目的与要求

十人依次逐人逐轮逐次输入得分成绩,计算每人每轮得分和累计得分,并且将最后的累计得分由低到高排序,同时将排序结果保存到文件中,在实行的同时实现以下的要求

1.1模拟10个人各打一局保龄球比赛过程,逐人逐轮逐次输入一次滚球击倒的瓶数

1.2.统计每位选手一中局各轮得分和累计总分

1.3对10人的得分由低到高排序并显示

1.4最后,把排序的存入文件中

2、总体设计

开始

解决方案的大体流程图

i=0

i<10

打印输出选手的上场序号i+1

依次输入第i+1号选手十轮每轮每次的的得分,将输入的数据依次保存在数组score[2][12]中

A阶段

纠错分析,查找出认为操作输入的错误数据,避免这样的数据经过计算之后计入比较

B阶段

调用数组score中保存的分数,计算选手的每轮得分和累计得分,并且将这些计算结果保存在数组result[2][10]中

C阶段

结果保存,将对应选手的编号和其最后累计得分依次保存在数组sort[2][10]中

D阶段

E阶段

批量调用数据,将存入数组score[2][12]中的成绩和存入数组result[2][10]中的得分情况依次打印输出

i=i+1

 

利用选择排序法将十名选手的总分排序,得出结果之后保存到文件paixu.txt中

F阶段

3、详细设计

3.1各个步骤的具体实现算法——流程图

3.1.2A阶段的实现:

j=0

j<10

输入score[0][j]

score[0][j]=10

输入score[1][j]

score[1][j]=-1

j=9

j=9

score[0][j]+score[1][j]=10

输入score[0][j+1]

score[0][j+1]=10

输入score[0][j+1]

输入score[1][j+1]

score[1][j+1]=-1

score[0][j+2]=-1

score[1][j+2]=-1

score[1][j+1]=-1

score[0][j+1]=-1

score[1][j+1]=-1

score[0][j+2]=-1

score[1][j+2]=-1

score[0][j+2]=-1

score[1][j+2]=-1

输入score[0][j+2]

 

score[1][j+2]=-1

 

j=j+1

 

进入到下一个B阶段

3.1.2B阶段的实现

开始B阶段,对数据进行纠正分析

j=0

j<12

j=j+1

score[0][j]+score[1][j]>10

score[0][j]>10

score[1][j]>10

输入新的数据score[0][j]

score[0][j]+score[1][j]>10

 

score[0][j]=10

输入新的数据score[1][j]

score[1][j]=-1

输入新的数据score[0][j],score[0][j]

 

进入到下一个C阶段

 

3.2特殊算法的分析和说明

3.2.1定义文件指针*fp,向开辟的paixu.txt文件中读入最终的排名结果

fp=fopen("paixu.txt","w");

for(i=0;i<2;i++)

for(j=0;j<10;j++)

fprintf(fp,"%4d",sort[i][j]);

3.2.2循环体的多次运用

最大的循环体:

for(i=0;i<10;i++)

十名选手进行比赛,每人一局,利用循环体循环十次

里面嵌套的小循环体:

详细见附录中的源代码,循环体依次可以清晰看见

3.2.3二维数组的多次利用

score[2][12]数组:

用来保存每人十轮的比赛成绩

result[2][10]数组:

由来保存计算得出的每轮得分和累计的得分

sort[2][10]数组:

依次保存了每名选手到累计总分,调用数据进行排序之后保存排序结果

3.2.4选择排序法的运用

直接调用sort数组中保存的数据,将十名选手的累计总分进行升序排列

3.3程序源代码:

见附录

3.4特殊情况和最后得分成绩输出的说明

一局一共有十轮的击球机会,且一轮最多有两次击球的机会

3.4.1全中:

某一轮的第一次击球就是10分的情况,那么该轮失去第二次击球的机会;

3.4.2补中:

某一轮的第一次击球之后还有剩余的球,第二次击球之后将上次剩余的球完全击倒;

3.4.3失误:

某一轮的第一次击球之后还有球剩余,第二次击球未能将剩余的球全部击倒;

3.4.4得分为-1:

某一轮某一次的得分是-1的情况表示这一轮该次的球没有投出无法计入得分,则用-1代替未击球的情况;

4、调试分析

4.1人为输入数据的时候容易多次出现错误,系统程序可以保证最后计入排名的成绩都是在每轮每次的得分符合游戏实际规则的前提下计算出来的,所以纠错分析的一段程序可以进行多次纠错,确保最后的数据是合理的正确的

4.1.1一次性完成了纠错任务

(1)某轮某次的得分大于10(由于人工输入的疏忽或者错误导致了这样的结果,当然这样的情况也是很少,因为在懂得了比赛规则后,就知道某此的得分一定不能大于10)

10

11

9

8

9

8

10

10

9

10

4

*

*

某轮第一次得分出现错误

9

1

2

0

2

*

*

1

*

6

*

10

1

9

8

9

8

10

10

9

10

4

*

*

修改该轮的第一次分数

9

1

2

0

2

*

*

1

*

6

*

10

4

6

9

8

10

2

5

10

8

5

*

*

6

4

0

2

*

8

22

*

2

*

*

某轮第二次得分出现错误

10

4

6

9

8

10

2

5

10

8

5

*

*

6

4

0

2

*

8

2

*

2

*

*

修改该轮的第二次分数

(2)由于人为的原因,某轮两次的得分都大于了10

10

1

9

8

22

8

10

10

9

10

4

*

*

9

1

2

43

2

*

*

1

*

6

*

某轮的两次得分都出现错误

10

1

9

8

7

8

10

10

9

10

4

*

*

9

1

2

3

2

*

*

1

*

6

*

依次修改两次的得分,满足两者之和不超过10

(3)满足每次输入的分数都是在0到10的11种得分,但是在某一轮的两次的分数相加之和是大于10的,这种情况要纠错和预防

10

2

8

10

9

7

8

8

7

8

*

*

*

6

5

*

1

3

0

2

3

1

*

*

某轮两次击球得分之和超出了十分

 

10

2

7

10

9

7

8

8

7

8

*

*

*

6

3

*

1

3

0

2

3

1

*

*

重新输入该轮的两次得分,两者的和为10

 

4.1.2多次纠错之后得到正确分数

(1)某轮某次的得分大于10,通过多次纠错得到最后对的数据

10

22

7

10

9

7

8

8

7

8

*

*

*

第一次得分明显错误

6

3

*

1

3

0

2

3

1

*

*

10

10

7

10

9

7

8

8

7

8

*

*

*

*

3

*

1

3

0

2

3

1

*

*

修改第一次的得分,如果刚好第一次的分数为10,则自动令其等于-1

10

8

7

10

9

7

8

8

7

8

*

*

*

6

3

*

1

3

0

2

3

1

*

*

只是将第一次得分改成了8,8+6=14>10

10

7

7

10

9

7

8

8

7

8

*

*

*

3

3

*

1

3

0

2

3

1

*

*

重新输入两次的得分,两次得分之和不大于10

 

10

2

7

10

9

0

8

8

7

8

*

*

*

6

3

*

1

99

0

2

3

1

*

*

第二次得分明显错误

10

2

7

10

9

0

8

8

7

8

*

*

*

6

3

*

1

重新输入第二次得分10,两者的和为10

10

0

2

3

1

*

*

10

2

7

10

9

0

8

8

7

8

*

*

*

6

3

*

1

9

0

2

3

1

*

*

重新输入第二次的得分

两次分数和不大于10

10

2

7

10

1

7

8

8

7

8

*

*

*

6

3

*

99

3

0

2

3

1

*

*

第二次得分明显错误

10

2

7

10

1

7

8

8

7

8

*

*

*

6

3

*

10

3

0

2

3

1

*

*

1+10=11>10

10

2

7

10

7

7

8

8

7

8

*

*

*

6

3

*

2

3

0

2

3

1

*

*

重新输入两次得分

(2)某轮的两次分数都输入有误

10

2

7

10

1

11

8

8

7

8

*

*

*

6

3

*

9

99

0

2

3

1

*

*

明显两次的得分都错误

10

2

7

10

10

7

8

8

7

8

*

*

*

6

3

*

*

3

0

2

3

1

*

*

第一次输入的分数就是10

 

10

2

7

10

8

7

8

8

7

8

*

*

*

6

3

*

99

3

0

2

3

1

*

*

依次纠错,先输入第一次的得分

10

2

7

10

8

7

8

8

7

8

*

*

*

6

3

*

输入第二次的得分,但8+3=10>10

3

3

0

2

3

1

*

*

10

2

7

10

8

7

8

8

7

8

*

*

*

6

3

*

2

3

0

2

3

1

*

*

修改第二次的得分8+2=10<=10

 

4.2在计算每轮得分和累计得分的时候可能遇到的特殊数据

4.2.2非第十轮的其它轮的得分情况,下面以第一轮为例

前两轮连击全中:

10

10

10

*

*

*

30

30=10+10+10

10

10

7

*

*

*

27=10+10+7

27

第二轮的两次击球补中或者失误

10

8

*

2

20=10+8+2

20

10

8

*

1

19=10+8+1

19

4.2.2第十轮的得分情况,总共有以下三种情况

第十轮全中:

第十轮的第一个球得到10分,还有两次击球的机会

5

10

10

8

6

9

0

7

8

10

10

10

5

*

*

2

3

1

10

3

2

*

*

*

30

30=10+10+10

5

10

10

8

0

9

8

7

8

10

10

8

5

*

*

2

10

1

1

3

2

*

*

*

28

28=10+10+8

5

10

10

8

6

9

8

7

8

10

8

*

5

*

*

2

3

1

1

3

2

*

2

*

20

20=10+8+2

5

10

10

8

0

9

8

7

8

10

8

*

5

*

*

2

10

1

1

3

2

*

0

*

18

18=10+8+0

第十轮补中:

第十轮补中,则还有一次击球的机会

5

10

10

8

0

9

8

7

8

7

8

*

5

*

*

2

10

1

1

3

2

3

*

*

18

18=7+3+8

5

10

10

8

6

9

8

7

8

0

9

*

5

*

*

2

3

1

1

3

2

10

*

*

19

19=0+10+9

5

10

10

8

6

9

8

7

8

8

10

*

5

*

*

2

3

1

1

3

2

2

*

*

20

20=8+2+10

5

10

10

0

6

9

8

7

8

0

10

*

5

*

*

10

3

1

1

3

2

10

*

*

20

20=0+10+10

第十轮失误:

在两次击球的过程中没有将是个球完全击倒

5

10

10

8

0

9

8

7

8

7

*

*

5

*

*

2

10

1

1

3

2

1

*

*

8

8=7+1

4.3打印输出结果的情况

4.3.1每轮每次的得分数据的输出,每轮的总得分和每轮的累计得分输出

5

10

10

8

6

9

8

7

8

10

10

5

5

*

*

2

3

1

1

3

2

*

*

*

20

28

20

16

9

18

9

18

20

25

20

48

68

84

93

111

120

138

158

183

累计得分

5

10

10

8

6

9

8

7

8

7

7

*

5

*

*

2

3

1

1

3

2

3

*

*

20

28

20

16

9

18

9

18

17

17

20

48

68

84

93

111

120

138

155

累计得分

172

5

10

10

8

6

9

8

7

8

7

*

*

5

*

*

2

3

1

1

3

2

1

*

*

20

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

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1