C语言日历

C语言日历,第1张

#include <stdioh>

#include <stringh>

//判断是否是闰年

bool isLeap(int year)

{

if((year%4==0 && year%100 !=0) || (year%400==0))

{

return true;

}

return false;

}

//返回指定年,指定月的天数(即返回某月的天数)

int getDays(int year,int month)

{

switch(month)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

return 31;

case 4:

case 6:

case 9:

case 11:

return 30;

}

if(isLeap(year))

{

return 29;

}

return 28;

}

//返回指定年月中该月的第一天的星期

int getWeekday(char date[])

{

int j,k,m,q;

j=date[1]-48;

k=date[2]-48;

m=date[6]-48;

q=1;

return (q+((m+1)26/10)+k/4+j/4-2j)%7;

}

void showTips()

{

printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六\n");

}

int main()

{

char date[11];

int i,year,month,days,weekday,temp;

printf("请输入年月,格式为xxxx年x月,或者xxxx年xx月\n");

gets(date);

//strcpy(date,"2007年7月");

year=0;

for(i=0;i<4;i++)

{

year=10;

year+=date[i]-48;

}

//如果给定日期的月份是1位 即1~9

if(strlen(date)==9)

{

month=date[6]-48;

}

//如果给定的日期的月份是2位 即10~12

else

{

month=(date[6]-48)10+date[7]-48;

}

days=getDays(year,month);

weekday=getWeekday(date);

printf("星期六 星期日 星期一 星期二 星期三 星期四 星期五\n");

temp=weekday;

for(i=0;i<temp;i++)

{

printf("\t");

}

for(i=1;i<=days;i++)

{

printf(" %d\t",i);

temp++;

if(temp==7)

{

printf("\n");

temp=0;

}

}

printf("\n");

return 0;

}

这是根据你提供的星期计算公式得出来的结果,所以不保证与当前的日历一致性,结果附图所示!

刚回答了一个别人的问题,和你的题目是一样的,有源程序,要的是注释,我加上了注释,现在把它给你。

#include <stdioh>

#include<conioh>

#include<stdlibh>

int IsLeapYear(int); //声明头文件和函数

void main()

{

int i;

int day;

int year;

int temp;

int temp_i;

long int Year_days = 0;

int Year_Start = 1;

int Per_Year_Days;

int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29}; //每个月的天数,最后一个是闰年2月

printf("Please enter the year: ");

scanf("%d",&year); //输入年份

while(Year_Start < year) //计算从公元1年1月1日到你所查询年份前一年的天数,是为了以后确定这一年的第一天是星期几

{

if( IsLeapYear( Year_Start ) ) //确定一年的天数,闰年为366天,一般为365天

Per_Year_Days = 366;

else

Per_Year_Days = 365;

Year_days = Year_days + Per_Year_Days;

Year_Start++;

}

for( temp = 1; temp <=12; temp++ ) //循环输出每个月的日历

{

switch( temp )

{

case 1:

printf(" January(%d)\n",year); //如 January(2008)

break;

case 2:

printf(" February(%d)\n",year);

break;

case 3:

printf(" March(%d)\n",year);

break;

case 4:

printf(" April(%d)\n",year);

break;

case 5:

printf(" May(%d)\n",year);

break;

case 6:

printf(" June(%d)\n",year);

break;

case 7:

printf(" July(%d)\n",year);

break;

case 8:

printf(" August(%d)\n",year);

break;

case 9:

printf(" September(%d)\n",year);

break;

case 10:

printf(" October(%d)\n",year);

break;

case 11:

printf(" November(%d)\n",year);

break;

case 12:

printf(" December(%d)\n",year);

break;

}

i = Year_days % 7; //计算这个月第一天是星期几

printf("Mon Tue Wed Thu Fri Sat Sun\n");

if( i != 0 )

for( temp_i = 0; temp_i < i; temp_i++) //第一天不是星期一,在前面补空格,本来的空格少了,我加了两个

printf(" ");

day = 1;

if( IsLeapYear(year) && temp == 2) //闰年的2月

while( day <= month_day[12] )

{

if( day >1 )

if( Year_days % 7 == 0 ) //如果不是1号且昨天是星期天,输入回车, 换行

printf("\n");

if( day >= 10 ) //如果大于或等于10号则输出日期并加2个空格,小于10号输出日期并加3个空格

printf("%d ",day); //开始没想到这几行是干嘛用的,只要一个输出就好嘛,后来才想到是用来调整格式的

else //只是他并没有调整好,我做了下修改,现在很整齐了

printf("%d ",day);

Year_days++;

day++;

}

else //不是闰年2月的

while (day <= month_day[temp-1]) //输出,同上

{

if( day > 1 )

if( Year_days % 7 == 0 )

printf("\n");

if( day >=10 ) //理由同上

printf("%d ",day);

else

printf("%d ",day);

Year_days++;

day++;

}

printf("\n");

if( getch() == 'q' ) //输入q退出程序

exit(0);

}

