c语言输出指定年份中所有的星期六,用C语言编写程序打印任意年份的日历

看要这样不? 下图:

#include 

#include 

#include 

int qq(int x,int t)

{

int i=0,p,s=365,y,j,b,k=1,h=1,u=0;

int a[13];

FILE *fp;

fp=fopen("tai.txt","a+");

i=0;k=1;h=1;u=0;

printf("\t^^^^^^^^^^^^^\t%d年%d月份\t^^^^^^^^^^^^^^^^\n\n",x,t);

fputs("\t^^^^^^^^^^^^^^^^",fp);

fputc(x/1000+48,fp);

fputc(x/100%10+48,fp);

fputc(x/10%10+48,fp);

fputc(x%10+48,fp);

fputs("年",fp);

fputc(t/10+48,fp);

fputc(t%10+48,fp);

fputs("月份^^^^^^^^^^^^^^^^^^^^^^^",fp);

fputs("\n\n",fp);

{for(p=1900;p<=x;p++)

if(p%4==0&&p%100!=0||p%400==0) i++;

if(x%4==0&&x%100!=0||x%400==0) s=i*366+(x-1900-i)*365;

else s=i*366+(x-1900-i)*365+1;

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

fputs("\t日\t一\t二\t三\t四\t五\t六\n",fp);

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

{if(i==2||i==4||i==6||i==8||i==9||i==11) u+=31;

if(i==5||i==7||i==10||i==12) u+=30;

if(i==3){if(x%4==0&&x%100!=0||x%400==0) u+=29;

else u+=28;};

};

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

{if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) a[i]=31;

if(i==4||i==6||i==9||i==11) a[i]=30;

if(i==2){if(x%4==0&&x%100!=0||x%400==0) a[i]=29;

else a[i]=28;};

};

b=a[t];

y=(s%7+u)%7;

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

{

for(j=1;j<=7;j++)

{

if(h<=y) {printf("\t");fputc('\t',fp);};

if(h>y)  {if(k<=b) {printf("\t%d",k); fputc('\t',fp); if (k>9) fputc(k/10+48,fp),fputc(k%10+48,fp) ; else fputc(k+48,fp) ; };

if(k==b+1) {printf("\n");fputc('\n',fp);};

k++;  };

h++;

};

printf("\n");fputs("\n",fp);

};

};

printf("\t***************************************************\n\n");

fputs("\t***************************************************",fp);

fputs("\n\n",fp);

fclose(fp);

return (0);

}

main()

{

int x,t,q,e,i,c,cc,xx,tt;

float p,pp;

FILE *fp;

if((fp=fopen("tai.txt","w"))==NULL)

{printf("error!");

exit(0);

}

fclose(fp);

do{

printf("请输入你要查询的年份和月份,\n");

printf("输入格式为:“年+空格+月+Enter”。(年份 >=1900)");

printf("(若想显示全年,则输“年+空格+0+Enter”)。比如“2012+空格+0+Enter”)\n");

printf("(若想输出XXXX到xxxx年的全年,则输“年+空格+年+Enter”)。比如“2010+空格+2012+Enter”)\n");

printf("(若想显示xxxx年的前或后x年,则输“年+空格+.x+Enter”)。比如2010的前3年,则输入“2010+空格+“-.3”+Enter”)\n");

printf("(若想显示xxxx年的m月前或后x个月,则输“年+空格+m.x+Enter”)。比如2010的5后3个月,则输入“2010+空格+“+5.3”+Enter”)\n");

scanf("%d%f",&x,&p);

pp=p*10;

c=(int)pp;

cc=c%10;

xx=x;

t=abs((int)p);

tt=t;

if(x<1900) {printf("输入不合要求,请重新输入!!");q=1;}

else if(x>=1900&&(t>0&&t<=12)&&cc==0)//输出指定的年月份。

{ qq(x,t);}

else if(x>=1900&&t==0&&cc==0)//输出指定的整年。

{ for(t=1;t<=12;t++)

qq(x,t);}

else if(x>=1900&&t>=1900)//输出xxxx年到xxxx年的整年。

{ for(i=xx;i<=tt;i++,x++)

for(t=1;t<=12;t++)

qq(x,t);}

else if(x>=1900&&p<1.0&&tt==0)//输出xxxx年的前或后x年。

{

if(cc+x<1900&&tt==0)

printf(" 输入的前年份过多。");

else if(cc>0)

{for(i=0;i<=cc;i++,x++)

for(t=1;t<=12;t++)

qq(x,t);}

else {for(i=cc;i<=0;i++,x--)

for(t=1;t<=12;t++)

qq(x,t);}

}

else if(x>=1900&&t<=12&&t>=1&&cc!=0)//输出xxxx年的m月前或后x个月。“呵呵 你自己想象“让前或后x个月问任何数””

{

if(cc>0)

{for(tt=0;tt<=cc;tt++,t++)

{  if(t>12) qq(x+1,t-12);

else qq(x,t);}}

else{for(tt=0;tt>=cc;tt--,t--)

{  if(t<1) qq(x-1,t+12);

else qq(x,t);}}

}

}

while(q==1);

scanf("%d",&e);

if(e)exit(0);

}

这是我的一个朋友写的!

参考一下!

65ecf653a7360ce3f6ad23c404f670c2.png

本回答被提问者采纳

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值