美章网 精品范文 计算机程序设计论文范文

计算机程序设计论文范文

前言:我们精心挑选了数篇优质计算机程序设计论文文章,供您阅读参考。期待这些文章能为您带来启发,助您在写作的道路上更上一层楼。

计算机程序设计论文

第1篇

1计算思维的概述

何谓计算思维,即借助于计算机科学基础概念来分析问题、解决问题、系统设计以及理解人类的一种行为。如下图灵奖得主ButlerLampson的报告,这种思维为人自身一种根本且概念化思维方式,是一种思想而非人造物,为数学与工程思维相互融合和互补所形成的一种思想。计算思维自身为抽象与自动化,这种抽象是借助于嵌入、简化、递归以及转换等方式,把某一个较为复杂的问题转变成多个简单的子问题,并实施求解的一个过程。而自动化则是指通过计算机自身所具运算能力的充分利用来分析、解决各种问题,以此来弥补人在计算方面所存在的各种缺陷和不足,这种自动化也在很大程度上使得计算机应用范围更为广泛。基于上述这些内容可知,计算思维其实就是一种人机共存、形式规整以及解答问题的思维。

2基于计算思维培养的C程序设计验教学

2.1教学目标的明确

众所周知,实施教育的主要目标就在于学生综合能力以及素质的培养。目前我国教育部门在计算机教学目标上予以了明确的规定,即计算机基础教学能力培养的目标应包含四个方面的内容,即计算机认知能力、计算机应用能力、网络学习能力以及借助于计算机的一种共处能力,在这些目标中,前两个目标所反映出来的内容及就为计算环境以及问题求解。在计算机这门学科中,C程序的设计就是计算思维中的语言机问题求解。对此,在C程序设计教学过程中,计算思维这一能力不仅仅为其核心能力,同时也是教学中的核心内容。鉴于上述内容,在本次C程序设计实验教学上,教学目标主要为计算机思维的培养,教学主要内容为程序设计方式的讲解,通过上机实践的强化,使学生能够借助于这种实践感受,以及计算问题求解基本方式与思维模式的领悟,为学生创新能力的培养以及综合素质的提高打好基础。下图为C程序的设计的教学模块。

2.2教学内容的设计

在计算机这门学科中,C程序设计这一课程属于理论和实践并重的一门课程,要求教师在教学过程中,必须要把理论教学和实践教学有机结合,从而使理论教学和实践教学能够互相推动。在教学过程中,由于学生对于所学内容缺乏一定的感性认识,对此,教师在实施教学,应综合考虑学生自身的学习情况,结合所要学习的内容,对C程序实验教学内容进行合理且科学地设计,把学生能力的培养、知识的传授以及技能的训练等融为一体,使学生能够在做的过程学到知识,在学习过程中获得相应的操作技能,继而使其能够将自身所学到的内容与知识有效地应用至实践中,并解决在实践中所遇到的各种问题。为达到理论够用实践突出这一目的,在本次C程序设计教学中,把所有的知识点归纳并总结为了九个核心点,根据所学内容的难易程度,把教学过程细化成为三个模块,即基础能力、中级应用以及高级应用,基于由浅入深这一原则,循序渐进地实施教学,把C程序实验教学分为了三个方面的实验,即验证实验、综合实验以及设计型实验,通过这种方式,使学生能够在记忆中来理解所学知识,并在理解中学会怎样应用这些知识,最后使学生在实践应用过程中学会创新。第一,通过验证型实验的实施,使学生能够熟悉该语言的设计环境。学生实施编程以及应用编程的一个基础就是基础能力模块知识,在该模块中,教师必须要求学生学会记忆以及理解,把该模块实验教学内容设置成为验证型的实验,让学生对于C程序设计环境以及步骤有一个基本的认识,使在学生熟悉这一环境后,了解该程序的书写格式、特点以及结构,了解并掌握该程序数据的基本类型、表达式以及运算符等,继而进一步使学生掌握C程序数据的输入以及输出,明白C程序所具备的三种结构,使学生通过验证型实验,可独立解决编程方面存在的各种问题。在实施验证型实验教学时,应要求学生应按照教师解决问题的方式来完成相应的实验内容,这种模拟的方式就是计算思维的模仿,在这一环节中,所强调的是科学内容活动的演示以及证明,注重是学生实验操作、观察、数据处理以及计算等个性化智力技能的培养,在教学过程中,学生借助于验证标准的这一已知程序来理解并学习基础模块中的内容,在理解和学习的过程中,学生可直观且清楚地看到在实际实验程序中各知识点的具体应用,能够更为快速地熟悉这种环境,继而更为地理解以及记忆C程序设计的基本知识。此外,在学生实施验证型实验之前,教师应实适时引导学生对以往所学C程序知识进行回顾,并在基础上对实验步骤实施讨论,提出相关的注意事项,针对学生在实验中容易出错的这些操作方,教师应该事先进行示范,以免在实验中学生出现一些不必要的错误。第二,通过设计型实验的实施,强化学生计算思维能力的培养。所谓设计型实验,就是指不同计算思维方式的综合应用来分析并解决各种问题。设计型实验是基于学生自身已掌握相应的实验方法与技能,通过所学知识的应用,自行提出相应的问题,并在此基础上分析和解决问题,经过算法的分析、程序运行结果的分析处理以及实验结果等,获得正确且规范的研究分析理论。在这一环节中,所注重的是学生团结协作、勇于探索以及的严谨求实精神的培养,在实施设计型实验教学时,教师应事先对程序进行填空、设计以及改错,并提出相关的思考问题,积极引导学生来讨论与分析,鼓励学生提出不同解决方案。第三,通过综合型实验的实施,强化学生创新以及应用意识的培养。在C程序设计实验教学中,为培养学生创新精神以及探索精神,使其计算思维得到扩展与升华,可结合学生自身的学习进度,基于所学内容的难易程度,定期设计一个相应的综合型实验程序题目,鼓励学生在课外课余时间来编程,同时在规定的时间内把所自己的所编程的这一源程序上传至电脑,由教师来进行批阅,对于参与这一活动的学生,教师应该实施相应的鼓励,这样不仅能够进一步激发学生学习的兴趣,同时还可提供学生的实践操作能力,使学生今后能够更好地适应社会市场,在潜移默化中使学生应用创新能力以及计算思维得到培养。总之选择了一些趣味性强、有吸引力的例子和话题以提高学生的学习兴趣,选择一些实用性强的例子和话题,以努力提高高校学生的工程实践能力。精选的“不断提升”的引导性例题、习题和实验题,以及贯穿全书的综合实例,起到了开拓思路、引导读者探究问题求解方法、激发读者程序设计兴趣的目的。

2.3基于计算思维能力培养的C程序设计实验教学

第一,上机操作实验流程的规范。在教学之前,教师应该要求学生对所学内容进行预习,通过题目的分析,明确实验教学中所需的数据结构,对参与运算的这些变量进行赋值,接着应用三种结构来解决问题,将结果输出,进行N-S流程图的绘制,基于该图编写相应的源程序,最后准备好测试程序所需的数据以及预期结果,进行上级调试工作,并归纳总结。通过实验流程的规范,不仅便于学生良好学习习惯以及思维习惯的培养,同时还可提升学生分析与解决各种问题的能力。

第二,加强上机操作过程中的指导与引导。在学生实际上机操作时,教师可借助于提问的方式来引导学生将自身所存在的问题找出来。在程序调试、上机输入以及编辑时,除了系统所引发的问题外,通常情况下,其他问题均由学生自己来独立解决。此外,在教学过程中,教师还还应鼓励学生采用不同的算法,正确引导学生反思这些算法,继而培养学生的计算思维能力。现以“打印水仙花树”以案例说明。

第三,加强实验过程的反思,采取合理且科学的考核评价制度,使学生的计算思维能够得到扩展。在上机完成以后,教师应要求学生对于本次实验实施反思、总结以及归纳,可采取小组的方式来交流和沟通,集思广益,使学生在交流和反思的过程中,拓展其计算思维。此外,还应采取相应的考核评价措施,可采取机考与笔试,结合学生平时学习表现情况,合理且科学地评价,对于学生所获得的成功,不管大小,均应予以相应的肯定,以此激发学生学习的积极性。下面以“打印水仙花数”为例,简要说明基于计算思维的案例设计的基本方法。“打印水仙花数”案例设计步骤(图3)打印水仙花数”案例的具体设计与实施(图4)

3结束语

第2篇

西安理工大学工科非计算机专业和计算机专业虽然都开设C语言程序设计课程,但是前者具有鲜明的专业特点,对该课程的要求明显不同,仅仅按照“面向对象教学”的原则,适当调整教学组织活动和教学内容对于后者是远远不够的。针对目前工科非计算机专业C语言程序设计课程教学实践中所暴露的主要问题,笔者积极开展了非计算机专业C语言程序设计课程教学设计的教改工作。

1.1教学设计概述

所谓教学设计,就是为了达到一定的教学目的,对教什么(课程、教学内容等)和怎么教(组织、方法、媒体的使用等)进行设计。教学设计不等同于传统的备课写教案。教学设计有利于教学工作的科学化,使教学活动纳入科学的轨道。教学设计的意义就在于追求教学效果的最优化,不仅关心教师如何教,更关心学生如何学,注重将人类对教与学的研究结果和理论综合应用于教学实践。教学设计主要包括确定教学目标、组织教学内容、分析教学对象、选择教学形式和方法及教学媒体、设计教学过程、教学质量评价设计等基本环节,其中,设计教学过程是课程教学设计的核心。

1.2该课程教学设计的内容

西安理工大学C语言程序设计课程组于2003年出版了《C语言程序设计教程》及配套的《C语言程序设计教程上机实验与学习指导》特色教材。自2011年开始,非计算机专业选用的教材与计算机专业不同。目前非计算机专业选用《C语言程序设计》(第1版,张毅坤教授,高等教育出版社,2011)作为该课程的教材。非计算机专业C语言程序设计的教学设计是一项复杂的系统工程,主要包括课程教学设计、章节教学设计、课堂教学设计和实验教学设计,以西安理工大学C语言程序设计课程教学大纲为指导,以《C语言程序设计》(第1版)及其配套教材为基础,确定课程教学设计的内容:①将该课程的教学目标确定为“掌握C语言的基本语法和语义,理解结构化程序设计的思想和方法,提高学生的编程能力和调试程序的能力”。②组织教学内容的关键是进行教材的组织呈现,理论教学内容包括《C语言程序设计》(第1版)的第一章至第八章,实验教学体现于该教材的第九章及配套教材。③学生作为教学对象始终是教学过程中的重要角色,工科非计算机专业的种类多,分析教学对象就是掌握学生特点与了解专业背景并重。④重点突出课堂教学设计,传统教学与案例教学有机结合,“讲解+多媒体演示+课堂板书”缺一不可。⑤设计教学过程与“组织教学内容”联系最为紧密,主要包括课堂教学设计和实验教学设计,教学过程设计遵循的总原则是:激发学生兴趣,注重能力培养,合理安排教学顺序,讲清重点与化解难点紧密结合,课堂提高与课后巩固拓展有机统一,并预测教学实践中可能出现的意外情况。⑥将学生评价、同行评价、教学督导组专家评价、主管教学的领导评价和教师自我评价这几种评价的结果综合起来,比较客观的评价教学效果与教学质量。

2教学设计的实践及效果

