C语言 万年历--垃圾代码
因疫情在家,正好利用这段时间学习N大的C语言教程。该学习函数了,这个万年历是视频里的作业;实现全部堆在main()函数里面了,看着代码有点恶心;贴出来做个笔记而已XP系统turboc2编译器
main()
{
int a,b,c;
int k = 0;
int i ;
int day = 0;
int sum = 0;
int msum = 0;
int leap_i = 1; /* 一年的天数 */
int leap_j = 0; /* 是闰年 + 1*/
int leap_k = 0; /* 平年闰年的总天数 */
int leap_a = 1; /* 计算星期几的天数,每过一年 +1*/
int leap_year = 1980;
int leap_week = 365;
int leap_b = 0; /* 是闰年+1,然后清0,计算礼拜几 */
int m_i = 0;
int len_i;
int len_j;
int m=0;
int n=0;
printf("Please Input Data(exp:2010-10-1): ");
scanf("%d-%d-%d",&a,&b,&c);
/****************************** 检测输入的月份、日期(判断不够完整比如2月份的31号,懒的写了) *********************************************/
if(( b < 1) || ( b > 12) || ( c < 1 ) || (c > 31 ))
{
printf("Your Input %d Data Error!!!Please Reinput Data!!");
}
else
{
if((!(a%4) && (a %100) ) || !(a%400)) /*检查日期是否为闰年定义标志位k */
{
k = 1;
}
}
/***************************** 计算输入的日期是当年的第几天 **************************************/
for(i = 1;i<=b;i++)
{
if(i== 2||i== 4||i== 6||i== 7||i== 9||i== 11)
{
day = 31;
}
if(i== 5||i== 8||i== 10||i== 12)
{
day = 30;
}
if(i == 1)
{
day = 0;
}
if(i == 3)
{
if(k == 1)
{
day = 29;
}
else
{
day = 28;
}
}
sum = sum + day ;
}
msum = sum + c;
printf("This is days in the year: %d\n",msum); /* 输入一个日期,算这个日期是这一年中的第几天 */
/******** 以1980年(如果数据小于1980没做处理,也可以把基准年份变小)为基准计算输入年份的第一天是礼拜几,计算输入年份、月份的第一天是礼拜几*********************/
for(leap_year = 1980;leap_year < a; leap_year++)
{
if((!(leap_year%4) && (leap_year %100) ) || !(leap_year%400))
{
leap_i = 366;
leap_j++;
leap_b = 1;
leap_a++;
}
else
{
leap_i = 365;
leap_a++;
}
leap_k += leap_i;
leap_a =leap_b + leap_a;
leap_b = 0;
}
leap_k = leap_k + leap_j;
printf("The Year fist week: %d\n",(leap_week+leap_a) % 7); /* 输入一个日期 算这个年份的1月1号是礼拜几 */
m_i = (sum %7 + (leap_week+leap_a) % 7)%7;
if(m_i == 0)
{
m_i = 7;
}
printf("This is Day in week: %d\n", m_i ); /* 输入一个日期计算输入月份的第一天是礼拜几 */
/**************************** 清零开始打印输入日期的万年历 *****************************************/
clrscr();
printf("\n\n");
printf(" Mon Tue Web Thu Fri Sat Sun");
printf("\n\n");
if(b== 1 ||b == 3||b == 5||b == 7||b == 8||b == 10||b == 12)
{
len_i =31;
}
if(b== 4 ||b == 6||b == 9||b == 11)
{
len_i =30;
}
if(b == 2)
{
if(k == 1)
{
len_i = 29;
}
else
{
len_i = 28;
}
}
for(len_j = 1;len_j<=len_i;len_j++)
{
/********************* 第一个数是礼拜几,就先打印几个数的空格 ************/
if(m_i-1)
{
while(m_i-1)
{
printf(" ");
m_i--;
m++;
n++;
}
}
/*********************** 每打印7个数换行 ******************************/
if(len_j-1 && !((len_j-1+m)%7))
{
printf("\n\n");
}
/******************** 打印的日期数字也占一个位置 ************************/
while(n)
{
printf(" ");
n--;
}
/*************** 个位日期空两个格,两位日期空一个格 ********************/
if(len_j<10)
{
if(len_j == c)
{
printf("[%d]",len_j);
}
else
{
printf(" %d",len_j);
}
}
if(len_j >= 10)
{
if(len_j == c)
{
printf(" [%d]",len_j);
}
else
{
printf("%d",len_j);
}
}
}
printf("\n\n\n\nYou input data : %d-%d-%d",a,b,c);
}
不错,手动滑稽
页:
[1]