Freedy_S 发表于 2022-10-13 15:45:28

菜鸡思路写的数组课后作业练习

新人写的代码{:9_229:} 各位大佬轻喷,我写的真的是麻烦啊!!我再去钻研钻研小甲鱼的答案去!

生命计算器那一题

#include<stdio.h>

int main()
{
    int year, month, day;
    int year1, month1, day1;
    int days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int month_, count, count1;
    long sum = 0;

    printf("请输入你的生日(如1988.05.20):");
    scanf("%d.%d.%d", &year, &month, &day);

    printf("请输入今年日期(如2016.03.28):");
    scanf("%d.%d.%d", &year1, &month1, &day1);

    for(year += 1; year < year1; year++)//从 出生第二年 到 当前日期到前一年 整年的天数
    {
      if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
      {
            sum += 366;
      }
      else
      {
            sum += 365;
      }
    }
   
    month_ = month;

    for(month += 1; month <= 12; month++)//出生月份的下一个月 到 年底的时间
    {
      if((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month == 2)
      {
            for(; month <= 12; month++)
            {
                sum += days;
            }
            sum = sum + 1;
      }
      else
      {
            for(; month <= 12; month++)
            {
                sum += days;
            }
      }

      switch(month_)//生日当月剩余天数
      {
            case1: sum = sum + (days - day);break;
            case2: sum = sum + (days - day);break;
            case3: sum = sum + (days - day);break;
            case4: sum = sum + (days - day);break;
            case5: sum = sum + (days - day);break;
            case6: sum = sum + (days - day);break;
            case7: sum = sum + (days - day);break;
            case8: sum = sum + (days - day);break;
            case9: sum = sum + (days - day);break;
            case 10: sum = sum + (days - day);break;
            case 11: sum = sum + (days - day);break;
            case 12: sum = sum + (days - day);break;
      }

      //从当前日期的年初 到 当前日期前一个月 的天数
      if((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month1 >= 3)
      {
            for(count = 1; count < month1; count++)
            {
                sum += days;
            }
            sum += 1;
      }
      else
      {
            for(count = 1; count < month1; count++)
            {
                sum += days;
            }
      }

      //当前日期 当前月份下的“日”的天数
      for(count1 = 1; count1 <= day1; count1++)
      {
            sum += 1;
      }

      printf("你在这个世界总共生存类%ld天\n", sum);
    }
   
    return 0;
}

jackz007 发表于 2022-10-13 15:54:53

#include <stdio.h>
#include <time.h>

void today(int * year , int * month , int * day)
{
      time_t T                                                                                                      ;
      struct tm * TM                                                                                                ;
      time(& T)                                                                                                   ;
      TM = localtime(& T)                                                                                           ;
      * year   = TM -> tm_year + 1900                                                                               ;
      * month= TM -> tm_mon+ 1                                                                                  ;
      * day    = TM -> tm_mday                                                                                    ;
}

int leapyear(int y)
{
      return ((! (y % 4) && y % 100) || ! (y % 400)) ? 1 : 0                                                      ;
}

int monthdays(int y , int m)
{
      int r , md[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}                                             ;
      r = 0                                                                                                         ;
      if(y >= 1900 && y <= 2999 && m > 0 && m < 13) {
                r = md                                                                                       ;
                if(leapyear(y) && m == 2) r += 1                                                                      ;
      }
      return r                                                                                                      ;
}

int check(int y , int m , int d)
{
      int e , r                                                                                                   ;
      r = 0                                                                                                         ;
      if(y >= 1900 && y <= 2999 && m > 0 && m < 13 && d >= 1 && d <= monthdays(y , m)) r = 1                        ;
      return r                                                                                                      ;
}

int days(int y[] , int m[] , int d[])
{
      int a , b , ds                                                                                                ;
      ds = 0                                                                                                      ;
      if(y > y || (y == y && m < m) || (y == y && m == m) && d <= d) {
                if(y == y && m == m) {
                        ds = d - d                                                                              ;
                } else if(y == y) {
                        ds = monthdays(y , m) - d                                                            ;
                        for(b = m + 1 ; b < m ; b ++) ds += monthdays(y , b)                                 ;
                        ds += d                                                                                    ;
                } else {
                        ds = monthdays(y , m) - d                                                            ;
                        for(b = m + 1 ; b < 13 ; b ++) ds += monthdays(y , b)                                 ;
                        for(a = y + 1 ; a < y ; a ++) ds += (leapyear(a)) ? 366 : 365                           ;
                        for(b = 1 ; b < m ; b ++) ds += monthdays(y , b)                                        ;
                        ds += d                                                                                    ;
                }
      }
      return ds + 1                                                                                                 ;
}

int years(int y[] , int m[] , int d[])
{
      int ys , a                                                                                                    ;
      ys = 0                                                                                                      ;
      if(y > y) {
                ys = y - y                                                                                    ;
                if(m > m || (m == m && d > d)) ys --                                                ;
      }
      return ys                                                                                                   ;
}

int main(void)
{
      int y , m , d                                                                                        ;
      today(& y , & m , & d)                                                                               ;
      printf("今天是 : %4d-%02d-%02d\n" , y , m , d)                                                       ;
      printf("输入您的出生日期 (y-m-d) : ")                                                                         ;
      scanf("%d-%d-%d" , & y , & m , & d)                                                                  ;
      printf("您输入的出生日期是 : %04d-%02d-%02d\n" , y , m , d)                                          ;
      if(check(y , m , d) && (y > y || (y == y && m < m) || (y == y && m == m && d <= d))) {
                printf("今天是阁下生命中的第 【%5d】 天!\n" , days(y , m , d))                                        ;
                if(m == m && d == d) {
                        printf("   今天是阁下 【%2d】 周岁的生辰!\n" , years(y , m , d))                            ;
                        printf("                   祝阁下生日快乐!\n")                                                ;
                } else {         
                        printf("         阁下已经 【%2d】 周岁了!\n" , years(y , m , d))                            ;
                }
      } else {
                printf("日期输入错误!")                                                                              ;
      }
}
页: [1]
查看完整版本: 菜鸡思路写的数组课后作业练习