辽宁工业大学c语言程序设计崔阳阳 101401024
非计算机专业《C语言程序设计》的教学研究与思考
33佳木斯教育学院学报J ournal of J iamus i Education Ins titute2010年第6期总第102期No.6.2010Sum 102非计算机专业《C 语言程序设计》的教学研究与思考肖明霞 马纪颖(沈阳化工大学计算机科学与技术学院辽宁沈阳100142)摘 要:文章指出非计算机专业C 语言程序设计的教学目的,从提升学生学习兴趣,改进传统授课方式,加强实例教学,提高实验课效率几方面进行教学改进,提高教学效果。
关键词:C 语言程序设计;实例教学;语法中图分类号:TP312文献标识码:A 文章编号:1000-9795(2010)06-0323-01收稿日期:作者简介:肖明霞(),女,辽宁义县人,从事人工智能方向的研究。
马纪颖(5),女,辽宁辽阳人,从事信息集成方向的研究。
《C 语言程序设计》是程序设计的基础课程,在多数高校中,已经把它作为一门必修的课程,同时,C 语言程序没计也是全国计算机等级考试二级语言考试科目。
C 语言具有非常重要的地位。
因此,改善教学方法,提高教学质量至关重要。
下面,从几个方面谈谈C 语言教学。
一、明确教学目的,合理安排教学大纲和学时我校为二类本科学校,为非计算机专业大一学生开设C 语言课程,旨在让学生拓宽思维方式,培养学生具有设计程序的能力。
为二级考试和本专业的后继课程打下良好的基础。
我校《C 语言程序设计》授课学时为32学时,实验学时为16学时,教学以基础知识,语句,数组和函数四部分为主体进行详细讲解和练习,指针做基础介绍和了解内容,能够适应学生的特点,达到较好的教学效果。
二、明确学生学习目的,激发学生的学习兴趣和热情通过几个生动的实例如,学生成绩管理系统,数据进行排序,汉诺塔,八皇后问题等,让学生明白,学习完C 语言,我就可以进行程序设计了。
从而明确学生学习目的。
三、加强实例教学,在实例中学习语法对于非计算机专业同学而言,大量的语法很容易使一部分甚至是大部分学生产生枯燥无味的感觉,很快对这门课程失去信心。
C语言程序设计实验教程2014学生版
C语言程序设计实验指导书学院专业班级姓名学号目录第1章引论 (1)1.1本章导学 (1)1.2基础实验 (2)1.3拓展实验 (8)1.4习题 (9)第2章C程序设计的初步知识 (12)2.1本章导学 (12)2.2基础实验 (17)2.3拓展实验 (19)2.4习题 (21)第3章顺序结构程序设计 (26)3.1本章导学 (26)3.2基础实验 (28)3.3拓展实验 (31)3.4习题 (34)第4章选择结构程序设计 (40)4.1本章导学 (40)4.2基础实验 (45)4.3拓展实验 (47)4.4习题 (57)第5章循环结构程序设计 (66)5.1本章导学 (66)5.2基础实验 (70)5.3拓展实验 (72)5.4习题 (77)第6章数组 (87)6.1本章导学 (87)6.2基础实验 (89)6.3拓展实验 (93)6.4习题 (98)第7章函数 (109)7.1本章导学 (109)7.2基础实验 (111)7.3拓展实验 (118)7.4习题 (121)第8章指针 (130)8.1本章导学 (130)8.2基础实验 (137)8.3拓展实验 (138)8.4习题 (145)第1章引论1.1本章导学一、教学目标1.了解程序和程序设计语言、C语言的发展和特点。
2.初步掌握C语言源程序的结构特点与书写规范。
3.掌握在集成环境中编辑、编译、连接和运行C语言程序的方法。
二、知识要点1.程序与程序设计语言所谓程序,就是一组计算机能识别和执行的指令序列。
任何人之间的交流需要通过语言,人和计算机交流信息,需要创造一种计算机和人都能识别的语言。
编写计算机程序所采用的语言形式称为程序设计语言。
程序设计一般可以分为以下几个步骤:(1)问题分析。
(2)确定算法。
(3)编写程序。
(4)对源程序进行编辑、编译和连接,得到可执行程序。
(5)运行程序,分析结果。
(6)编写程序文档。
2.C程序举例#include <stdio.h>int main( ){ printf(“This is a C program!”); //输出语句return 0;}运行结果:This is a C program!程序说明如下:(1)C程序是由函数构成的,一个C程序至少且仅包含一个主函数(main函数)。
实验1
沈阳工程学院 C 语言程序设计实验报告实验一 顺序结构程序设计【实验目的】1. 熟悉VC++6.0环境,掌握运行C 程序的基本步骤及查错方法。
2. 掌握基本输入、输出函数的使用。
3. 能够编写简单的顺序结构程序,实现简单的数据处理。
【实验内容】● 调试示例改正下列程序中的错误,求华氏温度对应的摄氏温度。
计算公式如下,其中:c 表示摄氏温度,f 表示华氏温度。
源程序(有错误的程序)#include “stdoi.h ” void main() { int c;f;f=100;c=5*(f-32)/9;printf(“f=d,c=%d\n ”,f,c); }运行结果(改正后程序的运行结果) f=100,c=37 调试过程:(1) 在VC++6.0开发环境下输入源程序。
(2) 使用菜单或工具栏来完成编译、连接和运行。
单击编译(Compile )按钮,编译时出现的第一条错误信息是:Cannot open include file:’stdoi.h ’:no such file or directory 。
鼠标双击错误信息,箭头指向源程序的第一行,将“stdoi.h ”改正为“stdio.h ”后,重新编译,出现新的错误信息是:‘f ’:undeclared identifier 。
双击错误信息,箭头指向源程序的第四行,本错误提示的意思是变量“f ”没有被定义。
“f ”前的分号应该改为逗号。
重新编译,编译正确。
(3) 单击连接(Build )按钮,连接正确。
(4) 单击运行(Execute )按钮,运行结果为:f=d,c=100,不符合题目的要求,仔细检查源程序,发现函数printf 中“f=d ”的“d ”应改为 “%d ”。
改正后,重新编译、连接和运行。
● 改错题改正下列程序中的错误,计算x 的平方y ,并分别以“y=x*x ”和“x*x=y ”的形式输出x 和y 的值。
(请在错误程序行右侧写上正确的)9)32(5-⨯=f c源程序(有错误的程序)/********************found********************/#include “stdoi.h”void main(){ int y,x;printf(“Input x:”);scanf(“%d”,&x);y=x*x;/********************found**********************/printf(“%d=%d*%d\n”,x);/********************found**********************/printf(“%d*%d=%d\n”,y);}运行结果1(改正后程序的运行结果)运行结果2Input x:5 Input x:425=5*5 16=4*45*5=25 4*4=16编程题1、已知某学生的数学、英语和计算机的成绩分别是82、78、91,求该学生3门课的平均成绩。
2014课程设计计划书17-18周
华北水利水电学院课程设计任务书及计划书2013——2014学年第二学期环节名称:高级语言课程设计学生专业班级:信息2013168~2013170 指导教师:杨雪青、王卉院、系:信息工程学院教研室:计算机基础教研室注:指导教师在课程设计期间每天指导时间不少于2小时。
教学院长、教学主任:教研室主任:填表人:杨雪青、王卉填表时间:2014 年 6 月10日选做题(同学们根据自己的兴趣,选择其中的2个题目完成程序设计)1.大奖赛现场统分,已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10,最低0分)。
统分规则为:在每个选手的m个得分中,去掉一个最高分,去掉一个最低分后,取平均分作为该选手的最后得分。
要求编程实现根据n个选手的最后得分,从高到低输出选手的得分名次,以确定获奖名单。
2.小学生计算机辅助教学系统,请编写一个程序来帮助小学生们学习乘法,让计算机随机产生10道10以内的乘法题目,请小学生们回答,若学生回答正确则显示“Right”,否则显示“Wrong”。
10道题做完后,按每题10分统计并输出总分,并根据总分自行设计本次练习的评语。
3.假设银行一年整存零取的月息为1.875%,现在某人手头有一笔钱,他打算在今后5年中,每年年底取出1000元作为孩子的教育金,到第五年孩子毕业时刚好取完这笔钱,请编程计算第1年年初时他应存入银行多少钱。
4.编程打印杨辉三角的前n行,杨辉三角如下。
11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1……5.要求编程实现打印九九乘法表。
1* 1= 11* 2= 2 2* 2= 41* 3= 3 2* 3= 6 3* 3= 91* 4= 4 2* 4= 8 3* 4= 12 4* 4= 16……必做题1、学生成绩管理系统(1~10号同学)一、需求分析设计一个学生成绩管理系统,使之提供以下功能:(1)输入学生信息记录(2)查询学生信息记录(3)更新学生信息记录(4)统计学生信息记录(5)输出学生信息记录需求说明:(1)学生信息包括学号、姓名、性别、数学成绩、英语成绩、计算机成绩、总分、平均分、名次,并且要求学号不重复;(2)输入记录可以从以二进制形式存储的数据文件中读入,也可以从键盘逐个输入学生记录。
C语言程序设计课程设计(论文)-贪吃蛇
C语言程序设计课程设计(论文)-贪吃蛇------------ 大学C语言程序设计课程设计(论文)题目: 贪吃蛇院(系):专业班级:学号:学生姓名:指导教师:教师职称:起止时间:课程设计(报告)任务及评语院(系): 教研室:学号学生姓名专业班级程序设计(报告)贪吃蛇题目程序设计的任务与要求:(1)掌握C语言编程的基础知识。
(2)较熟练地编写C语言应用程序。
(3)了解C语言的常用标准函数、编程技巧、异常处理。
程序(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。
设(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能计)力都有一个很大的提高。
报告(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素) 质的提高起一个积极的推动作用。
任务课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。
正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。
指导教师评语及成绩成绩: 指导教师签字:2011年 1 月 4 日辽宁工业大学 C 语言课程设计说明书(论文)目录第1章 C语言课程设计的实训目的与要求 (1)1.1 C语言课程设计目的 (1)1.2 C语言课程设计的实验环境 (1)1.3 C语言课程设计的预备知识 (1)1.4 C语言课程设计要求 .................................................. 1 第2章 C语言课程设计内容 .. (2)2.1程序功能介绍 (2)2.2程序整体设计说明 (2)2.2.1设计思路 ......................................................22.2.2数据结构设计及用法说明 ........................................32.2.4各模块的功能及程序说明 ........................................72.2.5程序结果 ......................................................82.3程序源代码及注释 (10)第3章 C语言课程设计总结 .................................................. 17 参考资料.. .................................................................20辽宁工业大学 C 语言课程设计说明书(论文)第1章 C语言课程设计的目的与要求 1.1 C语言课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。
C语言课程设计任务书及指导书_xs
《C语言》课程设计任务书及指导书适用专业:电气自动化学制:三年设计周数:一周辽宁工大应用技术学院2012年5月前言C语言是一种在国内外广泛使用的程序设计语言。
C语言以它的功能丰富、表达能力强、使用灵活、应用面广、目标程序效率高、可移植性好等特点,得到了迅速的推广使用。
它即适用于编写系统软件,又适用于编写应用软件,是一种高效、实用、灵活的软件开发工具。
为了提高学生分析问题和解决问题的能力,提高学生综合应用C语言进行程序设计的能力,开设了C语言的课程设计,以锻炼学生独立进行系统分析、程序编码、程序测试等方面的能力。
一、设计目的1.全面理解程序的顺序结构、选择结构、循环结构,掌握结构化程序设计的自顶向下,逐步细化,模块化的设计原则。
2.掌握C语言基础知识,灵活应用函数、指针、数组、结构体等知识进行程序设计。
3.掌握利用C语言进行程序设计的方法和技巧,提高学生综合分析和调试程序的能力。
二、设计题目:(每组一个题目附后)C语言模块化案例系统三、设计要求:1. 采用模块化程序设计方法。
2. 主菜单设计界面如下:3. 子菜单界面如下:选择结构子菜单:循环结构子菜单:4.在对应模块下完成如下功能:(1)单选择if语句:(2)双选择if语句:(3)多选择if语句:(4)switch语句(5)while循环语句(6)do-while循环语句(7)for循环语句(8)循环嵌套例如:switch语句案例界面:四、设计所需系统环境1.硬件环境:微型计算机一台2.软件环境:Windows xp操作系统3.Visual c++ 6.0系统五、设计地点及时间1. 地点:辽工大应用技术学院403机房2. 设计时间:2011年5月28日~2011年6月1日(第16周)六、设计过程1. 认真阅读设计指导书的内容,明确设计的目的和要求,复习C语言的有关知识。
2. 针对设计的题目和要求确定程序的总体结构,将程序按功能划分为若干独立的子模块。
辽宁工业大学第四届教师专业综合能力竞赛获奖名单1
获奖等级
一等奖 一等奖 一等奖 一等奖 一等奖 一等奖 一等奖 一等奖 一等奖 一等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖 二等奖
王晓磊 马 超
陈昕 王冬梅 魏丹 李强 齐锦刚 周岐 于景媛 李青春 于常武 陈强强 李君华 彭淑静 吴红梅 郭 宇
机械工程与自动化学院 机械工程与自动化学院 汽车与交通工程学院 汽车与交通工程学院 材料科学与工程学院 材料科学与工程学院 材料科学与工程学院 化学与环境工程学院 化学与环境工程学院 化学与环境工程学院 电气工程学院 电气工程学院 电气工程学院 电气工程学院 电气工程学院 电子与信息工程学院 电子与信息工程学院 电子与信息工程学院 电子与信息工程学院 电子与信息工程学院 土木建筑工程学院 土木建筑工程学院 土木建筑工程学院 艺术设计与建筑学院 艺术设计与建筑学院 艺术设计与建筑学院 艺术设计与建筑学院 艺术设计与建筑学院 管理学院 管理学院 经济学院
所属院(部)
外国语学院 外国语学院 外国语学院 外国语学院 外国语学院 理学院 理学院 理学院 理学院 理学院 文化传媒学院 文化传媒学院 文化传媒学院 文化传媒学院 计算中心 计算中心 机械工程与自动化学院 机械工程与自动化学院 机械工程与自动化学院 机械工程与自动化学院 机械工程与自动化学院 汽车与交通工程学院 汽车与交通工程学院 汽车与交通工程学院 汽车与交通工程学院 汽车与交通工程学院 汽车与交通工程学院 材料科学与工程学院 材料科学与工程学院 化学与环境工程学院 化学与环境工程学院
获奖等级
三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖 三等奖
《C语言程序设计》教学方法探析
《C语言程序设计》教学方法探析
王美娜
【期刊名称】《科教文汇》
【年(卷),期】2007(000)04X
【摘要】《C语言程序设计》是计算机专业学生的必修课程,是一门深奥枯燥的学科,教师业务水平、教学思路、教学能力的不同,对程序设计语言教学效果有直接的影响。
【总页数】1页(P35)
【作者】王美娜
【作者单位】山东省威海市交通学校计算机教研室(长峰校区),山东威海264200
【正文语种】中文
【中图分类】G634
【相关文献】
1.C语言程序设计中循环结构教学方法探析 [J], -陈英
2.基于C语言程序设计的理实一体化教学方法探析 [J], 王慧
3.C语言程序设计教学方法探析 [J], 邓睿
4.实践导向的C语言程序设计教学方法探析 [J], 黄美丽;尹建新
5.C语言程序设计教学方法探析 [J], 孙振业
因版权原因,仅展示原文概要,查看原文内容请购买。
沈阳工程学院C语言课设
目录C语言课程设计成绩评定表 ............ 错误!未定义书签。
C语言课程设计任务书 (1)程序基本框架结构图 (2)程序设计说明书 (3)源代码清单 (4)课程设计总结 (10)C语言课程设计C语言课程设计任务书一、设计目的通过本次课程设计使学生进一步加深对C语言课程内容的理解,初步掌握一般应用程序的开发方法和步骤,进一步了解与掌握C语言的编程方法和技巧,提高学生用C语言解决实际问题的能力。
二、设计要求1、认真查阅参考书、资料2、遵守课程设计时间安排3、按时上机,认真调试程序4、认真完成课程设计报告三、课设报告装订内容及顺序1、课程设计封皮2、目录3、课程设计成绩评定表4、课程设计任务书5、程序基本框架图6、程序设计说明书7、源代码清单8、课设总结与心得四、设计题目图书管理系统五、时间安排(一周:从 6 月 20 日到 6 月 24 日)1、查阅资料及程序设计(1天)2、程序编制及调试(3天)3、成绩评定(0.5天)3、打印报告(0.5天)六、参考文献1、《C语言程序设计》李淑华/李贞编大连理工大学出版社2、《C语言程序设计》孙连科/姚大鹏编辽海出版社3、《C++时尚编程百例》网冠科技编.机械工业出版社4、《TURBO C 实用大全》徐金梧等编. 机械工业出版社程序基本框架结构图程序设计说明书我们第二小组的课题是图书管理系统,这个系统是我们小组每个人的不懈努力和不断坚持的成果,最后将每个人的结果汇总,经过不断的调试,不断的修改,才成为现在的这个程序。
我们的程序分为4个部分:增加图书、删除图书、修改图书资料以及查询图书资料,我负责的部分是修改图书资料,我的设计思想是:在输入各个书本的信息之后,可以查询出来,并且用某种函数修改已经输入的内容,于是我用了2个指针函数,分别指向“book.txt”和“book1.txt”,之后定义函数,使用户输入书名后,用一个“for”循环语句进行筛选和对比,直到程序筛选到与用户输入的书名一样的书,停止循环,并将此书的所有信息显示,之后,我用了一个“switch”语句,选择用户所需要的修改项,并显示“修改序号”“修改书名”“修改作者”,选择序号为1-3,(如果不是1-3,则显示出错)之后进入修改的界面,根据修改内容,定义到原数据中,并修改原数据,最后,修改结束后,返回主界面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
辽宁工业大学C语言程序设计课程设计(论文)题目:迷宫问题院(系):软件学院专业班级:电商101班学号: 101401024学生姓名:崔阳阳指导教师:丁宝柱教师职称:助教起止时间: 2010.12.20至2010.12.31课程设计(报告)任务及评语目录第1章课程设计的目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1程序功能介绍 (2)2.2程序整体设计说明 (2)2.2.1设计思路 (2)2.2.2数据结构设计及用法说明 (4)2.2.3程序结构(流程图) (6)2.2.4各模块的功能及程序说明 (7)2.2.5程序结果 (8)2.3程序源代码及注释 (9)第3章课程设计总结 (17)参考资料 (19)第1章课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。
C语言程序设计及相应的开发环境。
1.3 课程设计的预备知识熟悉C语言及C语言开发工具。
1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章课程设计内容2.1程序功能介绍本课题要求随机生成一个美观逼真的迷宫图,迷宫的大小为N*N,N预定义为常数,修改N的值可以改变迷宫的大小(只要不超过屏幕显示范围),而程序不必做修改。
用白色表示可走的路,蓝色表示墙壁不可以通过。
2.2程序整体设计说明2.2.1设计思路用wayn、playtoplay、FindWay 、MoveClour、SetPlayColor、DoScore、playWin函数分别实现定义格子的个数画迷宫、计时、判断胜负、自动搜索等功能,在用主函数分别调用这些函数使迷宫这个游戏得以运行。
以一个方阵表示迷宫,0和*分别表示迷宫中的通路和障碍。
设计一个程序,求出一条从指定入口到指定出口的通路,或得出通路不存在的结论.使用穷举法和栈求解Status InitStack(SqStack &S){ //构造一个空栈SS.base = (SElemType * ) malloc(STACK_INIT_SIZE * sizeof(SElemType));if(!S.base) exit(OVERFLOW); //存储分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;}Status GetTop(SqStack s, SElemType &e ){ //若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERRORif( s.top == s.base) return ERROR;e = *(s.top-1);return OK;}Status Push(SqStack &S, SElemType e){ //插入元素e为新的栈顶元素if(S.top-S.base >= S.stacksize){ //栈满,追加存储空间S.base = (SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base) exit(OVERFLOW); //存储分配失败S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++ = e;return OK;}Status Pop(SqStack &s, SElemType &e){ //若栈不空,则删除S的栈顶元素,用e返回其值,if(s.top==s.base)return ERROR; //并返回OK;否则返回ERRORe = * --s.top;return OK;}int StackEmpty(SqStack S){return S.base == S.top;}Status ClearStack(SqStack &s){s.top = s.base;return OK;}2.2.2数据结构设计及用法说明迷宫问题算法基本思想: 从入口出发,顺着某一个方向进行探索,若当前位置“可通”,则纳入“当前路径”,并朝“下一位置”探索,即切换“下一位置”为“当前位置”,如此重复直至到达出口;若当前位置“不可通”,则应顺着“来向”退回到“前一通道块”, 然后换一个方向继续探索,直至出口位置,求得一条通路,若改通道块的四周4个方块均“不可通”,则应从“当前路径”上删除该通道块。
如果通路都探索到而未能达到出口,则所设定的迷宫没有通路.Status Pass(MazeType maze,PosType curpos){ //判断当前位置能否通过return maze.arr[curpos.row][curpos.col] == 0;}Status FootPrint(MazeType &maze,PosType curpos){ //留下足迹maze.arr[curpos.row][curpos.col]='-';return OK;}Status MarkPrint(MazeType &maze,PosType curpos){ //留下不能通过的标记maze.arr[curpos.row][curpos.col]='I';return OK;}SElemType CreateSElem(int step, PosType pos, int di){SElemType e;e.step = step; e.seat = pos; e.di = di;return e;}PosType NextPos(PosType curpos, DirectiveType di){ //返回当前位置的下个位置 PosType pos = curpos;switch(di){case 1: //向右移一格pos.col++;break;case 2: //向下移一格pos.row++;break;case 3: //向左移一格pos.col--;break;case 4: //向上移一格pos.row--;break;}return pos;}Status PosEquare(PosType pos1, PosType pos2){ //判断是否达到了预想的位置return pos1.row==pos2.row && pos1.col==pos2.col ;}2.2.3程序结构(流程图)图2.2迷宫行走程序流程图2.2.4各模块的功能及程序说明m迷宫矩阵数据r,c行和列的大小desr,desc目标位置*/void ShowAllPath(int* m, int r, int c, int desr=-1, int desc=-1) {Matrix maze, mark;maze.Create(r+2, c+2);mark.Create(r+2, c+2);if (desr==-1 || desc==-1){desr = r;desc = c;}int i, j;for (i=0;i<r+2;i++){for (j=0;j<c+2;j++){if (j==0 || j==c+1 || i==0 || i==r+1){mark(i, j) = maze(i, j) = 1;}else{mark(i, j) = 0;maze(i, j) = m[((i-1)*c+j-1)];}}}count = 0;FindAllPath(maze, mark, desr, desc);maze.Release();mark.Release();}#endif2.2.5程序结果2.3程序源代码及注释/*4.3.3源程序*/#include <graphics.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include <dos.h>#define N 20/*迷宫的大小,可改变*/int oldmap[N][N];/*递归用的数组,用全局变量节约时间*/int yes=0;/*yes是判断是否找到路的标志,1找到,0没找到*/int way[100][2],wayn=0;/*way数组是显示路线用的,wayn是统计走了几个格子*/ void Init(void);/*图形初始化*/void Close(void);/*图形关闭*/void DrawPeople(int *x,int *y,int n);/*画人工探索物图*/void PeopleFind(int (*x)[N]);/*人工探索*/void WayCopy(int (*x)[N],int (*y)[N]);/*为了8个方向的递归,把旧迷宫图拷贝给新数组*/int FindWay(int (*x)[N],int i,int j);/*自动探索函数*/void MapRand(int (*x)[N]);/*随机生成迷宫函数*/void PrMap(int (*x)[N]);/*输出迷宫图函数*/void Result(void);/*输出结果处理*/void Find(void);/*成功处理*/void NotFind(void);/*失败处理*/void main(void)/*主函数*/{int map[N][N]; /*迷宫数组*/char ch;clrscr();printf("\n Please select hand(1) else auto\n");/*选择探索方式*/ scanf("%c",&ch);Init(); /*初始化*/MapRand(map);/*生成迷宫*/PrMap(map);/*显示迷宫图*/if(ch=='1')PeopleFind(map);/*人工探索*/elseFindWay(map,1,1);/*系统自动从下标1,1的地方开始探索*/Result();/*输出结果*/Close();}void Init(void)/*图形初始化*/{int gd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc");}void DrawPeople(int *x,int *y,int n)/*画人工控制图*/{/*如果将以下两句注释掉,则显示人工走过的路径,*/setfillstyle(SOLID_FILL,WHITE); /*设置白色实体填充样式*/bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);/*恢复原通路*/switch(n)/*判断x,y的变化,8个方向的变化*/{case 1: (*x)--;break; /*上*/case 2: (*x)--;(*y)++;break ;/*右上*/case 3: (*y)++;break; /*右*/case 4: (*x)++;(*y)++;break; /*右下*/case 5: (*x)++;break; /*下*/case 6: (*x)++;(*y)--;break; /*左下*/case 7: (*y)--;break; /*左*/case 8: (*x)--;(*y)--;break; /*左上*/}setfillstyle(SOLID_FILL,RED);/*新位置显示探索物*/bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);}void PeopleFind(int (*map)[N])/*人工手动查找*/{int x,y;char c=0;/*接收按键的变量*/x=y=1;/*人工查找的初始位置*/setcolor(11);line(500,200,550,200);outtextxy(570,197,"d");line(500,200,450,200);outtextxy(430,197,"a");line(500,200,500,150);outtextxy(497,130,"w");line(500,200,500,250);outtextxy(497,270,"x");line(500,200,450,150);outtextxy(445,130,"q");line(500,200,550,150);outtextxy(550,130,"e");line(500,200,450,250);outtextxy(445,270,"z");line(500,200,550,250);outtextxy(550,270,"c");/*以上是画8个方向的控制介绍*/setcolor(YELLOW);outtextxy(420,290,"Press 'Enter' to end");/*压回车键结束*/setfillstyle(SOLID_FILL,RED);bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);/*入口位置显示*/ while(c!=13)/*如果按下的不是回车键*/{c=getch();/*接收字符后开始各个方向的探索*/if(c=='w'&&map[x-1][y]!=1)DrawPeople(&x,&y,1);/*上*/elseif(c=='e'&&map[x-1][y+1]!=1)DrawPeople(&x,&y,2);/*右上*/elseif(c=='d'&&map[x][y+1]!=1)DrawPeople(&x,&y,3);/*右*/elseif(c=='c'&&map[x+1][y+1]!=1)DrawPeople(&x,&y,4);/*右下*/elseif(c=='x'&&map[x+1][y]!=1)DrawPeople(&x,&y,5);/*下*/elseif(c=='z'&&map[x+1][y-1]!=1)DrawPeople(&x,&y,6); /*左下*/elseif(c=='a'&&map[x][y-1]!=1)DrawPeople(&x,&y,7); /*左*/else if(c=='q'&&map[x-1][y-1]!=1)DrawPeople(&x,&y,8); /*左上*/}setfillstyle(SOLID_FILL,WHITE); /*消去红色探索物,恢复原迷宫图*/bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);if(x==N-2&&y==N-2)/*人工控制找成功的话*/yes=1; /*如果成功标志为1*/}void WayCopy(int (*oldmap)[N],int (*map)[N])/*拷贝迷宫数组 */{int i,j;for(i=0;i<N;i++)for(j=0;j<N;j++)oldmap[i][j]=map[i][j];}int FindWay(int (*map)[N],int i,int j)/*递归找路*/{if(i==N-2&&j==N-2)/*走到出口*/{yes=1;/*标志为1,表示成功*/return;}map[i][j]=1;/*走过的地方变为1*/WayCopy(oldmap,map); /*拷贝迷宫图*/if(oldmap[i+1][j+1]==0&&!yes)/*判断右下方是否可走*/{FindWay(oldmap,i+1,j+1);if(yes)/*如果到达出口了,再把值赋给显示路线的way数组,也正是这个原因,所以具体路线是从最后开始保存*/{way[wayn][0]=i;way[wayn++][1]=j;return;}}WayCopy(oldmap,map);if(oldmap[i+1][j]==0&&!yes)/*判断下方是否可以走,如果标志yes已经是1也不用找下去了*/{if(yes){way[wayn][0]=i;way[wayn++][1]=j;return;}}WayCopy(oldmap,map);if(oldmap[i][j+1]==0&&!yes)/*判断右方是否可以走*/{FindWay(oldmap,i,j+1);if(yes){way[wayn][0]=i;way[wayn++][1]=j;return;}}WayCopy(oldmap,map);if(oldmap[i-1][j]==0&&!yes)/*判断上方是否可以走*/{FindWay(oldmap,i-1,j);if(yes){way[wayn][0]=i;way[wayn++][1]=j;return;}}WayCopy(oldmap,map);if(oldmap[i-1][j+1]==0&&!yes)/*判断右上方是否可以走*/ {FindWay(oldmap,i-1,j+1);if(yes){way[wayn][0]=i;way[wayn++][1]=j;return;}}WayCopy(oldmap,map);if(oldmap[i+1][j-1]==0&&!yes)/*判断左下方是否可以走*/ {if(yes){way[wayn][0]=i;way[wayn++][1]=j;return;}}WayCopy(oldmap,map);if(oldmap[i][j-1]==0&&!yes)/*判断左方是否可以走*/{FindWay(oldmap,i,j-1);if(yes){way[wayn][0]=i;way[wayn++][1]=j;return;}}WayCopy(oldmap,map);if(oldmap[i-1][j-1]==0&&!yes)/*判断左上方是否可以走*/ {FindWay(oldmap,i-1,j-1);if(yes){way[wayn][0]=i;way[wayn++][1]=j;return;}}return;}void MapRand(int (*map)[N])/*开始的随机迷宫图*/{int i,j;cleardevice();/*清屏*/randomize(); /*随机数发生器*/for(i=0;i<N;i++){for(j=0;j<N;j++){if(i==0||i==N-1||j==0||j==N-1)/*最外面一圈为墙壁*/map[i][j]=1;elseif(i==1&&j==1||i==N-2&&j==N-2)/*出发点与终点表示为可走的*/ map[i][j]=0;elsemap[i][j]=random(2);/*其它的随机生成0或1*/}}}void PrMap(int (*map)[N])/*输出迷宫图*/{int i,j;for(i=0;i<N;i++)for(j=0;j<N;j++)if(map[i][j]==0)setfillstyle(SOLID_FILL,WHITE);/*白色为可走的路*/bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);elsesetfillstyle(SOLID_FILL,BLUE);/*蓝色为墙壁*/bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);}void Find(void)/*找到通路*/{int i;setfillstyle(SOLID_FILL,RED);/*红色输出走的具体路线*/ wayn--;for(i=wayn;i>=0;i--){bar(100+way[i][1]*15-6,50+way[i][0]*15-6,100+way[i][1]*15+6,50+way[i][0]*15+6);sleep(1);/*控制显示时间*/}bar(100+(N-2)*15-6,50+(N-2)*15-6,100+-2)*15+6,50+(N-2)*15+6); /*在目标点标红色*/setcolor(GREEN);settextstyle(0,0,2);/*设置字体大小*/outtextxy(130,400,"Find a way!");}void NotFind(void)/*没找到通路*/{setcolor(GREEN);settextstyle(0,0,2);/*设置字体大小*/outtextxy(130,400,"Not find a way!");}void Result(void)/*结果处理*/ {if(yes)/*如果找到*/Find();else/*没找到路*/NotFind();getch();}void Close(void)/*图形关闭*/ {closegraph();}第3章课程设计总结通过对C程序设计基础的学习,我掌握了一些基本的编程方法和思路,出色的完成了这次课程设计,这次课程设计是我们接触C语言这个新事物以来的第一次比较系统的检验,我们都很重视,也很刻苦的钻研自己的课题,当然,通过努力完成设计的也不只我一个人,大家都很出色,都很优秀,这次设计对我们以后学习工程都有着深远的影响,所以,完成这次课程设计,我们都很高兴,这也为我们以后的学习增加了很多信心,在以后的学习生活中,我一定会努力钻研C科学,为以后的发展铺下宽广的道路.。