软件课程设计 第一阶段实验报告.docx

上传人:b****6 文档编号:4688147 上传时间:2022-12-07 格式:DOCX 页数:11 大小:149.30KB
下载 相关 举报
软件课程设计 第一阶段实验报告.docx_第1页
第1页 / 共11页
软件课程设计 第一阶段实验报告.docx_第2页
第2页 / 共11页
软件课程设计 第一阶段实验报告.docx_第3页
第3页 / 共11页
软件课程设计 第一阶段实验报告.docx_第4页
第4页 / 共11页
软件课程设计 第一阶段实验报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

软件课程设计 第一阶段实验报告.docx

《软件课程设计 第一阶段实验报告.docx》由会员分享,可在线阅读,更多相关《软件课程设计 第一阶段实验报告.docx(11页珍藏版)》请在冰豆网上搜索。

软件课程设计 第一阶段实验报告.docx

软件课程设计第一阶段实验报告

编号:

()字号

《软件课程设计》报告

 

中国矿业大学计算机科学与技术学院

年月

软件课程设计任务书

专业年级:

学生姓名:

任务下达日期:

200年月日

课程设计日期:

200年月日至200年月日

课程设计题目:

面向过程

类别

题目序号

成绩

面向过程

5计算星座

6.骑士巡游问题

 

软件课程设计指导教师评阅书

指导教师评语(①基础理论及基本技能的掌握;②独立解决实际问题的能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题等):

成绩:

指导教师签字:

年月日

 

目录

一、面向过程设计题5-------计算星座问题(第一阶段第五题(提高).cpp)

1.1需求分析……………………………………………………………………….…4

1.2概要设计………………………………………………………………………...4

1.3详细设计与编码………………………………………………………………...4

1.4调试分析………………………………………………………………………...6

1.5用户使用说明………………………………………………………………….7

1.6设计心得………………………………………………………………………...7

二、面向过程设计题6-------骑士巡游问题(第一阶段第六题.cpp)

2.1需求分析…………………………………………………………………………7

2.2概要设计………………………………………………………………………...8

2.3详细设计与编码………………………………………………………………..8

2.4调试分析………………………………………………………………………...12

2.5用户使用说明………………………………………………………………….14

2.6设计心得………………………………………………………………………...14

1.1需求分析

程序达到的功能:

需要输入年月日,从而计算所属的星座。

输入形式:

整型;中间以空格为分隔符

年(1<=year)月(1<=month<=12)日(由月份而定,1、3、5、7、8、10、12月是31天,2月闰年29天,平年28天,其余月均为30天)

程序测试数据:

1995217

输出形式:

字符

1.2概要设计

定义三个整型变量分别为年月日,在主函数中输入数据,然后使用switch~case语句进行判断总天数,最后使用if~else语句判断星座

先使用if~else语句判断是否是闰年,然后再分别判断星座(注意:

闰年的时候所有判断的日期都要+1)

1.3详细设计与编码

#include

usingnamespacestd;

voidmain()

{

cout<<"请输入你的出生年月日"<

intyear,month,day,d;

cin>>year>>month>>day;

switch(month)//switch语句判断总天数

{

case1:

d=day;break;

case2:

d=31+day;break;

case3:

d=31+28+day;break;

case4:

d=31+28+31+day;break;

case5:

d=31+28+31+30+day;break;

case6:

d=31+28+31+30+31+day;break;

case7:

d=31+28+31+30+31+30+day;break;

case8:

d=31+28+31+30+31+30+31+day;break;

case9:

d=31+28+31+30+31+30+31+31+day;break;

case10:

d=31+28+31+30+31+30+31+31+30+day;break;

case11:

d=31+28+31+30+31+30+31+31+30+31+day;break;

case12:

d=31+28+31+30+31+30+31+31+30+31+30+day;break;

}

if(((year%400==0)||(year%4==0&&year%100==0)))

{

if(month>2)d++;

d-=19;//从水瓶座开始算

if(d<=0)cout<<"摩羯座"<

elseif((d>0)&&(d<31))cout<<"水瓶座"<

elseif((d>30)&&(d<62))cout<<"双鱼座"<

elseif((d>61)&&(d<92))cout<<"白羊座"<

elseif((d>91)&&(d<123))cout<<"金牛座"<

elseif((d>122)&&(d<154))cout<<"双子座"<

elseif((d>153)&&(d<185))cout<<"巨蟹座"<

elseif((d>184)&&(d<215))cout<<"狮子座"<

elseif((d>214)&&(d<245))cout<<"处女座"<

elseif((d>244)&&(d<276))cout<<"天秤座"<

elseif((d>275)&&(d<305))cout<<"天蝎座"<

elseif((d>304)&&(d<334))cout<<"射手座"<

elsecout<<"摩羯座"<

}

else

{

d-=19;//从水瓶座开始算

if(d<=0)cout<<"摩羯座"<

elseif((d>0)&&(d<31))cout<<"水瓶座"<

elseif((d>30)&&(d<61))cout<<"双鱼座"<

elseif((d>60)&&(d<91))cout<<"白羊座"<

elseif((d>90)&&(d<122))cout<<"金牛座"<

elseif((d>121)&&(d<153))cout<<"双子座"<

elseif((d>152)&&(d<184))cout<<"巨蟹座"<

elseif((d>183)&&(d<214))cout<<"狮子座"<

elseif((d>213)&&(d<244))cout<<"处女座"<

elseif((d>243)&&(d<275))cout<<"天秤座"<

elseif((d>274)&&(d<304))cout<<"天蝎座"<

elseif((d>303)&&(d<333))cout<<"射手座"<

elsecout<<"摩羯座"<

}

}

