?? ten thousand calendars.cpp
字號:
//萬年歷
#include"stdio.h"
#include"conio.h"
int caculate(int);
void print(int,int,int,long);
int leap(int);
int le[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; /*存儲閏年月份信息的全局數(shù)組*/
int ping[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; /*存儲平年信息的全局數(shù)組*/
main()
{ int year,month;
int i,j;
long sum=0;
int flag;
char ch;
int u=1;
int p=1;
printf("if you want to continue print y/Y\n");
ch=getch();
while(ch=='Y'||ch=='y') /*利用while()循環(huán)實現(xiàn)程序的循環(huán)執(zhí)行*/
{ flush(); /*由用戶給出結束標志*/
p=1;
u=1;
while(p)
{ printf("input the year(year>0):");
scanf("%d",&year);
if(year>0)
p=0;
else
printf("the input is wrong!\n");
}
while(u)
{ printf("input the month(1--12):");
scanf("%d",&month);
if(month>=1&&month<=12)
u=0;
else
printf("the input is wrong!\n");
}
for(i=1;i<year;i++) /*判斷某年是否是閏年,確定加減基數(shù)*/
{ flag=leap(i);
sum=sum+caculate(flag); /*求和改年之前的天數(shù)*/
} /*判斷給定年份是否是閏年*/
flag=leap(year);
printf("the total days before this year is:%ld\n",sum); /*輸出改年之前的所有天數(shù)*/
print(year,flag,month,sum); /*輸出改年改月信息*/
printf("if you want to continue print y/Y else print n/N\n");
ch=getch();
}
exit(0);
}
int leap(int y) /*判斷是否是閏年函數(shù)*/
{ int f;
if((y%4==0&&y%100!=0)||(y%400==0))
{ f=1;
return(f);
}
else
{ f=0;
return(f); /*計算該年之前的天數(shù)*/
}
}
int caculate(int f)
{ int i,j,ds;
if(f==1)
{ for(j=1;j<13;j++)
ds=ds+le[j];
}
else
{ for(j=1;j<13;j++)
ds=ds+ping[j];
}
return(ds);
}
void print(int y,int f,int m,long s) /*完成輸出月歷功能*/
{ int i,j;
int day=0;
int volum;
printf("the cal of the %d month of %d year's is shown:\n",m,y);
printf("**********************************************\n");
printf(" Sun Mon Tue Wed Tir Fri Sat\n"); /*打印首行格式*/
if(f==1)
{
for(i=1;i<m;i++)
{ day=day+le[i]; /*計算閏年給定月份之前的天數(shù)*/
}
day=day+s; /*加上原來的計算結果:該年前的天數(shù)*/
volum=(6+day)%7; /*利用以上的總天數(shù)來計算改月的顯示格式* / /*也就是說要計算該月中1號出現(xiàn)的位置*/
/*具體的就是計算應該打印的空格數(shù)*/
}
else
{ for(i=1;i<m;i++) /*平年的處理和潤年相似,不同之處僅是2月份的天數(shù)不同*/
{ day=day+ping[i];
}
day=day+s;
volum=(6+day)%7;
}
for(j=0;j<5*volum;j++) /*根據(jù)前面計算的空格數(shù)進行該月的月歷輸出*/
printf(" ");
if(f==0)
{ for(i=1;i<=ping[m];i++)
{ printf("%5d", i);
if((i+volum)%7==0)
printf("\n");
}
}
if(f==1)
{ for(i=1;i<=le[m];i++)
{ printf("%5d", i);
if((i+volum)%7==0)
printf("\n");
}
}
printf("\n");
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -