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,在里面输入年份后回车就完成了。
除了天数差计算,基本上是完成了你所提出的功能(天数差计算其实已经提供了年内序数计算方方法,可以在此基础上完善即可)。包含星期计算、公历转农历、农历转公历、节气查询。数据与算法均为原创,绝非网上复制而来。附件中有源代码,同时附带农历数据提取工具,可提取1600到7000年之间的任意年份区间,提取后的数据为压缩数据,占用空间小,同时数据包含数九、三伏、入梅和出梅,非常适合写一份完整的万年历。
部分核心算法函数如下:
//判断闰年,参数:年份,返回值:0-平年,1-闰年int IsLeapYear(int iYear)
//计算日期在年内的序数,参数:年,月,日,年内序数,返回值:0-失败,1-成功
int GetDaysNumInYear(int iYear, int iMonth, int iDay,int *nDays)
//从年内序数计算月、日,参数:年,年内序数,月,日,返回值:0-失败,1-成功
int GetDateFromDays(int iYear, int nDays, int *iMonth, int *iDay)
//检验年、月、日的合法性,参数:年,月,日,返回值:0-失败,1-成功
int DateCheck(int iYear,int iMonth,int iDay)
//获取农历新年的公历年内序数,参数:农历年,返回值:农历新年的公历年内序数
int LunarGetNewYearOrdinal(int iLunarYear)
//获取农历月的天数,参数:农历年,农历月,是否为闰月,返回值:该农历月的天数,为0代表参数无效
int LunarGetDaysofMonth(int iLunarYear,int iLunarMonth,int IsLeapMonth)
//展开大小月数据表(某一年的),参数:农历年,从上一年十一月开始到当前年份(闰)十二月的每月天数,返回值:0-失败,1-成功
int LunarExpandDX(int iLunarYear,int iDayOfMonth[15])
//获取农历某一年的闰月情况,参数:农历年,返回值,该年的闰月月份,0表示无闰月
int LunarGetLeapMonth(int iLunarYear)
//公历转农历,参数:公历年、月、日,农历年、月、日,是否为闰月,返回值:0-失败,1-成功
int Gongli2Nongli(int iYear,int iMonth,int iDay,int *iLunarYear,int *iLunarMonth,int *iLunarDay,int *iIsLeapMonth)
//农历转公历,参数:家历年、月、日,是否为闰月,公历年、月、日,返回值:0-失败,1-成功
int Nongli2Gongli(int iLunarYear,int iLunarMonth,int iLunarDay,int iIsLeapMonth,int *iYear,int *iMonth,int *iDay)
//得到指定年份的节气信息,首个是小寒
int GetJieQi(int iYear,int uMonth,unsigned int uJieQi[2])
//计算星期
unsigned int GetDayOfWeek(int iYear,int uMonth,int uDay)
源代码请看
吧。提取码:ooj7网上找的部分带我,我又修改了一下,现在基本满足lz的要求。手头没有Wintc用vc测的,不过没用到什么vc特有的东西,应该可以的。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void DayOfWeek()
{
int rtnDay
int y,m,d
char ch
while (1)
{
printf("请输入年月日(xxxx,xx,xx): ")
scanf("%d,%d,%d", &y, &m, &d)
fflush(stdin)
rtnDay = (3*y-(7*(y+(m+9)/12))/4+(23*m)/9+d+17-((y+(m<3?-1:0))/100+1)*3/4) % 7
printf("%04d年%02d月%02d日 是 星期%d\n", y, m, d, rtnDay?rtnDay:7)
printf("继续查询(y/n)")
ch = getchar()
if(ch != 'y' &&ch != 'Y')
break
}
}
void GetMonth(int D, int md, int n)
{
int N ,m,d,y,c,Wd
int i,maxday,i1
if(md>=13||md<=0)
printf("HAVE WRONG!")
else
{
for(i1=0md++,i1++)
{
if(md==0)
{
md=12
D-=1
}
else
if(md==13)
{
md=1
D+=1
}
m=md
printf("\n============%d,%2d============\n",D,md)
if(0<m&&m<=12)
{
switch(m)
{
case 1:maxday=31break
case 2:if(D%4==0&&D%100!=0||D%400==0)
maxday=29
else
maxday=28
break
case 3:maxday=31break
case 4:maxday=30break
case 5:maxday=31break
case 6:maxday=30break
case 7:maxday=31break
case 8:maxday=31break
case 9:maxday=30break
case 10:maxday=31break
case 11:maxday=30break
case 12:maxday=31break
default:printf("HAVE WRONG")
}
if(0<m&&m<=2)
{
N=D-1
m=m+10
}
else
{
N=D
m=m-2
}
c=N/100
y=N%100
Wd=((1+(13*m-1)/5+y+y/4+c/4-2*c)%7+7)%7
printf(" SUN MOU TUE WED TUR FRI SAT\n")
for(i=0i<Wdi++)
printf("%4c",' ')
for(d=1d<=maxdayd++)
{
printf("%4d",d)
Wd=(Wd+1)%7
if(Wd==0)
printf("\n")
}
}
else
printf("HAVE WRONG!")
if(i1==n)
break
}
}
}
void MonthOfYear()
{
char ch
int y, m
while (1)
{
printf("请输入年月(xxxx,xx): ")
scanf("%d,%d", &y, &m)
fflush(stdin)
GetMonth(y, m, 0)
printf("\n继续查询(y/n)")
ch = getchar()
if(ch != 'y' &&ch != 'Y')
break
}
}
void GetYear()
{
char ch
int y
while (1)
{
printf("请输入年: ")
scanf("%d", &y)
fflush(stdin)
GetMonth(y, 1, 11)
printf("\n继续查询(y/n)")
ch = getchar()
if(ch != 'y' &&ch != 'Y')
break
}
}
int main()
{
char ch
while(1)
{
system("cls")
printf("1.查询星期\n")
printf("2.查询月份\n")
printf("3.显示一年\n")
printf("4.退出程序\n")
ch = getchar()
fflush(stdin)
switch(ch)
{
case '1':
DayOfWeek()
break
case '2':
MonthOfYear()
break
case '3':
GetYear()
break
case '4':
printf("是否退出(y/n)")
ch = getchar()
fflush(stdin)
if(ch == 'y' || ch == 'Y')
exit(0)
break
}
}
}
另外,虚机团上产品团购,超级便宜
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)