6、课程设计总结
为大家解决一些生活中实际的问题,在这个过程中,自身的能力也在不断地提高。此次 程序设计综合运用所学知识解决实际问题, 将课堂的书本知识有效的在程序中体现出来, 让 学生更理解 C++功能之强大,进一步让学生对面向对象的方法以及 C++的编程思想有较好的了解和认识。此外,此次设计培养独立开发、设计、调试、运行程序的能力,激发学生较 强的自学兴趣,锻炼学生之间以及学生与老师的沟通能力,培养学生之间的合作精神,让彼 此更好的认识到合作的重要性,使学生在今后的学习中加强对合作精神的培养。一般来说,课程设计要比教学实验复杂一些,涉及的深度深,而且更加实用些。其目的 是通过课程设计的综合训练, 培养学生分析解决实际问题和编程等动手能力, 最终目标是想 通过这种形式,帮助学生系统掌握 C++这门课程的主要内容,使老师更好的完成教学任务。 结合实际应用的要求, 使课程设计既覆盖教学所要求的知识点, 又接近工程的实际需要, 训练自己实际分析问题和解决问题以及编程的能力。 通过详细的实例分析,循环渐进的描述,启发学生顺利的完成设计。课程设计将设计要 求、需求分析、算法设计、编程和实例测试运行分开,为学生创造分析问题、独立思考的条 件。只要学生在吃透要求和算法的前提下,完全可以不按书中提示的参考程序,自己设计出 更具有特色的程序。
7、参考文献
[1] 谭浩强,《C++程序设计》,北京,清华大学出版社,2006年.
附录:
#include
6
{
int x,y;
}item;
typedef struct {
int x,y,d;
}Datetype;
typedef stack
#define NUM 100 //队列大小; typedef struct{ int x,y; //所到点的坐标;
int pre; //前驱点的下标;
}SqType; //队列;
int front,rear; //队首指针与队尾指针; void printpath(SqType sq[],int){//打印路径 int i; i=rear; do{ cout<<\
i=sq[i].pre; //回溯;
}while(i!=-1);
}
void restore(int **maze,int m,int n){//恢复迷宫
7
}
for(int i=1;i<=m;i++){ }
for(int j=1;j<=n;j++){ }
if(maze[i][j]==-1)
maze[i][j]=0;
int path1(int **maze,int m,int n,int c,int d,int x1,int y1)//最短路径
{ //m,n为迷宫的长和宽,c,d为迷宫入口坐标,x1,y1为迷宫出口坐标;maze为迷宫;
item move[8]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; //坐标增量数组; SqType sq[NUM]; int x,y,i,j,v; front=rear=0; sq[0].x=c; sq[0].y=d; sq[0].pre=-1; if(maze[c][d]==0)
maze[c][d]=-1;//入口点入队; else goto G;
while(front<=rear){ //队列不为空
x=sq[front].x; y=sq[front].y; for(v=0;v<8;v++){
i=x+move[v].x; j=y+move[v].y; if(maze[i][j]==0){
8
rear++; sq[rear].x=i; sq[rear].y=j; sq[rear].pre=front;
maze[i][j]=-1; //访问过的坐标点,入队;
}
if(i==x1&&j==y1){ cout<<\最短路径为:\ printpath(sq,rear); //输出路径; restore(maze,m,n); //恢复迷宫; return 1;
}
} //for v;
front++; //当前点搜索完,取下一个点搜索
} //while
G:cout<<\无路径。\ return 0;
}
void path(int **maze,int a,int b,int m,int n) { item move[8]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; stack_int st; Datetype temp; int x,y,d,i,j;
if(maze[a][b]==1){cout<<\进口输入有误。\
temp.x=a;temp.y=b;temp.d=-1; //初始化入口点坐标及方向;9
st.push(temp); while(!st.empty()) { temp=st.top(); st.pop();
x=temp.x;y=temp.y;d=temp.d+1; while(d<8) { i=x+move[d].x;j=y+move[d].y; if(maze[i][j]==0) //该点可到达; { temp.x=x;temp.y=y;temp.d=d; //坐标及方向;
st.push(temp); //坐标及方向入栈;
x=i;y=j; maze[x][y]=-1;//到达新点; if(x==m && y==n) { cout<<\迷宫路径为:\ cout<<\ Datetype t; while(!st.empty()) { t=st.top();
cout<<\
st.pop();
} //输出路径;
10