C语⾔万年历查询年历⽉历星期(⽇期)循环查询(2020319更新)
C语⾔万年历
很多⼈都有做过万年历,于是想⾃⼰写⼀个。
万年历是我们⽇常⽣活中经常⽤到的⼀种⾮常实⽤的⼯具。
由于⼯作繁忙,⼈们常常忘记某⼀天是星期⼏,想要看看某个⽉的⽇历,或者⼀整年的。我把⾃⼰的想法实现如下:
1、任意年份⽇历的整体输出;
2、任意年任意⽉⽇历的单独输出;
3、任意年⽉⽇查询星期⼏;
4、按任意键退出;
5、循环查询,直到选择退出;
ps:
以上星期⼏的推算只适合于1582年10⽉15⽇之后的情形(当时的罗马教皇将恺撒⼤帝制订的儒略历修改成格⾥历,即今天使⽤的公
历)。
先来⼀些运⾏截图:
输⼊错误
输出全年的⽇历
任意年任意⽉⽇历的单独输出
**任意年⽉⽇查询星期⼏**
退出程序
ok截图展⽰完了
双⼿奉上全部代码
算法实现还是挺容易的,调整格式,修改代码很累⼈!
2019年6⽉22⽇
重新调整输出格式(当⽉1⽇不是星期⽇的时候对齐问题,⽉末不是星期6末尾#对齐);
调整查询某⽉⽇历时输⼊⽅式并对输⼊⽉份数值做判断;
调整循环⽅式;
2020年3⽉19⽇
修改星期显⽰,调整函数位置
修改后代码如下:
/*万年历输出⼩程序*/
#include"stdio.h"
#include"stdlib.h"
intdateofmonth[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
char*month1[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
char*month2[]={"⼀⽉","⼆⽉","三⽉","四⽉","五⽉","六⽉","七⽉","⼋⽉","九⽉","⼗⽉","⼗⼀⽉","⼗⼆⽉"};
//char*week[7]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};
char*week[7]={"sun","mon","tue","wed","thu","fri","sat"};
/*函数声明*/
intpyear(intn);
intxingqi(intyear,intmonth,intdata);
voidrili(intyear,intmonth_a,intmonth_b);
voidxq();
main()
{
inti,year,month;
printf("*********万年历⼩程序*********nn");
printf("请选择您要执⾏的操作(0-3)n");
printf("n0:退出n1:查询某年⽇历n2:查询某⽉⽇历n3:查询某⽇星期n");
printf("n您选择要执⾏的操作是:");
scanf("%d",&i);
printf("n");
switch(i)
{
ca0:exit(i);break;
ca1:printf("请输⼊要查询的年份:nn");
scanf("%d",&year);
rili(year,1,12);break;
ca2:printf("请输⼊要查询的年份⽉份(20196):nn");
scanf("%4d%2d",&year,&month);
if(month>0&&month<13)rili(year,month,month);
el{printf("nnt输⼊错误,请重新输⼊nnnnn");
main();
}
break;
ca3:xq();break;
default:
printf("nnt输⼊错误,请重新输⼊nnnn");
main();
}
}
intpyear(intn)
{if(n%4==0&&n%100!=0||n%400==0)return1;
elreturn0;
}
intxingqi(intyear,intmonth,intdata)//返回某年某⽉某⽇是星期⼏
{intd=0,i,j;
i=pyear(year);
for(j=0;j
d+=dateofmonth[i][j];
d+=data;
//intweekday=((year-1)+(year-1)/4-(year-1)/100+(year-1)/400+d)%7;
//returnweekday==0?7:weekday;
return((year-1)+(year-1)/4-(year-1)/100+(year-1)/400+d)%7;
}
voidrili(intyear,intmonth_a,intmonth_b)
{
inti,j,k,mlen,n,fweek;
printf("nnnt———————————%d年⽇历———————————nnn",year);
for(i=month_a-1;i
{
fweek=xingqi(year,(i+1),1);
mlen=dateofmonth[pyear(year)][i];
printf("t%-8sttttt%6sn",*(month1+i),*(month2+i));
printf("t______________________________________________________nt");
for(j=0;j<7;j++)
printf("%st",*(week+j));
printf("nn");printf("t#");
if(fweek>0)
{for(n=0;n
for(k=1;k<=mlen;k++)
{
if(fweek==7)
{printf("nt#");fweek=0;}
if(fweek==6)
printf("%2d#",k);
elprintf("%2dt",k);
fweek++;
}
if(fweek<6)//以下部分处理⽉末不是星期6的情况下输出格式
{
while(fweek++!=6)printf("t");
printf("#");
}
elif(fweek==6)printf("#");//⾄此⽉末处理完毕
printf("nt______________________________________________________n");
printf("nnnnn");
}
main();
}
voidxq()
{
inty,m,d;
printf("请输⼊要查询的⽇期年⽉⽇(2019614):");
scanf("%d%d%d",&y,&m,&d);
char*weekday2[]={"⽇","⼀","⼆","三","四","五","六"};//星期中⽂
printf("nn查询结果如下:nnt%-5d年%3d⽉%3d⽇t星期%snnnnn",y,m,d,weekday2[xingqi(y,m,d)]);
main();
}
本文发布于:2022-11-13 21:48:48,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/13541.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |