《循环结构》教学设计

2024-11-18

《循环结构》教学设计(精选8篇)

1.《循环结构》教学设计 篇一

教学内容:循环结构程序设计 教学课时:2课时 【教学目的】

1、循环的基本思想

2、while、do-while和for

3、三种语句特点

4、孰能生巧 【教学重点】 三种循环语句的使用。【教学难点】 三种循环语句区别。【教学方法】 讲解、演示、练习

第一课时

一、循环的基本思想

1、循环就是找规律,学习分析问题和解决问题的能力

2、讲解案例灰太狼抓羊问题

3、分析抓羊规律,引出循环概念

二、while、do-while和for

1、分析灰太狼抓羊问题,提出解题思路

(一)设灰太狼每次抓羊i只

(二)设灰太狼一共抓到羊sum只

(三)设灰太狼每天抓羊后笼子里有羊sum + i只 其中:i为循环变量,sum + i为循环体

2、介绍while循环的一般形式

3、一边分析一边编程

(一)主函数

(二)定义变量

(三)运算过程

(四)输出结果

4、编写循环程序必须注意的几个问题

(一)循环控制变量必须有正确的初值

(二)在循环体内应有改变其值的语句

(三)其值的改变应使得表达式的值最终趋向于零(循环结束条件),否则将形成死循环

5、引出do-while循环

6、介绍do-while循环的一般形式

7、使用do-while循环解决灰太狼抓羊问题

8、说明:while与do-while相似点

9、引出for循环

10、介绍for循环的一般形式

11、使用for循环解决灰太狼抓羊问题

12、说明:for循环中三个表达式使用方法

第二课时 一、三种语句特点

1、while与do-while的区别

2、两语句与for的区别

二、孰能生巧

1、提出问题姜太公钓鱼

2、分析题目中可用循环解决的规律问题

3、分析姜太公钓鱼问题,提出解题思路

(一)设太公每次钓鱼数量n = n + 2条

(二)设一共钓到鱼的数量sum条

(三)设每天钓鱼后鱼的数量sum + n条

4、一边分析一边编程

(一)主函数

(二)定义变量

(三)运算过程

(四)输出结果

5、课程小结

课后练习

1、概述三种循环语句while、do-while和for之间的区别与联系。

2、计算无理数e的值,直到1/n!<10-5(P44,第4题)。

3、输入任意字符串,把字符串中小写字母转换成大写字母,并输出结果(P44, 第3题)。

4、输入5个整数,计算其中正数的和(P47,1)

5、编程显示100以内所有能被3和7整除的整数(P47,6、输出用户输入的两个整数之间的所有偶数。

7、编程求1!+2!+3!+…+n!的和。

2)。

2.《循环结构》教学设计 篇二

算法设计中, 常常需要把算法中具有“同处同构”性质的若干 (≥2) 个操作块 (或程序段) , 通过统一设计为一个公共的、可反复自动执行若干次的循环体来取而代之。具有这种性质的程序基本结构, 称为循环结构。循环结构可有效避免重复不必要的操作块, 节省内存、简化设计、提高效率。

循环结构, 按其循环体执行方式和条件的性质, 分为当型 (DO-WHILE) 、直到型 (DO-UNTIL) 循环结构;按其循环体内是否嵌有从属的内层循环结构, 分为单重循环、双重循环、多重循环结构。

从逻辑上讲, 一个完整的循环结构应该包含循环初始化、循环条件、循环体、循环修改和循环输出5个部分。

由于多数高校将C++语言程序设计作为学习程序设计的入门语言, 对于第一次学习程序设计语言的学生来说, 难以理解“循环”的含义, 难以树立“循环”的概念, 也就更难正确地使用相关的循环语句进行循环问题的程序设计。针对这些特点, 有必要对循环结构程序设计进行精心的教学设计, 探索出一种行之有效的教学方法。

2 循环结构程序设计的教学设计

2.1 教学重点和教学难点

在C++语言中, 提供了while、for、do-while 3个循环语句, 前两个语句属于当型循环, 后一个属于直到型循环。

本部分的重点是: (1) 循环语句的语法格式和执行过程; (2) 使用算法描述工具 (如N-S图、程序流程图等) 进行循环结构问题的描述; (3) 循环语句的应用。教学重点是: (1) 3个循环的应用场合, 为一个特定任务选定恰当的循环语句; (2) while语句, 理解了while语句, 后面的for语句和do-while语句就容易多了。

本部分的难点是循环概念的建立、循环控制结构的设计。

2.2 重点突出与难点突破的教学方法

(1) 分析问题的重复性, 帮助学生树立循环的概念。其实重复现象在日常中很常见, 我们生活的每一天、我们学习的每一年、我们沿操场跑圈、复利计算存款利息、计算一组数的总和等, 通过这些学生熟悉的例子让学生理解问题的重复性。程序设计应体现“具体-抽象-具体”, 第一个“具体”是使用具体的数据进行演算, 在演算的过程中, 发现计算或操作的规律 (重复性) , 进行抽象, 即用算法描述, 最后根据算法描述编写出程序, 就是第二个“具体”。因此, 要精心设计例子 (比如数的累加、公式的递推运算等) , 给学生一个比较恰当的切入点, 通过教师的引导和启发, 让学生体会、理解"重复"行为, 发现并总结, 有规律地重复操作。

(2) 通过理解结构化程序设计的思想, 达到培养学生分析问题的能力。对给定问题的算法设计通常不是一蹴而就的, 而是往往要经过一系列“由表及里、由此及彼、由浅入深、由粗到细”的越来越明朗、细化、具体的逐步求精过程, 才能越来越逼近并最终解决给定问题。这就是“自顶向下、逐步求精”的结构化程序设计方法。所以, 程序设计是一个循序渐进的过程, 通过一定的训练才能逐步领会设计思想。

(3) N-S图和程序流程图等算法描述工具是设计程序的需要, 更是形成学生良好习惯的练习途径。要修房子, 先画图纸。同样, 要编写程序, 先进行算法描述, 即用N-S图或程序流程图描述解题的步骤, 然后才将算法翻译成程序。循环结构的程序设计比顺序结构和选择结构的程序要复杂, 更需要借助算法描述工具来辅助分析。

(4) 在循环程序设计的应用中, 应遵循由简单到复杂的原则, 从简单公式化的循环入手到复杂非公式化的循环处理。通过演算推导、详细分析, 加深学生理解和掌握。可采用讨论式教学法和启发式教学法, 引导学生积极思考和探究, 将学生吸引到分析问题和解决问题的过程中。

3 教学过程的设计与组织

3.1 本部分的教学要求

循环结构程序设计是结构化程序设计中的重点, 必须熟练、牢固地掌握。循环结构部分的教学要求是:用3个不同的循环语句实现循环、循环的控制、有关循环的基本算法、循环结构程序设计的算法表示。

要理解和掌握while、for、do-while 3个循环语句的执行过程, 清楚3个循环语句的使用场合, 使用那一个更好、更直观。“三器”技术 (即计数器、累加器和累乘器) 是算法设计最重要的核心基础技术, 同时也是各种循环结构必用的基本技术, 这是递推法 (亦称迭代法) 的具体应用;穷举法也是一种常用的算法, 比如判断质数就使用该方法;还有求一组数中的最大数和最小数等。很多复杂的程序把它分解开来, 其实就是这些基本算法的结合。

3.2 问题的引入

循环结构程序设计是结构化程序设计中最难、最复杂的部分, 而授课对象是初次接触程序设计和循环结构, 因此循环的引入就至关重要。

应该选择学生熟悉且相对简单的例子入手, 例如, 求s=1+2+3这样的例子。这个例子使用顺序结构可以直接计算出来:s=1+2+3;

也可以如下书写:

3个加数使用了3个赋值语句。如果是10个加数, 就应该使用10个赋值语句, 100个加数、1000个加数、任意n个加数呢?采取这样的设计思想, 程序变得冗长, 甚至无法实现。如果把具体的1、2、3抽象出来, 则重复执行了以下的语句3次:

这就是循环, 使用循环结构可以计算任意个数的相加和。如此引入循环结构程序设计, 能让学生容易理解和接受, 并将学生有效地吸引到课程上来。在引入的过程中, 要引导学生积极思考, 为接下去的讲解打下必要的伏笔。

3.3 解决问题的教学方法

在讲解例子的过程中, 一定要向学生灌输朴素的算法思想, 程序设计没有技巧和捷近, 只有靠认真的分析、思考, 并养成良好的设计习惯, 才能掌握程序设计。在介绍s=1+2+3+…+10的例子时, 可以按以下步骤讲解:

第一步, 进行具体数据的演算 (加下划线"_"的数是上一次累加的和) 。

假设每次的加数为x, 则x分别取1, 2, 3, 4, ……, 9, 10, 重复执行了10次s=s+x, "="右边的s为上一次求得的和。

第二步, 用N-S图或程序流程图表示完成上述要求的算法。这是最关键的一步。

第三步, 选择适当的循环语句。C++语言提供了3个循环语句, while语句是其中的一个。介绍while语句的一般格式和执行过程, 并用该语句编写程序如下。

在教学过程中, 为了提高教学效果、达到教学要求, 还可以采用以下一些教学方法和教学手段:

(1) 在讲解过程中, 始终坚持“以教师为主导、学生为主体”的原则, 注重启发、引导学生, 在解决问题的过程中激发学生的探索与研究的热情; (2) 积极采用讨论式教学方法。该方法对一题多解、阅读与分析程序、程序改错等情况特别有用, 能极大地调动学生的积极性, 充分发挥学生的潜力, 培养学生的创新意识; (3) 应用现代化多媒体教学手段, 有利于提高教学效率, 便于学生理解。充分利用“黑板+投影”相结合的方式:分析过程用黑板进行教学, 以便体现思维过程;程序的运行结果采用计算机投影的方式, 便于学生观察; (4) 注重采用任务驱动的教学模式, 任务带动训练。通过提出问题、分析问题, 引入新知识, 解决问题。通过问题的解决, 使学生从中获得有关知识、掌握相应的技能, 一步步实现教学的目标。

摘要:循环结构的程序设计是程序设计语言的重要部分, 掌握好循环结构的程序设计技术对学好此类课程至关重要。探讨了“C++语言程序设计”中循环结构的教学方法和教学手段。

关键词:C++语言,循环结构,教学方法,教学手段

参考文献

[1]教育部高等学校计算机科学与技术教学指导委员会.关于进一步加强高等学校计算机基础教学的意见暨计算机基础课程教学基本要求 (试行) [M].北京:高等教育出版社, 2006.

[2]董加敏.程序设计基础课程的教学改革[J].辽宁行政学院学报, 2007 (10) .

[3]周启海.C++同构化对象程序设计原理[M].北京:清华大学出版社、北方交通大学出版社, 2004.

[4]郑莉, 张瑞丰, 李莉.C++语言程序设计[M].北京:清华大学出版社, 2005.

3.《循环结构》教学设计 篇三

一、“图—名”联系——建立结构

不少学生在学习地名时,单纯地死记硬背,缺乏地名的空间观念。因此,在地名教学中,首先就要帮助学生建立一个“图—名”结构图,提供区别性的线索,把地图和地名通过点、线、面三种符号反映在地图上,城市、山峰等用点来表示;山脉、河流、铁路等用线状符号表示;国家、省、地形区等用面来表示,把地理事物形象直观地呈现给学生,使学生能一目了然地揭示知识的内在联系,观察其规律。“图—名”结构图能把知识组成系统的知识网络,使学生在脑海中形成地图表象。

建立结构图就是利用地图把地名重新编码,可以分两步:首先,呈现出要学生掌握的地名,让学生在未加工的地图上观察地名之间空间位置的关系以及与已学地名之间的关系;其次,教师帮助学生找出关键性的线索,使新知识与已有知识建立各种关系,这种加工的效果使得新知识的提取变得更容易。编码一旦完成,其最为重要的功能是使已获得获信息容易记住,同时可以迁移至学习者以后遇到的各种情况中,因而有效的编码须为以后的提取信息提供线索。

