c语言中的月历制作

Python018

c语言中的月历制作,第1张

#include<stdio.h>

void Printmonth()//这里就不需要传参了,因为y,m都在函数内部定义完了,不需要外界传递给他

{

 int c,i,j,a,w//这里只需要知道每个月的第一天对应的星期就可,因而不需要定义数组

 int y,m,s,b=1,d,n,g

 printf("《显示月历》输入年月:")

 scanf("%d%d",&y,&m)

 printf("           第%d年,%d月月历:   \n",y,m)//这里如果加上&就意味着输出y和m的地址

 printf("周日\t周一\t周二\t周三\t周四\t周五\t周六")     

 for(a=1a<=31a++)

 { 

  if (m==1) c=a   

  else if (m==2) c=31+a   

  else if (m==3) c=31+28+a   

  else if (m==4) c=31+28+31+a   

  else if (m==5) c=31+28+31+30+a   

  else if (m==6) c=31+28+31+30+31+a   

  else if (m==7) c=31+28+31+30+31+30+a   

  else if (m==8) c=31+28+31+30+31+30+31+a   

  else if (m==9) c=31+28+31+30+31+30+31+31+a   

  else if (m==10) c=31+28+31+30+31+30+31+31+30+a   

  else if (m==11) c=31+28+31+30+31+30+31+31+30+31+a   

  else if (m==12) c=31+28+31+30+31+30+31+31+30+31+30+a   

  if (m>2)   

  {

   if (y%100==0) 

   {

    if (y%400==0)c=c+1

   }   

   else if (y%4==0)               

    c=c+1   

  }   

 // s=(y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400+c 

 //蔡勒公式:

 //W=y+[y/4]+[c/4]-2*c+[26*(m+1)/10]+d-1

 //W:是星期

 //C:世纪-1,其中,世纪:公元是年份前两位+1

    //Y:年(年份后两位数)

    //M:月(m>=3 && m<14) 即某年的1、2月要看作上一年的13、14月来计算,比如2003年的1月1日要看做是2002年的13月1日来计算

 //D:日 

 //[]:代表取整

 //结果W%7为星期几

 //如果w<0,则将w+7操作

 

  if(m<3)

  {

   y-=1

   m+=12

  }

  d=1//此处计算月份的第一天的星期

  n=y/100

  g=y%100

  s=g+g/4+n/4-2*n+26*(m+1)/10+d-1

  w=s%7

  if(w<0)w+=7

 }   

 /*if(w==1)

 {

  for(i=1i<=6i++)

  {

*/

 printf("\n")

 if(w!=6)

 {

  for(i=0i<wi++)

  {

   printf("\t")

   b++

  }

 }

 for(j=1j<=cj++,b++)

 {

  printf("%d\t",j)

  if(b%7==0)printf("\n")

 }

}

int main()

{

 Printmonth()

}

#include <stdio.h>

int main()

{

int i,j,a

scanf("%d",&a)

if(a==7)

{

a=0

}

else

{

a=a

}

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

for(i=1i<=ai++)

{

printf("%4c",' ')

}

for(j=1j<=30j++)

{

if((j+a)%7==0)

{

printf("%3d",j)

printf("\n")

}

else

printf("%3d ",j)

}

return 0//返回值

}

程序可以运行,就记得给main函数增加返回值,删去没有使用到的b和c就行了,其他正常

我这儿有一个万年历的程序,楼主可以试着编写实现你所需要的功能。希望有所帮助。

#include<stdio.h>

#include<stdlib.h>

int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}

int n[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}

char w[7][3]={"日","一","二","三","四","五","六"}

char mon[13][7]={"","一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"}

/*判断是否为闰年*/

int IsLeap(int year)

{

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

return 1

else

return 0

}

/*计算某年某月某日是星期几*/

int Getweekday(int year,int month,int day)

{

int weekday

int dayCount=0

int i

if(IsLeap(year))

{

for(i=1i<monthi++)

dayCount+=n[i]

}

else

{

for(i=1i<monthi++)

dayCount+=m[i]

}

dayCount=dayCount+day

weekday=((year-1)+(year-1)/4-(year-1)/100+(year-1)/400+dayCount)%7

return weekday

}

/*判断某年某月某日是星期几的函数*/

void SelectDay()

{

int year,month,day

char ch

int weekday

printf("请输入年月日(xxxx-xx-xx):\t")

scanf("%d-%d-%d",&year,&month,&day)

weekday=Getweekday(year,month,day)

printf("\n")

printf("%d年%d月%d日是:星期%s\n",year,month,day,w[weekday])

printf("\n您还需要继续查询吗?\t是(Y)/否(N)")

getchar()

ch=getchar()

if(ch=='y'||ch=='Y')

SelectDay()

}

/*输出某月的日历*/

void GetMonth(int year,int month )

{

int weekday,i,monthday

weekday=Getweekday(year,month,1)

printf("日\t一\t二\t三\t四\t五\t六\n")

for(i=0i<weekdayi++)

printf("\t")

if(IsLeap(year))

monthday=n[month]

else

monthday=m[month]

for(i=1i<=monthdayi++)

{

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

weekday++

if(weekday%7==0)

printf("\n")

}

printf("\n")

}

/*打印某年某月日历函数*/

void Month()

{

int year,month

char ch

printf("请输入年月(xxxx-xx):\t")

scanf("%d-%d",&year,&month)

printf("\n")

GetMonth(year,month )

printf("\n您还需要继续查询吗?\t是(Y)/否(N)")

getchar()

ch=getchar()

if(ch=='y'||ch=='Y')

Month()

}

/*打印某年日历函数*/

void Year()

{

int year,i

char ch

printf("请输入年份:\n")

scanf("%d",&year)

for(i=1i<=12i++)

{

printf("%s\n",mon[i])

GetMonth(year,i)

printf("\n\n")

}

printf("\n您还需要继续查询吗?\t是(Y)/否(N)")

getchar()

ch=getchar()

if(ch=='y'||ch=='Y')

Year()

}

/*退出程序*/

void Exit()

{

char ch

getchar()

printf("是否确定退出?\t是(Y)/否(N)")

ch=getchar()

if(ch=='y'||ch=='Y')

printf("感谢您的使用!!\n\n")

exit(0)

}

/*主函数*/

void main()

{

int choice

while(1)

{

printf("欢迎使用该系统!!\n")

printf("**===**===**===**===**===**===**===**===**===**\n")

printf("1.查询某年某月某日是星期几\n")

printf("2.打印某年某月的全月日历\n")

printf("3.打印某年的全年日历\n")

printf("4.退出系统\n")

printf("**===**===**===**===**===**===**===**===**===**\n")

printf("请输入您需要进行的操作前面的序号: ")

scanf("%d",&choice)

switch(choice)

{

case 1:SelectDay() break

case 2:Month() break

case 3:Year() break

case 4:Exit() break

}

}

}