70,033
社区成员
发帖
与我相关
我的任务
分享#include<stdio.h>
#define sunday 0
#define monday 1
#define tuesday 2
#define wednesday 3
#define thursday 4
#define friday 5
#define saturday 6
int inputyear(); //输入年份
void prtcalendar(int year); //打印某年的日历
void prtmonthcalendar(int month,int year); //打印某月的日历
char *monthname(int month); //月份名称
int monthdays(int month,int year); //计算某月的天数
int firstdayofmonth(int month,int year); //计算某月的第一天是星期几
void printspace(int weekday); //打印某月第一天以前的空格
int isleapyear(int year);
void main()
{
int year;
year=inputyear();
prtcalendar(year);
}
//输入年份
int inputyear()
{
int year;
while(1)
{
printf("which year?");
scanf("%d",&year);
if(year>=1900)
return(year);
}
printf("the year must be at least 1900\n");
}
//打印某年的日历
void prtcalendar(int year)
{
int month;
for(month=1;month<=12;month++)
{
prtmonthcalendar(month,year);
printf("\n");
}
}
//打印某月的日历
void prtmonthcalendar(month,year)
{
int weekday,ndays,day;
printf("%s,%d\n",monthname(month),year);
printf("SU MO TU WE TH FR SA\n");
ndays=monthdays(month,year);
weekday=firstdayofmonth(month,year);
printspace(weekday);
//在星期表上打印日期
for(day=1;day<=ndays;day++)
{
printf("%-8d",day);
if(weekday==saturday)
printf("\n");
weekday=(weekday+1)%7;
}
if(weekday!=sunday)
printf("\n"); //最后一行为星期的开头是不需要换行
}
//返回月份名称
char *monthname(int month)
{
switch(month)
{
case 1:return("January");
case 2:return("February");
case 3:return("March");
case 4:return("April");
case 5:return("May");
case 6:return("June");
case 7:return("July");
case 8:return("August");
case 9:return("September");
case 10:return("October");
case 11:return("November");
case 12:return("December");
default:return("illegal month");
}
}
//计算某月的天数
int monthdays(int month,int year)
{
switch(month)
{
case 2:if(isleapyear(year))
return(29);
else return(28);
case 4:
case 6:
case 9:
case 11:return(30);
default:return(31);
}
}
//计算某月的第一天是星期几
int firstdayofmonth(int month,int year)
{
int weekday,i;
weekday=monday;
for(i=1900;i<year;i++)
{
weekday=(weekday+365)%7;
if(isleapyear(i))
weekday=(weekday+1)%7;
}
for(i=1;i<month;i++)
weekday=(weekday+monthdays(i,year))%7;
return(weekday);
}
//打印某月第一天以前的空格
void printspace(int weekday)
{
int i;
for(i=0;i<weekday;i++)
printf(" ");
}
//判断是否是闰年
int isleapyear(int year)
{
return((year%4==0&&year%100!=0)||(year%400==0));
}
[code=C/C++]#include<stdio.h>
#define sunday 0
#define monday 1
#define tuesday 2
#define wednesday 3
#define thursday 4
#define friday 5
#define saturday 6
int inputyear(); //输入年份
void prtcalendar(int year); //打印某年的日历
void prtmonthcalendar(int month,int year); //打印某月的日历
char *monthname(int month); //月份名称
int monthdays(int month,int year); //计算某月的天数
int firstdayofmonth(int month,int year); //计算某月的第一天是星期几
void printspace(int weekday); //打印某月第一天以前的空格
int isleapyear(int year);
int main()
{
int year;
year=inputyear();
prtcalendar(year);
getchar();
getchar();
return 0;
}
//输入年份
int inputyear()
{
int year;
while(1)
{
printf("which year?");
scanf("%d",&year);
if(year>=1900)
return(year);
}
printf("the year must be at least 1900\n");
}
//打印某年的日历
void prtcalendar(int year)
{
int month;
for(month=1;month<=12;month++)
{
prtmonthcalendar(month,year);
printf("\n");
}
}
//打印某月的日历
void prtmonthcalendar(int month,int year)
{
int weekday,ndays,day;
printf("%s,%d\n",monthname(month),year);
printf("SU\tMO\tTU\tWE\tTH\tFR\tSA\n");
ndays=monthdays(month,year);
weekday=firstdayofmonth(month,year);
printspace(weekday);
//在星期表上打印日期
for(day=1;day<=ndays;day++)
{
printf("%d\t",day);
if(weekday==saturday)
printf("\n");
weekday=(weekday+1)%7;
}
if(weekday!=sunday)
printf("\n"); //最后一行为星期的开头是不需要换行
}
//返回月份名称
char *monthname(int month)
{
switch(month)
{
case 1:return("January");
case 2:return("February");
case 3:return("March");
case 4:return("April");
case 5:return("May");
case 6:return("June");
case 7:return("July");
case 8:return("August");
case 9:return("September");
case 10:return("October");
case 11:return("November");
case 12:return("December");
default:return("illegal month");
}
}
//计算某月的天数
int monthdays(int month,int year)
{
switch(month)
{
case 2:if(isleapyear(year))
return(29);
else return(28);
case 4:
case 6:
case 9:
case 11:return(30);
default:return(31);
}
}
//计算某月的第一天是星期几
int firstdayofmonth(int month,int year)
{
int weekday,i;
weekday=monday;
for(i=1900;i<year;i++)
{
weekday=(weekday+365)%7;
if(isleapyear(i))
weekday=(weekday+1)%7;
}
for(i=1;i<month;i++)
weekday=(weekday+monthdays(i,year))%7;
return(weekday);
}
//打印某月第一天以前的空格
void printspace(int weekday)
{
int i;
for(i=0;i<weekday;i++)
printf("\t");
}
//判断是否是闰年
int isleapyear(int year)
{
return((year%4==0&&year%100!=0)||(year%400==0));
}
int inputyear()
{
int year;
while(1)
{
printf("which year?");
scanf("%d",&year);
if(year>=1900)
return(year);//这里是出口
}
printf("the year must be at least 1900\n");
}
#include<stdio.h>
#define sunday 0
#define monday 1
#define tuesday 2
#define wednesday 3
#define thursday 4
#define friday 5
#define saturday 6
int inputyear(); //输入年份
void prtcalendar(int year); //打印某年的日历
void prtmonthcalendar(int month,int year); //打印某月的日历
char *monthname(int month); //月份名称
int monthdays(int month,int year); //计算某月的天数
int firstdayofmonth(int month,int year); //计算某月的第一天是星期几
void printspace(int weekday); //打印某月第一天以前的空格
int isleapyear(int year);
int main()
{
int year;
year=inputyear();
prtcalendar(year);
system("pause");
return 0;
}
//输入年份
int inputyear()
{
int year;
while(1)
{
printf("which year?");
scanf("%d",&year);
if(year>=1900)
{
return(year);
}
}
printf("the year must be at least 1900\n");
}
//打印某年的日历
void prtcalendar(int year)
{
int month;
for(month=1;month<=12;month++)
{
prtmonthcalendar(month,year);
printf("\n");
}
}
//打印某月的日历
void prtmonthcalendar(month,year)
{
int weekday,ndays,day;
printf("%s,%d\n",monthname(month),year);
printf("SU MO TU WE TH FR SA\n");
ndays=monthdays(month,year);
weekday=firstdayofmonth(month,year);
printspace(weekday);
//在星期表上打印日期
for(day=1;day<=ndays;day++)
{
printf("%-8d",day);
if(weekday==saturday)
{
printf("\n");
}
weekday=(weekday+1)%7;
}
if(weekday!=sunday)
{
printf("\n"); //最后一行为星期的开头是不需要换行
}
}
//返回月份名称
char *monthname(int month)
{
switch(month)
{
case 1:return("January");
case 2:return("February");
case 3:return("March");
case 4:return("April");
case 5:return("May");
case 6:return("June");
case 7:return("July");
case 8:return("August");
case 9:return("September");
case 10:return("October");
case 11:return("November");
case 12:return("December");
default:return("illegal month");
}
}
//计算某月的天数
int monthdays(int month,int year)
{
switch(month)
{
case 2:if(isleapyear(year))
{
return(29);
}
else
{
return(28);
}
case 4:
case 6:
case 9:
case 11:return(30);
default:return(31);
}
}
//计算某月的第一天是星期几
int firstdayofmonth(int month,int year)
{
int weekday,i;
weekday=monday;
for(i=1900;i<year;i++)
{
weekday=(weekday+365)%7;
if(isleapyear(i))
{
weekday=(weekday+1)%7;
}
}
for(i=1;i<month;i++)
{
weekday=(weekday+monthdays(i,year))%7;
}
return(weekday);
}
//打印某月第一天以前的空格
void printspace(int weekday)
{
int i;
for(i=0;i<weekday;i++)
{
printf(" ");
}
}
//判断是否是闰年
int isleapyear(int year)
{
return((year%4==0&&year%100!=0)||(year%400==0));
}