例如《中国地形》涉及的地名包括众多的山脉、高原、盆地、丘陵、平原近30个。一节课的时间让学生掌握地名、地形区的空间分布是相当困难的,需要帮助学生建立一个“图—名”联系的结构图,以学生已掌握的“三级阶梯”作线索,以“山脉”做骨架,以高原、盆地、平原、丘陵为内容建立结构图,如下图。

有了这个结构图,学生就能一目了然地了解各地形区之间的位置关系。然后进入第二阶段的强化练习。

二、练习强化——精细加工

第一阶段学习是以教师辅导为主,师生共同建立结构,是对地名的一个整体感知的过程。经过第一阶段“图—名”联系的结构建立,学生对要学的地名的空间位置有了一定的感知,但这只是短时记忆,如果不加以强化,很快就会遗忘。记忆是通过复习、练习来实现的,将已学的知识保持长久时间,增加练习量已经成为影响保持量的一个相当可靠的因素。利用练习进行强化是对地名学习一个精细加工过程,把它按照学生的认识规律分为三个步骤进行,这三个步骤是学生利用眼、耳、口、手、脑等多种感官,通过自己的操作活动进行的,是由易到难的一个渐进过程。

1. 复述

在练习中最简单的形式是按一定顺序复述一系列名称,教师按照建图的顺序指图,学生集体说出地名,共同复述有利于互相助长记忆。复述不是单纯的机械重复进行记忆,应有侧重,并赋予一定的方法加以记忆,如较长的地名(布宜诺斯艾利斯、斯堪的纳维亚山)要多读几遍;对有来由的地名,如亚细亚洲(日出之地)、阿拉伯(沙漠居民)、喜马拉雅(冰雪之乡)等,可以适当告诉学生有关地名的来由;还可以采用韵律式,将内容编成合拍押韵、琅琅上口的段子,如中国政区(两湖两广两河山,五江二南福吉安,川藏二宁青甘陕,内蒙贵台北上天)等,这样可以帮助学生尽快识记地名。

地名识记后还要落实到地图上,不能像记一般言词那样,脱离地名空间位置孤立地记忆地名,因此还须进行第二步练习。

2. 填图

教师把课前印好的“图—名”结构线条,发给学生,要求学生在地图上填出地名。这一步比上一步难度加大,不仅要识记地名,而且还要掌握它们的空间位置分布,学生完成后再进行集体讨论修改,让学生及时了解自己哪些地名还没记住,强化记忆。

如对于《中国地形》一节教学中建立的地形估价图,我要求学生在地图上填出山脉的名称,以及由山脉作分界线的高原、盆地、平原、丘陵等地形区的名称,并进行集体修改。

3. 再现

学生进行第二步填图练习后,对整个“图—名”结构有了更深的印象。要进一步巩固,须进行更高难度的练习强化。于是我要求学生根据回忆,在各自的练习本上画出结构图,并填出相应地名。这一步的实质是将师生共同编码的图转化成由学生单独编码完成,并识记地名,把所学的知识变成自己的知识。完成这一步,学生在脑海中基本形成地图表象,既识记了地名,又掌握其空间分布。

三、检验调整——反馈调整

这是知识巩固应用阶段,并检验学生是否能灵活地掌握知识,一定数量的练习变式会有助于智慧技能向新的情境迁移。因此,进行了第二阶段的学习后,设计一些练习,让学生把识记了的地名运用到新情境中,能促使知识的迁移。

如在《中国地形》的教学中,我设计如下练习。

完成练习后进行反馈,让学生了解自己的不足。对学生的反应,教学反馈越及时越有利于巩固正确的行为(知识),同时对正确的答案进行及时的正强化,有利于学生树立学习自信心和发挥学习积极性。

4.《循环结构》教学设计 篇四

队列简称队, 也是一种操作受限的线性表, 只允许在表的一端进行插入, 而在表的另一端进行删除.其特点为”先进先出(FIFO)”,故又称为先进先出的线性表,简单队列如图所示:

循环队列

顺序队列有一个先天不足, 那就是空间利用率不高, 会产生”假溢出”现象,即:其实队列中还有空闲的空间以存储元素, 但我们在判断队列是否还有空间时, 队列告诉我们队列已经满了, 因此这种溢出并不是真正的溢出, 在data数组中依然存在可以放置元素的空位置, 所以说这是一种”假溢出”;

于是我们就引入了循环队列的概念, 将顺序队列臆造为一个环状的空间, 即把存储队列元素的表从逻辑上看成一个环, 称为循环队列,其示意图如下:

注意:如图中所示,我们的循环队列为了在实现上的便利, 会有一个位置的空闲, m_front(如图中的front)指针总会指向一个元素值为空的位置,因此(m_front+1)%capacity才真正的指向队首元素, 而m_rear(图中为rear)才指向一个真实存在的队尾元素;<?www.2cto.com/kf/ware/vc/“ target=”_blank“ class=”keylink“>vcD48cD48cHJlIGNsYXNzPQ==”brush:java;“>//循环队列的实现与解析templateclass MyQueue{ templatefriend ostream &operator<<(std::ostream &os, const MyQueue&queue);public: MyQueue(int queueSize = 64); ~MyQueue; void push(const Type &item); void pop() throw (std::range_error); const Type &front() const throw (std::range_error); const Type &rear() const throw (std::range_error); bool isEmpty() const;private: Type *m_queue; int m_front; //队首指针(其实(m_front+1)%capacity才真正的指向队首元素) int m_rear; //队尾指针 int capacity; //队列的内存大小, 但实际可用的大小为capacity-1};

templateMyQueue::MyQueue(int queueSize): capacity(queueSize){ if (queueSize< 1) throw std::range_error(”queueSize must >= 1“); m_queue = new Type[capacity]; if (m_queue == NULL) throw std::bad_alloc(); m_front = m_rear = 0;}

templateMyQueue::~MyQueue(){ delete []m_queue; m_queue = NULL; m_front = m_rear = 0; capacity = -1;}

templateinline bool MyQueue::isEmpty() const{ return m_front == m_rear;}

templateinline void MyQueue::push(const Type &item){ if ((m_rear+1)%capacity == m_front) //队列已满 { Type *newQueue = new Type[2 * capacity]; //新队列的长度为原队列的2倍 if (newQueue == NULL)throw std::bad_alloc(); int start = (m_front+1)%capacity; //数据序列的起始地址 if (start<= 1) //队列指针尚未回绕 {//只需拷贝一次:从start所指向的元素直到m_rear所指向的元素//std::copy(m_queue+start, m_queue+start+capacity-1, newQueue);std::copy(m_queue+start, m_queue+m_rear+1, newQueue); } else {//需要拷贝两次//1:从start所指向的元素直到数组(不是队列)末尾std::copy(m_queue+start, m_queue+capacity, newQueue);//2:从数组(不是队列)起始直到队列末尾std::copy(m_queue, m_queue+m_rear+1, newQueue+capacity-start); } //重新设置指针位置:详细信息请看下面图解 m_front = 2*capacity-1; m_rear = capacity-2; capacity *= 2; delete []m_queue; m_queue = newQueue; } //队尾指针后移 //注意:此处m_front+1可能需要回绕 m_rear = (m_rear+1)%capacity; m_queue[m_rear] = item;}

templateinline const Type &MyQueue::front() constthrow (std::range_error){ if (isEmpty()) throw range_error(”queue is empty“); //注意:此处m_front+1可能需要回绕 return m_queue[(m_front+1)%capacity];}templateinline const Type &MyQueue::rear() constthrow (std::range_error){ if (isEmpty()) throw range_error(”queue is empty“); return m_queue[m_rear];}

templateinline void MyQueue::pop()throw (std::range_error){ if (isEmpty()) throw range_error(”queue is empty“); //注意:此处m_front+1可能需要回绕 m_front = (m_front+1)%capacity; m_queue[m_front].~Type(); //显示调用析构函数以销毁(析构)对象}

//输出队列所有内容以做测试templateostream &operator<<(ostream &os, const MyQueue&queue){ for (int i = (queue.m_front+1)%(queue.capacity);i<= queue.m_rear; /**空**/ ) { os<< queue.m_queue[i]<< ‘ ‘; if (i == queue.m_rear)break; elsei = (i+1)%(queue.capacity); } return os;}

补充说明

当队列已满时的两类扩充操作:

扩充之后的内存布局:

附-测试代码:

5.while循环结构例题 篇五

#include “stdio.h” main(){ int i=1;for(i=1;i<=10000;i++)printf(“%dt”,i);}

题型1 输入输出多个数据

eg1、输出1~10000之间所有的整数 #include “stdio.h” main(){ int i=1;while(i<=1000){printf(“%dt”,i);

i++;} } 拓展:

1、换成所有的奇数

2、换成所有的偶数

题型2 有限个数连加和连乘 eg2.1、求1+2+3+4+………+100的值 #include “stdio.h” main(){ int i=1,s=0;while(i<=100){s=s+i;i++;} printf(“%dn”,s);} 拓展:

1、求1+2+3+4+………+n的值

2、求12+22+32+………+n2的值

3、求1+1/2+1/3+………+1/n的值 eg2.2、求n!的值 #include “stdio.h” main(){ int i=1,n,p=1;scanf(“%d”,&n);while(i<=n){p=p*i;i++;} printf(“%dn”,p);} 拓展:求1!+2!+3!+………+n!的值 #include “stdio.h” main(){ int i=1,n,p=1,s;scanf(“%d”,&n);while(i<=n){p=p*i;

s=s+p;i++;} printf(“%dn”,s);}

题型3 无限个数连加

eg3、求1-1/3+1/5-1/7+………的近似值,要求精度要达到10-#include “stdio.h” #include “math.h” main(){ float n=1,s=0,f=1,t=1;

while(fabs(t)>=1e-4)

{t=f/(2*n-1);

s=s+t;f=-f;n++;} printf(“%fn”,s);}

拓展:求1-1/2+1/4-1/6+………的近似值,要求精度要达到10-4

题型4 统计

eg4.1、输入20个数,统计其中正数、负数和零的个数。#include “stdio.h” main(){ int i=1,n,p,z;float x;

p=n=z=0;while(i<=20)

{ scanf(“%f”,&x);if(x>0)p++;

else

if(x<0)

n++;else

z++;

i++;} printf(“%dt%dt %dn”,p,n,z);} 拓展:统计各类字符的个数

eg4.2 个位为6且能被3整除的五位数有多少? 方法1 #include “stdio.h” main(){ long i=10000,c=0;while(i<=99999)

{

if((i%3==0)&&(i%10==6))c++;i++;} printf(“%d n”,c);}

方法2 #include “stdio.h” main(){ long i=10006,c=0;while(i<=99999)

{

if(i%3==0)c++;i=i+10;} printf(“%d n”,c);} 题型5 数列

eg5 输出fibo数列的第20位数字 #include “stdio.h” main(){ int f1=1,f2=1, f3,i=3;while(i<=20)

{ f3=f1+f2;f1=f2;f2=f3;i++;} printf(“%d n”,f3);} 拓展:输出fibo数列前20位数字 #include “stdio.h” main(){ int f1=1,f2=1, f3,i=3;printf(“%d t%d t”,f1,f2);while(i<=20)

{ f3=f1+f2;f1=f2;f2=f3;

printf(“%d t”,f3);i++;} }

题型6 数据的逆序输出

eg6 任意给定一个正整数,个位数字逆序输出。

#include “stdio.h” main(){ long x,t;

scanf(“%ld”,&x);while(x!=0)

{ t=x%10;x=x/10;printf(“%d”,t);} }

题型7 公约数与公倍数

eg7 任意输入两个正整数,求其最大公约数和最小公倍数。#include “stdio.h” main(){ int m,n,a,b,r,t;

scanf(“%d%d”,&m, &n);

if(m>n){a=m;b=n;}

else {a=n;b=m;} while(b!=0)

{ r=a%b;a=b;b=r;} printf(“zuida gongyushu shi:%dn”,a);printf(“zuixiao gongbeishu shi:%dn”,m*n/a);}

题型8 素数问题

eg8 从键盘上任意输入一个正整数,判断其是否为素数。#include “stdio.h” main(){ int x,i=2;

scanf(“%d”,&x);while(x%i!=0)i++;if(x==i)printf(“shi!”);else printf(“fou!”);} 题型9 高次方程的根

eg9.1 用二分迭代法求解方程32y=2x-4x+3x-6=0在(-10,10)之间的根,要求-5精度10

#include “stdio.h” #include “math.h” main(){ float x1=10,x2=-10,x, y ,y1;x=(x1+x2)/2;y=2*x*x*x-4*x*x+3*x-6;while(fabs(y)>1e-5){ y1=2*x1*x1*x1-4*x1*x1+3*x1-6;

if(y*y1>0)

x1=x;

else

x2=x;

x=(x1+x2)/2;

y=2*x*x*x-4*x*x+3*x-6;

} printf(“the root is %fn”,x);} eg9.2 用牛顿迭代法求解方程2x3+ 2-54x-7x-6=0在x=1.5附近的根,要求精度10 #include “stdio.h” #include “math.h” main(){ float x,x0, y ,y1;x=1.5;while(fabs(x-x0)>1e-5){ x0=x;y=2*x0*x0*x0+4*x0*x0-7*x0-6;y1=6*x0*x0+8*x0-7;x=x0-y/y1;} printf(“the root is %fn”,x);}

牛顿迭代公式:xn+1=xn-f(xn)/f’(xn)

do-while循环结构举例 #include “stdio.h” main(){ int i=1,s=0;do {s=s+i;i++;} while(i<=100);printf(“%dn”,s);} for循环结构举例 f1 #include “stdio.h” main(){ int i=1,s=0;for(i=1;i<=100;i++)s=s+i;printf(“%dn”,s);} f2 #include “stdio.h” main(){ int i,f1,f2,f3;f1=1;f2=1;printf(“%d,%d”,f1,f2);for(i=3;i<=20;i++)

{ f3=f1+f2;

f1=f2;

f2=f3;

printf(“,%d”,f3);} } f3 #include “stdio.h” main(){ int i;float a,max;scanf(“%f ”,&a);max=a;for(i=1;i<=9;i++)

{ scanf(“%f ”,&a);

if(max

max=a;} printf(“%fn”,max);} f4 #include “stdio.h” main(){ int i,s=1;for(i=9;i<=1;i--)s=2*(s+1);printf(“%dn”,s);}

#include “stdio.h” main(){ int x,n=0,s=0;

while(n<10){

scanf(“%d”,&x);

if(x<0)break;

s+=x;

n++;

}

printf(“s=%dn”,s);

}

#include “stdio.h” main(){ int x,n=0,s=0;while(n<10)

{

scanf(“%d”,&x);

if(x<0)continue;

s+=x;

n++;

}

printf(“s=%dn”,s);}

#include “stdio.h” main(){ int x,n=0,s=0;while(n<10)

{

scanf(“%d”,&x);n++;

if(x<0)continue;

s+=x;

}

printf(“s=%dn”,s);}

#include “stdio.h” main(){ int i=2,m;

scanf(“%d”,&m);while(m%i!=0)i++;if(i==m)

printf(“%d shi sushu!n”,m);

else

printf(“%d bu shi sushu!n”,m);}

#include “stdio.h” main(){ int i,m;scanf(“%d”,&m);for(i=2;m%i!=0;i++);if(i==m)

printf(“%d shi sushu!n”,m);else

printf(“%d bu shi sushu!n”,m);}

#include “stdio.h” main(){ int i,m;

scanf(“%d”,&m);

for(i=2;i<=m;i++)

if(m%i==0)break;

if(i==m)

printf(“%d shi sushu!n”,m);

else

printf(“%d bu shi sushu!n”,m);}

#include “stdio.h” #include “math.h” main(){ int i,m,s;

scanf(“%d”,&m);

s=sqrt(m);

for(i=2;i<=s;i++)

if(m%i==0)break;

if(i==s+1)

printf(“%d shi sushu!n”,m);

else

printf(“%d bu shi sushu!n”,m);}

#include “stdio.h” #include “math.h” main(){

int i,j;

for(i=100;i<=200;i++)

{

for(j=2;j<=i;j++)

if(i%j==0)break;

if(j==i)

printf(“%-10d”,i);}

}

#include “stdio.h” #include “math.h” main(){

int i,j,s;

for(i=100;i<=200;i++)

{ s=sqrt(i);

for(j=2;j<=s;j++)

if(i%j==0)break;

if(j==s+1)

printf(“%-10d”,i);} }

#include main(){ int i,j,s;

for(i=2;i<=10000;i++)

{ s=0;

for(j=1;j

if(i%j==0)

s+=j;

if(i==s)

printf(“%6dn”,s);

} }

#include “stdio.h” main(){ int i,j,k;for(i=0;i<=35;i++)

for(j=0;j<=35;j++)

if((i+j==35)&&(2*i+4*j==94))

printf(“ni=%-10dj=%-10d”,i,j);}

#include “stdio.h” main(){ int i,j,k;

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

for(j=0;j<=33;j++)

for(k=0;k<=100;k++)

if((i+j+k==100)&&(5*i+3*j+k/3==300))

printf(“ni=%-10dj=%-10dk=%-10d”,i,j,k);}

#include “stdio.h” main(){ int i,j,k;for(i=0;i<=19;i++)for(j=0;j<=33;j++)

{ k=100-i-j;

if(15*i+9*j+k==300)

printf(“ni=%-10dj=%-10dk=%-10d”,i,j,k);

} }

#include “stdio.h” main()

{ int i,j,k;

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

for(j=0;j<=33;j++)

{k=100-i-j;

if(5*i+3*j+k/3==100)printf(“ni=%-10dj=%-10dk=%-10d”,i,j,k);}

}

#include “stdio.h” main(){ int m,n,k;

for(m=1;m<=9;m++)

{ for(n=1;n<=m;n++)

printf(“%d*%d=%-5d”,n,m,n*m);

printf(“n”);

} }

#include “stdio.h” main(){ int i;

for(i=1;i<=5;i++)printf(“********n”);}

#include “stdio.h” main(){ int i,j;

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

{ for(j=1;j<=5-i;j++)

printf(“ ”);

printf(“********n”);}

}

#include “stdio.h” main()

{

int i,j;

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

{ for(j=1;j<=20-i;j++)

printf(“ ”);

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

printf(“*”);

printf(“n”);

}

}

#include “stdio.h” main()

{int i,j;

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

{ for(j=1;j<=20-i;j++)

printf(“ ”);

for(j=1;j<=2*i-1;j++)

printf(“*”);

printf(“n”);

}

}

#include “stdio.h” main(){ int i,j;

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

{ for(j=1;j<=i-1;j++)

printf(“ ”);

for(j=1;j<=11-2*i;j++)

printf(“*”);

printf(“n”);

}

}

#include “stdio.h” main(){ int i,j;

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

{ for(j=1;j<=4-i;j++)

printf(“ ”);

for(j=1;j<=2*i-1;j++)

printf(“*”);

printf(“n”);

}

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

{ for(j=1;j<=i;j++)

printf(“ ”);

for(j=1;j<=7-2*i;j++)

printf(“*”);

printf(“n”);

}

}

#include “stdio.h” main(){int i,j,k,m,n,s=0;for(i=0;i<=2;i++)

for(j=0;j<=9;j++)

for(k=1;k<=9;k++)

{m=100*i+10*j+k;

n=100*k+10*j+i;

if((n>2*m)&&(n<3*m))

{ s++;

printf(“%d ”,m);

if(s%8==0)

printf(“n”);}

}

6.《循环结构》教学设计 篇六

第1单元 《算法思想初步》

《循环结构》教学设计

峨山镇中学 孟 永

【课程纲要依据】

本课的设计遵循新课程理念,以课程标准为指导,注重培养学生自主探究的学习习惯,让学生多在观察、分析、实践的过程中进行学习。【教材分析】

本课是青岛出版社信息技术八年级(下册)第1单元 算法思想初步 第5课 循环结构 的内容。循环结构与顺序结构、分支结构是E语言中很重要的编程结构,能大大提高程序的效率,减少运算次数。

很多计算机编程语言涉及大量的计算机英文术语,在学习的时候势必会感到吃力。可喜的是,我们有自己的汉语编程语言——E语言,可以用汉语语言来书写代码,解决算法的编程问题。初二下学期开始接触E语言编程问题,开始可能会有点困难,但随着学习的深入,学生会逐步了解和使用E语言。

本节课利用E语言程序解决九九乘法表中计算和输出问题,是学生在了解和认识E语言开发环境后,以九九乘法表问题这个典型例子作为载体,让学生掌握E语言程序的循环结构,利用循环结构有效地解决问题。通过对用E语言编写程序的了解,学会使用国产软件,支持民族产业,增强民族自豪感。【学情分析】

八年级学生对多媒体大屏幕环境下的课堂环境非常熟悉;学生在学习本课以前,已经学习了算法的概念、顺序结构、条件结构及简单的赋值问题等E语言的基础知识。学生具备一定的自学能力,思维活跃,对程序框图与算法的基本逻辑结构这一课程兴趣很高;八年级学生形象思维、感性认识较强,理性思维、抽象认识能力还很薄弱,因此教学中宜选择学生熟悉的,易懂的实例引入。【教学目标】

1、知识目标

了解循环结构在算法中的应用。

2、技能目标

学会在程序设计中利用循环结构有效地解决问题;理解算法优化的基础知识。

3、情感、态度与价值观目标

对待同一个问题,运用不同的知识和方法解决问题,往往能达到事半功倍的效果。培养学生运用不同方法解决问题的习惯。

教学重点:了解循环结构的实际应用。教学难点:循环结构的代码写法。【教学与学法】

主要通过“任务驱动”法,让学生在自主探究的基础上结合小组协作学习,来突破重、难知识点。【教学资源】

多媒体网络教室 【教学时间】

一课时(45分钟)【教学过程】

一、创设情境 激发兴趣(3分钟)

让学生回忆小学学过的九九乘法表,个别学生回答。再让学生阅读“阅读与思考”,让学生知道九九乘法表的来历。提出中心任务——用语言程序编写九九乘法表。

为了更好地完成中心任务,教师在开始上课时引导学生对以前学过的定义变量、常量、运算符、公式、赋值知识进行复习。

(设计意图:通过原来就熟悉的九九乘法表,来激发学生学习的欲望,从而引入本课)

二、启发探究 学习新知(24分钟)

1、循环结构定义:在算法中,从某处开始,按照一定条件,反复执行某一处理步骤的过程。

2、观察分析九九乘法表的排列特点,指导学生分类:一行、第1行,第9行、进而到第1列进行全面分析。

教学处理:这一环节主要采用学生合作探究方式完成流程图绘制、程序界面 的创建、代码的生成。

每四人为一组,教师参与到学生研究过程中,对学生出现的问题进行及时点拨帮助,最后由学生展示自己的流程图。然后教师展示正确流程图。

(设计意图:这样设计的目的是为了培养学生合作交流精神及协作沟通能力,并训练学生的画流程图的能力。)

3、循环结构概念的理解:

(1)循环结构的三要素:循环初始值、循环体、循环的终止条件。(2)循环结构的算法流程图(3)当型循环与直到循环的区别

教学处理:引导学生认真观察刚刚得到的程序框图,给学生2分钟讨论交流时间,让大家互相沟通,从而使得学生对概念的理解更深刻,最后由学生说出以上对概念的理解,教师进行归纳总结。

(设计意图:通过师生交流,使学生对概念有更深的理解,同时锻炼了学生归纳﹑总结的能力,增强合作交流意识。创建了和谐的课堂氛围。)

4、变式探究:

探究1:再观察列,如第1列等如何编写程序。探究2:中心任务的逼近。

三、巩固知识 应用提高(11分钟)

变式1:结合练一练2探究。

此例可由学生独立思考、回答,师生共同点评完成。

(设计意图: ①确定循环变量和初始值;②确定循环体;③确定循环终止条件。)

