c语言设计万年历
看看没人帮你,我来帮你吧,以下是我新写的,用了我自己原创的算法,完全不同于网上的程序,等于说是专门为你量身定制的。奉上程序:
#include <stdio.h>
#include <windows.h>
char *nameofmonth[12]={"january","february","march","april","may","june","july","august","september","october","november","december"};
char *weekday[7]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
int **leapyear (int year)
{
if(year%4==0&&year%100!=0||year%400==0)
{
return 1;//闰年返回1
}else
{
return 0;//平年返回0
}
}
int datecheck(int uyear,int umonth,int uday)//合法返回true,非法或超出范围返回false
{
if (uyear<1901||uyear>9999||umonth<1||umonth>12||uday<1||uday>31)
{
return 0;
}
if (umonth==4||umonth==6||umonth==9||umonth==11)
{
if (uday>30)
{
return 0;
}
}else if (umonth==2)
{
if (**leapyear(uyear))
{
if (uday>29)
{
return 0;
}
}else
{
if (uday>28)
{
return 0;
}
}
}
return 1;
}
int getdays (int year,int month,int day)
{
int sum=0;
if (datecheck(year,month,day)==0)
{
return -1;//日期有误
}
if(year>=1901)
{
int x=(int)(year/100);//世纪数
int y=x-(int)(x/4);//如果按4年一闰来算,y指的是比实际上多算的天数,在下面需要减去
if (month<=2&&month>0)
{
year--;//把1月、2月视为上一年的13月、14月(纯粹为了计算需要)
month+=12;
}
sum=(int)(365.25*(year-1900))+(int)(30.6*(month+1))+day-y-49;//以365.25(本来实际太阳年是365.2425天)来计算是为了计算按4年一闰的整数年总天数,加上月份天数再加上余下天数,减掉多闰天数,再减掉一个偏差值(多加的)
//月份以30.6天的平均值计算。最后减去的49,是多加的一个月以及其余相差天数的和,可得到1900年1月1日的积日为0
}
return sum;//返回距离1900年1月1日的总天数(积日)
}
int getdayofmonth(int month,int year)
{
int tmp_days=getdays(year,month,1);//本月积日
int dayofmonth=0;
month++;//下个月
if (month>12)
{
month=1;//遇到月份为12月的情况,月份为1,年份加1
year++;
}
dayofmonth=getdays(year,month,1);//下个月的积日
dayofmonth-=tmp_days;//下月1日的总天数(距离1900年1月1日的积日)减去当前月1日的总天数
return dayofmonth;//返回当前月总天数
}
int showcalendar(int year,int month,int day)
{
int i,j,count;
int jiri=0;//积日
int dayofweek=0;//星期
if (datecheck(year,month,day)==0)
{
printf("输入日期有误!\r\n");//日期不合法或超出范围,年历从1901年开始
return 0;
}
printf("\t %d %s\r\n",year,nameofmonth[month-1]);
printf("--------------------------------------\r\n");
printf(" sun mon tue wed thu fri sat\r\n");
printf("--------------------------------------\r\n");
jiri=getdays(year,month,1);//获取距离1900年1月1日的总天数
dayofweek=(1+jiri)%7;//月首星期,因为1900年1月1日星期一
count=getdayofmonth(month,year);
for(i=0;i<dayofweek;i++)
{
printf(" ");//填充前面空格
}
for(i=1,j=dayofweek;i<=count;i++,j++)
{
if (i<10)
{
printf(" %d",i);
}else
{
printf(" %d",i);
}
if((j+1)%7==0)
{
if (i!=count)
{
printf("\r\n");//满7天,换行
}
}
}
printf("\r\n--------------------------------------\r\n\r\n");
return 1;
}
int main()
{
int year,month,day,ncho**e=0;
int totaldays=0;
while (1)//主循环
{
printf("******************欢迎使用万年历********************\r\n");
printf("$ 菜单 $\r\n");
printf("$ 1.闰年判断 2.星期计算 $\r\n");
printf("$ $\r\n");
printf("$ 3.月历查询 4.打印整年日历 $\r\n");
printf("$ $\r\n");
printf("****************************************************\r\n");
printf("输入对应的序号进行相关操作:cho**e>");
scanf("%d",&ncho**e);
switch (ncho**e)
{
case 1:
printf("请输入要判断的年份:year>");
scanf("%d",&year);
if (year<1900||year>9999)
{
printf("输入年份超出范围!");
break;
}
if (**leapyear(year)==1)
{
printf("%d年是闰年!\r\n\r\n",year);
}else
{
printf("%d年不是闰年!\r\n\r\n",year);
}
break;
case 2:
printf("请输入要判断的日期:year month day>");
scanf("%d %d %d",&year,&month,&day);
totaldays=getdays(year,month,day);
printf("%d年%d月%d日是%s\r\n\r\n",year,month,day,weekday[(totaldays+1)%7]);
break;
case 3:
printf("请输入要显示的月份:year month>");
scanf("%d %d",&year,&month);
showcalendar(year,month,1);
break;
case 4:
printf("请输入要判断的年份:year>");
scanf("%d",&year);
for (month=1;month<=12;month++)
{
showcalendar(year,month,1);
}
break;
default:
printf("无效的菜单项!\r\n");
break;
}
system("pause");
system("cls");
}
return 0;
}
佚名
2024-06-04 22:10:42
类似问题(10)
-
佚名2024-06-04 10:49:53
问c语言编写万年历~~速度
答/*c语言编程万年历要求输入年月,判断是否闰年;输入年月日,判断星期几;输入年份,打出12个月的月历;输入年份,月份,打印出本月日历;要求用多个函数实现。*/#...
-
佚名2024-06-04 11:36:58
问c语言 万年历的程序设计
答#include <windows.h> #include <winnt.h> #include<iostream>#include<i...
-
佚名2024-06-04 20:03:26
问万年历查询程序c语言代码
答刚好有现成的,是之前写的,原创的代码和算法。部分细节自行修改吧。下载:olaf
-
佚名2024-06-04 08:00:00
问【加急】用c语言做万年历
答分数太少了吧,呵呵除了农历,都比较好做功能,用一个printf打印功能目录,switch调用子函数来完成,要是多次,加一个大循环即可日历显示,这个比较简单,就是...
-
佚名2024-06-04 08:00:00
问用c语言编写万年历
答写万年历程序,您需要先了解万年历的特点下面是万年历的特点(复制粘贴的):1. 平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2...
-
佚名2024-06-04 08:00:00
问c#窗体应用设计一个简易的万年历程序
答有现成的控件还自己做干嘛
-
佚名2024-06-04 08:00:00
问用c语言编写万年历。
答#include "stdio.h"void main(){ long days; int j,i,s,mdays,flag,yy,y; printf("...
-
佚名2024-06-04 08:00:00
问【难】用c语言打印一个万年历
答#include <iostream.h>#include <time.h>#include <stdio.h>#include <st...
-
佚名2024-06-04 08:00:00
问c语言万年历问题
答你在第一个for循环里加一个prnt("\n");不就好了、、、我不知道你的month数组里是怎么存的~你得算好每个月第一天是星期几,然后填好空格、建议你的输入...
-
佚名2024-06-04 08:00:00
问急!!!用c语言编写万年历!!!!!!!!!
答#include <stdio.h>#include <string.h>#include <ctype.h>long year;int mo...
风水
起名
网名
- 1 白衫_网名
- 2 电灯的网名
- 3 个性qq网名女生
- 4 带狼字的霸气女生网名
- 5 网名九歌的意思
- 6 李宇春昵称
- 7 好友qq昵称莫名其妙红色不是会员
- 8 给男生取比较亲切的昵称
- 9 淘宝昵称怎么不隐藏
- 10 抖音修改粉丝团群昵称
说说
- 1 关于地狱的个性签名
- 2 qq绝交签名
- 3 为什么突然qq改不了签名
- 4 脚很痛的说说
- 5 记住说说
- 6 薛之谦歌词的说说
- 7 所有的付出说说
- 8 说说拍破釜沉舟这个成语的意思
- 9 介绍蔻琦护肤品的说说
- 10 与君相约的说说