CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

编写一个程序,实现功能:输入某个年份,打印出该年的日历(含星期信息

楼主Disky(Dsky)2005-06-04 11:32:54 在 C/C++ / C++ 语言 提问

如果有能力解答的话,请用少少的时间来解答一下吧~   关于我期末考试上机的成绩呀!   谢啦!  
  用Turbo   C来实现,请把源码文件发到   niclao@163.com   邮件主题请注明   解答C语言.   谢谢!  
   
  编写一个程序,实现功能:输入某个年份,打印出该年的日历(含星期信息)。  
  要求输出时,每栏输出两个月的日历,每屏输出两栏(四个月),按任意键后输出下一屏。  
  提示计算某年的第一天是星期几的公式如下:  
  [(year-1)+   (year-1)/4-(year-1)/100+(year-1)/400+1]%7 问题点数:0、回复次数:8Top

1 楼mostideal(三甲)回复于 2005-06-04 15:34:43 得分 0

既然时间还早,,我可以慢慢试试。。Top

2 楼ltc_mouse(野地芳菲)回复于 2005-06-10 08:44:52 得分 0

在论坛里搜索一下,有人问过,有人给过答案...Top

3 楼iamltlb(流沙)回复于 2005-06-11 21:20:19 得分 0

这样也可以?Top

4 楼andy_bin(乐逍遥)回复于 2005-06-12 10:18:59 得分 0

//C++版写的  
  //调了半天,好像还有一点点问题~~~  
   
  #include<iostream.h>  
  #include<iomanip.h>  
   
  int   FirstDayOfYear(int   y);  
  int   DayOfMonth(int   m);  
  void   PrintMonth(int   m);  
  void   PrintHead(int   m);  
  bool   IsLeapYear(int   y);  
  //-----------------------------  
  int   weekDay;  
  int   year;  
   
  void   main()  
  {  
  cerr<<"请输入你想要打印的年份:";  
  cin>>year;  
   
  if(year<1)  
  {  
  cerr<<"ERROR   YEAR!"<<endl;  
  return   ;  
  }  
   
  weekDay=FirstDayOfYear(year);  
  cout<<"\n\n"<<year<<"   年\n"   ;  
  cout<<"\n========================================================";  
   
  for(int   i=1;i<=12;i++)  
  PrintMonth(i);  
  }  
   
   
  void   PrintMonth(int   m)//打印天数  
  {  
  PrintHead(m);  
  int   days=DayOfMonth(m);  
  for(int   i=1;i<=days;i++)  
  {  
  cout<<setw(7)<<i;  
  weekDay=(weekDay+1)%7;  
  if(weekDay==0)  
  {  
  cout<<endl;  
  cout<<"             ";  
  }  
  }  
  cout<<endl;  
  }  
   
   
  void   PrintHead(int   m)//打印表头  
  {  
  cout<<"\n"<<setw(6)<<m<<"月         日         一           二           三           四           五         六\n";  
  cout<<"             ";  
   
  for(int   i=0;i<weekDay;i++)  
  cout<<"               ";  
  }  
   
  int   DayOfMonth(int   m)//计算每月的天数  
  {  
  switch(m){  
  case   1:  
  case   3:  
  case   5:  
  case   7:  
  case   8:  
  case   10:  
  case   12:   return   31;//  
  case   4:  
  case   6:  
  case   9:  
  case   11:   return   30;//  
  case   2:  
  if(IsLeapYear(year))  
  return   29;  
  else   return   30;  
  }  
  return   0;  
  }  
  bool   IsLeapYear(int   y)//是否闰年  
  {  
  return   ((y%4==0&&y%100!=0)||y%400==0);  
  }  
   
  int   FirstDayOfYear(int   y)//计算一年的第一天星期几  
  {  
  long   n;  
  n=y*365;  
   
  for(int   i=0;i<y;i++)//补上闰年的天数  
  n+=IsLeapYear(i);  
   
  return   n=n%7;  
  }  
   
  Top

5 楼zhangsong1238(C++ fans)回复于 2005-06-12 10:46:24 得分 0

这个程序主要是算每一个月的开始一天是星期几。。  
  #include<iostream.h>  
  #include<iomanip.h>  
  class   Day  
  {  
  public:  
  Day();  
  Day(int,int);  
          void   SetYear(int);  
  void   SetMonth(int);  
  int   GetYear();  
  int   GetMonth();  
  void   Display(int,int);  
  friend   int   firstDay(Day&);  
  friend   int   allDay_f(Day&);  
  ~Day();  
  protected:  
  int   year,month;  
   
  };  
  Day::Day():year(1900),month(0){}  
  Day::Day(int   y,int   m)  
  {  
  year=y;  
  month=m;  
  }  
  void   Day::SetYear(int   y)  
  {  
  year=y;  
  }  
  void   Day::SetMonth(int   m)  
  {  
  month=m;  
  }  
  int   Day::GetYear()  
  {  
  return   year;  
  }  
  int   Day::GetMonth()  
  {  
  return   month;  
  }  
  void   Day::Display(int   weekday,int   allday)  
  {  
  // int   weekday,allday;  
  // allday=allDay_f();  
  // weekday=firstDay();  
  cout<<"                                             "<<year<<"年"<<endl;  
  cout<<"                                             "<<month<<"月"<<endl;  
  cout<<"           "<<"日       一         二           三         四         五         六"<<endl;  
  // cout<<"         ";  
  for(int   j=1;j<=weekday;j++)  
  cout<<"             ";  
  for(int   i=1;i<=allday;i++)  
  {  
  cout<<setw(6)<<i;  
  weekday=(weekday+1)%7;  
  if(weekday==0)  
  cout<<endl;  
  }  
  cout<<endl;  
  }  
  Day::~Day(){}  
  #include<iostream.h>  
  #include"day_1.h"  
  //int   fd,ad;  
  int   firstDay(Day&d);  
  int   allDay_f(Day&d);  
  void   main()  
  {  
  Day   day1;  
  int   m1,y1,firstday_1,allday_1;  
  char   char1,char2;  
  cout<<"请输入要查询的年_月_"<<endl;  
  cin>>y1>>char1>>m1;  
  day1.SetMonth(m1);  
  day1.SetYear(y1);  
          firstday_1=firstDay(day1);  
  allday_1=allDay_f(day1);  
  day1.Display(firstday_1,allday_1);  
  cin>>char2;  
  }  
  int   firstDay(Day&d)  
  {  
  int   fd;  
  long   n;  
  n=d.year*365;  
  for(int   i=1;i<d.year;i++)  
  if(i%4==0&&i%100!=0||i%400==0)  
  n=n+1;  
   
  switch((d.month-1))  
  {  
  case   0:return   fd=n%7;  
  case   1:return   fd=(n+31)%7;  
  case   2:if(d.year%4==0&&d.year%100!=0||d.year%400==0)  
         
        return   fd=(n+31+29)%7;  
         
        else     return   fd=(n+31+28)%7;  
       
  case   3:if(d.year%4==0&&d.year%100!=0||d.year%400==0)  
         
        return   fd=(n+31+29+31)%7;  
       
                                else   return   fd=(n+31+28+31)%7;  
         
  case   4:if(d.year%4==0&&d.year%100!=0||d.year%400==0)  
         
      return   fd=(n+31+29+31+30)%7;  
         
        else     return   fd=(n+31+28+31+30)%7;  
         
  case   5:if(d.year%4==0&&d.year%100!=0||d.year%400==0)  
         
        return   fd=(n+31+29+31+30+31)%7;  
         
        else     return   fd=(n+31+28+31+30+31)%7;  
         
  case   6:if(d.year%4==0&&d.year%100!=0||d.year%400==0)  
         
        return   fd=(n+31+29+31+30+31+30)%7;  
         
        else     return   fd=(n+31+28+31+30+31+30)%7;  
         
  case   7:if(d.year%4==0&&d.year%100!=0||d.year%400==0)  
         
      return   fd=(n+31+29+31+30+31+30+31)%7;  
              else     return   fd=(n+31+28+31+30+31+30+31)%7;  
         
  case   8:if(d.year%4==0&&d.year%100!=0||d.year%400==0)  
         
        return   fd=(n+31+29+31+30+31+30+31+31)%7;  
         
        else     return   fd=(n+31+28+31+30+31+30+31+31)%7;  
         
  case   9:if(d.year%4==0&&d.year%100!=0||d.year%400==0)  
         
        return   fd=(n+31+29+31+30+31+30+31+31+30)%7;  
         
        else     return   fd=(n+31+28+31+30+31+30+31+31+30)%7;  
         
  case   10:if(d.year%4==0&&d.year%100!=0||d.year%400==0)  
   
  return   fd=(n+31+29+31+30+31+30+31+31+30+31)%7;  
   
        else   return   fd=(n+31+28+31+30+31+30+31+31+30+31)%7;  
         
  case   11:if(d.year%4==0&&d.year%100!=0||d.year%400==0)  
   
  return   fd=(n+31+29+31+30+31+30+31+31+30+31+30)%7;  
   
        else     return   fd=(n+31+28+31+30+31+30+31+31+30+31+30)%7;  
         
  }  
  }  
  int   allDay_f(Day&d)  
  {  
  int   ad;  
  switch(d.month)  
  {  
  case   1:  
  case   3:  
  case   5:  
  case   7:  
  case   8:  
  case   10:  
  case   12:   return   ad=31;  
  case   4:  
  case   6:  
  case   9:  
  case   11:   return   ad=30;  
  case   2:if(d.year%4==0&&d.year%100!=0||d.year%400==0)  
        return   ad=29;  
        else     return   ad=28;  
  }  
  }  
  我自已写的,可能有点乱的。因为以前用习惯了用C,一下子用C++来写没能体会出C++的优点来,反而写乱了Top

6 楼Disky(Dsky)回复于 2005-06-14 23:05:49 得分 0

这条问题是要用C语言来写的,要在Turbo   C里面编写实现!   各位高手能不能想想呀!有一个难题就是  
   
  要求输出时,每栏输出两个月的日历,每屏输出两栏(四个月)  
   
  最重要解决这个问题呀~!Top

7 楼cugwei(伟~~~盈)回复于 2005-06-14 23:51:32 得分 0

来个简单的  
  用了C++的cin和cout,直接改用scanf,和printf就可以了  
  #include<iostream>  
  using   namespace   std;  
   
  const   int   mon[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31};  
   
  int   Is_Leap(int   year){  
  if(year%400==0||(year%4==0&&year%100!=0))   return   1;  
  return   0;  
  }  
   
  void   output(int   fir,int   n){  
  int   i,j;  
  cout<<endl;  
  for(i=1;i<=12;i++){  
  cout<<i<<"月↓"<<endl<<"----------------------------"<<endl<<"     一     二     三     四     五     六     日"<<endl;  
  for(j=1;j<fir;j++)   printf("         ");  
  for(j=1;j<=mon[n][i-1];j++){  
  printf("%4d",j);  
  fir++;  
  if(fir==8){  
  cout<<endl;  
  fir=1;  
  }  
  }  
  if(fir!=1)   cout<<endl;  
  cout<<"----------------------------"<<endl;  
  }  
  cout<<endl;  
  }  
   
  int   main()  
  {  
  int   year,t;  
  while(cout<<"请输入要查询的年号(input   0   to   end):   "&&cin>>year&&year>0){  
  t=year-1;  
  t=(1+t+t/4-t/100+t/400)%7;  
  if(t==0)   t=7;  
  output(t,Is_Leap(year));  
  }  
  return   0;  
  }Top

8 楼cugwei(伟~~~盈)回复于 2005-06-14 23:52:45 得分 0

结果如下:  
   
  请输入要查询的年号(input   0   to   end):   1985  
   
  1月↓  
  ----------------------------  
      一     二     三     四     五     六     日  
                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  
  ----------------------------  
  2月↓  
  ----------------------------  
      一     二     三     四     五     六     日  
                                        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  
  ----------------------------  
  3月↓  
  ----------------------------  
      一     二     三     四     五     六     日  
                                        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  
  ----------------------------  
  4月↓  
  ----------------------------  
      一     二     三     四     五     六     日  
        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  
  ----------------------------  
  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     29     30     31  
  ----------------------------  
  6月↓  
  ----------------------------  
      一     二     三     四     五     六     日  
                                                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  
  ----------------------------  
  7月↓  
  ----------------------------  
      一     二     三     四     五     六     日  
        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  
  ----------------------------  
  8月↓  
  ----------------------------  
      一     二     三     四     五     六     日  
                                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  
  ----------------------------  
  9月↓  
  ----------------------------  
      一     二     三     四     五     六     日  
                                                        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  
  ----------------------------  
  10月↓  
  ----------------------------  
      一     二     三     四     五     六     日  
                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  
  ----------------------------  
  11月↓  
  ----------------------------  
      一     二     三     四     五     六     日  
                                        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  
  ----------------------------  
  12月↓  
  ----------------------------  
      一     二     三     四     五     六     日  
                                                        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  
  ----------------------------  
  Top

相关问题

  • 在<html>中如何用脚本编写一个日历?
  • 如何将日历控件(Calendar)的"星期一"改为“Mon"?
  • 关于日历选项中待办事宜编写的问题????情知点
  • 在日历控件中如何规定用户只能选择每个星期的星期四
  • 能否自定义日历控件中的星期标签文本
  • 如何自定义asp.net日历控件的星期显示格式?
  • 怎样编写一个在任何java手机上能运行得日历软件
  • 编写日历型备忘录-----〉求代码或思路(老板的新想法)即刻分享分数
  • 放帖!日历相关函数库源程序!!!(阴阳日历及转换、生肖、天干地支、节气、星期、星座等!)
  • 给定年份和月份,如何得到这个月的天数和1号为星期几??

关键词

  • allday
  • firstday
  • day
  • 日历
  • year
  • 星期
  • setyear
  • 输出
  • setmonth
  • weekday

得分解答快速导航

  • 帖主:Disky

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo