C语言的二重循环.docx
- 文档编号:8258952
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:15
- 大小:22.47KB
C语言的二重循环.docx
《C语言的二重循环.docx》由会员分享,可在线阅读,更多相关《C语言的二重循环.docx(15页珍藏版)》请在冰豆网上搜索。
C语言的二重循环
5.2 多重循环程序设计案例
案例5.4 九九乘法表
【项目任务】
实现九九乘法表。
【设计思路】
实现九九乘法表的流程图如图5-3所示。
图5-3 九九乘法表流程图
【程序代码】
#include
main()
{
inti,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%d*%d=%-3d",j,i,i*j);
printf("\n");/*换行,整个九九乘法表有9行,所以该语句应被执行9次*/
}
}
【运行结果】
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=124*4=16
1*5=5 2*5=103*5=154*5=205*5=25
1*6=6 2*6=123*6=184*6=245*6=306*6=36
1*7=7 2*7=143*7=214*7=285*7=356*7=427*7=49
1*8=8 2*8=163*8=244*8=325*8=406*8=487*8=568*8=64
1*9=9 2*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81
【知识拓展】
1.一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。
2.在一个循环体内如果有多个语句,应该用大括号括起来,这样就构成了复合语句。
案例5.5 金字塔图形
【项目任务】
输出以下图形。
*
***
*****
*******
*********
【设计思路】
从以上图形可以看出,每一行的星号数为该行行数乘以2再减1,每一行前面的空格数为5减去该行行数。
用变量i控制行数,用变量j控制行前的空格数以及打印的星号数,循环5次。
【程序代码】
#include
main()
{
inti,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=5-i;j++) /*打印5-i个空格*/
printf("");
for(j=1;j<=2*i-1;j++) /*打印2i-1个星号*/
printf("*");
printf("\n");
}
}
【运行结果】
*
***
*****
*******
*********
【知识拓展】
1.该程序中临时变量i和j不断地被重新赋值,原值均被新值所替代。
2.一般来说,对于输出图形的任务,只要认真找出其中的规律,按照规律来编写代码就相对容易了。
3.参照给出的案例,编写相应的程序代码,输出以下图形。
*****
*****
*****
*****
*****
案例5.6 杨辉三角形
【项目任务】
输出以下杨辉三角形(要求输出6行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
【设计思路】
(1)杨辉三角形最本质的特征是:
它的竖直边和斜边都是由数字1组成的,而其余数则是等于这个数正上一行与左上一行的两个数之和。
从杨辉三角形的特点出发,可以总结出:
第n行有n+1个值(设起始行为第0行)。
(2)对于第n行的第j个值:
(n>=2)
①当j=1或j=n+1时,其值为1。
②当j!
=1且j!
=n+1时,其值为第n-1行的第j-1个值与第j个值之和。
【程序代码】
#include
#defineN6
main()
{
intn,i,j,k,a[N][N];
for(i=0;i { a[i][0]=1; a[i][i]=1; } for(i=2;i for(j=1;j<=i-1;j++) /*从第2列开始*/ a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i { for(j=0;j<=i;j++) printf("%-4d",a[i][j]); printf("\n"); } } 【运行结果】 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 1010 5 1 【知识拓展】 1.本程序用到了二维数组,其定义的形式为: 类型说明符数组名[常量表达式][常量表达式] 2.程序中,首先使用一个循环体对数组中代表杨辉三角形的两边赋值为1,第二个多重循环体的作用是对数组中代表杨辉三角形的非1数字进行计算和赋值。 计算完毕后,值被存储在二维数组的相应位置,第三个多重循环体的作用是打印数组的值。 inti,j; intcount=0; for(i=4;i>0;i--) { for(j=0;j<6;j++) { count++; } } 首先进入外层循环,然后进入内层循环! 第一步i=4 当j=0时count=1,j=1时count=2,j=2时count=3,j=3时count=4,j=4时count=5,j=5时count=6,j=6时,由于不满足条件,然后执行外层循环 第二步i=3 之前的count=6,现在有继续执行内层循环,所以当j=0时count=7,j=1时count=8,j=2时count=9,j=3时count=10,j=4时count=11,j=5时count=12,j=6时,由于不满足条件,然后执行外层循环 第三步i=2 之前的count=12,现在有继续执行内层循环,所以当j=0时count=13,j=1时count=14,j=2时count=15,j=3时count=16,j=4时count=17,j=5时count=6,j=18时,由于不满足条件,然后执行外层循环 第四步i=1 之前的count=18,现在有继续执行内层循环,所以当j=0时count=10,j=1时count=20,j=2时count=21,j=3时count=22,j=4时count=5,j=23时count=6,j=24时,由于不满足条件,然后执行外层循环 第五步i=0 不满足条件,所有循环执行结束 如果在第二个循环内打印结果输出的就是: 1,2,3,...24; 如果是在第一个循环中打印结果输出的是: 6,12,18,24; 不好意思,写错了一个地方 下面的是正确的 第三步i=2 之前的count=12,现在有继续执行内层循环,所以当j=0时count=13,j=1时count=14,j=2时count=15,j=3时count=16,j=4时count=17,j=5时count=18,j=6时,由于不满足条件,然后执行外层循环 第四步i=1 之前的count=18,现在有继续执行内层循环,所以当j=0时count=10,j=1时count=20,j=2时count=21,j=3时count=22,j=4时count=5,j=23时count=24,j=6时,由于不满足条件,然后执行外层循环 第二个循环输出时循环了24次,第一个循环输出时循环了4次 用二重循环打印图形教学设计 (2010-04-2310: 02: 28) 转载▼ 标签: 杂谈 分类: 教学论文 用二重循环打印图形教学设计 江苏省盐城中学信息教研组周勇军 一、教材分析 “用二重循环打印图形”是高中信息技术选修《算法与程序设计》第二章2.3.3循环结构中的内容。 本文要说的二重循环是建立在一重循环的基础之上的,虽然内容不多,但是用它来实现图形打印,内外循环就被赋予了特殊的含义,即控制行数和每行的字符数。 由于图形的多样性,就需要灵活设置内外循环的变化范围。 为了让学生从根本上掌握各种图形的打印方法,让学生学会总结图形规律,理解用二重循环打印图形的原理是非常重要的。 二、教学目标 1、知识与技能 ①熟练掌握二重循环语句For…Next的基本格式,并能运用它打印图形 ②理解Tab()函数的含义并能进行运用 ③学会用数学函数思想归纳变量与定量之间的关系表达式 2、过程与方法 通过打印各种“*”型图形,让学生能熟练运用二重循环 3、情感态度与价值观 通过图形打印,增强学生对程序设计的兴趣,提高分析问题解决问题的水平 三、教学重点与难点 教学重点 根据”*”型的排列情况,运用数学函数思想总结其规律,灵活运用二重循环语句实现图形打印 教学难点 根据”*”型的排列情况,运用数学函数思想总结其规律 四、学生分析 学生已经学习了一重循环的基本格式,并且能够编写相应程序,具备了用二重循环解决问题的能力基础,加上以图形打印为载体,更能激发他们学习的浓厚兴趣。 五、教学环境 网络机房、VB6.0,投影。 六、教学策略 本节课以解决二重循环打印图形问题为主线,采用层层深入和自主探究为主要模式,以教师为主导,学生为主体,让学生积极主动地思考问题、解决问题,从而达成学习目标。 七、教学过程 一、创设问题情境,引入新课 师: 有这样一条VB语句: print“*”;,大家思考一下它的执行结果? 生: 在vb窗体打印一个*。 师: 这里的;有什么作用? 生: 后面打印的内容紧跟此*显示,不换行。 Forj=1To4step1 Print“*”; Nextj 师: 如果将这条语句(print“*”;)作为如下循环语句的循环体,运行结果是什么? Forj=1To4step1 循环体 Nextj 生: 在vb窗体打印4个连续的*。 Fori=1To4step1 Forj=1To4step1 Print“*”; Nextj Nexti 师: 如果将这里的循环语句,再作为如下循环语句的循环体,这样写行不行呢? 会产生运行结果吗? Fori=1To4step1 循环体 Nexti 生: 行,在vb窗体打印16个连续的*。 师: 大家可以看到这里出现了比较特殊的情况,即循环语句套循环语句的情况,这就是“二重循环”。 二、二重循环语句格式 师: 根据此例,可以总结出二重循环语句的基本格式为: For循环变量=初值To终值 For循环变量=初值To终值 循环体 Next循环变量 Next循环变量 师: 刚才这个例子,执行结果是打印16个连续的*,如果要将16个*分成4行,代码该如何修改呢? 大家还记得前面讲过的实现换行的语句吗? 生: 用print Fori=1To4step1 Forj=1To4step1 Print“*”; Nextj Print Nexti Fori=1To4step1 Forj=1To4step1 Print“*”; Nextj Nexti 师: 教师在vb环境里执行这段代码,执行结果是打印出4行4列的*型图形,这是通过二重循环打印出的一个矩形图形。 我们进一步分析可以看出,这里的i变化范围是1到4,即为外循环变量,用来控制打印的行数,这里的j变化范围是1到4,即为内循环变量,用来控制每行打印的字符数,从这个角度来说,这里的内外循环变量(i、j)就有了实际的意义,即i控制行数,j控制每行字符数。 师: 请大家上机练习,用二重循环打印一个4行5列的*型图形。 生: 学生上机实践。 Fori=1To4step1 Forj=1To5step1 Print“*”; Nextj Print Nexti 学生操作,教师巡视。 教师利用大屏幕转播某个学生屏幕,请他展示代码及执行结果。 然后教师点评。 师: 显然这里的矩阵图形是一个规则的图形(每行字符数相同),如果是一个三角形(每行字符数不同如图一)好不好打印呢? (图一) 三、二重循环的进一步运用 (1)(图一)图形的打印(每行字符数不同) 师: 大家看(图一)是一个三角形,共4行,但每行的字符数不一样多,外循环应该没问题,那内循环应怎么设置呢? 进一步分析,可以看到虽然每行字符数不一样,是一个变量,但变化是有规律的。 那我们考虑能不能找出它跟行数的一个对应关系呢? 我们从图一中采集行数和相应字符数的一个信息列表如下: i(行号) j(字符数) 1 1 2 2 3 3 4 4 分析此表,我们可以用数学中一次函数的思想(i为自变量,j为函数值)来建立j和i的关系表达式。 从而得到: j=i,所以可以得到如下代码: (图二) Fori=1To4 Forj=1Toi Print“*”; Nextj Print Nexti 师: 教师在vb环境里执行此代码,执行结果正如如图一。 (2)(图二)图形的打印(每行字符数不同,每行起始*位置不同) 师: 看(图二),也是一个三角形,不同的是每行第一个字符的起始位置不一样,是一个变量,这样的图形应该怎么打印呢? 师: 这里要用到一个函数tab(),此函数用来控制输出字符的位置。 请大家体验下面一段代码的作用。 生: 上机输入如下代码,体会tab函数的作用。 Print"1234567890" PrintTab (2); Print"*" PrintTab(4); Print"*" 师: 大家通过实践,可以发现Tab()函数的自变量就表示输出的具体位置。 师: 显然图二中,每行的字符数是变的,每行第一个字符的起始位置也是变的,跟刚才的分析方法一样,要建立关系式。 i 起始*位置(n) j 1 4 1 2 3 2 3 2 3 4 1 4 分析此表,我们可以用数学中一次函数的思想(i为自变量,j为函数值,n为函数值)来建立j和i的关系表达式,n和i的关系表达式。 从而得到: j=i,n=5-i,所以可以得到如下代码: Fori=1To4 PrintTab(5–i); Forj=1Toi Print“*”; (图三) Nextj Print Nexti 师: 教师在vb环境里执行此代码,执行结果正如如图二。 四、学生自主探究 师: 教师布置任务打印如图三所示图形 Fori=1To4 PrintTab(9–2*i); Forj=1To2*i-1 Print"*"; Nextj Print Nexti 生: i 起始*位置(n) j 1 7 1 2 5 3 3 3 5 4 1 7 可以归纳出: n=9-2*I j=2*i-1 学生操作,教师巡视。 教师利用大屏幕转播某个学生屏幕,请他展示代码及执行结果。 然后教师点评。 (图四) 五、师生共同探究 师: 教师布置任务打印如图四所示图形 生: 采取“分而治之”的方法进行处理,即将图形分为上三角和下三角分别进行打印,然后进行合并形成图四所示的形状。 参考代码略 师: 大部分同学采用分块处理的方法来实现打印,这样做易于理解但代码较繁琐,能不能简化一下呢? 能否通过一个二重循环语句就能实现呢? 这个图形一共7行,如果i的范围取1到7难以归纳n和j的表达式,但稍微观察一下,可以发现此图是一个对称图形,所以行i的范围可以取-3到3,行作为定量可以表示成abs(i),再依此建立关系就方便了。 Fori=-3To3 PrintTab(2*Abs(i)+4); Forj=1To7–2*Abs(i) Print"*"; Nextj Print Nexti 分析与参考代码如下: Abs(i) 起始*位置(n) j 3 7 1 2 5 3 1 3 5 0 1 7 可以归纳出: n=2*abs(i)+4,J=7-2*abs(i) 师: 教师在vb环境里执行此代码,执行结果正如如图四。 六、教师总结 这节课我们通过二重循环打印了几种图形,通过学习可以发现打印的关键就是对图形中行和列及打印位置的控制。 实际上这些图形还可以变化成很多种其他图形,但只要我们能总结行和列、打印位置的规律,找出它们的内在关系,写出相应的关系式,那么要实现种种图形的打印是不难的。 六、教学反思 这节课的引入本来是直接给学生展示一个用二重循环语句打印的完整图形,但发现学生不能一下子接受,所以采用了先打印一个*,再打印一行*,到若干行*的层层递进的方法,这样学生就很容易接受。 本节课是用二重循环实现图形打印,我们选用的图形都是大家比较熟悉的图形,如矩形、三角形、菱形等,这样学生有亲切感,也容易激发学生的学习兴趣。 本教学设计在讲图形打印技巧方面,注重跟数学学科的紧密结合,利用学生熟悉的函数知识来分析问题,解决问题,加强了学科之间的交流。 在具体教学过程中,通过一系列“*”型图形打印,让学生在这些趣味性的题目中思考、分析、编写代码并上机实践。 这里的*型图案,是从简单到复杂慢慢变化的,这样学生易于接受和理解。 老师教起来好教,学生学起来带劲,真正做到了课堂的有效教学 。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 二重 循环
![提示](https://static.bdocx.com/images/bang_tan.gif)