网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月24日漏签0天
c++吧 关注:625,629贴子:2,112,513
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 10回复贴,共1页
<<返回c++吧
>0< 加载中...

[原创] C语言实现:万年历(1)

  • 只看楼主
  • 收藏

  • 回复
  • sohu2000000
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
      经过近这几天的努力,终于写完了这个"万年历"的程序了,共享一下, 特别是同"勉"共享
[需求]
    请打印出任意年份的日历
[代码]
代码 #include <stdio.h>
#define LMonth 31
#define SMonth 30
#define VMonth 28
typedef enum {
Sun,
Mon,
Jue,
Wed,
Thu,
Fri,
Sat
} WEEK;
typedef enum {
January = 1,
February,
Match,
Apirl,
May,
June,
July,
August,
September,
October,
November,
December
} MONTH;
void printMonHead(void)
{
printf(" Sun Mon Jue Wed Thu Fri Sat\n");
}
void printMonth(const WEEK firstDay, int length )
{
WEEK weekDay = firstDay % 7;
int i;
printMonHead();
for (i=0; i<weekDay;++i)
{
printf(" ");
}
for(i=1;i<=length;++i)
{
weekDay = (++weekDay)%7;
printf("%7d", i);
if(weekDay==0) printf("\n");
}
printf("\n");
}
int isLeapYear(const int yr)
{
return ( yr%( yr%100 ? 4:400) ? 0 : 1);
}
int getYearDay(const int year)
{
int lastYear = year-1;
int yearNum = lastYear-1899;
int walker,counter=0;
for(walker=1900; walker < year; ++walker)
{
if(isLeapYear(walker)==1)
++counter;
}
return (365*yearNum+counter+1)%7;
}
void printYear(const int y)
{
WEEK yDay = getYearDay(y);
int vDay = isLeapYear(y);
int monWeeks[13];
int monLen [13];
monLen[0]=0;
monLen[January]=31; monLen[February]=28+vDay; monLen[Match]=31;
monLen[Apirl]=30; monLen[May]=31; monLen[June]=30;
monLen[July]=31; monLen[August]=31; monLen[September]=30;
monLen[October]=31; monLen[November]=30; monLen[December]=31;
monWeeks[0]=0;
monWeeks[January] = yDay;
monWeeks[February] = ((monWeeks[January] +monLen[January] )%7);
monWeeks[Match] = ((monWeeks[February] +monLen[February] )%7);
monWeeks[Apirl] = ((monWeeks[Match] +monLen[Match] )%7);
monWeeks[May] = ((monWeeks[Apirl] +monLen[Apirl] )%7);
monWeeks[June] = ((monWeeks[May] +monLen[May] )%7);
monWeeks[July] = ((monWeeks[June] +monLen[June] )%7);
monWeeks[August] = ((monWeeks[July] +monLen[July] )%7);
monWeeks[September] = ((monWeeks[August] +monLen[August] )%7);
monWeeks[October] = ((monWeeks[September] +monLen[September] )%7);
monWeeks[November] = ((monWeeks[October] +monLen[October] )%7);
monWeeks[December] = ((monWeeks[November] +monLen[November] )%7);



  • sohu2000000
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

int i;
for(i=January; i<=December; ++i)
{
printf("\n-------------------------------------------------\n");
printf(" %d, %d \n",y,i);
printf("-------------------------------------------------\n");
printMonth(monWeeks[i],monLen[i]);
printf("\n");
}
return;
}
int main(void)
{
// int y3 = 2000;
// int y3 = 1946;
// printYear(y3);
int y;
int quit=0;
do
{
printf("Please enter which Year to Print For You (0 to quit): ");
scanf("%d",&y);
printf("\n");
if(y==0)
quit = 1;
else
printYear(y);
}while(!quit);
return 0;
}
[输出]
Please enter which Year to Print For You (0 to quit): 1973
Please enter which Year to Print For You (0 to quit): 1973
  
-------------------------------------------------
                     1946, 1                     
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat
                    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
-------------------------------------------------
                     1946, 2                     
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat



2025-07-24 10:50:35
广告
不感兴趣
开通SVIP免广告
  • sohu2000000
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
                                         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
-------------------------------------------------
                     1946, 3                     
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat
                                         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
-------------------------------------------------
                     1946, 4                     



  • sohu2000000
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat
             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
-------------------------------------------------
                     1946, 5                     
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat
                           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
-------------------------------------------------
                      1946, 6                     



  • sohu2000000
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat
                                                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
-------------------------------------------------
                     1946, 7                     
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat
             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
-------------------------------------------------
                     1946, 8                     



  • sohu2000000
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat
                                  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
-------------------------------------------------
                     1946, 9                     
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat
      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