四、成果展示 交流评价(3分钟)

学生分组展示刚才的成果,观察程序运行的结果。

(设计意图:通过同伴互助巩固所学知识,培养和提升学生的认知水平。沟通发展,有助于及时查漏补缺,保持学生学习的热情和信心。)

五、知识梳理 总结归纳(2分钟)

鼓励学生对本课进行总结,其他学生补充。

(设计意图:是帮助同学认清本节课的知识结构,培养学生归纳总结的能力及合作探究的精神。)

六、作业布置 拓展提升(2分钟)

请在屏幕上输出以★为基本图案的三角形,参考图案如下图所示。

★ ★ ★

★ ★ ★ ★ ★

★ ★ ★ ★ ★ ★ ★

(设计意图:作业的布置体现了“学以致用”的目的,培养学生利用所学知识解决学习、生活中的实际问题的能力。)【板书设计】

5、循环结构

【教学反思】 1.设计理念:

本节课知识偏理论。课堂上的时间主要用于学生自主探究、小组合作学习、创作练习,这样的设计和安排不仅使学生易于接受新知识,同时也培养了学生分析和解决问题的能力,有助于提升学生的信息素养。2.教学亮点:

通过知识的拓展、网上自主搜集资料等活动,使学生不仅能自主探究,小组合作学习,并寻求解决问题的方法,也培养了学生的学习方法和合作意识 3.待改进地方:

7.《循环结构》教学设计 篇七

一、合理组织教学内容, 提高教学效果

在实际教学中, 循环结构的第一堂课, 教师往往会选择“计算s=1+2+3+……+100”所代表的累加问题来讲解循环结构的构建, 同时介绍For-Next循环语句来实现代码编写。选择ForNext语句作为第一个介绍的循环语句, 缘于它是适合这个累加算法的最简洁的语句, 学生易理解, 代码编写也易上手。然而, 正是由于For-Next语句的简洁性, 再加上先入为主的印象, 使得学生在之后的学习中, 往往会优先选择For-Next语句, 忽略Do-Loop语句, 从而造成使不当。此外, For-Next语句形式虽简洁, 但内涵丰富, 语句本身的注意事项颇多, 初学者对它的认识往往是一知半解, 容易犯各种错误。

因此, 教学中可以改变一下策略, 把循环语句的学习, 按照先Do While-Loop、再Do-Loop Until、最后For-Next的顺序进行, 提高教学效果。

第一阶段, 首先通过分析“计算s=1+2+3+……+100”的算法, 帮助学生理解循环结构的四个部分, 包括初始值设定、循环条件判断, 循环体构建, 以及循环变量修正。然后选择适用范围最广的Do While-Loop去讲解代码编写, 把代码与循环各部分一一对应起来, 并详细分析语句执行时循环条件判断、循环体执行、循环变量改变的详细过程。

最后通过类似问题的强化练习, 让学生掌握累加问题的基本算法、正确描述循环条件和构建循环体, 以及Do While-Loop语句的使用方法。

第二阶段, 通过对累加算法的变式———“求1+2+3+……+n≥100中n最小值”的问题分析, 引出“当型循环”和“直到型循环”两种循环类型, 并介绍Do-Loop Until语句的使用方法。结合相关练习, 使学生学会自己分析循环条件和循环体, 并选择合适的Do-Loop语句来实现代码编写。

第三阶段, 介绍For-Next语句。通过之前的学习, 学生已经对循环结构有了一定的理解, 在使用两种Do-Loop语句的过程中, 也明确了循环结构各个部分的涵义, 这时再讲解For-Next语句, 就可以把教学重点放在For-Next语句中较为复杂的语法上了。

首先, 同样是通过“计算s=1+2+3+……+100”的例题, 来讲解For-Next语句的使用格式, 分析语句执行过程中循环体、循环变量的详细变化过程 (与Do-Loop循环相同) 。然后, 对比Do-Loop语句, 让学生明白For-Next语句中, 在循环变量的初始值设定、循环条件的描述、循环变量的修正等方面, 有哪些不同之处。同时, 详细讲解使用For-Next语句的各种语法规范和注意事项, 例如, 初值、终值、增值的数据类型选择, 增值的正负性会给条件判断带来什么影响, 以及循环次数的判定、循环变量的具体变化等等。最后, 总结出For-Next语句适用于预判条件的当型计数循环。

第四阶段, 在对比复习三种循环语句的适用场合、各种注意事项后, 加入多个经典例题的算法分析, 让学生自由选择合适的循环语句来编写代码, 解决问题。同时, 教师在分析这些练习时, 要选取使用不同算法或循环语句来解决同一问题的代码段进行分析, 让学生体会到算法的多样化, 深入了解不同循环语句的特点。

经过这四个阶段的学习, 学生基本上能对循环结构有深入的理解, 也能灵活运用各种循环语句编写代码解决问题了。

二、练习形式多样化, 加深理解

程序的三种基本结构中, 顺序结构和选择结构的流程, 与一般的数学解题思维类似, 比较符合学生的认知特点, 容易掌握。而循环结构中的“条件下的重复执行”, 大多不是简单意义上的复制, 而是会造成内部结构有规律的更新[1], 这是一个学习难点。教学中发现, 如果直接让学生做独立编程练习, 很多学生无法顺利完成, 模仿例题可以, 但常常生搬硬套, 问题稍有变化就无从下手, 或者自己编写的程序都不会分析与调试。为此, 教师在详细分析例题之后, 需要设计一些非独立编程形式的练习, 加深学生的理解。

例如, 增加程序阅读题, 让学生分析程序的执行过程, 写出程序运行中各变量的变化情况及最后的输出结果, 从而深入理解循环结构程序的执行过程。

案例1:阅读以下程序段, 写出执行结果。

此案例要求学生跟踪循环变量i和j的值, 记录每次循环时各相关变量的变化过程, 尤其注意循环变量在循环结束时的状态。通过分析这个程序段, 能让学生具体详细地认识ForNext循环的执行过程, 学会分析较为复杂的循环结构程序, 为之后独立编程打好基础, 做好准备。

