C语言编写 年历显示程序

Python010

C语言编写 年历显示程序,第1张

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

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

给你个基本算法,一年是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")

}

}

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

scanf("%c",c)这个变量c干嘛不给地址呢?!还有,这个程序写得。。。说实话,比较乱,提示说明文字也是在乱用,不看代码直接运行的话,完全叫人看不懂。好几年没有写c程序了,过会儿给你试着改的工整点。。。还有,不要一直用while(1)这种结构和break没必要的。

#include <stdio.h>

void print_days(int days_before, int num_days)

{

int y

printf("****************************************************\n")

printf("SUN\tMON\tTUE\tWED\tTHU\tFRI\tSAT\n")

y = days_before % 7

switch(y)

{

case 1:printf("\t")break

case 2:printf("\t\t")break

case 3:printf("\t\t\t")break

case 4:printf("\t\t\t\t")break

case 5:printf("\t\t\t\t\t")break

case 6:printf("\t\t\t\t\t\t")break

default:break

}

for(int i = 1i <= num_daysi++)

{

printf("%d\t",i)

if( (i + y) % 7 == 0)

printf("\n")

}

printf("\n")

}

void main()

{

int t, h, day

char c

do

{

do

{

printf("Enter month in 2013 to display calendar (1-12):\n")

scanf("%d", &t)

} while (t <= 0 || t >12)

switch (t)

{

case 1:h=2day=31break

case 2:h=31day=28break

case 3:h=31+28day=31break

case 4:h=31+28+31day=30break

case 5:h=31+28+31+30day=31break

case 6:h=31+28+31+30+31day=30break

case 7:h=31+28+31+30+31+30day=31break

case 8:h=31+28+31+30+31+30+31day=31break

case 9:h=31+28+31+30+31+30+31+31day=30break

case 10:h=31+28+31+30+31+30+31+31+30day=31break

case 11:h=31+28+31+30+31+30+31+31+30+31day=30break

case 12:h=31+28+31+30+31+30+31+31+30+31+30day=31break

default:break

}

print_days(h, day)

gets(&c)

printf("Would you like to display another month (y/n) ?")

scanf("%c",&c)

} while (c =='y' || c=='Y')

}

/*不过除了没有查询某年某月某日是这一年的第几天。。和判断这一年的生肖外,都能满足你的要求。

加点金币帮你完善点!*/

#include<stdio.h>

int

Swiss(int

Years)

//判断是否是闰年

{

if(!(Years%100))

{

Years=Years/100

}

if(Years%4)

{

return

0

}

else

{

return

1

}

}

int

Number(int

Yearsa,int

Yearsb)

//已知两个年份,求出两个年份之间闰年的个数

{

int

i=Yearsa+1

int

mou=0

do{

if(Swiss(i))

{

mou++

}

i++

}while(i<Yearsb)

return

mou

}

int

Mvalue(int

Years,int

Month,int

Day)

//已知年月日,求出某年某月某日是星期几

{

int

M[12]={0,3,3,6,1,4,6,2,5,0,3,5}

//月值

int

N=6

//年值初始化

int

a

if(Years<2006)

//求年值,年值以2006年为基数

{

N=6-((2006-Years)%7)-Number(Years,2006)

if(Swiss(Years))

{

if(Month<3)

{

N--

}

}

}

else

if(Years>2006)

{

N=((Years-2006)%7)-1+Number(2006,Years)

if(Swiss(Years))

{

if(Month>2)

{

N++

}

}

}

a=(Day+M[Month-1]+N)%7

//某年某月某日是星期几=(日值+月值+年值)%7

return

a

}

int

Amonth(int

Month)

//已知月,求出这个月是大月还是小月

{

switch(Month)

{

case

1:

case

3:

case

5:

case

7:

case

8:

case

10:

//1,3,5,7,8,10,12是大月,没月31天

case

12:return

1

case

4:

case

6:

case

9:

case

11:return

0

//4,6,9,11是小月,每月30天

case

2:return

2

//二月份

}

return

-1

}

void

main

()

{

int

Dtable[7][7]

int

i,j

int

Years=9999

int

Month=12

int

Day=1

int

b

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

//初始化数组

{

Dtable[0][i]=i

}

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

{

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

{

Dtable[i][j]=0

}

}

i=Mvalue(Years,Month,Day)

switch(Amonth(Month))

{

case

0:b=30break

case

1:b=31break

case

2:if(Swiss(Years))b=29else

b=28break

//闰年2月29天,平年二月28天

default:b=-1break

}

for(i<7i++)

{

Dtable[1][i]=Day++

}

for(i=2i<7i++)

{

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

//建造日历表

{

if(Day<=b)

{

Dtable[i][j]=Day++

}

else

{

continue

}

}

}

printf("%d:%d\n",Years,Month)

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

//输出日历表

{

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

{

printf("%3d",Dtable[i][j])

}

printf("\n")

}

getch()

//完毕!

}