C语言研究性学习的路线.docx
《C语言研究性学习的路线.docx》由会员分享,可在线阅读,更多相关《C语言研究性学习的路线.docx(37页珍藏版)》请在咨信网上搜索。
1、C语言研究性学习的路线现行的多数C语言教材有太多的误区,不仅不能给读者提供有效的学习线索,还常常“误 导”读者,于是,“死记硬背”便成了学习C语言的唯一选择。本文以拙作新编C语言程 序设计教程(清华大学出版社出版,博客blog. csdn. net/stunt配套视频zeql26. 56. com) 为基础,探讨了 C语言的研究性学习。C语言的学习可分为四个阶段。第一阶段 理解C语言与计算机的关系理解计算机如何计算。计算机由五大部件组成,C语言如何使用这五大组成部件?计算机采用二进制,那么正负号,小数点、字符等如何在计算机中存储?采用不同的编 码方式,计算机中的运算与数学上的运算有何异同?在理
2、解上述问题的基础上,能根据优先级、结合性、数据类型和序列点熟练地对C语言 表达式求值,也就是能模拟计算机进行计算。第二阶段掌握编程方法计算机通过连续地对表达式求值(计算)解决实际问题。掌握逻辑运算之后,理解计算机解决问题的方法,即有条件地重复。编程的关键在于找 到利用“重复”解决问题的方法。算一次加法,再算一次加法,又算一次加法,“重复加”, 如1+2+3+100。大僧人数为1时满足条件吗?大僧人数为2时满足条件吗?大僧人数为3 时满足条件吗? “重复试”,如百僧百馍问题。遇到问题定要先用自己的超级计算机(大脑)分析问题找出重复,再用循环把重复表 达出现,这就是编程。第三阶段用函数组织代码当程
3、序由多个函数组成时,可以借助对函数封闭性的研究来理解这一阶段遇到的问题。 递归函数是个奇迹,自然而优雅地模拟了递归算法。递归算法是更高级的重复。第四阶段掌握指针的用法指针提供了使用内存中相关存储单元的另一种途径。由于只需某类型的地址,就可使用相关存储单元,指针变量可以提高函数的执行效率。 由于void型指针变量的特点,程序中的某些函数可以超越类型的限制而具有了某种通用性。理解了指针的作用,掌握指针也并非什么难事。C语言的知识点有:1 . C语言与计算机的关系2 .表达式的求值3 .逻辑运算及选择结构4 .算法及循环结构5 .数组的作用及准确理解6 .函数的作用及准确理解7 .指针的作用及准确理
4、解8 . 其它这几局部相辅相成,构成了一个有机的整体。分析如下:重点:1 .作用。(用于改写简单的if-else结构)2 .显然?处有一个序列点,保证了执行过程与if-else结构的完全一致。3 .总结C语言中操作符的4个序列点的作用。switch结构重点:1 .理解switch结构的语法。(常量表达式,default子句的次序).分析switch结构的执行过程。(体会case标号的作用。为什么常量表达式的值不 能为浮点数?)2 . break语句对swi tch结构的影响。3 .有break语句的switch结构的作用。(改写为if结构时如何确定default子句的 条件)(六)典型例题关键
5、在于学习如何分析解决问题,培养锻炼自己的编程能力。不要在意你能否做出这些 题,如果能,一定要比照分析;如果不能,一张白纸也并非什么坏事。例4T8升序排列输入的3个整数a, b,c。(注意处理后应让a的值最小,c的值最大) 步骤:1 .第一步先把b插入到前面有序的了序列中使a, b有序:第二步再把c插入到前面有 序的子序列中使a, b,c有序,任务完成。这一步似乎解决了问题,但又好像没有“解决”问题。体会这种分析方法的特点。(从宏观上研究问题,由于忽略了次要因素从而易于把握关键点。又好像在做可行 性分析。)2 .再讨论每一步的细节,究竟该如何做。如何使a, b有序?(这一步没有难度,大局部同学都
6、可以写出伪代码)如何使a, b, c有序?(局部同学忽视了前提条件此时a, b已经有序。可直接思考也 可举例分析,但要考虑不同的情况)分b不小于c和b大于c两种情况,当bc时需要排序,否那么已经有序。显然这是 个if结构。在这里bc为真意味着什么?b最大,需要互换b,c的值。换完后a, b,c有序了吗?处于什么状态?(c的值最 大,但a的值是否最小还不一定)注意:1. 体会从分析问题到给出解决问题的步骤再到写出程序的编码过程。体会程序中每行代码究竟意味着什么样的处理过程。两者对照,体会“编程”。2. 此题采用的是“自顶向下,逐步求精”的分析方法,体会其特点。3. 练习4. 20的算法也解决了这
7、个问题,体会两者的区别。再通过练习4. 21排序5个整数,分析两者的区别。4. . 练习4. 21不仅让大家通过实践体会了这种排序方法“先进性”,更重要的是引 导大家发现“重复性”,为用“循环”解决这个问题埋下伏笔。如果学完了例4-18,只学会了对三个数排序而没有体会到什么是编程,什么是“自顶向 下,逐步求精”,不能不说是个遗憾。例479判断闰年。算法:如果不是4的倍数,那么不是闰年。否那么是4的倍数如果不是100的倍数,那么是闰年。否那么是100的倍数如果不是400的倍数,那么不是闰年。否那么是400的倍数是闰年。重点:1 .体会编程时需要的条理性、逻辑性。2 . else if的用法。(仅
8、仅是简写形式)例4-20百分制成绩转换成A-E五级成绩。重点:1. 先分析出关键处理的流程图。再次体会思路的逻辑性,条理性。(也可直接用五条 if 语句,如 if (grade=90) putchar(A);,但要改成 if-else 结构,因为效率问题。改写时注意提醒。Ise也是条件再判断时就没必要用&了。)2. 根据流程图写出程序。3. 比照练习4. 23的流程图,同样的问题不同处理过程,分析两者的区别。例4-21用switch结构改写例4-20。结合switch结构的作用,针对问题,找出矛盾。转变思路,解决问题。(问题的解法 有多种,结合要求,具体问题具体分析。)例4-22判断用户输入的
9、含+-*/的等式如3. 11+3. 12=6. 23是否成立。算法:1 .获得用户的输入数据2 .根据等式中的运算符(+-*/)计算出正确的结果。3 .比拟运算结果与用户的输入结果判断用户输入的等式是否成立。重点:1 .用户的输入分为浮点型和字符型。2 .用switch结构实现“相等关系”的多分支,而非if-else结构。3 .浮点型数据通常不直接比拟是否相等,需要比拟时常用的方法是如果两数之差绝对 值小于某数就认为两者相等。所谓“误差累枳”是指3.11赋值给变量fa时有误差3.12赋值给变量fb时也有误 差,fa与fb之和的误差由于累积跟6. 23赋值给变量fc时产生的误差不同了,因 此fa
10、+fb不等于fc。(如果fa=6. 23; fb=6. 23;,那么fa和fb当然相等。如果 fa=0. 3 ;fb=0. 5; fc=0. 8;那么 fa+fb 与 fc 相等吗?)再回顾问题:switch结构中为何通常不用浮点型做标号?四、算法及循环结构/*前言这注定又是的一章。算法的精髓是“循环”,而构造循环的能力只能在一次次的分析、编码、调试、比照、 思考中培养。除了一道道的演示,我实在想不出其它的方法可以“速成”,毕竟如表达式求 值似的总结个一二三四的速成法仅适用于“知识”。关于编程,有的人似乎“天生”就会, 有的人可能“上手”较慢,所幸正如武侠书中的演绎,并非“上手”越快就一定走得
11、越远。*/(一)再谈算法屡次指出,编写程序的过程为:分析问题,得到解决问题的步骤,最后把步骤“翻译” 成相应的语句。解决问题的步骤就是算法。问题的解法可能有多种,行之有效的方法通常与 欲使用的工具相关,也就是说,必须结合工具的特点思考问题的解法。计算机解决问题主要靠循环!运用循环的熟练程度直接反映了一个程序员的编程水平。 亳不夸张地说,思考问题的解法就是考虑“如何构造循环”。循环是有条件的重复,是“螺旋式上升”,是“波浪式前进”。(Zl) while循环结构重点:1. while循环结构的形式。其与if结构有何异同?(从形式、执行过程、流程图)2 . while循环结构的特点。while循环结
12、构的循环体执行多少次?(再次强调由循环控制表达式决定)如何使用while循环结构输出五个*号?(由具体例如展开,总结while循环结构使用 的3个特点:设置循环变量的初值、决定循环控制表达式、调整循环变量的值)由例5-1熟悉不同while循环结构的执行情况。(循环次数固定的,输出A至循 环次数不定的,(L0/iL23e-3),体会作用“求出了倒数小于0. 00123的最小整数”,注 意循环执行完毕后循环变量的值;复杂的循环,含有switch结构。可结合循环结构使用特 点)难点:while循环结构的用法。(关键在于如何得到“重复”的过程)例 5-2 求 1+2+3+-+100 的和。1 . 先计
13、算1+2+3+4+5,总结规律:“重复算加法”,加数为“上一次的和”与“一 个新的加数”。如何使用while循环结构来模拟这个过程呢?加到何时为止?新 的加数大于5为止,因此循环控制表达式为i=5 (i代表新的加数),循环体为 sum=sum+i (sum 为上一次的和)。2. 尝试写程序。3. 分析执行过程,并与列式计算过程比照,体会两者的共同之处。例5-3输出一个正整数各位上的数字和。1 . 以2325为例,2+3+2+5=12,本质上也是“重复算加法”,但此例与例5-2有何 不同?新的加数为“各位上的数字”,没有规律,需要在加之前求出它。(考虑 是从左向右算呢,还是从右向左算?)加到何时
14、为止? “加完”为止,即新的加 数为。时为止,因此“新的加数为0”可以作为循环控制的条件。当然此时就可 写出程序了。(不过程序可能出现错误,如1002时。)再想什么情况下新的 加数为标志结束的0? ”,那么经过深入分析可以得到正确的程序。2, 尝试写出程序。3, 分析执行过程,体会程序中每条语句的作用。体会如何让循环“螺旋式上升”,“波浪式前进”。(在下次循环之前先做好准备,“恢复状态”,此例为“去掉” 加过的数字。)例5-4百僧分百馍1 .总共有多少种可能?对于每种情况,处理方式相同吗?(本质也是重复)2 .尝试写出并分析程序的执行情况。3 .体会用计算机解决问题的特点。(一个一个地试。美其
15、名曰“穷举法”).这个程序在理论上有问题。(应确保小僧的人数为3的倍数,即需同时保证 (100-i)%3=0 为真)(三)for循环结构为了使循环结构更紧凑,更优雅,C语言提供了 for循环结构。重点:1 .for循环结构的一般形式。(典型循环结构的3个特点与for循环结构的对应关系。理解了对应关系自然也就弄懂了 for循环结构。)2 .for循环结构的特点。(表达式1和表达式2可以为逗号表达式。表达式省略后应如何理解)难点:虽然同样为构造循环,同样为“找重复”或“穷举”,但是此处例如的难度有所增加。 例5-6输出100以内奇数之和与偶数之和。1 .不同的理解可能有不同的算法。1+3+5+-+
16、99 2+4+6+100,可以用两个循环结构实现。也可合并为一个从1至100的循环,循环体内用if-else结构。2 .最终归结为 for (i=l; i=99; i+=2) oddsum+=i ;evensum+=i+l;。3 .对循环过程分析得越透彻算法的效率越高。例5-7求正整数m和n的最小公倍数。1. 公倍数i可能的取值为m, 2*m, 3*m, -n*m,如果i也为n的倍数,那么i就是所要 求的公倍数。显然是穷举法。2. 写出程序。运行时会发现错误。分析出错的原因。(程序在什么情况下出错,什 么情况下不会出错?)3. 如何修改?(修改循环控制的条件。应为i不为n的倍数,而非i=n*m
17、)4. .循环体竟然是传说中的空语句,呵呵。例5-8输出斐波那契数列的前30项。1. 分析从第3项开始的计算过程,手工模拟计算直到熟悉计算过程,找出计算第i 项时的“标准化”步骤。2. 注意输出结果的安排。总结:循环结构的关键在于“第i次循环”有什么作用?循环是如何模拟手工过程的。为了循 环必须把手工过程“标准化”。(四)break语句和continue语句重点:1. . break语句与continue语句的区别和联系。(常用于if结构中,在某些条件下 均可影响循环结构的执行。break语句终止循环结构的执行,而continue语句 终止循环结构的一次执行。)break语句的作用为终止所属结
18、构的执行。(注意其是属于哪个循环结构,有时 可能是哪个switch结构)2. continue语句如何用选择结构替换?难点:例5-9判断正整数n是否为质数。分析:如果从2至nT均不为n的因数,那么n就是质数。处理过程为:2是因数吗? 3 是吗?循环(穷举)。循环变量i从2至n-1,对于第i次循环,作用为判断i是否为n的因数。如果i为n 的因数,那么不用再判断其它数,可以立即终止循环了。否那么什么也不用做,显然循环体为一 个if结构。循环执行完毕,如何判断n是否为质数?或者说,如何判断2至n-1中是否有n的因数? 假设其中有n的因数,那么循环如何执行?没有的话,循环又会如何执行?循环结束后循环变
19、量i的值反映了循环的执行情况,并最终决定了 n是否为质数。 注意:1 .体会分析过程。2 .用特殊数据1测试程序时应输出不为质数。(五)循环的嵌套重点:复杂循环结构的构造。仍然为“找重复”或“穷举”,不过要有一点“白顶向下” 的思路。例5-11输出如下列图形*.如果是通过重复输出了这个图形,那么每次完成什么工作?(输出一行!重复5次 输出5行)1 .第i次循环需要完成什么工作?(输出i个*,再输出一个5)2 .尝试编程,并详细分析程序的运行情况。体会思路。3 .成功=自顶向下,逐步求精”的思路+通过“调试执行”认真分析其执行过程的 耐心。例572输出如下列图形*. 第i次循环需要完成什么工作?
20、(空格+*+n:多少个空格?第1行2个,第2 行1个,第3行0个,显然第i行为3-i个。)1 .空格个数的规律是在列举大量数据的基础上得到的,没什么技巧,只有“汗水”。例5T3输出100以内的质数。1 .循环变量i从2至100,第i次循环判断i是否为质数。(穷举。先写出判断i是否 为质数的代码段,再外加一个循环即可)2 .体会程序的执行过程。3 .注意输出的安排。(六)do-while循环结构重点:1 .其与while循环结构的区别和联系。2 . do-while循环结构与continue语句的配合作用有什么效果。3 . do-while循环结构的常见用法可参考例5-14.(循环执行程序)(七
21、)典型例题注重分析能力的培养,强调循环的构造能力。例5-15求1!+2例+10!本质上是重复加,在第i次循环中需要先求出新的加数即i的阶乘。1 .通过循环求出i的阶乘,这是一个循环的嵌套。(嵌套循环的构造及执行过程)2 .设i的阶乘为mi项,那么有皿二niiT*i,而mi项已在上一次循环中求出。3 .比照1. 2两种思路,分析它们的执行过程。例5T6猴子吃桃。重点:规律常常是在列举大量数据的基础上得到的,没有什么技巧,只有“汗水”。例577回文数猜测。通过文字题锻炼编程能力。无限循环,用break退出。例5-18编程验证哥德巴赫猜测。如何强制用户输出一个不小于4的偶数。复杂程序的构造能力。例5
22、-19对阵名单。能否输出所有可能的对阵名单?AX BY CZAX BZ CYAY BX CZ清晰的思路是编程解决问题的前提,注重每条语句的含义。后记:1. 计算机解决问题主要靠循环!亳不夸张地说,思考问题的解法就是考虑“如何构造循环”。循环是有条件的重曼,是“螺旋式上升”,是“波浪式前进”。2. 循环结构的关键在于“第i次循环”有什么作用?循环是如何模拟手工过程的。为了循环必须把手工过程“标准化”。3. 复杂循环结构的构造。仍然为“找重复”或“穷举”,不过要有一点“自顶向下”的思路。4. 成功=自顶向下,逐步求精”的思路+通过“调试执行”认真分析其执行过 程的耐心。5. 规律常常是在列举大量数
23、据的基础上得到的,没有什么技巧,只有“汗水”。6. 程序中越来越多“逻辑错误”,建议提高调试能力。关于程序的调试可参考视频:C1O调试。五、数组的作用及准确理解重点:1 .数组的作用。(数组解决了定义多个变量的麻烦,而且数组中的多个变量依据下标构成了有序的一 组,可以用统一的方式对大批量的数据进行处理。)2 .数组的准确理解。(全面理解数组的条件还不成熟,现在只需正确理解何谓“数组的元素仍为数组的数组 称为多维数组”,定义一个多维数组实际上可以使用几个什么样的变量即可。)3 .字符数组与字符串的关系。(字符数组首先是一个普通的数组,但其中可能存储了一个字符串,从而变成了一个“字 符串”,于是就
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 研究性学习 路线
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。