使用 C++ 编写万年历程序

本文介绍了一个简单的万年历程序,该程序能够显示输入年份中各个月份的具体日期排列情况。通过计算从公元元年到指定年份的总天数来确定每月第一天是周几,并据此展示日历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输入要查看的年份(要求为公元元年以后),就可以输出这一年每个月份的天数。

例如输入:2018

本程序为实现万年历的功能,请输入要查找的年份:
2018
一月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
1       2       3       4       5       6       7
8       9       10      11      12      13      14
15      16      17      18      19      20      21
22      23      24      25      26      27      28
29      30      31
二月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
                        1       2       3       4
5       6       7       8       9       10      11
12      13      14      15      16      17      18
19      20      21      22      23      24      25
26      27      28
三月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
                        1       2       3       4
5       6       7       8       9       10      11
12      13      14      15      16      17      18
19      20      21      22      23      24      25
26      27      28      29      30      31
四月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
                                                1
2       3       4       5       6       7       8
9       10      11      12      13      14      15
16      17      18      19      20      21      22
23      24      25      26      27      28      29
30
五月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
        1       2       3       4       5       6
7       8       9       10      11      12      13
14      15      16      17      18      19      20
21      22      23      24      25      26      27
28      29      30      31
六月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
                                1       2       3
4       5       6       7       8       9       10
11      12      13      14      15      16      17
18      19      20      21      22      23      24
25      26      27      28      29      30
七月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
                                                1
2       3       4       5       6       7       8
9       10      11      12      13      14      15
16      17      18      19      20      21      22
23      24      25      26      27      28      29
30      31
八月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
                1       2       3       4       5
6       7       8       9       10      11      12
13      14      15      16      17      18      19
20      21      22      23      24      25      26
27      28      29      30      31
九月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
                                        1       2
3       4       5       6       7       8       9
10      11      12      13      14      15      16
17      18      19      20      21      22      23
24      25      26      27      28      29      30
十月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
1       2       3       4       5       6       7
8       9       10      11      12      13      14
15      16      17      18      19      20      21
22      23      24      25      26      27      28
29      30      31
十一月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
                        1       2       3       4
5       6       7       8       9       10      11
12      13      14      15      16      17      18
19      20      21      22      23      24      25
26      27      28      29      30
十二月
星期一  星期二  星期三  星期四  星期五  星期六  星期日
                                        1       2
3       4       5       6       7       8       9
10      11      12      13      14      15      16
17      18      19      20      21      22      23
24      25      26      27      28      29      30
31
Process returned 0 (0x0)   execution time : 4.786 s
Press any key to continue.

代码如下:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int Week(int day)
{
    //这一年 1 月 1 日是星期几
    int week = (day % 7) +1;
    cout << "Monday\tTuesday\tWednesdayThursdayFriday\tSaturdaySunday" << endl;
    for(int i = 0; i < week -1; i++){
        cout << "\t";
    }//打印第一天前面的空格
}
int main()
{
    cout << "please input the year" << endl;
    int ye;
    cin >> ye;   //要查看的年份
    int year = ye - 1;
    //从公元元年 1 月 1 日到这一年 1 月 1 日一共的天数
    int day = ((year / 4) - (year / 100) + (year / 400)) * 366 + (year - ((year / 4) - (year / 100) + (year / 400))) * 365;
    int month1[31] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
    int month2b[28] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28};
    int month2a[29] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29};
    int month4[30] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30};
    int Jan = sizeof(month1) / sizeof(0);
    int Feb;
    int Apr = sizeof(month4) / sizeof(0);
    //一月
    cout << "January" << endl;
    Week(day);
    for(int i = 0; i < sizeof(month1) / sizeof(0); i++){
        cout << month1[i];
        if(((day + month1[i]) % 7) == 0)
            cout << "\n";
        else
            cout << "\t";
    }
    //二月
    int day1 = day + Jan;   //二月之前的天数
    if((day1 % 7) != 0)
        cout << "\n";
    cout << "February" << endl;
    Week(day1);
    if((ye % 4 == 0 && ye % 100 != 0) || ye % 400 == 0){
        for(int i = 0; i < sizeof(month2a) / sizeof(0); i++){
            cout << month2a[i];
            if(((day1 + month2a[i]) % 7) == 0)
                cout << "\n";
            else
                cout << "\t";
        }
        Feb = sizeof(month2a) / sizeof(0);
    }
    else
    {
        for(int i = 0; i < sizeof(month2b) / sizeof(0); i++){
            cout << month2b[i];
            if(((day + Jan + month2b[i]) % 7) == 0)
                cout << "\n";
            else
                cout << "\t";
        }
        Feb = sizeof(month2b) / sizeof(0);
    }
    //三月
    int day2 = day + Jan + Feb;
    if((day2 % 7) != 0)
        cout << "\n";
    cout << "March" << endl;
    Week(day2);
    for(int i = 0; i < sizeof(month1) / sizeof(0); i++){
        cout << month1[i];
        if(((day2 + month1[i]) % 7) == 0)
            cout << "\n";
        else
            cout << "\t";
    }
    //四月
    int day3 = day + Jan * 2 + Feb;
    if((day3 % 7) != 0)
        cout << "\n";
    cout << "April" << endl;
    Week(day3);
    for(int i = 0; i < sizeof(month4) / sizeof(0); i++){
        cout << month1[i];
        if(((day3 + month1[i]) % 7) == 0)
            cout << "\n";
        else
            cout << "\t";
    }
    //五月
    int day4 = day + Jan * 2 + Feb + Apr;
    if((day4 % 7) != 0)
        cout << "\n";
    cout << "May" << endl;
    Week(day4);
    for(int i = 0; i < sizeof(month1) / sizeof(0); i++){
        cout << month1[i];
        if(((day4 + month1[i]) % 7) == 0)
            cout << "\n";
        else
            cout << "\t";
    }
    //六月
    int day5 = day + Jan * 3 + Feb + Apr;
    if((day5 % 7) != 0)
        cout << "\n";
    cout << "June" << endl;
    Week(day5);
    for(int i = 0; i < sizeof(month4) / sizeof(0); i++){
        cout << month1[i];
        if(((day5 + month1[i]) % 7) == 0)
            cout << "\n";
        else
            cout << "\t";
    }
    //七月
    int day6 = day + Jan * 3 + Feb + Apr * 2;
    if((day6 % 7) != 0)
        cout << "\n";
    cout << "July" << endl;
    Week(day6);
    for(int i = 0; i < sizeof(month1) / sizeof(0); i++){
        cout << month1[i];
        if(((day6 + month1[i]) % 7) == 0)
            cout << "\n";
        else
            cout << "\t";
    }
    //八月
    int day7 = day + Jan * 4 + Feb + Apr * 2;
    if((day7 % 7) != 0)
        cout << "\n";
    cout << "August" << endl;
    Week(day7);
    for(int i = 0; i < sizeof(month1) / sizeof(0); i++){
        cout << month1[i];
        if(((day7 + month1[i]) % 7) == 0)
            cout << "\n";
        else
            cout << "\t";
    }
    //九月
    int day8 = day + Jan * 5 + Feb + Apr * 2;
    if((day8 % 7) != 0)
        cout << "\n";
    cout << "September" << endl;
    Week(day8);
    for(int i = 0; i < sizeof(month4) / sizeof(0); i++){
        cout << month1[i];
        if(((day8 + month1[i]) % 7) == 0)
            cout << "\n";
        else
            cout << "\t";
    }
    //十月
    int day9 = day + Jan * 5 + Feb + Apr * 3;
    if((day9 % 7) != 0)
        cout << "\n";
    cout << "October" << endl;
    Week(day9);
    for(int i = 0; i < sizeof(month1) / sizeof(0); i++){
        cout << month1[i];
        if(((day9 + month1[i]) % 7) == 0)
            cout << "\n";
        else
            cout << "\t";
    }
    //十一月
    int day10 = day + Jan * 6 + Feb + Apr * 3;
    if((day10 % 7) != 0)
        cout << "\n";
    cout << "November" << endl;
    Week(day10);
    for(int i = 0; i < sizeof(month4) / sizeof(0); i++){
        cout << month1[i];
        if(((day10 + month1[i]) % 7) == 0)
            cout << "\n";
        else
            cout << "\t";
    }
    //十二月
    int day11 = day + Jan * 6 + Feb + Apr * 4;
    if((day11 % 7) != 0)
        cout << "\n";
    cout << "December" << endl;
    Week(day11);
    for(int i = 0; i < sizeof(month1) / sizeof(0); i++){
        cout << month1[i];
        if(((day11 + month1[i]) % 7) == 0)
            cout << "\n";
        else
            cout << "\t";
    }
}

 

#include int main (void) { int year,month,j,i,day1,day2,one1,one2,w; printf("enter a year:"); scanf("%d",&year); printf("\n\n"); printf("---------------------%d---------------------\n\n",year); one1=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7; for(month=1;month<=12;month+=2) { printf(" ",month,year); printf(" \n",month+1,year); printf("-------------------- --------------------\n"); printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六\n"); switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day1=31;break; case 4: case 6: case 9: case 11:day1=30;break; default:if(!(year%4)&&(year0)||!(year%400)) day1=29; else day1=28; } for(j=1;j<=one1;j++) { if(one1==7) break; else printf(" "); } for(i=1;i<=7-one1;i++) printf("%2d ",i); printf(" "); switch(month+1) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day2=31;break; case 4: case 6: case 9: case 11:day2=30;break; default:if(!(year%4)&&(year0)||!(year%400)) day2=29; else day2=28; } one2=(one1+day1)%7; for(j=1;j<=one2;j++) { if(one2==7) break; if(j!=7) printf(" "); } for(i=1;i<=7-one2;i++) printf("%2d ",i); printf("\n"); for(i=8-one1;i<=14-one1;i++) printf("%2d ",i); printf(" "); for(i=8-one2;i<=14-one2;i++) printf("%2d ",i); printf("\n"); for(i=15-one1;i<=21-one1;i++) printf("%2d ",i); printf(" "); for(i=15-one2;i<=21-one2;i++) printf("%2d ",i); printf("\n"); for(i=22-one1;i<=28-one1;i++) printf("%2d ",i); printf(" "); for(i=22-one2;i<=28-one2;i++) printf("%2d ",i); printf("\n"); for(i=29-one1;i<=35-one1&&i<=day1;i++) printf("%2d ",i); printf(" "); for(w=1;w<=35-day1-one1;w++) printf(" "); for(i=29-one2;i<=35-one2&&i<=day2;i++) printf("%2d ",i); printf("\n"); for(i=36-one1;i<=day1;i++) printf("%2d ",i); for(w=1;w<=35-day1-one1;w++) printf(" "); if(day1==31&&(one1==4||one1==3||one1==2||one1==1||one1==7)) printf(" "); if(day1==30&&(one1==4||one1==3||one1==2||one1==1||one1==7)) printf(" "); for(i=36-one2;i<=day2;i++) printf("%2d ",i); printf("\n-------------------- --------------------\n\n"); printf("\n"); one1=(one2+day2)%7; } printf("---------------------%d---------------------\n",year); getchar(); printf("按任意键退出"); getchar(); return 0; }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值