请求帮忙编写这段c语言程序,完成后联系我给我看一下截图,满意后钱立刻到账。
联系方式:QQ1198736195
微信:Hearbeat021124
也可以私我
你可以参考一下,希望采纳
#include <stdio.h>
#include <math.h>
int welcome(); //显示欢迎界面
int function1(); //搜索某年的年历或某月的日历
int function2(); //查询历史上的某日为星期几
void function3(); //判断历史上某年是否为闰年
void function4(); //查询历史上某月的最大天数
void searchhead(int year,int month); //打印月历的表头
int leapyear(int year); //判断是否为闰年
int monthnum(int year,int month); //查看哪个月份有多少天
int week(int year,int month,int day); //根据蔡勒公式计算星期几
int nowyear(); //获取系统的年份
int nowmonth(); //获取系统的月份
//主函数
int main()
{
int select; //用于接收用户的选择
char ch;
while(1)
{
select = welcome();
//用if语句对用户的选择进行判断后执行相应功能
if(select == 1)
{
function1();
}
else if(select == 2)
{
function2();
}
else if(select == 3)
{
function3();
}
else if(select == 4)
{
function4();
}
else if(select == 0)
{
printf("感谢您的使用,祝您生活愉快!\n");
break;
}
else
{
printf("您的输入有误,请重新输入!\n");
}
}
return 0;
}
//显示欢迎界面的函数
int welcome()
{
int select;
//用printf语句打印出欢迎界面
printf("\n\n\t\t\t<--欢迎使用万年历-->\n\n");
printf("\t\t****************************************\n");
printf("\t\t请选择要使用的功能:\n\n");
printf("\t\t\t1.搜素某年的年历或某月的日历\n");
printf("\t\t\t2.查询历史上某日为星期几\n");
printf("\t\t\t3.判断历史上某年是否为闰年\n");
printf("\t\t\t4.查询历史上某月的最大天数\n");
printf("\t\t\t0.退出\n\n");
printf("\t\t****************************************\n");
printf("\t\t\t请选择<1,2,3,4,0>:");
scanf("%d", &select) ;
printf("\n");
return select;
}
//打印月历的表头的函数
void searchhead(int year,int month)
{
printf("\t%d年%d月\n",year,month);
printf("\t***************************************************\n") ;
printf("\t日\t一\t二\t三\t四\t五\t六\n");
}
//查看哪个月份有多少天的函数
int monthnum(int year,int month)
{
int a1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int a2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
if(leapyear(year)==1)
{
return(a2[month]);
}
else
{
return(a1[month]);
}
}
//功能一:搜素某年的年历或某月的日历
int function1()
{
int year = 0, month = 1, i, j, spacenum, count;
printf("-----搜素某年的年历或某月的日历-----\n\n");
//如果输入的年份小于等于0,就判定为无效年份,提示用户重新输入
//运用do...while循环,只要用户输入不对就一直重新输入,输入正常就执行后面的语句
do
{
//判断输入年份是否小于等于0
if(year <= 0)
{
printf("\t系统提示:您输入了错误的年份请从新输入...\n");
}
//提示用户重新输入
printf("\t请输入要查看的年份:");
scanf("%d", &year);
printf("\n");
} while(year <= 0);
//同理,如果输入的月份不是正常范围,就判定为无效月份,提示用户重新输入
do
{
//判断输入月份是否在1月和12月之间,或者是0(0表示查看年历)
if(month < 0 || month > 12)
{
printf("\t系统提示:您输入了错误的月份请从新输入...\n");
}
//提示用户重新输入
printf("\t请输入查看%d年的第几月,若想查看%d年年历请输入0:", year, year);
scanf("%d", &month);
printf("\n");
} while(month < 0 || month > 12);
//查看1-12月中某个月的日历
if(month != 0)
{
searchhead(year,month) ; //首先打印日历的表头
spacenum = week(year,month,1); //调用week函数计算日历前面有几天是空的
//如果空的天数不是7天,那就按空几天打印几个间隔
if(spacenum != 7)
{
for(i = 1;i <= spacenum;i++)
{
printf("\t ");
}
}
//查看哪个月份有多少天后,循环打印出日历
count = spacenum;
for(i = 1;i <= monthnum(year,month);i++)
{
printf("\t%d ",i);
count++;
//如果一行打印了7天,就换行 (遇到 7的倍数就换行)
if(count%7 == 0)
{
printf("\n");
}
}
}
//查看输入年份的年历
if(month == 0)
{
for(j=1;j<=12;j++)
{
searchhead(year,j); //打印日历的表头
spacenum = week(year,j,1); //调用week函数计算日历前面有几天是空的
//如果空的天数不是7天,那就按空几天打印几个间隔
if(spacenum != 7)
{
for(i = 1;i <= spacenum;i++)
{
printf("\t ");
}
}
//查看哪个月份有多少天后,循环打印出日历
count = spacenum;
for(i = 1;i <= monthnum(year,j);i++)
{
printf("\t%d ",i);
count++;
//如果一行打印了7天,就换行
if(count%7 == 0)
{
printf("\n");
}
}
printf("\n\n");
}
}
}
//根据蔡勒公式计算星期几
int week(int year,int month,int day)
{
int w ,c,y;
if(month == 1)
{
month = 13;
year = year - 1;
}
if(month == 2)
{
month = 14;
year = year - 1;
}
y = year % 100;
c = (year/1000) * 10 + (year/100%10);
if(y == 0)
{
c=c-1;
}
//floor函数,其功能是向下取整
w = y + floor(y/4) + floor(c/4)-2*c + floor(26*(month+1)/10.0) + day - 1;
while(w < 0)
{
w = w + 7;
}
if(w % 7 == 0)
{
return 7;
}
return w%7;
}
//功能二:查询历史上某日为星期几
int function2()
{
int year = 0,month = 1,day = 1;
printf("-----查询历史上某日为星期几-----\n");
printf("\n");
//如果输入的年份小于等于0,就判定为无效年份,提示用户重新输入
do
{
//判断输入年份是否小于等于0
if(year <= 0)
{
printf("\t系统提示:您输入了错误的年份请从新输入...\n");
}
//提示用户重新输入
printf("\t请输入要查询的年份:");
scanf("%d",&year);
printf("\n");
} while(year <= 0);
//如果输入的月份不是正常范围,就判定为无效月份,提示用户重新输入
do
{
if(month < 1 || month > 12)
{
printf("\t系统提示:您输入了错误的月份请从新输入...\n");
}
printf("\t请输入%d年的第几月:",year);
scanf("%d",&month);
printf("\n");
} while(month < 1 || month > 12);
//如果输入的日期不是正常范围,就判定为无效日期,提示用户重新输入
do
{
//日期必须在 1到 31之间
if(day < 1 || day > 31)
{
printf("\t系统提示:您输入了错误的日期请从新输入...\n");
}
printf("\t请输入%d年%d月的第几天:",year,month);
scanf("%d",&day);
printf("\n");
} while(day < 1 || day > 31);
////调用week函数查看所查日期是星期几
printf("\t您查询的%d年%d月%d号是星期%d\n\n",year,month,day,week(year,month,day));
}
//判断是否为闰年的函数
int leapyear(int year)
{
//是闰年
if(year%4 == 0 && year%100 != 0 || year%4 == 0 && year%400 == 0)
{
return 1;
}
else //不是闰年
{
return 0;
}
}
//功能三:判断历史上某年是否为闰年
void function3()
{
int year = 0;
printf("-----判断历史上某年是否为闰年-----\n");
do
{
//判断年份是否在正常范围
if(year <= 0)
{
printf("\t系统提示:您输入了错误的年份请从新输入...\n");
}
printf("\t请输入要查询的年份:");
scanf("%d",&year);
printf("\n");
} while(year <= 0);
//调用leapyear函数判断是否为闰年
if(leapyear(year) == 1)
{
printf("\t您查询的%d年是闰年\n\n",year);
}
else
{
printf("\t您查询的%d年不是闰年\n\n",year);
}
}
//功能四:查询某月的最大天数
void function4()
{
int year = 0,month = 1,day = 0,i;
int a[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31}; //保存闰年的月份天数
int b[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //保存不是闰年的月份天数
printf("-----查询某月的最大天数-----\n");
printf("\n");
//判断用户输入年份是否正常
do
{
if(year <= 0)
{
printf("\t系统提示:您输入了错误的年份请从新输入...\n");
}
printf("\t请输入要查询的年份:");
scanf("%d",&year);
printf("\n");
} while(year <= 0);
//判断用户输入月份是否正常
do
{
if(month < 1 || month > 12)
{
printf("\t系统提示:您输入了错误的月份请从新输入...\n");
}
printf("\t请输入要查询%d年的第几月:",year);
scanf("%d",&month);
printf("\n");
} while(month < 1 || month > 12);
//判断是否是闰年,以此来确定月份的天数
if(leapyear(year) == 1)
{
day = a[month];
}
else
{
day = b[month];
}
printf("\t您查询的%d年%d月的最大天数有%d天\n",year,month,day);
}
只限c语言?
结果如图,满意的话可以私我,要进行修改也可
公元1年1月1日开始就离谱,1582年10月可是少了整整10天
运行结果如下:
1900年之前的日期测试:计算星期几(背景图是百度搜索的日期)
2022年5月24日的日期测试:计算星期几
闰年判断:
某月的最大天数:
满意的话私信我。