此外, 对于稍复杂的程序, 或针对低层次学生, 教师还可以设计一些程序填空题, 让学生从阅读程序中加深对算法的理解, 并通过填写关键的代码段, 巩固新学知识与技能。

三、培养“模块化处理”思想, 提升编程能力

随着学习的深入, 需要解决的问题越来越复杂, 程序结构变得复杂多变, 程序代码也逐渐加长, 学生的犯错几率大大增加, 他们的编程能力到达一个瓶颈。究其原因, 缺少“模块化处理”的结构化程序设计思想是一个重要原因。

结构化程序设计思想的一项重要内容, 就是要将一个大的程序划分为若干个层次关系递进的模块, 每个模块继续分解更小的子模块, 直到最终分解出的模块能实现一个独立的功能。“模块化处理”, 就是要针对这些独立功能编写程序模块, 然后把它们按层次组织起来, 最终形成一个大的程序, 解决实际问题。虽然在还没有学习过自定义过程与函数的阶段, 真正的模块化处理不能完全实现, 但教师只有在分析问题、设计例题与练习的时候, 有意识地培养学生的“模块化处理”思维, 才能打开他们学习的瓶颈, 提高编程能力, 为进一步深入学习打下扎实的基础。

案例1:用循环语句来求s=1!+2!+3!+……+10!

问题分析:

第一步, 让学生分析如何求n!, 得到求p=n!的程序段。

第二步, 让学生思考如何利用求p=n!代码, 求s=1!+2!+3!+……+10!。引导学生将求n!的代码段看作一个整体模块, 对于此模块来说, 当n值从1到10变化时, p的值就是1!到10!变化。因此, 如果将n作为循环变量建立循环, 将每次得到的p值累加到s上, 那么就可以得到s值了。

在这个案例中, 通过教师的引导, 学生一般可以理解这个算法, 但编写代码时, 却常常犯一个错误, 将p=1这句初始值设置语句放到外层循环之外。这就是欠缺“模块化处理”思想的表现。如果学生能学会将各模块代码封装起来, 再加入到其它模块中, 就能大大减少此类错误的发生。

又例如, “找出3~100之间所有的素数”这个问题也是如此, 只有将“判断n是否为素数”的程序段作为一个模块整体看待, 再放入到对n穷举的循环中去, 才能编写出正确的代码来。

“模块化处理”思想的培养不可能是一步到位的, 教师只有耐心细致地加强引导, 布置有针对性的练习, 才能帮助学生养成这种的结构化程序设计思想, 突破瓶颈, 提高编程能力。

参考文献

[1]陈开社.谈“循环结构”教学[J].中国教育信息化, 2011.10

8.“循环结构”注意点与常见题分析 篇八

循环结构是指从某处开始,按照一定的条件,反复执行某一个或多个处理步骤的情况.反复执行的处理步骤称为循环体.循环结构主要有直到型(until)和当型(while)两种形式.

从图1、2中可以看出,直到型循环结构的主要功能是:先执行循环体A,然后判断给定的条件P是否成立;如果P不成立,则再执行A,再判断P……直到条件成立为止.当型循环则是先判断给定的条件,条件成立再执行循环体.两者顺序有所不同,但可表示一样的意义.对判断框指向循环体的箭头上的“是”、“否”要弄清.下面我们就同一题用直到型循环和当型循环来进行讨论.

例1 设计求10个数的平均数的算法并画出其流程图.

解 先求出10个数的和,再求其平均数,可用循环结构对10个数求和.

算法过程如下:

第1步 S = 0;

第2步 I = 1;

第3步 输入G(G为一个数据);

第4步 S =S + G;

第5步 I = I + 1;

第6步 如果I不大于10,转第3步;

第7步 A=A/10;

第8步 输出A.

流程图如下(两种描述方法):

点评 由此可见,直到型循环和当型循环是可以互换的.对于同一个问题,如果分别用直到型循环和当型循环来处理的话,其判断的条件往往相反.这里体现在两个判断框中“i≤10”和“I>10”的区别上.

一、 注意点

1. 运算错误

经常有同学在循环结构的开始或结束时出错.

如,设计算法求1×3×5×…×99的值.

有同学写出的伪代码如下:

S ←1

i ←1

While i≤99

i ←i +2

S ←S × i

End While

Print S

我们只要检验i=99,就会发现又一次进入了循环体,实际上多乘了101.

有人称之为循环结构始端错误或末端错误.避免类似错误的有效办法是:写完代码或画好流程图后将变量的初始值和最后值分别代入加以检验.

2. 死循环

由于代码错误而导致程序运行后无法终止的情况当然应该小心.但类似于下面的伪代码也应尽量避免.

从一些资料中看到一段伪代码如下:

S ←0

I ←1

WhileS≤106

S ←S +

I ← I +1

End While

Print I

初读这段代码似乎没有什么问题,但如果真的运行后你会发现,电脑好像死机了.因为其中的S一时半会到不了106.所以这是为写代码而写的代码,没有多少实际意义.

二、 常见题

在考试中,要同学们直接写出算法或流程图的题目并不多见,多见的是下面两类问题.

1. 补全流程图

例2 图5是计算1++++…+的值的一个流程图,判断框内应填入的条件为__________.

解 由题意,当n=11时应停止循环,故判断框内应该填入的条件为n≤10.

例3 图6是计算+++…+的值的一个程序框图,判断框内应填入的条件是__________.

答案 n≥20(或n>18,n>19,n≥19).

点评 我们考虑的关键是看循环什么时候停止.注意图5、6中计数变量与累加变量的初始值,循环时计数与累加的执行顺序,判断后进入循环的“是”、“否”的区别.

对于此类问题先要理解运算式,填好后最好再检验一下流程图表达的意思是不是与运算式一致.

2. 写出执行结果或功能

例4 阅读图7的流程图,若输入的n的值是100,则输出的变量S和T的值依次是_______.

解 对于此类题,我们可以直接得到所加之值为递减(公差为-2)的,并且一直加到小于2为止.

上一篇:那些人那些年高中生日记作文下一篇:雀巢咖啡广告策划书b