万年历编程
① 万年历C语言编程全过程
#include<stdio.h>
#include<windows.h>
void main()
{
char ans;
do{
int year,month;//月份和年份
int days = 0;//月份总天数
int sum = 0;//天数总和
int first;//月份第一天
int month_sum[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
printf("请输入年份:");
scanf("%d",&year);
printf("请输入月份:");
scanf("%d",&month);
do
{
if(month < 1 || month > 12)
{
printf("输入错误。请重新输入:");
scanf("%d",&month);
}
else
{
break;
}
}while(1);
//判断离1990-1-1多少天。
for(int i = 1900; i < year; i++)
{
if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
{
sum += 366;
}
else
{
sum += 365;
}
}
//判断当年是不是闰年
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
month_sum[1] = 29;
}
//将月份总天数和年份总天数加起来
for(i = 1; i < month; i++)
{
sum += month_sum[i-1 ];
}
sum += 1;
//算出月份的第一天
first = sum % 7;
//输入格式
printf("%d年%d月\n",year,month);
printf("\n------------------------------------------------------\n");
printf("日 一 二 三 四 五 六\n");
switch(first)
{
case 0:
break;
case 1:
printf(" ");
break;
case 2:
printf(" ");
break;
case 3:
printf(" ");
break;
case 4:
printf(" ");
break;
case 5:
printf(" ");
break;
case 6:
printf(" ");
break;
}
for(i = 1; i <= month_sum[month-1]; i++)
{
printf("%d",i);
if((first+i) % 7 == 0)
{
printf("\n");
}
else
{
printf("\t");
}
}
printf("\n");
printf("继续?(y):");
fflush(stdin);
ans = getchar();
system("cls");
if(ans != 'Y' && ans != 'y')
{
break;
}
}while(1);
}
刚刚做好的,望采纳,可以实现循环输入。
另:每月的第一天是距1900年的总天数除以7的余数来决定的,
② 万年历查询程序 功能要求: (1)提供菜单方式选择 (2)输入年份、月份、日期,计算得到的是这一天
计算得到的这一天是星期几吗?? 还是?/* welcome to use the WanNianLi system! */
#include<stdio.h>
#include<stdlib.h>
char* month_str[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int leap (int year)//判断闰年
{
if(year%4==0&&year%100!=0||year%400==0)
return 1;
else return 0;
}
int month_day(int year,int month) //判断这一个月有多少天
{
int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31}; //初始化每个月的天数
if(leap(year)&&month==2 )
return 29;
else
return(mon_day[month-1]);
}
int firstday(int year,int month,int day)//判断这一个月的第一天是星期几
{
int c=0;
float s;
int m;
for(m=1;m<month;m++)
c=c+month_day(year,m);
c=c+day;
s=year-1+(float)(year-1)/4+(float)(year-1)/100+(float)(year-1)/400-40+c;
return ((int)s%7);
}
int PrintAllYear(int year)/*print the all year*/
{
int a,b;
int i,j=1,n=1,k;
for(k=1;k<=12;k++)
{
j=1,n=1;
b=month_day(year,k);
a=firstday(year,k,1);
printf("\n\n%s(%d)\n",month_str[k-1],k);
printf(" Sun Mon Tue Wed Thu Fri Sat \n**************");
if(a==7)
{
for(i=1;i<=b;i++)
{
printf("%4d",i);
if(i%7==0)
{
printf("**************\n**************");
}
}
}
if(a!=7)
{
while (j<=4*a)
{
printf(" ");
j++;
}
for(i=1;i<=b;i++)
{
printf("%4d",i);
if(i==7*n-a)
{
printf("**************\n**************");
n++;
}
}
}
printf("**************\n");
}
return 1;
}
int main()
{
int option,da;
char ch;
int year,month,day;
while(1)
{
printf("\n请选择你所需要的服务:\n");
printf("\n输入1求某个日期对应的星期");
printf("\n输入2结束程序\n");
scanf("%d",&option);
switch(option)
{
case 1:
while(1)
{
printf("\nPlease input the year,month and day(XXXX,XX,XX):");
scanf("%d,%d,%d,%c",&year,&month,&day);
da=firstday(year,month,day);
printf("\n%d-%d-%d is %s,do you want to continue?(Y/N)",year,month,day,week[da]);
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case 2:
fflush(stdin);
printf("Are you sure?(Y/N)");
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
break;
default:
printf("\nError:Sorry,there is no this service now!\n");
break;
}
}
return 0;
}