大一的一个小程序,现在整理出来希望可以给刚学C语言的人一些帮助
http://s13/middle/afeac133gca727d59ff3c&690
部分代码:
24节气计算函数(这个算法完全自创,)
int *Jieqi(int year,int month)
{
int m,n,*t,i,a[2];
double
C[12][2]={5.4055,20.12,3.87,18.73,5.63,20.646,4.81,20.1,5.52,21.04,5.678,21.37,7.108,22.83,7.5,23.13,7.646,23.042,8.318,23.438,7.438,22.36,7.18,21.94};
t=a;
for(i=0;i<2;i++)
{m=year*D+C[month-1][i];
n=(year-1)/4+(year-1)/400-(year-1)/100;
a[i]=m-n;
}
return(t);
}
农历显示函数:
void display(int year,int month) //显示日历
{
int max,number,ya,q,i,j=1,*t;
char *jieriname[] = {"春节", "元宵", "端午", "七夕",
"中秋", "重阳", "腊八", "除夕","无"};
char *jie[]={"元旦", "情人", "妇女", "植树", "愚人", "劳动",
"青年", "无烟", "儿童", "建军", "教师", "国庆", "圣诞"};
char *str[12][2]={ "小寒", "大寒" ,"立春", "雨水",
"惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑",
"立秋",
"处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至"};
max=maxDay(year,month);
number=week(year,month,1);
//该年该月的1号为星期几作为起始位
printf("
%sssssss\n","日","一","二","三","四","五","六");
printf("
");
for(i=0;i<number;i++) //找起始位
{
printf("
");
}
while(j<=max)
{
q=Gjiari(month,j);
ya=Njiari(year,month,j);
if(j>=10)
{t=Jieqi(year,month);
if(q!=0)
printf("%d(%s)
",j,jie[q-1]);
else if(j==*t||j==*(t+1))
{
if(j==*t)
printf("%d(%s) ",j,str[month-1][0]);
else
if(j==*(t+1)) printf("%d(%s)
",j,str[month-1][1]);
}
else if(ya!=8)
printf("%d(%s)
",j,jieriname[ya]);
else printf("%d%s
",j,GetDayOf2(year,month,j));
}
else
{t=Jieqi(year,month);
if(q!=0)
printf("%d(%s)
",j,jie[q-1]);
else if(j==*t||j==*(t+1))
{
if(j==*t)
printf("%d(%s)
",j,str[month-1][0]);
else
printf("%d(%s)
",j,str[month-1][1]);
}
else if(ya!=8)
printf("%d(%s)
",j,jieriname[ya]);
else printf("%d%s
",j,GetDayOf2(year,month,j));}
if(i%7==6) //周六换行
{
printf("\n\n");
printf("
");
}
i++;
j++;
}
printf("\n\n");
}
农历算法:
char *GetDayOf1(int wCurYear,int wCurMonth,int wCurDay)
{ char *cTianGan[] = {"甲", "乙", "丙", "丁", "戊",
"己", "庚", "辛", "壬","癸"};
char *cDiZhi[] = {"子", "丑",
"寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"};
char *cShuXiang[] = {"鼠", "牛",
"虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"};
char *cDayName[] = {"*","初一",
"初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二",
"十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三",
"廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十"};
char *cMonName[] = {"*","正",
"二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "腊"};
int wMonthAdd[12] = {0, 31,
59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
int wNongliData[100] =
{
2635,333387,1701,1748,267701,694,2391,133423,1175,396438
,3402,3749,331177,1453,694,201326,2350,465197,3221,3402
,400202,2901,1386,267611,605,2349,137515,2709,464533,1738
,2901,330421,1242,2651,199255,1323,529706,3733,1706,398762
,2741,1206,267438,2647,1318,204070,3477,461653,1386,2413
,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395
,1179,267415,2635,661067,1701,1748,398772,2742,2391,330031
,1175,1611,200010,3749,527717,1452,2742,332397,2350,3222
,268949,3402,3493,133973,1386,464219,605,2349,334123,2709
,2890,267946,2773,592565,1210,2651,395863,1323,2707,265877};
static int nTheDate,nIsEnd,m,k,n,i,nBit;
char szNongli[512], szNongliDay[512];
nTheDate = (wCurYear - 1921) * 365 + (wCurYear - 1921) / 4 +
wCurDay + wMonthAdd[wCurMonth - 1] - 38;
if
((!(wCurYear % 4)) && (wCurMonth
> 2))
nTheDate = nTheDate + 1;
nIsEnd =
0; m =
0;
while
(nIsEnd != 1)
{
if (wNongliData[m]
< 4095)
k = 11;
else
k = 12;
n = k;
while (n >= 0)
{
nBit =
wNongliData[m];
for (i = 1;i < n + 1;i++)
nBit
= nBit / 2;
nBit = nBit % 2;
if (nTheDate <= (29 + nBit))
{
nIsEnd
= 1; break;
}
nTheDate = nTheDate - 29 - nBit;
n = n -
1;
}
if (nIsEnd)
break;
m = m + 1;
}
wCurYear =
1921 + m;
wCurMonth =
k - n + 1;
wCurDay =
nTheDate;
if (k ==
12)
{
if (wCurMonth == wNongliData[m]
/ 65536 + 1)
wCurMonth = 1
- wCurMonth;
else if (wCurMonth > wNongliData[m] / 65536 +
1)
wCurMonth = wCurMonth - 1;
}
wsprintf(szNongli,"
天干--------(%s)\n\n
地支--------(%s)\n\n
干支--------(%s%s年)\n\n
属相--------(%s年)\n\n",cTianGan[((wCurYear - 4) % 60) % 10],
cDiZhi[((wCurYear - 4) % 60) % 12],cTianGan[((wCurYear - 4) % 60) %
10], cDiZhi[((wCurYear - 4) % 60) % 12],cShuXiang[((wCurYear - 4) %
60) % 12]);
if (wCurMonth < 1)
wsprintf(szNongliDay,
"
日期--------闰%s月",cMonName[ -1 * wCurMonth]);
else
wsprintf(szNongliDay,
"
日期--------%s月", cMonName[wCurMonth]);
strcat(szNongliDay, cDayName[wCurDay]);
return strcat(szNongli, szNongliDay);}
int *Jieqi(int year,int month)
{
int m,n,*t,i,a[2];
double
C[12][2]={5.4055,20.12,3.87,18.73,5.63,20.646,4.81,20.1,5.52,21.04,5.678,21.37,7.108,22.83,7.5,23.13,7.646,23.042,8.318,23.438,7.438,22.36,7.18,21.94};
t=a;
for(i=0;i<2;i++)
{m=year*D+C[month-1][i];
n=(year-1)/4+(year-1)/400-(year-1)/100;
a[i]=m-n;
}
return(t);
}
总结与收获
在这次设计中,为了可以比其他同学设计的出色,我在万年历中加入了农历,节日,节气,星座,天干地支等诸多功能。我希望自己做的东西可以和别人的用很大不同,我也希望自己可以在一次次的创新中提高自己,加强自己。
通过这次万年历的设计,我们收获了很多,不仅加强了对c语言的理解,我们还认清了自己的不足和薄弱环节,并学会自己独立分析和解决问题。另外, 我们还强化了动手能力,理解了团队合作的重要性。
这次设计,也让我对编程有了更浓厚的兴趣和自信。
加载中,请稍候......