主函数流程图:

具体判断语句不再给出流程图,思路是将全年划分为十二个阶段(分别是十二个星座)从水瓶座开始算起,将日期减去19,以水瓶座的开始日期为第一天开始计算,然后依次判断(主要使用if~else语句)

1.4调试分析

输入:

19950217

正确的输出结果:

错误的输出结果有很多,但究其原因一样,并无太大分析意义,在此不一一列举。

错误原因:

计算上的错误,对边界判断不准确,可见,在程序设计方面,还需增加程序设计者的严密性与科学性。

1.5用户使用说明

输入很简单,只需要输入出生年月日(阿拉伯数字)年月日之间以空格、TAB键、回车分隔即可。

1.6设计心得

①本程序主要复习了switch~case语句的运用。

②通过设计锻炼了逻辑上的思考能力与计算能力。

2.1需求分析

该程序需要一个n×n(n>=2)列的棋盘,任意输入一个坐标(在该棋盘内),通过走“马”的方式,遍历棋盘,看是否可以在不重复走的情况下走遍棋盘。

棋盘需要一个二维数组B表示。

并需要其他两个二维数组分别用来记录是否走过以及走的步数。

编写一个递归函数solve用来遍历棋盘(传递bool变量用来判断是否可以成功走完棋盘):

编写两个一维数组用来表示走法,并通过循环的方式走“马”字。

(以八种走法是否走完为循环是否进行的条件)使用if语句判断是否走完

将solve函数返回结果,并使用setw函数输出棋盘。

(输出形式,以标准的表格形式输出,无表格线)

2.2概要设计

先定义一个变量n用来表示棋盘的大小。

定义递归函数solve,solve函数主流程:

使用for循环将每种走法都走完;使用if语句判断是否走过,若没走过,则改变二维数组A,表示该处已走过,并使用数组B记录走的步数;在上一个if语句中使用if语句判断步数是否已走完(若未走完,则再次调用solve函数实现递归,若走完,则输出棋盘)

函数主流程:

输入坐标,调用solve函数,返回ok变量判断是否可以找到答案,若可以找到答案,则solve函数中将输出棋盘,若找不到答案,则输出无法找到答案。

2.3详细设计与编码

流程图

Main函数流程图

Solve函数流程图

#include

#include

usingnamespacestd;

voidsolve(inti,intj,intk,bool&ok);

intB[20][20]={0};//用来输出每个位置是第几步

intA[20][20]={0};//用来记录每个位置是否已经走过

intX[9]={0,-1,-1,1,1,-2,-2,2,2};

intY[9]={0,-2,2,-2,2,-1,1,-1,1};//数组X和数组Y用来表示走法

intn;//矩阵的大小

voidmain()

{

intx1,y1;//定义初始位置

boolok=false;

cout<<"请输入矩阵的大小"<

cin>>n;

cout<<"请输入初始位置"<

cin>>x1>>y1;

B[x1-1][y1-1]=1;

A[x1-1][y1-1]=1;

solve(x1-1,y1-1,2,ok);

if(!

ok)cout<<"从该点无法遍访整个棋盘!

";

}

voidsolve(inti,intj,intk,bool&ok)

{

intx,y;

for(intp=1;p<9;p++)

{

x=i+X[p];

y=j+Y[p];

if((x>=0)&&(x<=(n-1))&&(y>=0)&&(y<=(n-1))&&(A[x][y]==0))

{

A[x][y]=1;

B[x][y]=k;

if(k

{

solve(x,y,k+1,ok);

}

else

{ok=true;

cout<

for(inta=0;a

{

for(intb=0;b

{

cout<

}

cout<

}

}

A[x][y]=0;

}

}

}

2.4调试分析

输入:

请输入矩阵的大小

5

请输入初始位置

11

正确的输出结果(因答案较多,故只截有含有题目要求的答案的一部分)

======================================================================

错误的输出结果:

遇到的问题:

总是无法输出结果

解决方法:

从头到尾读一遍程序,检查其中的细节部分,经检查后发现对二维数组的了解不透彻,在if语句的执行部分中A[x][y]=0;出错。

错误的输出结果2:

遇到的问题:

无法输出正确的结果

解决方法:

检查solve函数看是否有思路错误。

经检查,在递归实现的部分出错。

即错写为:

solve(x-1,y-1,k+1,ok);

2.5用户使用说明

程序会提示输入矩阵大小,请输入一个正整数。

而后程序会提示输入坐标,请输入一个在你输入的矩阵中的坐标否则程序将会输出无法找到。

2.6设计心得

1.通过此程序锻炼了使用递归函数的能力。

2.加强了逻辑能力上的使用以及提高了对题目的分析、辨析能力。

3.学会使用流程图去表示程序的运行流程

4.巩固了布尔变量的使用,学会使用布尔变量来更好的优化程序

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

当前位置:首页 > 高中教育 > 理化生

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

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