发散型思维在CC教学中应用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
发散型思维在CC教学中应用

发散型思维在CC教学中应用   摘要:通过对输出钻石型图案算法的讨论,探讨了《C/C++》教学中的发散性思维,并将其运用到实际的教学中,收到了较好的教学效果。   关键词:C++;教学;发散性;算法   中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2013)32-7284-04   C/C++是普通高校计算机专业学生的必修课,目的是使学生掌握程序设计的基本概念及基本方法,并能较熟练地进行程序设计。在实际教学中,如何培养、激发、提高学生的编程兴趣至关重要。该文探讨了《C/C++》教学中的发散性思维,并将其运用到实际的教学中。   发散性思维(亦称扩散性思维或求异思维),是一种充分发挥人的想象力,突破原有知识圈,从一点向外辐射思考,并通过知识、观念的重新组合,寻找更多的设想、答案或方法;是一种创造性思维,具有流畅性、变通性和独创性等特点。[1]   在C/C++程序设计学习中,很多同学对给出的问题的理解往往思路单一,程序设计理念不深,或对程序的基本结构、语法等基础知识掌握不够,这会导致不能解决给定的实际问题。[2]本文通过发散性思维对一道经典题算法实现的讨论,旨在激发、提高同学的编程兴趣。   问题:给出中间行行号(例如n=4),打印如图1所示的钻石型图案。   1 利用基本流程控制实现   利用程序设计的基本流程控制(顺序、选择、循环结构),对该例做如下分析,如图2所示。   设该图案的中间行行号是n,将图案在控制台模式下,中间列在屏幕上第Mid列输出,即图案关于第n行对称,关于第Mid列对称输出。先将图案分成图中的①、②两部分。分析第①部分。设控制行变化的循环变量为i,i从第1行变化到中间行n(第n行)。则对于第i行的输出的关键是计算图案两端的’*’在屏幕上的列序号,计算结果是:第i行最左侧的’*’在屏幕上的列序号是Mid-i+1,最右边的列序号是Mid+i-1,该行共有2i-1个’*’。在该行左侧可输出空格,以达到格式控制的目的。先输出从屏幕第1列到第Mid-i列共Mid-i个空格,随后连续输出2i-1个’*’即可完成图案上半部分,代码如下:   for( i = 1; i = midN; i++ ){ //输出上半部分   for( j = 1; j = Mid- i ; j++) cout ; //输出Mid-i个空格   for(j = 1; j = 2*i - 1; j++) cout*; //输出2i-1个’*’   coutendl;   }   对于图案的下半部分,从第n+1行开始,到第2n-1行,每行依次递减2个’*’,每行亦关于Mid列对称。为简化处理,重新处理行号,此时设循环变i的初值是n-1(第n+1行),终值是1(第2n-1行),即i从n-1变化到1。从图中可以看出,第i行左侧仍需连续输出共Mid-i个空格,随后连续输出2i-1个’*’。由此可得下半部分②的实现代码:   for( i = midN - 1; i = 1; i— ){ //输出上半部分   for( j = 1; j = Mid - i ; j++) cout ;   for(j = 1; j = 2*i - 1; j++) cout*;   coutendl;   }   2 利用数组实现   数组是由具有相同数据类型的、且一定顺序关系的元素所构成的集合。本问题可以看成是由’*’和空格两类元素按一定规律所构成的一个二维数组。   2.1 空格填充后,置换相应元素为’*’   设图案的中间行行号为N,则该图案共有2N-1行,2N-1列,此时可以考虑用二维数组来处理。为处理方便,可设数组为a[2*N][2*N],其中第0行,第0列的元素不用。首先,用空格初始化数组a中的每个元素;其次,将该数组a中相应元素的空格再置换成’*’;最后,输出整个数组。此时图案在数组a中的中间行行号是N,中间列的列号也是N(图3)。   对于图3中①所示的上半部分,当行循环变量i(第i行)在第1行与第N行间变化时,第i行最左边的’*’在数组a中的元素是a[i][N-i+1],最右边的’*’在数组a中的元素是a[i][N+i-1]。此时只需把第i行从第N-i+1列到第N+i-1列中的元素换成’*’即可。对于下半部分②,设置行号i的变化范围是从1(第N+1行)到N-1(第2N-1行),则第i行中需转换的元素是a[N+i][i+1]到a[N+1][2*N-i-1]。由以上分析可写出该该问题的实现代码,如下:   int N=8; //行对称轴的行号   int i , j;   char a[2 * N][ 2 * N];   for(i = 0; i 2 * N; i++) //

文档评论(0)

erterye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档