看要这样不? 下图:
#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)按回车
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)