我们连续多年承担非计算机专业C语言程序设计课程,先后承担过西安理工大学电气工程及其自动化(电力)、水文与水资源工程、印刷工程、包装工程和材料科学与工程等专业的C语言程序设计的理论教学和实验教学任务。始终将上述教学设计的内容贯穿于课堂教学和实验教学之中。C语言程序设计本身是一门实践性很强的课程,加之各个理工科专业的特色鲜明,所以结合学生所学专业特点与需求,同一门课程,针对不同专业的学生,适当调整教学设计内容,并在教学实践中检验教学效果。2012年以来,学生对笔者的教学评分一直在95分以上,也给予了肯定性的评价,例如“采用启发式教学,阐述问题深入浅出,重点突出,能理论联系实际或联系学科发展的新成果”;“对于您的授课方式我们很满意,感谢您对这门课程的热忱,我们会努力学下去”;等等。

3结语

第3篇

关键词遗传算法;TSP;交叉算子

1引言

遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化概率搜索算法。总的说来,遗传算法是按不依赖于问题本身的方式去求解问题。它的目标是搜索这个多维、高度非线性空间以找到具有最优适应值(即最小费用的)的点[1]。

基本遗传算法是一个迭代过程,它模仿生物在自然环境中的遗传和进化机理,反复将选择算子、交叉算子和变异算子作用于种群,最终可得到问题的最优解和近似最优解。

2遗传算法程序设计改进比较

2.1基本遗传算法对TSP问题解的影响

本文研究的遗传算法及改进算法的实现是以C++语言为基础,在Windows2000的版本上运行,其实现程序是在MicrosoftVisualStadio6.0上编写及运行调试的。

1)遗传算法的执行代码

m_Tsp.Initpop();//种群的初始化

for(inti=0;i<m_Tsp.ReturnPop();i++)

m_Tsp.calculatefitness(i);//计算各个个体的适应值

m_Tsp.statistics();//统计最优个体

while(entropy>decen||variance>decvar)//m_Tsp.m_gen<100)

{

//将新种群更迭为旧种群,并进行遗传操作

m_Tsp.alternate();//将新种群付给旧种群

m_Tsp.generation();//对旧种群进行遗传操作,产生新种群

m_Tsp.m_gen++;

m_Tsp.statistics();//对新产生的种群进行统计

}

2)简单的遗传算法与分支定界法对TSP问题求解结果的对比

遗传算法在解决NPC问题的领域内具有寻找最优解的能力。但随着城市个数的增加,已没有精确解,无法确定遗传算法求解的精度有多高。一般情况下,当迭代代数增大时,解的精度可能高,但是时间开销也会增大。因此可以通过改进遗传算法来提高搜索能力,提高解的精度。

2.2初始化时的启发信息对TSP问题解的影响

1)初始化启发信息

在上述实验算法的基础上,对每一个初始化的个体的每五个相邻城市用分支界定法寻找最优子路径,然后执行遗传算法。

2)遗传算法与含有启发信息的遗传算法求解结果的对比

当城市数增至20个时,用分支定界法已经不可能在可以接受的时间内得到精确的解了,只能通过近似算法获得其可接受的解。试验设计中算法的截止条件:固定迭代1000代。表2中的平均最优解为经过多次试验(10次以上)得到的最优解的平均值,最优解的出现时间为最优解出现的平均时间,交叉操作次数为最优解出现时交叉次数的平均值。

表220个城市的TSP问题求解结果数据

算法交叉操作

次数最优解

出现时间平均

最优解

简单遗传算法80244.479.4s1641.8

含初始化启发信息的GA79000.237.4s1398.9

从表2中可以看出,当初始种群时引入启发信息将提高遗传算法的寻优能力。同时缩短了遗传算法的寻优时间和问题的求解精度。

2.3交叉算子对TSP问题解的影响

1)循环贪心交叉算子的核心代码

for(i=1;i<m_Chrom;i++)

{

flag=0;

city=m_newpop[first].chrom[i-1];//确定当前城市

j=0;

while(flag==0&&j<4)

{

sign=adjcity[city][j];//adjcity数组的数据为当前城市按顺序排列的邻接城市

flag=judge(first,i,sign);//判断此邻接城市是否已经存在待形成的个体中

j++;

}

if(flag==0)//如果所有邻接城市皆在待扩展的个体中

{

while(flag==0)

{

sign=(int)rand()/(RAND_MAX/(m_Chrom-1));//随机选择一城市

flag=judge(first,i,sign);

}

}

if(flag==1)

m_newpop[first].chrom[i]=sign;

}

2)问题描述与结果比较

下面笔者用经典的测试遗传算法效率的OliverTSP问题来测试循环贪心交叉算子的解的精度和解效率。OliverTSP问题的30个城市位置坐标如表3所示[2]。

从表4、图1中可以看到,贪心交叉算子大大提高了遗传算法的寻优能力,同时也降低了交叉操作次数。在多次试验中,贪心交叉算子找到的最优解与目前记载的最佳数据的误差率为2.7%。而部分匹配交叉算子找到的最优解与目前记载的最佳数据的误差率高达7%。从而可以得到交叉算子对于遗传算法

2.4并行遗传算法消息传递实现的核心代码

1)主程序代码

//接收各个从程序的最优个体

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

{

MPI_Recv(Rchrom[i],chrom,MPI_UNSIGNED,MPI_ANY_SOURCE,gen,MPI_COMM_WORLD,&status);

}

//计算接收各个从程序的最优个体的回路距离

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

{

fitness[i]=0.0;

for(intj=0;j<chrom-1;j++)

fitness[i]=fitness[i]+distance[Rchrom[i][j]][Rchrom[i][j+1]];

fitness[i]=fitness[i]+distance[Rchrom[i][0]][Rchrom[i][chrom-1]];

}

//找到最优的个体并把它记录到文件里

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

{

if(1/fitness[i]>min)

{

sign=i;

min=1/fitness[i];

}

}

fwrite(&gen,sizeof(int),1,out);

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

fwrite(&Rchrom[sign][i],sizeof(unsigned),1,out);

fwrite(&fitness[sign],sizeof(double),1,out);

//每九代向从程序发送一个最优个体

if(gen%9==0)

MPI_Bcast(Rchrom[sign],chrom,MPI_UNSIGNED,0,MPI_COMM_WORLD);

2)从程序代码

//将上一代的最优个体传回主程序

MPI_Send(Rchrom1,chrom,MPI_UNSIGNED,0,gen,MPI_COMM_WORLD);

//每九代接收一个最优个体并将其加入种群中替换掉最差个体

if(gen%9==0)

{

PI_Bcast(Rchrom2,chrom,MPI_UNSIGNED,0,MPI_COMM_WORLD);

Tsp.IndiAlternate(Rchrom2);

}

//进行下一代的计算

Tsp.Aternate();

Tsp.Generation();

Tsp.Statistics();

3)并行遗传算法的性能

笔者在MPI并行环境下,用C++语言实现了一个解决TSP问题的粗粒度模型的并行遗传算法。该程序采用的是主从式的MPI程序设计,通过从硬盘的文件中读取数据来设置染色体长度、种群的规模、交叉概率和变异概率等参数。试验环境为曙光TC1700机,测试的对象是OliverTSP问题的30个城市的TSP问题。

正如在测试串行遗传算法所提到的数据结果,并行遗传算法也没有达到目前所记录的最好解,但是它提高了算法的收敛性,并行遗传算法的收敛趋势如图2所示[4]。

图2遗传算法的收敛过程

3结束语

本文通过对基本遗传算法的不断改进,证明了添加启发信息、改进遗传算子和利用遗传算法固有的并行性都可以提高遗传算法的收敛性,其中对遗传算法交叉算子的改进可以大大提高遗传算法的寻优能力。

参考文献

[1]刘勇、康立山,陈毓屏著.非数值并行算法-遗传算法.北京:科学出版社1995.1

[2]IMOliverDJSmithandJRCHolland,Astudyofpermutationcrossoveroperatorsonthetravelingsalesman[C]//ProblemofthesecondInternationalConferenceonGeneticAlgorithmsandTheirApplication,Erlbaum1897:224-230