C语言编程日历显示

C语言编程日历显示,第1张

#include <stdio.h>

#include <stdlib.h>

int leap(int)//判断是否为闰年

int md(int m,int y)//返回本月的天数

void prtweek(void)//输出表头

int fw(int m,int y)//返回本月一号是星期几

void prtmonth(int m)//输出月份表头

int main(int argc, char* argv[])

{

int y,m,i,test,week

printf("Year:")

scanf("%d",&y)

for (m=1m<=12m++) {

test=1

prtmonth(m)

prtweek()

week=fw(m,y)

if (week!=6)

for (i=0i<=weeki++) {

putchar('\t')

test++

}

for (i=1i<=md(m,y)i++,test++) {

printf("%d\t",i)

if (test%7==0) {

putchar('\n')

}

}

putchar('\n')

system("pause")//含禅暂停,以便观察输出

}

return 0

}

int leap(int y)

{

return (y%4==0&&y%100||y%400==0)?1:0

}

int md(int m,int y)

{

int d

switch (m) {

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:d=31break

case 4:

case 6:

case 9:

case 11:d=30break

case 2:d=leap(y)?29:28break

}

return d

}

void prtweek(void)

{

printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n","Sun","Mon","Tue","Wed","Thur","Fri","Sat")

}

int fw(int m,int y)

{

int f

if (m<3) {

m+=12

y--

}

f=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7

return f

}

void prtmonth(int m)

{

switch (m) {

default:

case 1:puts("===January===")break

case 2:puts("===February===")break

case 3:puts("===March===")break

case 4:puts("===April===")break

case 5:puts("===May===")break

case 6:puts("===June===")break

case 7:puts("===July===")break

case 8:puts("===August===")break

case 9:puts("===September===")break

case 10:puts("===October===")break

case 11:puts("===November==="颂含)break

case 12:puts("野老笑===December===")break

}

}

此题不是很难,我会前三个

关键是算那一年的第一天是周几

给你个基本算法,一年是365天,闰年366天

364是7的倍数,这样一年多出一天,中间多少个闰年,在加上相应衡信的天数即可

400年多出来的天数是400+97=497也是7的倍数,那么400年一轮回,这样就算400年以内的即可

一个子函数,返回这一年的第一天是周几,很好做

int ye(int year)

{

int y=year%400

int day=y

int i

for(i=0i<yi++)

if(闰年判断)

day++

return day%7

}

做一个月份天数的全局数组

int mo[12]={31,28,31,30,31,30,31,31,30,31,30,31}

需要时用一个if判断闰年改变m0[1]的值是28还是29

打印子函数,有一个小技巧,就是每个月前面的空缺部分,这个1月份是ye子函咐猛轮数的返回值,后面的你看和前面月份是不是重合啊,吧这个记录下来在下一月份用即可

1 2

3 4

这样月份排列更好打印一些,你的那个截图有点麻烦

int pr(int year)

{

int k=ye(year)

int i,j,

if(闰年判断)

mo[1]=29

else

mo[1]=28

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

{

printf("周几英文的打印")

for(j=0j<kj++)

printf("一般是四个空格,就是月份前面空缺的打印")

for(j=1j<=mo[i]j++)

{

printf("%4d",j)

k++

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

printf("\n"知颂)

}

k%=7

if(k!=0)

printf("\n")

}

}

如果像你那样,感觉需要赋值一个大一点的数组,在吧数组打印出来更好,呵呵


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存