• C语言实现日期转换问题(要求考虑闰年的问题)


    按如下函数原型用函数编程解决如下的日期转换问题(要求考虑闰年的问题):
    /* 函数功能:  对给定的某年某月某日,计算它是这一年的第几天
    函数参数:  整型变量year、month、day,分别代表年、月、日          
    函数返回值:这一年的第几天 */
    int  DayofYear(int year, int month, int day);
    /* 函数功能:    对给定的某一年的第几天,计算它是这一年的第几月第几日
    函数入口参数:整型变量year,存储年
                     整型变量yearDay,存储这一年的第几天
    函数出口参数:整型指针pMonth,指向存储这一年第几月的整型变量
                     整型指针pDay,指向存储第几日的整型变量
    函数返回值:  无 */
    void  MonthDay(int year, int yearDay, int *pMonth, int *pDay);
    输出如下菜单,用switch语句实现根据用户输入的选择执行相应的操作。
    1. year/month/day -> yearDay
    2. yearDay -> year/month/day
    3. Exit
    Please enter your choice:
    输入提示信息:
    "Please enter year, month, day:"
    "Please enter year, yearDay:"
    输入格式:
    "%d,%d,%d"
    "%d,%d"
    输出提示信息和格式:
    "yearDay = %d
    "
    "month = %d, day = %d
    "
     1 #include    <stdio.h>
     2 #include    <stdlib.h>
     3 int  DayofYear(int year, int month, int day);
     4 void  MonthDay(int year, int yearDay, int *pMonth, int *pDay);
     5 void  Menu(void);
     6 int dayTab[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},                           {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
     7 int main()
     8 {                                
     9     int    year, month, day, yearDay;
    10     char   c;
    11     Menu();             /* 调用Menu函数显示一个固定式菜单 */
    12     c = getchar();      /* 输入选择 */
    13     switch (c)          /* 判断选择的是何种操作 */
    14     {                                
    15     case '1':
    16         printf("Please enter year, month, day:");
    17         scanf("%d,%d,%d", &year, &month, &day);
    18         yearDay = DayofYear(year, month, day);
    19         printf("yearDay = %d
    ", yearDay);
    20         break;
    21     case '2':
    22         printf("Please enter year, yearDay:");
    23         scanf("%d,%d", &year, &yearDay);
    24         MonthDay(year, yearDay, &month, &day);
    25         printf("month = %d,day = %d
    ", month, day);
    26         break;
    27     case '3':
    28         exit(0);   /* 退出程序的运行 */
    29     default:
    30         printf("Input error!");
    31     }
    32     return 0;
    33 }                                
    34 /* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 */
    35 int  DayofYear(int year, int month, int day)
    36 {                                
    37     int  i, leap;
    38     /* 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算;
    39     否则leap值为0,用第0行dayTab[0][i]计算 */
    40     leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
    41     for (i = 1; i < month; i++)
    42     {                                
    43         day = day + dayTab[leap][i];
    44     }
    45     return day;         /* 返回计算出的day的值 */
    46 }                                
    47 /* 函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日 */
    48 void  MonthDay(int year, int yearDay, int *pMonth, int *pDay)
    49 {                                
    50     int  i, leap;
    51     leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
    52     for (i = 1; yearDay > dayTab[leap][i]; i++)
    53     {                                
    54         yearDay = yearDay - dayTab[leap][i];
    55     }
    56     *pMonth = i;        /* 将计算出的月份值赋值给pMonth所指向的变量 */
    57     *pDay = yearDay;   /* 将计算出的日号赋值给pDay所指向的变量 */
    58 }                                
    59 /* 函数功能:显示菜单 */
    60 void  Menu(void)
    61 {                                
    62     printf("1. year/month/day -> yearDay
    ");
    63     printf("2. yearDay -> year/month/day
    ");
    64     printf("3. Exit
    ");
    65     printf("Please enter your choice:");
    66 }                               
    方法一
    
    
    
      1 #include<stdio.h>
      2 int  DayofYear(int year, int month, int day);
      3 void  MonthDay(int year, int yearDay, int *pMonth, int *pDay);
      4 main()
      5 {
      6     int n,year, yearDay, month, day,Month, Day;
      7     do
      8     {
      9         printf("1. year/month/day -> yearDay
    ");
     10         printf("2. yearDay -> year/month/day
    ");
     11         printf("3. Exit
    ");
     12         printf("Please enter your choice:");
     13         scanf("%d", &n);
     14         switch (n)
     15         {
     16         case 1:
     17         {
     18             yearDay = DayofYear(year, month, day);
     19             printf("yearDay = %d
    ", yearDay);
     20             break;
     21         }
     22         case 2:
     23         {
     24             MonthDay(year, yearDay, &Month, &Day);
     25             break;
     26         }
     27         }
     28     }while(n!=3);
     29 }
     30 int  DayofYear(int year, int month, int day)
     31 {
     32     int yearDay = 0, i;
     33     int days[12];
     34     printf("Please enter year, month, day:");
     35     scanf("%d,%d,%d", &year, &month, &day);
     36     if ((year % 4 == 0&&year%100!=0)||(year%100==0&&year%400==0))
     37     {
     38         days[0]=31;
     39         days[1]=29;
     40         days[2]=31;
     41         days[3]=30;
     42         days[4]=31;
     43         days[5]=30;
     44         days[6]=31;
     45         days[7]=31;
     46         days[8]=30;
     47         days[9]=31;
     48         days[10]=30;
     49         days[11]=31;
     50     }
     51     else
     52     {
     53         days[0]=31;
     54         days[1]=28;
     55         days[2]=31;
     56         days[3]=30;
     57         days[4]=31;
     58         days[5]=30;
     59         days[6]=31;
     60         days[7]=31;
     61         days[8]=30;
     62         days[9]=31;
     63         days[10]=30;
     64         days[11]=31;
     65     }
     66     for (i = 0; i < month - 1; i++)
     67     {
     68         yearDay += days[i];
     69     }
     70     yearDay += day;
     71     return yearDay;
     72 }
     73 void  MonthDay(int year, int yearDay, int *pMonth, int *pDay)
     74 {
     75     int month = 0, day;
     76     int days[12];
     77     printf("Please enter year, yearDay:");
     78     scanf("%d,%d", &year, &yearDay);
     79     if ((year % 4 == 0&&year%100!=0)||(year%100==0&&year%400==0))
     80     {
     81         days[0]=31;
     82         days[1]=29;
     83         days[2]=31;
     84         days[3]=30;
     85         days[4]=31;
     86         days[5]=30;
     87         days[6]=31;
     88         days[7]=31;
     89         days[8]=30;
     90         days[9]=31;
     91         days[10]=30;
     92         days[11]=31;
     93     }
     94     else
     95     {
     96         days[0]=31;
     97         days[1]=28;
     98         days[2]=31;
     99         days[3]=30;
    100         days[4]=31;
    101         days[5]=30;
    102         days[6]=31;
    103         days[7]=31;
    104         days[8]=30;
    105         days[9]=31;
    106         days[10]=30;
    107         days[11]=31;
    108     }
    109     do
    110     {
    111         yearDay -= days[month];
    112         month++;
    113     }
    114     while (yearDay >= days[month]);
    115     day = yearDay;
    116     printf("month = %d, day = %d
    ", month+1, day);
    117 }
    方法二
     
  • 相关阅读:
    寻找两个有序数组的中位数
    JAVA设计模式(组合模式)
    excel 操作
    研究生英语-春
    cvs
    Spring课程安排
    Spring的事务管理
    在WEB项目中集成Spring
    计算机网络参考模型
    揭开5G神秘面纱
  • 原文地址:https://www.cnblogs.com/20201212ycy/p/14774857.html
Copyright © 2020-2023  润新知