用C语言编写程序打印任意年份的日历

用C语言编写程序打印任意年份的日历,第1张

看要这样不? 下图:

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

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=0k=1h=1u=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=1900p<=xp++)

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=1i<=ti++)

{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=1i<=12i++)

{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=1i<=6i++)

{

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

{

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=1t<=12t++)

qq(x,t)}

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

{ for(i=xxi<=tti++,x++)

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

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=0i<=cci++,x++)

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

qq(x,t)}

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

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

qq(x,t)}

}

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

{

if(cc>0)

{for(tt=0tt<=cctt++,t++)

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

else qq(x,t)}}

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

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

else qq(x,t)}}

}

}

while(q==1)

scanf("%d",&e)

if(e)exit(0)

}

这是我的一个朋友写的!

参考一下!

1、首先要判断一个年份是闰年还是平年,用一个子程序来做。

2、然后就开始写主程序,首先用scanf得到一个年份。

3、在判断这个年份是平年还是闰年后用printf在CMD中打印出来。

4、在编写完成后,在Notepad++界面下按下F5,d出输入框。

5、cmd /k gcc -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe""$(FULL_CURRENT_PATH)" &&CLS &&"$(CURRENT_DIRECTORY)\$(NAME_PART).exe" &PAUSE &EXIT。在输入框例输入后运行。

6、点击运行,会d出CMD,在里面输入年份后回车就完成了。

#include <stdio.h>

int main()

{

    int a, i, j, n, k, t, w, x, y, z

    static int d[13][78]

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

    char wst[] = " Sun Mon Yue Wed Thu Fri Sat   "

    printf("输入年份: ")

    scanf("%d", &y)

 

    if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)  /*闰年的二月为29天*/

        m[2] = 29

    w = (y + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400) % 7 /*计算y年元旦为星期w*/

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

    {

        a = 1

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

        {

            for (k = 0 k <= 6 k++)

            {

                while (k<w) k = k + 1

                d[i][j * 10 + k] = a  /*计算i月的第j个星期的星期w的日期为a*/

                a = a + 1

                w = k + 1

                if (w == 7) w = 0

                if (a>m[i]) break

            }

            if (a>m[i]) break

        }

    }

    printf("输入每行显示几个月份(1,2,3,4,5,6): ")

    scanf("%d", &x)

    for (k = 1 k <= 16 * x - 3 k++)

        printf(" ")

    printf("=====%d=====\n", y)   /*打印年号*/

    for (n = 1 n <= 12 / x n++)

    {

        t = x*(n - 1) + 1

        printf("\n    ")

        for (z = 1 z <= x z++)

        {

            for (k = 1 k <= 15 k++)

                printf(" ")

            printf("%2d", t + z - 1)   /*打印月号*/

            for (k = 1 k <= 14 k++)

                printf(" ")

        }

        printf("\n      ")

        for (z = 1 z <= x z++)      /*按一横排x个月格式打印*/

            printf("%s", wst)   /*打印星期标题*/

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

        {

            printf("\n  ")

            for (i = t i <= t + x - 1 i++)

            {

                printf("   ")

                for (k = 0 k <= 6 k++)

                    if (d[i][j * 10 + k] == 0) /*空缺日期位置打印空格*/

                        printf("    ")

                    else

                        printf("%4d", d[i][j * 10 + k])/*打印日期*/

            }

        }

    }

     

    return 0

}

输入示例:

2016按回车

2(或者输入1或3)按回车


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

原文地址: http://outofmemory.cn/yw/12014593.html

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

发表评论

登录后才能评论

评论列表(0条)

保存