-------------------------------------------------
                     1946, 10                     



  • sohu2000000
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat
                    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
-------------------------------------------------
                     1946, 11                     
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat
                                         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
-------------------------------------------------
                     1946, 12                     
-------------------------------------------------
    Sun    Mon    Jue    Wed    Thu    Fri    Sat
      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
  
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/asiainfolf/archive/2010/08/29/5847101.aspx



  • 动漫狂2008
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不错,砖家啊。。。


2025-07-24 10:44:35
广告
不感兴趣
开通SVIP免广告
  • sohu2000000
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼



  • sohu2000000
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
论坛上的同学给出的建议:
QUOTE:
$ cal 9 1752
     September 1752
Su Mo Tu We Th Fr Sa
        1    2   ....
14 15 16 ....
17 18 19 20 21 22 23
...
jamesr 发表于 2010-08-30 08:39
应论坛上同学的建议,新的代码修改如下:
#include <stdio.h>
#include <ctype.h>
#define SYEAR 1900
#define LMonth 31
#define SMonth 30
#define VMonth 28
typedef enum {
     Sun,
     Mon,
     Jue,
     Wed,
     Thu,
     Fri,
     Sat
} WEEK;
typedef enum {
     January = 1,
     February,
     Match,
     Apirl,
     May,
     June,
     July,
     August,
     September,
     October,
     November,
     December
} MONTH;
void
printMonHead(void){
     printf(" Sun Mon Tue Wed Thu Fri Sat\n");
     return;
}
void
printMonth(const WEEK firstDay, unsigned long length ){
     WEEK weekDay = firstDay % 7;
     unsigned long i;
     printMonHead();
     for (i=0; i<weekDay;++i)
         printf(" ");
     for(i=1;i<=length;++i) {
         weekDay = (++weekDay)%7;
         printf("%7d", i);
         if(weekDay==0) printf("\n");
     }
     printf("\n");
     return;
}
unsigned long
isLeapYear(const unsigned long yr){
     return ( yr%( yr%100 ? 4:400) ? 0 : 1);
}
unsigned long
getYearDay(const unsigned long year) {
     unsigned long lastYear = year-1;
     unsigned long yearNum = lastYear-1899;
     unsigned long walker,counter=0;
     for(walker=SYEAR; walker < year; ++walker) {
         if(isLeapYear(walker)==1)
             ++counter;
     }
     return (365*yearNum+counter+1)%7;
}
void
printYear(const unsigned long y, const unsigned long m) {
     WEEK yDay = getYearDay(y);
     unsigned long vDay = isLeapYear(y);



  • sohu2000000
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
     unsigned char* monName [13] = {0,
         "January", "February", "Match", "Apirl",
         "May", "June", "July", "August",
         "September","October", "November", "December"
     };
     unsigned long monLen [13];
     monLen[0]=0;
     monLen[January]=31; monLen[February]=28+vDay; monLen[Match]=31;
     monLen[Apirl]=30; monLen[May]=31; monLen[June]=30;
     monLen[July]=31; monLen[August]=31; monLen[September]=30;
     monLen[October]=31; monLen[November]=30; monLen[December]=31;
     unsigned long monWeeks[13];
     monWeeks[0]=0;
     monWeeks[January] = yDay;
     monWeeks[February] = ((monWeeks[January] +monLen[January] )%7);
     monWeeks[Match] = ((monWeeks[February] +monLen[February] )%7);
     monWeeks[Apirl] = ((monWeeks[Match] +monLen[Match] )%7);
     monWeeks[May] = ((monWeeks[Apirl] +monLen[Apirl] )%7);
     monWeeks[June] = ((monWeeks[May] +monLen[May] )%7);
     monWeeks[July] = ((monWeeks[June] +monLen[June] )%7);
     monWeeks[August] = ((monWeeks[July] +monLen[July] )%7);
     monWeeks[September] = ((monWeeks[August] +monLen[August] )%7);
     monWeeks[October] = ((monWeeks[September] +monLen[September] )%7);
     monWeeks[November] = ((monWeeks[October] +monLen[October] )%7);
     monWeeks[December] = ((monWeeks[November] +monLen[November] )%7);
     printf("\n-------------------------------------------------\n");
     printf(" %s, %d \n",monName[m],y);
     printf("-------------------------------------------------\n");
     printMonth(monWeeks[m],monLen[m]); printf("\n");
     return;
}
int
main(void){
     int yr, mon , ok;
loop:
     do
     {
         ok=1;
         fflush(stdin);
         printf("\nPlease Enter Year(0 to quit): ");
         scanf("%4d",&yr);
         if(yr ==0)
         {
             return 0;
         }
         if(yr < SYEAR)



登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 10回复贴,共1页
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示