| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1553 人关注过本帖, 1 人收藏
标题:请各位帮忙解释一下这段源代码 希望能详细的解释 谢谢!!
只看楼主 加入收藏
lai832
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-6-10
收藏
得分:0 
还你(有部分地方已改)
#include<stdio.h>
#include<stdlib.h>

char* month_str[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
//定义月的名字
char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
//字一周七天的名字
int IsLeapYear(int year)  /*find out the year is leap year or not*/
{
  if((year%4==0&&year%100!=0)||(year%400==0))//润年返回1
    return 1;
  else//否则返回0
    return 0;
}

int month_day(int year,int month)//找定义各个月的最大天数
{
  int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
  if(IsLeapYear(year)&&month==2)//如是润年的2月返回29
    return 29;
  else//否则返回当月的最大天数
    return(mon_day[month-1]);
}

int DaySearch(int year,int month,int day) /*search what day this day is*/
{
  int c=0;
  float s;
  int m;
  for(m=1;m<month;m++)//计算yy-mm月前的几个月的天数和
    c=c+month_day(year,m);
  c=c+day;//再加上mm月的天数 (输入的day)
  s=year-1+(float)(year-1)/4+(float)(year-1)/100+(float)(year-1)/400-40+c;
//以2040年为参考;year-1:减去本年;+(float)(year-1)/4+(float)(year-1)/100+(float)(year-1)/400:补上润年; -40:修正
  if(year>2039)//参考年及后面的年份-1天;修正
    s=s-1;
  return ((int)s%7);//计算当天是星期几
}

int PrintAllYear(int year)/*print the all year*/
{
  int temp;
  int i,j;
  printf("\n%d Calander\n",year);
  for(i=1;i<=12;i++)//输出一年的日历
  {
    printf("\n%s\n",month_str[i-1]);
//    printf("0  1  2  3  4  5  6  \n");
    printf("Sun Mon Tue Wed Thu Fri Sat  \n");
    temp=DaySearch(year,i,1);
    for(j=1;j<=month_day(year,i)+temp;j++)//输出一个月的日历
    {
      if(j-temp<=0)
        printf("    ");
      else
        printf("%3d ",j-temp);
      if(j%7==0)//输完一周(周六)后回车换行输出下一周
        printf("\n");
    }
  }
  return 0;
}

int main()
{
  int option,da;
  char ch;
  int year,month,day;
  while(1)
  {
    printf("\nPlease select the service you need:\n");//输出菜单
    printf("\n1 Search what day the day is");
    printf("\n2 Search whether the year is leap year or not");
    printf("\n3 Print the calander of the whole year");
    printf("\n4 Exit\n");
    scanf("%d",&option);//选择
    switch(option)//事件选择
    {
      case 1://查询某天是周几
           while(1)
           {
             printf("\nPlease input the year,month and day(XXXX,XX,XX):");
             scanf("%d,%d,%d,%c",&year,&month,&day);
             da=DaySearch(year,month,day);
             printf("\n%d-%d-%d is %s,do you want to continue?(Y/N)",year,month,day,week[da]);
             fflush(stdin);
             scanf("%c",&ch);
             if(ch=='N'||ch=='n')
               break;
           }
           break;
      case 2://查询某年是否润年
           while(1)
           {
             printf("\nPlease input the year which needs searched?(XXXX)");
             scanf("%d",&year);
             if(IsLeapYear(year))
               printf("\n%d is Leap year,do you want to continue?(Y/N)",year);
             else
               printf("\n%d is not Leap year,do you want to continue(Y/N)?",year);
             fflush(stdin);
             scanf("%c",&ch);
             if(ch=='N'||ch=='n')
               break;
           }
           break;
      case 3://输出某年的日历
           while(1)
           {
             printf("\nPlease input the year which needs printed(XXXX)");
             scanf("%d",&year);
             PrintAllYear(year);
             printf("\nDo you want to continue to print(Y/N)?");
             fflush(stdin);
             scanf("%c",&ch);
             if(ch=='N'||ch=='n')
               break;
           }
           break;
      case 4://退出
           fflush(stdin);
      printf("Are you sure?(Y/N)");
      scanf("%c",&ch);
      if(ch=='Y'||ch=='y')
        exit(0);
      break;
      default:
              printf("\nError:Sorry,there is no this service now!\n");
      break;
    }
  }return 0;
}
2008-06-26 13:47
hunterwolf
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-6-25
收藏
得分:0 
非常感谢!!
2008-06-26 13:59
hunterwolf
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-6-25
收藏
得分:0 
请问各位,如何让这段程序显示的当前页与系统的日期为准,显示每一天(显示出日及对应的星期)?系统变到下一月,其自动翻到下一月。
2008-06-28 22:34
coming
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2008-4-20
收藏
得分:0 
什么闰年多一天少一天现在我都没怎么弄明白...真是愚钝...
2008-06-29 00:40
hunterwolf
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-6-25
收藏
得分:0 
请问是不是要加什么函数?
2008-06-29 16:40
hnyyzy2008
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2008-6-29
收藏
得分:0 
dfdf
2008-06-29 16:49
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
话说,你看看time.h里面的函数嘛……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-29 16:52
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
这个仔细分析下好了...

学习需要安静。。海盗要重新来过。。
2008-06-29 16:57
hunterwolf
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-6-25
收藏
得分:0 
void getdate(struct date *d)
是不是要用这个函数?但是我不会用
请各位高手帮忙
2008-06-29 17:24
快速回复:请各位帮忙解释一下这段源代码 希望能详细的解释 谢谢!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019551 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved