用c语言编写万年历,要求输出任意一年的某月,能显示出这个月的日历

用c语言编写万年历,要求输出任意一年的某月,能显示出这个月的日历,第1张

1、首先要判断一个年份闰年还是平年,用一个子程序来做。

2、然后就开始写主程序,首先用scanf得到一个年份。

3、在判断这个年份是平年还是闰年后用printf在CMD中打印出来。

4、在编写完成后,在Notepad++界面下按下F5,d出输入框。

5、cmd /k gcc -o "$(CURRENT_DIRECTORY)\$(NAME_PART)exe""$(FULL_CURRENT_PATH)" && CLS && "$(CURRENT_DIRECTORY)\$(NAME_PART)exe" & PAUSE & EXIT。在输入框例输入后运行。

6、点击运行,会d出CMD,在里面输入年份后回车就完成了。

闰年

闰年: 1为了弥补人为的年份规定与地球实际绕日公转的时间差,2而人为把时间差补上了的年份,该年即为闰年

遵循的规律为: 四年一闰,百年不润,四百年再润

if((year % 400 == 0)|(year % 4 == 0)&(year % 100 != 0))//闰年的计算方法

详情如下:

闰年(leap year),在公历(格里历)或夏历中有闰日的年份,以及在中国旧历农历中有闰月的年份。地球绕太阳运行周期为365天5小时48分46秒(合36524219天)即一回归年(tropical year)。公历的平年只有365日,比回归年短约02422 日,所余下的时间约为四年累计一天,于第四年加于2月,使当年的历年长度为366日,这一年就为闰年。现行公历中每400年有97个闰年。夏历的平年只有354日,比12个朔望月短03671日,为使每月初一与月朔相合,规定每30年中有11年的年底增加1日,这一年的历年有355日,即为闰年。中国旧历农历作为阴阳历的一种,每月的天数依照月亏而定,一年的时间以12个月为基准,平年比一回归年少约11天。为了合上地球围绕太阳运行周期即回归年,每隔2到4年,增加一个月,增加的这个月为闰月。在加有闰月的那一年有13个月,历年长度为384或385日,这一年也称为闰年。

按照每四年一个闰年计算,平均每年就要多算出00078天,这样经过四百年就会多算出大约3天来,因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的就是平年。

也就是我们通常所说的:

四年一闰,百年不闰,四百年再闰。

西方公历的“闰年”

阳历中有闰日的年份叫闰年,相反就是平年,平年为365天,闰年为366天。在公历(格里历)纪年中,平年的二月为28天,闰年的二月为29天。闰年平月2月29日为闰日。

增加闰日的原因

现时的公历以回归年为“年”的计算基础,而一个回归年大约等于36524220日。因为在平年公历只计算365日,结果四年后便会累积024220×4=09688日,大约等于一日,所以便逢四年增加一日闰日以抵销这09688日。

计算闰年的方法

公历纪年法中,能被4整除的大多是闰年,不能被100整除而能被400整除的年份是闰年,能被3200整除的也不是闰年,如1900年是平年,2000年是闰年,3200年不是闰年。

中国农历的“闰年”

中国旧历农历纪年中,有闰月的一年称为闰年。一般年份为12个月,354或355天,闰年则为13个月,383或384天

编程中公历闰年的简单计算方法:

设年份 year

if (year能被4整除 and 不能被100整除) or year能被400整除

then 该年为闰年

else 该年为平年

具体程序代码:

#主模块:

;月历打印

;主程序设置好入口参数,BX=年份,DL=月份

;调用子程序 display

;By wangrui

;2006-12-8

extrn display:far

Esccode equ 01h

Up equ 048h

Down equ 050h

Left equ 04bh

Right equ 04dh

dseg segment

Year dw 0

Month db 0

temp db 10 dup(0)

count dw

ErrMsg db 0dh,0ah,"The input NOT decimal! $"

dseg ends

cseg segment

assume cs:cseg,ds:dseg

start:

mov ax,dseg

mov ds,ax

call GetYearMonth

Ws:

mov bx,Year

mov dl,Month

call far ptr display

again:

mov ah,0

int 16h

cmp ah,Esccode

je Exit

cmp ah,Up

je NextY

cmp ah,Down

je PreY

cmp ah,Left

je PreM

cmp ah,Right

je NextM

jmp again

NextY:

inc Year

jmp Ws

PreY:

dec Year

jmp Ws

NextM:

inc Month

cmp Month,12

jbe skip0

mov Month,1

inc Year

skip0:

jmp Ws

PreM:

dec Month

cmp Month,1

jae skip1

mov Month,12

dec Year

skip1:

jmp Ws

Exit:

mov ah,4ch

int 21h

;

GetYearMonth proc near

push ax

push cx

push si

push di

inputagain:

mov Year,0

mov Month,0

mov si,0

repeatY:

mov ah,1

int 21h

cmp al,0dh

je EndY

cmp al,20h

je EndY

cmp al,1bh

je ExitDos0

cmp al,30h

jb Err

cmp al,39h

ja Err

sub al,30h

mov temp[si],al

inc si

jmp repeatY

Err:

mov ah,9

lea dx,ErrMsg

int 21h

mov ah,2

mov dl,0dh

int 21h

mov dl,0ah

int 21h

jmp inputagain

EndY:

mov bx,10

mov di,si

mov si,0

NextYBit:

mov ah,0

mov al,temp[si]

mov count,di

sub count,si

dec count

mov cx,count

jcxz skipY

lopmul: mul bx

loop lopmul

skipY: add Year,ax

inc si

cmp si,di

jne NextYBit

;----------------------------------The year is put into [Year]

push dx

mov ah,2

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop dx

jmp skiplap

ExitDos0:

jmp ExitDos

skiplap:

mov si,0

repeatM:

mov ah,1

int 21h

cmp al,0dh

je EndMon

cmp al,20h

je EndMon

cmp al,1bh

je ExitDos

cmp al,30h

jb Err

cmp al,39h

ja Err

sub al,30h

mov temp[si],al

inc si

jmp repeatM

EndMon:

mov di,si

mov si,0

mov bl,10

NextMBit:

mov al,temp[si]

mov count,di

sub count,si

dec count

mov cx,count

jcxz skipM

lpmul: mul bl

loop lpmul

skipM: add Month,al

inc si

cmp si,di

jne NextMBit

;-------------------------The Month is put into [Month]

push dx

mov ah,2

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop dx

pop di

pop si

pop cx

pop ax

ret

ExitDos:

mov ah,4ch

int 21h

GetYearMonth endp

cseg ends

end start

#打印模块:

;

;入口参数:bx = Year dl=Month

;

public display

data segment

Year dw

Month db

leap db

weekstr db " MON TUR WEN THU FRI SAT SUN",’$’

fillblank db " $"

fillblank4 db " $"

fillblank3 db " $"

c db

y db

firstday db

temp db

MonthSize db

data ends

cseg segment

assume cs:cseg,ds:data

display proc far

push ds

mov ax,data

mov ds,ax

mov Year,bx

mov Month,dl

mov dx,0

xor bh,bh

mov ah,2

int 10h

mov ah,6

mov al,0

mov bh,01110000b

mov ch,0

mov cl,0

mov dh,24

mov dl,79

int 10h

mov ah,6

mov al,0

mov bh,01110100b

mov ch,0

mov cl,25

mov dh,24

mov dl,79

int 10h

call far ptr dispYM

lea dx,weekstr

mov ah,9

int 21h

mov ah,2

mov dl,0dh

int 21h

mov dl,0ah

int 21h

call GetMonthSize ;把当前月份的天数放到MonthSize

cmp Month,2

ja skip

add Month,12

dec Year

skip:

mov bl,100

mov ax,Year

div bl

mov c,al

mov y,ah

mov cl,2

mov bl,c

shr bl,cl ;int(c/4)

shl c,1 ;2c

sub bl,c

add bl,y

shr y,cl ;int(y/4)

add bl,y ;int(c/4)-2c+y+int(y/4)--->bl

inc Month

xor ah,ah

mov al,Month

mov dx,13

mul dx

mov cx,5

div cx

xchg ax,bx

cbw

xchg ax,bx

add bx,ax ;int(c/4)-2c+y+int(y/4)+int(13(m+1)/5)

mov ax,bx

mov cl,7

idiv cl

cmp ah,0

jG skipAdd

add ah,7

skipAdd:

mov bl,ah

mov firstday,bl

;--------------------------------计算出当前月份的第一天是星期几

mov cl,bl

mov ch,0

dec cl

jcxz skipF

FillB: mov ah,9

lea dx,fillblank

int 21h

loop FillB

skipF:

mov cl,1

disLop: call dispWeek ;日期已经放入cl

inc cl

inc bl

cmp bl,8

jb skipModle

mov bl,1

mov ah,2

mov dl,0dh

int 21h

mov dl,0ah

int 21h

skipModle:

cmp cl,MonthSize

jbe dislop

mov ah,2

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop ds

ret

display endp

;

GetMonthSize proc near

push ax

push dx

mov leap,0

mov ax,Year

mov ch,00000011b

and ch,al

mov bl,100

div bl

mov cl,ah

cmp ch,0

jne skipNLeap

cmp cl,0

jne skipLeap

mov ax,Year

mov bx,400

mov dx,0

div bx

cmp dl,0

je skipLeap

skipNLeap:

jmp gmsize

skipLeap:

inc leap

gmsize:

mov al,Month

cmp al,2

je return2

cmp al,8

jb skipInc

inc al

skipInc:

test al,1

jz returnEven

mov MonthSize,31

jmp return

returnEven:

mov MonthSize,30

jmp return

return2:

mov MonthSize,28

cmp leap,0

je return

inc MonthSize

return:

pop dx

pop bx

ret

GetMonthSize endp

;

dispWeek proc near

push cx

push bx

push ax

push dx

cmp cl,10

jae DoubleDig

lea dx,fillblank4

mov ah,9

int 21h

mov dl,cl

add dl,30h

mov ah,2

int 21h

jmp back

DoubleDig:

mov ch,10

mov ah,0

mov al,cl

div ch

mov cx,ax

mov ah,9

lea dx,fillblank3

int 21h

mov dl,cl

add dl,30h

mov ah,2

int 21h

mov dl,ch

add dl,30h

int 21h

back:

pop dx

pop ax

pop bx

pop cx

ret

dispWeek endp

;

dispYM proc far

push bx

push dx

mov ax,year

mov dh,10

xor si,si

next: div dh

mov cl,ah

mov ch,0

inc si

push cx

mov ah,0

cmp ax,0

jne next

mov cx,si

repeat: pop dx

mov ah,2

add dl,30h

int 21h

loop repeat

mov dl,0dh

mov ah,2

int 21h

mov dl,0ah

mov ah,2

int 21h

mov al,Month

mov ah,0

mov bl,10

div bl

mov cx,ax

mov dl,cl

mov ah,2

add dl,30h

int 21h

mov dl,ch

add dl,30h

int 21h

mov dl,0dh

mov ah,2

int 21h

mov dl,0ah

mov ah,2

int 21h

pop dx

pop bx

ret

dispYM endp

;

cseg ends

end

每周的第一天应为星期日。

星期制在我国正式使用是清末(1905年),但其来源却是中外时间文化的殊途同归。古人观天象计时间除了最明显的日、月二星外,还观测到太阳系中的另外五大行星,初步掌握了这七颗星出没时间及其运行规律。

这七星按日、金星、水星、火星、木星、土星、月的顺序“轮流值日”,就形成了最为原始的星期制。由此顺序也可看出,一周的第一天应为星期日。

相关内容解释:

古人把一昼夜分为12时段,并与12地支相对,每个时段是现在的2个小时,由于每个朝代所采用的历法不同,农历十一月初一、十二月初一和正月初一都曾做为一年的开始,子时(23时至次日1时)、丑时(1时至3时)、寅时(3时至5时)也都曾做为一天的开始。

现在使用的农历是我国古代使用时间最长、朝代最多的夏历,夏历新年开始的“一元复始”指的是正月初一寅时(3时至5时),而非零时。当然,阳历是现在世界上的通行历法,为了统计和应用上的方便,人们也就渐渐把农历的夜半定为一日之始,并得到官方承认。

我国古代有十二时辰计时制、百刻计时制等计时方法。十二时辰制把一昼夜等分为12段,与十二地支相对,每个时辰又分为初和正。百刻记时制来源于沙漏或水漏,把一昼夜24小时等分100刻,每刻约合现在的144分钟。

你是直接在数据库中查,还是在程序中查,如果是在程序中,你先计算出两个日期,然后再查。

如果是程序,那你用的是什么语言?

这里给你VB的代码:

d

=

"2009-2-6"

rq1

=

Cdate(year(d)

&

"-"

&

month(d)

&

"-1")

rq2

=

DateAdd("m",

1,rq1)

csql

=

"select

from

tablename

where

rq

>=

"

&

rq1

&

"

and

rq

<"

&

rq2

&

"

order

by

rq

ASC"

。。。

如果是Transact-SQL可以使用DATEPART(m,

date)

select

from

tablename

where

DATEPART(m,

rq)

=

DATEPART(m,"

&

d

&

")"

rq--是数据表中的字段,d--是已知日期

以上就是关于用c语言编写万年历,要求输出任意一年的某月,能显示出这个月的日历全部的内容,包括:用c语言编写万年历,要求输出任意一年的某月,能显示出这个月的日历、C语言..急急急急....、每个月的第一天是星期几等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9811917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存