闰年判断流程图
- 格式:ppt
- 大小:1.16 MB
- 文档页数:7
基于汇编语言的闰年判断程序设计第一章设计方案一、设计内容根据提示信息输入任意年份,编写判断闰年的程序,如果是闰年,则在屏幕上显示“Y”,否则显示“N”。
二、设计分析利用DOS 21H中断类型的10号键盘功能调用,将键盘接受到的年份数值的字符串按字节存入缓冲区。
将字符串中的每个字符转换为对应的十进制数值(利用0-9这10个数的ASCⅡ码值比其本身大30H的关系),利用判断某年是否为闰年的表达式,输入该年是否为闰年的信息。
三、算法分析闰年计算是一个非常经典的问题,在学习各种语言时都会遇到这个问题,用来判断某年是否为闰年。
具体算法为如果该年份的数值正整数若能被100整除,又能被400整除,或者不能被100整除,却能被4整除,则该数值代表的年份为闰年。
四、程序流程图本框图列出了此次课程设计的总流程,显示信息,输入数据,判断格式,判断闰年和结束程序。
客观显示了设计的顺序结构,循环结构及分支结构。
图2-1 程序流程图第二章程序设计一、程序分析主程序:显示提示输入年份以及输入的字符内容,和最后输出的判断。
子程序:1.判断输入:该模块是对输入的年份的格式的判断,若是错误则显示错误Error,正确则进行下面的操作。
2.字符串转换格式:将数字字符串转换成数字,以便进行下面的程序操作。
3.判断闰年:判断输入的年份是否为闰年,若是则输出“This is a leapyear!”,若不是则输出“This is not a leap year!”,然后退出。
二、汇编程序data segmentinbuff db5,?,5dup(?)prompt db 'Please input the year:','$'errmsg db 'Input illegal!','$'yes db ' is a leap year','$'no db ' is not a leap year','$'mess db 'Continue?(y/n):','$'newline db13,10,'$' ;回车换行data endscode segmentmain proc farassume cs:code,ds:datastart:push dssub ax,axpush axmov ax,datamov ds,axlop0:call inputcall judgelea dx,messmov ah,09hint21h;是否继续输入年份的判断mov ah,01hint21hcmp al,'n'je exitcontinue:lea dx,newlinemov ah,09hint21hjmp lop0exit:retmain endp;输入一个具体的年份,并转换成10进制;返回:;(ax)=输入的年份input proc nearpush bxpush cxpush dxs1:lea dx,promptmov ah,09hint21h;提示输出lea dx,inbuffmov ah,0ahint21h;键盘输入mov dl,byte ptr inbuff[1] ;把有效地址为inbuff的字节送给dl cmp dl,4;输入的值判断是否为4位数jne error ;调用输入不合条件时的错误处理mov cx,4lea bx,inbuffadd bx,2mov ax,0mov dx,0lop1: ;检查输入有效性mov dl,10mul dlmov dl,byte ptr [bx]sub dl,30h;将字符转化为数值cmp dl,0jb errorcmp dl,9ja erroradd ax,dxinc bx;循环体中字符在字符串中的位置bx+1 loop lop1jmp s2error: ;错误处理lea dx,newlinemov ah,09hint21hlea dx,errmsgmov ah,09hint21hlea dx,newlineint21hjmp s1s2:mov cx,axlea dx,newlinemov ah,09hint21hmov ax,cxpop dxpop cxpop bx;现场恢复retinput endp;判断一个年份是否闰年;输入:;(ax)=年份judge proc nearpush bxpush cxpush dxpush ax;保存ax;输出要判断的年份mov cx,4lea bx,inbuffadd bx,2lop2:mov dl,byte ptr [bx]mov ah,02hint21hinc bxloop lop2 ;循环输出年份正确时结果中的年份lop3:pop axmov dx,0mov cx,ax;保存ax到cx中mov bx,4;判断是否能被4整除div bxcmp dx,0jne notleapmov ax,cxmov bx,100;判断是否能被100整除div bxcmp dx,0jne isleapmov bx,400;判断是否能被400整除div bxcmp dx,0jne notleapisleap:lea dx,yesmov ah,09hint21hjmp s3notleap:lea dx,nomov ah,09hint21hs3:;换行lea dx,newlinemov ah,09hint21h;输出年份正确时结果的剩余部分pop dxpop cxpop bxretjudge endpcode endsend start第三章程序调试在MF2KI软件中调试,运行上面的程序,初始界面:如图4-1图4-1输入年份2008执行程序,回车换行,则显示2008 is leap year;并给出是否继续的提示,输入y,屏幕继续显示提示输入语句;如果输入错误,如abcd 则显示Input illegal !并提示用户继续输入年份,知道输入正确年份为止;输入2010,回车换行,则显示2001 is not leap year;并给出是否继续的提示,输入n,则显示屏幕关闭,程序结束。
计算闰年的算法
闰年分为普通闰年和世纪闰年。
一、普通闰年的判断方法
1.规则:能被 4 整除但不能被 100 整除的年份为普通闰年。
●例如:2004 年,2004÷4 = 501,说明 2004 能被 4 整除;2004
÷100 = 20.04,说明 2004 不能被 100 整除,所以 2004 年是闰年。
●再如:1900 年,1900÷4 = 475,说明 1900 能被 4 整除;1900
÷100 = 19,说明 1900 能被 100 整除,所以 1900 年不是闰年。
二、世纪闰年的判断方法
1.规则:能被 400 整除的世纪年(即以 00 结尾的年份)为世纪闰年。
●例如:2000 年,2000÷400 = 5,说明 2000 能被 400 整除,所
以 2000 年是世纪闰年。
综上所述,判断一个年份是否为闰年,可以先判断是否为世纪年(以00 结尾),如果是世纪年则判断是否能被 400 整除;如果不是世纪年,则判断是否能被 4 整除且不能被 100 整除。
让知识带有温度。
闰年的定义和程序计算整理闰年的定义和程序计算天文专家表示,农历鸡年是个闰年,有一个“闰6月”,共有6个小月,每月29天和7个大月,每月30天,一年共有384天。
定义①、一般年能整除4且不能整除100的为闰年.(如就是闰年,1900年不是闰年)①、世纪年能整除400的是闰年.(如2000年是闰年,1900年不是闰年)①、对于数值很大的年份,这年假如能被3200整除,并且能被172800整除则是闰年.如172800年是闰年,86400年不是闰年(由于虽然能被3200整除,但不能被172800整除)程序计算Ecmascript语言:1234567//推断指定年份是否为闰年functionisleap(){varthe_year=newDate().getFullYear();varisleap=the_yea r%4==0the_year%100!=0||the_year%400==0;returnisleap;} C#语言:123456789///summary///推断指定年份是否为闰年////summary///paramname=year年份/param///returns返回布尔值true为闰年,反之不是/returnspublicstaticboolisLeapYear(intyear){return((year%4==0year%100第1页/共3页千里之行,始于足下。
!=0)||year%400==0);} Java语言:12345678910111213importjava.util.Scanner;publicclassLeapYear{public staticvoidmain(String[]args){ Scannerinput=newScanner(System.in);Syst em.out.print(请输入年份:);intyear=input.nextInt();if((year%4==0year%100!=0)||year%400== 0)System.out.print(year+年是闰年。
郑州航空工业管理学院微机原理课程设计说明书2012级电气工程及其自动化专业 1206972 班级题目判断某一年是否为闰年姓名贾新亮学号120697211指导教师王义琴职称教授二О一二年十二月十二日摘要随着科学技术的迅速发展,微机的应用越来越普遍,在此设计中利用DOS 21H中断类型的10号键盘功能调用,将从键盘接收的表示年份数值的字符串按字节存入缓冲区。
将字符串中的每个字符转换为对应的十进制数值(利用0-9这10个数的ASCll码值比其本身大30H的关系),利用判断某年是否为闰年的表达式,输出该年是否为闰年的信息。
解决本问题的关键是找到判断闰年的方法。
判断闰年的规则是:如果某一年能被4整除但不能被100整除或者该年能被400整除,则该年为闰年。
判断某年是否为闰年的汇编语言的表达式为:(((AX)MOD 4 EQ 0)AND((AX)MOD 100 NE 0))OR((AX)MOD 400 EQ 0)关键词:判断闰年中断字符串输入输出一、判断某一年是否为闰年的基本原理本设计是根据闰年的计算方法,利用汇编语言编写的一个简单的判断闰年的程序。
根据判断闰年规则:如果某年能被4整除但不能被100整除或者该年能被400整除,则该年为闰年,否则不是闰年。
在本程序运行后,只要从键盘输入年份,通过计算后,就能输出该年份是否为闰年的信息。
二、设计方案2.1设计程序流程图否 是否是是闰年计算设计程序流程图2.2设计说明如图1闰年计算程序流程图所示,程序开始运行以后,首先屏幕输出提示语,提示用户输入一个年份。
用户输入年份后,程序将输入的字符转换为数值。
设计利用乘法的操作,实现字符之间的10倍数值转换关系。
将年份字符转换成数值开始 输入年份年份除以4是否整除 年份除以100 是否整除除以400是否整不是闰年是闰年退出退出继续? 继续?后,则进行是否是闰年的判断。
首先将年份除以4,若不能整除,则判断为不是闰年,屏幕将输出该年不是闰年的信息,并提示用户是否继续下一个年份的判断,如果用户输入‘n’则表示不需要继续,程序将退出,否则继续下一个年份的判断;若能整除4,则该年份将继续除以100,若不能整除,则判断为是闰年,屏幕将输出该年是闰年的信息,并提示用户是否继续下一个年份的判断,若不需要继续,程序将退出,否则继续下一个年份的判断;若能整除100,则该年份将继续除以400,若能整除,则判断为是闰年,屏幕将输出该年是闰年的信息,并提示用户是否继续下一个年份的判断,若不需要继续,程序将退出,否则继续下一个年份的判断;若不能整除400,则判断为不是闰年,屏幕将输出该年不是闰年的信息,并提示用户是否继续下一个年份的判断,若不需要继续,程序将退出,否则继续下一个年份的判断。
第八课闰年判断器--分支结构(二)(2课时) 各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢一、基本要求.进一步掌握用流程图描述算法。
2.掌握逻辑表达式的运算方法。
3.了解分支语句的嵌套用法。
4.了解焦点方法,掌握SetFocus方法的使用。
二、教学过程课内完成1—2个实例实例一:闰年判断器编写一个判断某年是否为闰年的VB工程。
要求:当你输入一个数据后,单击“判断”命令按钮,若数据符合年份要求,则程序显示该年是否为闰年,否则,清空输入的数据并将焦点保持在文本框内,等待用户重新输入数据。
一、算法分析第一步,判断输入的数据是否是大于零的整数。
大于零的整数的条件:x>0Andx=Fix第二步:判断是否为闰年。
判断闰年的条件是:能被4整除但不能被100整除的,是闰年;能被100整除又能被400整除的,是闰年;其他为非闰年。
二、设计界面图“闰年判断器”三、设置属性:对象属性属性值Form1名称captionBorderStylefrm_pd闰年判断器-Fixedsinglecommand1名称captioncmdadjudge判断command2名称captioncmdexit退出Text1名称TexttxtinputLabel1名称captionlbl_view请输入年份四、编写程序代码重点是cmdadjudge_click事件过程的代码,要分析清楚。
这是一个块if结构,而且是块if结构的嵌套:第一个语句x=FixAndx>0,这是判断x是否是大于零的整数的条件;第二个语句x/4=FixAndx/100Fix,排除世纪年同时又能被4整除,满足润年的条件;第三个语句x/100=FixAndx/400=Fix,x是世纪年同时又能被400整除,满足润年的条件。
其它的都不是润年。
当我们把这些语句与润年法则结合起来,就非常容易理解。
五、调试运行程序三、知识小结逻辑表达式与逻辑运算符(阅读理解,高一数学讲过)⒈逻辑表达式⒉逻辑运算符常用的逻辑运算符有3种,它们是And(逻辑与)、or(逻辑或)和Not(逻辑非)。