//此日历示例由以下人员提供: // http://www.codingunit.com编程教程
#include<stdio.h>
#define TRUE 1
#define FALSE 0
int days_in_month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char *months[]=
{
" ",
"\n\n\nJanuary",
"\n\n\nFebruary",
"\n\n\nMarch",
"\n\n\nApril",
"\n\n\nMay",
"\n\n\nJune",
"\n\n\nJuly",
"\n\n\nAugust",
"\n\n\nSeptember",
"\n\n\nOctober",
"\n\n\nNovember",
"\n\n\nDecember"
};
int inputyear(void)
{
int year;
printf("Please enter a year (example: 1999) : ");
scanf("%d", &year);
return year;
}
int determinedaycode(int year)
{
int daycode;
int d1, d2, d3;
d1 = (year - 1.)/ 4.0;
d2 = (year - 1.)/ 100.;
d3 = (year - 1.)/ 400.;
daycode = (year + d1 - d2 + d3) %7;
return daycode;
}
int determineleapyear(int year)
{
if(year% 4 == FALSE && year%100 != FALSE || year%400 == FALSE)
{
days_in_month[2] = 29;
return TRUE;
}
else
{
days_in_month[2] = 28;
return FALSE;
}
}
void calendar(int year, int daycode)
{
int month, day;
for ( month = 1; month <= 12; month++ )
{
printf("%s", months[month]);
printf("\n\nSun Mon Tue Wed Thu Fri Sat\n" );
// Correct the position for the first date
for ( day = 1; day <= 1 + daycode * 5; day++ )
{
printf(" ");
}
// Print all the dates for one month
for ( day = 1; day <= days_in_month[month]; day++ )
{
printf("%2d", day );
// Is day before Sat? Else start next line Sun.
if ( ( day + daycode ) % 7 > 0 )
printf(" " );
else
printf("\n " );
}
// Set position for next month
daycode = ( daycode + days_in_month[month] ) % 7;
}
}
int main(void)
{
int year, daycode, leapyear;
year = inputyear();
daycode = determinedaycode(year);
determineleapyear(year);
calendar(year, daycode);
printf("\n");
}
例如为什么days_in_month []中有一个零?
我们只学习了数组,指针和字符串,但医生要求我们做一个完整的项目并解释其中的所有内容。我可以理解其中的大部分内容(我正在做很多研究)但我需要一个更明确的解释。你能帮我评论这个节目吗
答案 0 :(得分:1)
C中的数组是基于零的,这意味着第一个元素的索引是0而不是1.你看到的代码用自然月索引数组,所以数组有13个元素,第一个元素只是一个占位符,它没有被使用。
这样做的结果是,要获得第一个月的数量,你可以使用do days_in_month[month]
,不需要减去1,即如果它是你认为的12个元素,你将需要days_in_month[month - 1]
1}}。见下图:
int days_in_month[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// index: 0 1 2 3 4 5 6 7 8 9 10 11 12
答案 1 :(得分:1)
为什么在days_in_month中有零?
数组是零索引;第一个元素位于索引0,而第一个元素位于(12 - 1)。 因此,他没有使用索引0来引用月号1,而是在开头添加了一个虚拟元素。