C语言经典算法【每日一练】19

题目:给出年、月、日,计算该日是该年的第几天?

分析:

用数组列出每个月的天数,即:

1月    2月    3月    4月    5月   6月   7月   8月   9月  10月  11月  12月

31     28      31      30      31      30    31    31    30    31     30      31

默认2月是28天,要判断年份是否是闰年,闰年2月29天,则总天数+1

判断是否为闰年:1、能被4整除且不能被100整除;2、被100整除且能被400的整除

#include 

int main ()
{
int year,mon,day,sum,p;
    printf("input year month day\n");//键盘输入日期
    scanf("%d%d%d",&year,&mon,&day);
    sum=getDate(year, mon,day);//计算天数

   printf("%d %d %d is the %d day of this year\n",year,mon,day,sum);
  return 0;
 }


//给出年、月、日,计算该日是该年的第几天?
//判断是否闰年
int flag(int year) {
    //判断是否为闰年:1、能被4整除且不能被100整除;2、被100整除且能被400的整除
    int run = 0;
    if (year%4 == 0) {
        if (year/100 != 0) {
            run = 1;
        }
        if (year%100 == 0 && year%400 == 0) {
            run = 1;
        }
    }
    return run;
}

int getDate(int year, int month, int day) {
    int s = 0;
    int a[12] ={31,28,31,30,31,30,31,31,30,31,30,31};
    for(int i = 0; i < month - 1; i++) {
        s = s + a[i];
    }
    s = s + day;
    int p = flag(year);
    if(month>=3&&p==1)//闰年要多一天
    s++;
    return s;
}

结构体方式实现:

#include
struct Date
{
    int year;
    int month;
    int day;
} date;


void main()
{
    int days =0;
    scanf("%d %D %d", &date.year, &date.month, &date.day);
    switch (date.month)
    {
    case 1:
        days = date.day;
        break;
    case 2:
        days = date.day + 31;
        break;
    case 3:
        days = date.day + 59; //31 + 28
        break;
    case 4:
        days = date.day + 90; // 59 + 31
        break;
    case 5:
        days = date.day + 120; // 90 + 30
        break;
    case 6:
        days = date.day + 151; // 120 + 31
        break;
    case 7:
        days = date.day + 181;// 151 + 30
        break;
    case 8:
        days = date.day + 212; // 181 + 31
        break;
    case 9:
        days = date.day + 243; // 212 + 31
        break;
    case 10:
        days = date.day + 273; // 243 + 30
        break;
    case 11:
        days = date.day + 304; // 273 + 31
        break;
    case 12:
        days = date.day + 334; // 304 + 30
        break;
    default:
        break;
    }
    if (date.year % 4 == 0 && (date.year%100 !=0 || (date.year % 100==0 && date.year%400 ==0))&& date.month >= 3) {
        days +=1;
    }
    printf("days=%d", days);
}

执行结果:

C语言经典算法【每日一练】19_第1张图片

你可能感兴趣的:(C语言,c语言,开发语言,c++,数据结构)