
C语言程序设计制作数字电子钟循环嵌套.ppt
35页《《C语言程序设计》C语言程序设计》Lizq98@制作数字电子钟制作数字电子钟---循环嵌套---循环嵌套一、任务分析一、任务分析 1、目标: 、目标: 制作实际生活中常见的显示 制作实际生活中常见的显示“时、分、时、分、秒秒”的的 “数字电子钟数字电子钟”如: 10::11::56任务:制作一个数字电子钟 2、、程序程序演示演示 3、所需知识:、所需知识: 顺序结构、选择结构、循环结构程序设计 顺序结构、选择结构、循环结构程序设计《C语言程序设计教程》(第二版) Lizq98@二、知识回顾二、知识回顾三种循环语句三种循环语句 1、、while循环循环 2、、do while循环循环 3、、for循环循环 任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@ 循环结构有循环结构有“当型当型”和和“直到型直到型”两种 1 1、、whilewhile循循环环和和forfor循循环环结结构构都都是是“当当型型”循循环环((先先判判断断,,后后循循环环)),,也也就就是是说说先先判判断断条条件件满满足足与与否否,,决决定定是是否否继继续续循循环环,,如如果果一一开开始始条条件件就就不不成成立,则循环一次也不被执行。
立,则循环一次也不被执行 2 2、、do do whilewhile是是“直直到到型型”循循环环((先先循循环环,,后后判判断断))不不管管循循环环条条件件满满足足与与否否,,do do whilewhile循循环环中中的循环体至少被执行一次的循环体至少被执行一次 二、知识回顾二、知识回顾任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@二、知识回顾二、知识回顾 在屏幕上显示数字 在屏幕上显示数字0--59的变化的变化for语语句的实现如下:句的实现如下: …… for(s=0;s<=59;s++) printf("\%2d",s); ……程序程序演示演示任务一:制作一个数字电子钟任务一:制作一个数字电子钟 3 3、、forfor循循环环结结构构是是C C语语言言中中功功能能最最强强大大、、使使用最多的循环语句使用灵活,形式多样用最多的循环语句使用灵活,形式多样《C语言程序设计教程》(第二版) Lizq98@第4章 循环结构程序设计二、知识回顾二、知识回顾:《C语言程序设计教程》(第二版) Lizq98@ 存在两个问题: 存在两个问题: 1、数字、数字“0-59”以滚动卷屏方式显示。
以滚动卷屏方式显示 2、显示速度太快,要能以实际一秒、显示速度太快,要能以实际一秒时间显示一个数时间显示一个数 三、导入新课三、导入新课任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@ 第一个问题的解决办法,可以使用 第一个问题的解决办法,可以使用gotoxy(x,y)函数定位数字显示位置,其中函数定位数字显示位置,其中x为屏幕列号、为屏幕列号、y为屏幕行号为屏幕行号 也可以在每显示一次数字后调用清屏 也可以在每显示一次数字后调用清屏函数函数clrscr()(或(或system(“cls”);)) clrscr()、、gotoxy()两个函数都包含两个函数都包含在在conio.h中,所以要在程序开头使用文中,所以要在程序开头使用文件包含命令将它们包含进来:件包含命令将它们包含进来: #include “conio.h"三、导入新课三、导入新课任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@程序如下:程序如下:#include "Conio.h"int main(void){ int s; for(s=0;s<=59;s++) {{ gotoxy(35,12); printf("\n%2d",s); } } getch(); return 0;}三、导入新课三、导入新课任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@ 第二个问题,是由于计算机的运行速度很 第二个问题,是由于计算机的运行速度很快,每秒的显示时间要比实际生活中的一秒时间快,每秒的显示时间要比实际生活中的一秒时间要短得多。
因此,需要在程序中每显示一秒后都要短得多因此,需要在程序中每显示一秒后都设置一个时间延迟,时间延迟用方法空循环结构设置一个时间延迟,时间延迟用方法空循环结构实现,它的位置在循环内屏幕每显示一个数值后实现,它的位置在循环内屏幕每显示一个数值后 for(s=0;s<=59;s++) { {printf("\%2d",s); for (i=1;i<=200000000;i++); } 这就是一个 这就是一个循环嵌套(二层)结构循环嵌套(二层)结构三、导入新课三、导入新课延时循环条件需延时循环条件需延时循环条件需延时循环条件需延时循环条件需延时循环条件需调试终值以符合调试终值以符合调试终值以符合调试终值以符合调试终值以符合调试终值以符合实际实际实际实际实际实际任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@程序如下:程序如下:#include “conio.h"int main(void){ int s; long i; for(s=0;s<=59;s++) { gotoxy(35,12); printf("%2d",s); for (i=1;i<=200000000;i++); } getch(); return 0;}三、导入新课三、导入新课任务:制作一个数字电子钟任务:制作一个数字电子钟 定位显示定位显示定位显示定位显示定位显示定位显示延时,空循环延时,空循环延时,空循环延时,空循环延时,空循环延时,空循环2 22亿次亿次亿次亿次亿次亿次《C语言程序设计教程》(第二版) Lizq98@第4章 循环结构程序设计三、导入新课三、导入新课程序程序演示演示思考:显示思考:显示思考:显示思考:显示思考:显示思考:显示0 0 0 00 0------595959595959后后后后后后程序还会重复运行吗程序还会重复运行吗程序还会重复运行吗程序还会重复运行吗程序还会重复运行吗程序还会重复运行吗《C语言程序设计教程》(第二版) Lizq98@ 实训环境:实训环境:Win-TC或或TC 注意: 注意: 1)调试程序时要注意观察程序出错情况;)调试程序时要注意观察程序出错情况; 2))200000000是一个参考值,数据改为是一个参考值,数据改为100000000后再次运行程序,观察运行结果;根后再次运行程序,观察运行结果;根据计算机运行速度调整循环变量据计算机运行速度调整循环变量i的终值,尽量与的终值,尽量与实际运转时间一致。
实际运转时间一致上机实训上机实训1:: 上机编辑源程序,模拟秒的变化,在屏 上机编辑源程序,模拟秒的变化,在屏幕固定位置显示数字幕固定位置显示数字0--59的变化过程调试的变化过程调试运行程序运行程序任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@ 本节课知识点: 本节课知识点: 循环嵌套-多种循环 循环嵌套-多种循环是本课程重点,也是难点是本课程重点,也是难点三、导入新课三、导入新课任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@ 一个循环体内又包含另一个完整的循环结构一个循环体内又包含另一个完整的循环结构称为循环嵌套,而包含多层循环的循环结构称为称为循环嵌套,而包含多层循环的循环结构称为多重循环多重循环whilewhile、、dodo while while和和forfor三种循环都可三种循环都可以进行嵌套注意,循环嵌套只能是包含关系,以进行嵌套注意,循环嵌套只能是包含关系,不能发生交叉不能发生交叉四、四、循环嵌套循环嵌套概念概念任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@五、算法分析五、算法分析 1 1、变量设置、变量设置 设设小小时时变变量量为为h h、、分分钟钟变变量量为为m m、、秒秒变变量量为为s s,,因因为为这这些些变变量量的的数数据据值值均均为为小于小于6060的整数,所以定义它们为整型。
的整数,所以定义它们为整型 用用于于延延时时控控制制的的变变量量数数据据值值较较大大,,超超出出整整型型整整形形范范围围,,所所以以变变量量i i定定义义为为长整型 任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@五、算法分析五、算法分析 2 2、程序结构、程序结构 “数数字字电电子子钟钟”是是一一个个典典型型的的循循环环嵌嵌套套问问题题,,先先考考虑虑只只有有分分、、秒秒的的时时钟钟最最里里层层的的循循环环用用于于延延时时,,中中间间层层循循环环控控制制秒秒从从0 0~~5959的的变变化化,,外外层层循循环环控控制制分分钟钟从从0 0~~5959的的变变化化嵌嵌套结构如下:套结构如下: for(mfor(m=0;m<=59;m++)=0;m<=59;m++) for(sfor(s=0;s<=59;s++)=0;s<=59;s++) { printf("\%2d:%2d", { printf("\%2d:%2d", m,sm,s);); for (i=1;i<=200000000;i++);for (i=1;i<=200000000;i++); } }任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@五、算法分析五、算法分析 再再考考虑虑小小时时从从0 0--2323的的变变化化情情形形,,最最外外层层再再套套上上一一个个循循环环,,控控制制小小时时从从0 0~~2323。
则则四四层嵌套结构如下:层嵌套结构如下: for (h=0;h<=23;h++)for (h=0;h<=23;h++) for(mfor(m=0;m<=59;m++)=0;m<=59;m++) for(sfor(s=0;s<=59;s++)=0;s<=59;s++) { printf("\n%2d:%2d:%2d",h,m,s);{ printf("\n%2d:%2d:%2d",h,m,s); for (i=1;i<=200000000;i++);for (i=1;i<=200000000;i++); } }任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@ main() { int h,m,s;long i; for (h=0;h<=23;h++) for(m=0;m<=59;m++) for(s=0;s<=59;s++) { gotoxy(35,12); printf("\n%2d:%2d:%2d",h,m,s); for (i=1;i<=200000000;i++); } } 六、六、源程序源程序任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@上机实训上机实训2:: 1))调试程序时要注意观察程序运行调试程序时要注意观察程序运行情况,再次调整空循环变量情况,再次调整空循环变量i的终值,尽的终值,尽量与实际运转时间一致。
计算机运行速量与实际运转时间一致计算机运行速度越快,则这个数值越大度越快,则这个数值越大 2)请将变量)请将变量i类型修改为整形后运类型修改为整形后运行程序,观察运行结果行程序,观察运行结果任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@ 前前面面的的程程序序每每次次运运行行都都从从0 0点点0 0分分0 0秒秒开始,不能从当前实际时间开始运行开始,不能从当前实际时间开始运行 解解决决问问题题的的办办法法可可以以在在程程序序第第一一次次循循环环开开始始时时输输入入一一次次当当前前实实际际时时间间为为了了只只在在开开始始运运行行时时设设置置一一次次初初始始时时间间,,可可以以引引入入一一个个逻逻辑辑变变量量firstfirst,,其其初初始始值值为为0 0 ,,输输入入初初始始时时间间后后,,将将其其值值置置为为非非0 0在在后后面面程程序序运运行行中中,,通通过过ifif语语句句控控制制不不再再需需要输入初始时间要输入初始时间七、七、源程序提高与扩展 之一源程序提高与扩展 之一任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@ …… for(s=0;s<=59;s++) { if (first==0) { printf("\n输入当前时间输入当前时间:"); scanf("%d:%d:%d",&h,&m,&s); first=2; } else { gotoxy(35,12); printf("%2d:%2d:%2d",h,m,s); for (i=1;i<=200000000;i++); } }七、七、源程序提高与扩展 之一源程序提高与扩展 之一任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@完整完整程序如下:程序如下: # #include
试并找出错误后,运行本程序 说明:说明:v 本程序需运行24小时才能结束,如果要停止程序运行,可以按Ctrl-C或连续按两次Ctrl-Break强制中断程序运行八、上机实训八、上机实训3任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@ 本本程程序序只只能能运运行行2424小小时时,,请请同同学学们们将将程程序序进进一一步步改改进进,,使使它它能能显显示示年年、、月月、、日日、、星期、时、分、秒等数据的电子钟星期、时、分、秒等数据的电子钟 九、九、源程序提高与扩展 之二源程序提高与扩展 之二 思考和作业思考和作业任务:制作一个数字电子钟任务:制作一个数字电子钟 《C语言程序设计教程》(第二版) Lizq98@ “九九九九乘乘法法表表”是是一一个个典典型型的的循循环环嵌嵌套套问问题题,,外外循循环环变变量量i控控制制行行的的变变化化,,共共9行行,,所所以以外外循循环环需需循循环环9次次由由于于每每行行有有9次次乘乘法法运运算算,,所所以以外外循循环环每每执执行行一一次次,,内内循循环环每每次次都都是是用用i乘乘以以1~~9,,即即内内循循环环每每行行也也都都需需要要执行执行9次。
次 练习:练习:输出输出“九九乘法表九九乘法表” 任务分析任务分析 1、任务目标: 、任务目标: 编程输出编程输出 “九九乘法表九九乘法表”2、、程序程序演示演示《C语言程序设计教程》(第二版) Lizq98@练习:练习:输出输出“九九乘法表九九乘法表”《C语言程序设计教程》(第二版) Lizq98@程序如下:程序如下: main(){ int i,j; for (i=1;i<=9;i++) { for(j=1;j<=9;j++) printf("%1d*%1d=%2d ",j,i,i*j); printf("\n"); }} 练习:练习:输出输出“九九乘法表九九乘法表”《C语言程序设计教程》(第二版) Lizq98@ 内层循环执行的次数等于该循环嵌套结构中每一层循环次数的乘积本例外循环循环9次,内循环也为9次,则内循环执行总次数为9×9=81次 思思考考::本程序输出结果为矩形,其中近一半的计算和显示是重复请同学们修改程序,实现以三角形形式输出结果,提高算法效率输出形式如下: 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=12 4*4=16 1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25 1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 练习:练习:输出输出“九九乘法表九九乘法表”《C语言程序设计教程》(第二版) Lizq98@ 编写程序,以三角形形式输出 编写程序,以三角形形式输出“九九九乘法表九乘法表” ,并上机调试通过。
并上机调试通过 上机实训上机实训4练习:练习:输出输出“九九乘法表九九乘法表”《C语言程序设计教程》(第二版) Lizq98@小 结 1 1、循环嵌套(多种循环),它是本、循环嵌套(多种循环),它是本课程重点,也是难点课程重点,也是难点 2 2、多重循环中,外循环变化慢,内、多重循环中,外循环变化慢,内循环变化快,外循环一次,内循环就要循循环变化快,外循环一次,内循环就要循环环n n次 如秒变化 如秒变化6060次,则分钟变化(增加)次,则分钟变化(增加)1 1次,然后秒重新从次,然后秒重新从0 0到到5959变化;分钟变化变化;分钟变化6060次,则小时变化(增加)次,则小时变化(增加)1 1次本程序次本程序中,延时控制变量中,延时控制变量i i变化次数最多变化次数最多《C语言程序设计教程》(第二版) Lizq98@小 结 3、循环嵌套在实际应用中非常广泛,、循环嵌套在实际应用中非常广泛,必须掌握必须掌握 4 4、屏幕清屏或让数据在固定位置显、屏幕清屏或让数据在固定位置显示,可以使用示,可以使用clrscr()、、gotoxy()两个函数,两个函数,它们都包含在它们都包含在conio.h中,需要使用文件中,需要使用文件包含命令将它们包含进来:包含命令将它们包含进来: #include “conio.h“ 5、延时问题,可以通过空循环解决。
延时问题,可以通过空循环解决《C语言程序设计教程》(第二版) Lizq98@小 结 6、循环嵌套中要解决诸如程序第一、循环嵌套中要解决诸如程序第一次循环开始时输入一个初始值(当前实际次循环开始时输入一个初始值(当前实际时间)问题,在实际应用中非常广泛,必时间)问题,在实际应用中非常广泛,必须学会并灵活掌握须学会并灵活掌握 7 7、定义变量类型应注意的问题,如、定义变量类型应注意的问题,如本程序实训时提供的代码变量本程序实训时提供的代码变量i i为整形,为整形,程序虽能通过编译并运行,但运行结果会程序虽能通过编译并运行,但运行结果会出错,时钟显示将会停顿在某个时间不再出错,时钟显示将会停顿在某个时间不再继续 《C语言程序设计教程》(第二版) Lizq98@作 业 P105P105 一、选择题 一、选择题 6-86-8,,15-1615-16 二、填空题 二、填空题 7-197-19 三、判断题 三、判断题 3-103-10 四、编程 四、编程 5 5,,6 6《C语言程序设计教程》(第二版) Lizq98@Lizq98@。












