c语言中的月历制作

#include<stdio.h>
void Printmonth(int y, int m)
{
int c,i,j,number,a,w[40];
printf("《显示月历》输入年月:");
scanf("%d%d",&y,&m);
printf(" 第%d年,%d月月历: \n",&y,&m);
printf("周一 周二 周三 周四 周五 周六 周日");
for(a=1;a<=31;a++)
{
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[a-1]=s%7;
}
if(w[0]==1)
{
for(i=1;i<=6;i++)
{
我就做到这了,,,求帮忙,谢谢

 

#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=1;a<=31;a++)
 { 
  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=1;i<=6;i++)
  {
*/
 printf("\n");
 if(w!=6)
 {
  for(i=0;i<w;i++)
  {
   printf("\t");
   b++;
  }
 }
 for(j=1;j<=c;j++,b++)
 {
  printf("%d\t",j);
  if(b%7==0)printf("\n");
 }
}

int main()
{
 Printmonth();
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-02
你可以用ds1302啊 设置好要的日期 掉电也能计时的,只要读它的数据不用计算都可以。
相似回答