#include<stdio.h>
#include<stdlib.h>
void put(void);
int A(int year);
int B(int year,int month,int date);
int week(int day2);
void show(int week);
void rili(int day,int date,int year,int month);
int before(int year,int month);
int main()
{
int year,month,date,day0,day1,sum,week0; //day0接受输入年之前一共多少天 ,day1今年多少天
A: printf("请输入1900年以后的年份:");
scanf("%d",&year);
if(year<1900)
{
printf("请输入1900年以后的年份,请重新输入\n");
goto A;
}
B: printf("请输入月份:");
scanf("%d",&month);
if(month>12)
{
printf("月份输入有误,请重新输入\n");
goto B;
}
C: printf("请输入几号:");
scanf("%d",&date);
if(date>31) //不准确,先简单写一下
{
printf("日期输入有误,请重新输入\n");
goto C;
}
system("cls");
A(year);
B(year,month,date);
day0=A(year);
day1=B(year,month,date);
sum=day0+day1;
week0=week(sum);
printf("\n\n %d年%d月%d日 ",year,month,date);
//printf("!!!sum==%d",sum);
show(week0);
printf("\n");
rili(sum,date,year,month);
return 0;
}
/**********************************
*函数名:put
*返回值类型: i
*形参: 无
*函数描述: 输入年月日,再把参数传入 yunSuan函数
***********************************/
//void put(void)
//{
// int year,month,date;
// printf("请输入年份:");
// scanf("%d",&year);
// printf("请输入月份:");
// scanf("%d",&month);
// printf("请输入几号:");
// scanf("%d",&date);
// A(year,month,date);
// B(year,month,date);
//
//}
/**********************************
*函数名:A
*返回值类型: int tianshu_0
*形参: int year
*函数描述:计算输入的年之前一共有多少天
*备注:1900年1月1日星期一
***********************************/
int A(int year)
{
int year_0=1900,month_0=1,date_0=1,a,tianshu_0=0;
for(year_0=1900;year_0<year;year_0++)
{
if((year_0%4==0 && year_0%100!=0) || (year_0%400==0))
{
a=366;
}
else
{
a=365;
}
tianshu_0=tianshu_0+a;
}
return tianshu_0;
}
/**********************************
*函数名:B
*返回值类型: int tianshu_1
*形参: int year,int month,int date
*函数描述:计算输入的年一共有多少天
*
***********************************/
int B(int year,int month,int date)
{
int tianshu_1=0,a,i;
if((year%4==0 && year%100!=0) || (year%400==0))
{
for(i=1;i<month;i++)
{
if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
{
a=31;
}
else if(i==4 || i==6 || i==9 || i==11 )
{
a=30;
}
else if(i==2)
{
a=29;
}
tianshu_1 =tianshu_1 +a;
}
}
else
{
for(i=1;i<month;i++)
{
if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
{
a=31;
}
else if(i==4 || i==6 || i==9 || i==11 )
{
a=30;
}
else if(i==2)
{
a=28;
}
tianshu_1=tianshu_1+a;
}
}
return tianshu_1+date;
}
/**********************************
函数功能:计算星期几
*函数名:week
*返回值类型: int week
*形参: day2
*函数描述:一共多少天取余7
*
***********************************/
int week(int day2) //day2=day0+day1
{
int week;
week=day2%7;
//printf("***week==%d\n",week);
return week;
}
/**********************************
函数功能:显示中文星期几
*函数名:show
*返回值类型: 无
*形参: week
*函数描述:一共多少天取余7
*
***********************************/
void show(int week)
{
if(week==1)
{
printf(" 星期一\n");
}
else if(week==2)
{
printf(" 星期二\n");
}
else if(week==3)
{
printf(" 星期三\n");
}
else if(week==4)
{
printf(" 星期四\n");
}
else if(week==5)
{
printf(" 星期五\n");
}
else if(week==6)
{
printf(" 星期六\n");
}
else if(week==0)
{
printf(" 星期日\n");
}
}
/**********************************
函数功能:这年这月一共多少天
*函数名:tian
*返回值类型: int year,int month
*形参: 无
*函数描述:
***********************************/
int tian(int year,int month)
{
int i,a;
i=month;
if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
{
a=31;
return a;
}
else if(i==4 || i==6 || i==9 || i==11 )
{
a=30;
return a;
}
else if(i==2)
{
if((year%4==0 && year%100!=0) || (year%400==0))
{
a=29;
return a;
}
else
{
a=28;
return a;
}
}
}
/**********************************
函数功能:显示日历
*函数名:rili
*返回值类型: 无
*形参: int day,int date,int year,int month
*函数描述:
*
***********************************/
void rili(int day,int date,int year,int month)
{
int i,j,k,f,g,a=1,yu1,b,monthDay; //k是输入这个月的1号
i=day-date; //除去输入月份之前一共多少天
j=i%7; //输入月份的前一个月的最后一天是星期几
monthDay=tian(year,month);
//printf("monthDay=%d\n",monthDay);
// printf("j=%d\n",j);
// printf("day=%d\n",day);
// printf("date=%d\n",date);
printf(" 一 二 三 四 五 六 日\n\n");
// while(a<=j)
// {
// if(j==7)
// {
// break;
// }
//
// //printf(" ");
// a++;
// }
for(f=tian(year,month-1)-j+1;f<=tian(year,month-1);f++)
{
if(j==7)
{
break;
}
printf(" %d",f);
}
for(k=1;k<=monthDay;k++)
{
printf(" %d",k);
if((k+j)%7==0)
{
printf("\n");
}
}
yu1=before(year,month);
for(g=1;g<=7-yu1;g++)
{
if(yu1==0)
{
break;
}
printf(" %d",g);
}
}
/**********************************
函数功能:包含这个月之前一共多少天
*函数名:before
*返回值类型:int
*形参: int year,int month
*函数描述:
*
***********************************/
int before(int year,int month)
{
int a,tian2,day,yu,month_0;
a=A(year);
for(month_0=1;month_0<=month;month_0++)
{
day=tian(year,month_0);
tian2=tian2+day;
}
yu=(a+tian2)%7;
return yu;
}
日历代码 (C语言)
这篇文章详细介绍了如何使用C语言编写一个程序,用户可以输入年份、月份和日期,程序会计算总天数、确定星期几并输出日历。涉及到了闰年的判断、各个月份天数的计算以及日期与星期的转换。
摘要由CSDN通过智能技术生成