getch();

}

int IsLeapYear( int year ) //判断是否为闰年

{

if ((year %4 == 0) && (year % 100 != 0) || //年份能被4整除且不能被100整除 或者 能被400整除的为闰年

(year % 400 == 0) )

return 1;

else

return 0;

}

//万年历

#include <stdioh>

long int f(int year,int month)

{

if(month<3) return year-1;

else return year;

}

long int g(int month)

{

if(month<3) return month+13;

else return month+1;

}

long int n(int year,int month,int day)

{

return 1461Lf(year,month)/4+153Lg(month)/5+day;

}

int w(int year,int month,int day)

{

return(int) ((n(year,month,day)%7-621049L%7+7)%7);

}

int date[12][6][7];

int day_tbl[ ][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};

main()

{

int sw,leap,i,j,k,wd,day;

int year;

char title[]="SUM MON TUE WED THU FRI SAT";

printf("Please input the year whose calendar you want to know:\n");

scanf("%d%c",&year);

sw=w(year,1,1);

leap=year%4==0&&year%100||year%400==0;

for(i=0;i<12;i++)

for(j=0;j<6;j++)

for(k=0;k<7;k++)

date[i][j][k]=0;

for(i=0;i<12;i++)

for(wd=0,day=1;day<=day_tbl[leap][i];day++)

{

date[i][wd][sw]=day;

sw=++sw%7;

if(sw==0) wd++;

}

printf("\n|================== The Calendar of Year %d==================|\n|",year);

for(i=0;i<6;i++)

{

for(wd=0,k=0;k<7;k++)

wd+=date[i][5][k]+date[i+6][5][k];

wd=wd6:5;

printf(" %2d %s %2d %s|\n|",i+1,title,i+7,title);

for(j=0;j<wd;j++)

{

printf(" ");

for(k=0;k<7;k++)

if(date[i][j][k])

printf("%4d",date[i][j][k]);

else printf(" ");

printf(" ");

for(k=0;k<7;k++)

if(date[i+6][j][k])

printf("%4d",date[i+6][j][k]);

else printf(" ");

printf("|\n|");

}

}

puts("==============================================================|");

}

#include <stdioh>

int leap (int year)

{if(year%4==0&&year%100!=0||year%400==0) //判断是否是闰年

return 1;

else return 0;

}

int days_month (int month,int year) //判断大月和小月

{

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) //找出大月

return 31;

if(month==4||month==6||month==9||month==11) //找出小月

return 30;

if(month==2&&leap(year)==1) return 29; //判断二月是29天还是29天

else return 28;

}

int firstday(int month,int year)

{int w;

w=(1+2month+3(month+1)/5+year+year/4+year/400-year/100)%7+1; //判断每个月开始的第一天是星期几

return w;

}

main()

{int i,j=1,k=1,a,b,month,year;

printf("\n input month and year:\n");

scanf("%d%d",&month,&year); //输入月和年

b=days_month(month,year);

a=firstday (month,year);

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<=4a)

{printf(" ");

j++;

}

for(i=1;i<=b;i++)

{printf("%4d",i);

if(i==7k-a)

{printf("\n");

k++;

}

}

}

printf("\n");

}

以上就是关于C语言 日历全部的内容,包括:C语言 日历、怎样用C语言设计一个日历系统、用C语言编写一个程序:输入任意一个年份,输出该年的日历,要求日历自上而下排成两列。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10219217.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存