首页 > 技术文章 > C语言实现简单万年历

tntblog 2020-05-16 15:09 原文

需求:用C语言实现简单万年历

#include <stdio.h>
#include<stdlib.h>
int year, month;
int run[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
int ping[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
char week[7][10] = { "SUN","MON","TUE","WED","THU","FRI","SAT" };
 
bool IsLeap(int year)
{
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))    //判断闰年
    {
        return true;
    }
    else
    {
        return false;
    }
}
void PrintStar()
{
    printf("\t\t\t万年历\t\t\t\n");
    printf("****************************************************\n");
    for (int i = 0; i < 7; i++)
    {
        printf("%s\t", week[i]);
    }
    printf("\n");
}
int DaySum(int year, int month)
{
    int sum = 0;
    for (int i = 1990; i < year; i++)
    {
        if (IsLeap(i))
        {
            sum += 366;
        }
        else
        {
            sum += 365;
        }
    }
    for (int i = 0; i < month - 1; i++)
    {
        if (IsLeap(year))
        {
            sum += run[i];
        }
        else
        {
            sum += ping[i];
        }
    }
    return sum;
}
 
void PrintCal(int sum, int year, int month)
{
    int nRes, nTmp;
    nRes = sum % 7+1;//前面空几格
    nTmp = 7 - nRes;//从第几格开始打印
    for (int i = 0; i < nRes; i++)
    {
        printf("\t");
    }
    if (IsLeap(year))
    {
        for (int i = 1; i < run[month - 1]+1; i++)
        {
            printf("%d\t", i);
            if (nTmp == i || (i - nTmp) % 7 == 0)
            {
                printf("\n");
            }
        }
        printf("\n");
    }
    else
    {
        for (int i = 1; i < ping[month - 1]+1; i++)
        {
            printf("%d\t", i);
            if (nTmp == i || (i - nTmp) % 7 == 0)
            {
                printf("\n");
            }
        }
        printf("\n");
    }
 
}
int main(void)
{
    while (1)
    {
        scanf("%d %d", &year, &month);
        PrintStar();
        PrintCal(DaySum(year, month), year, month);
        printf("****************************************************\n");
    }
    
    return 0;
 
 
}

运行效果如下:

推荐阅读