前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第三天、计算某日是该年的第几天

第三天、计算某日是该年的第几天

作者头像
Jack_Cui
发布2017-12-28 12:11:23
6000
发布2017-12-28 12:11:23
举报
文章被收录于专栏:Jack-CuiJack-Cui

       编写一个计算天数的程序,用户从键盘中输入年、月、日,在屏幕中输出此日期是该年的第几天。 C代码:

代码语言:javascript
复制
/*第三天、计算某日是该年的第几天*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    /*参数依次为年、月、日、计算天数、for循环初始值*/
    /*注意:days赋初始值0,不赋值,变量的值不确定,会导致运行崩溃*/
    int year,month,day,days = 0,i = 0;
    int average_year[12] = {31,28,31,30,31,30,31,31,30,31,30,31};    //平年
    int leap_year[12] = {31,29,31,30,31,30,31,31,30,31,30,31};        //闰年
    printf("请输入要查询的日期,例如:1993年1月30日\n");
    scanf("%d年%d月%d日",&year,&month,&day);
    /*能被400整除,或者不能被100整除但能被4整出的年份为闰年*/
    if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0)                        
    {
        /*数组的第一个元素的索引值为0,将month月的前几个月相加*/
        for(i;i <= month - 2;i++)
            days += leap_year[i];
        /*将month月的day天加上,为最终的天数*/
        days += day;
    }
    else        /*不满足,则为平年*/
    {
        /*同上*/
        for(i;i <= month - 2;i++)
            days += average_year[i];
        days += day;
    }
    printf("%d年%d月%d日是%d年的第%d天\n",year,month,day,year,days);
    system("pause");
}

结果显示:

Visual Studio 2012
Visual Studio 2012

python代码,C代码的升级版,可以进行输入判断:

代码语言:javascript
复制
def leap(a):
    if (a % 4 == 0) & (a % 100 != 0) | (a % 400 == 0):
        return 1
    else:
        return 0

def number(y,m,d):
    result = 0
    average_year = (31,28,31,30,31,30,31,31,30,31,30,31)    #平年的元组
    leap_year = (31,29,31,30,31,30,31,31,30,31,30,31)       #闰年的元组
    if (1 <= y <= 5000) & (1 <= m <= 12) & (1 <= d <=31) & leap(y) & (d <= leap_year[m-1]):
        for i in range(0,m-1):
            result += leap_year[i]
    elif (1 <= y <= 5000) & (1 <= m <= 12) & (1 <= d <=31) & (leap(y) == 0) & (d <= average_year[m-1]):
        for i in range(0,m-1):
            result += average_year[i]
    else:
        result = 0
        d = 0
    result += d
    return result

def tranform(contents):
    if ('年' in contents) & ('月'in contents) & ('日' in contents) & (' ' not in contents):
        str_len = len(contents)
        for i in range(1,str_len):
            if contents[i] == '年':
                year = int(contents[0:i])       #input()接收的是字符串
                year_num = i + 1
            if contents[i] == '月':
                month = int(contents[year_num:i]) #用int()强制转换成整型
                month_num = i + 1
            if contents[i] == '日':  
                day = int(contents[month_num:i])
        return (year,month,day)
    else:
        return 0

choose = 1    
while choose:            
    contents = input('请输入要查询的日期,查询范围公元1年-公元5000年,例如:1993年1月30日\n')
    t = tranform(contents)
    if t != 0:
        result = number(t[0],t[1],t[2])
        if result != 0:
            print('第%d天' %(result))
            while True:
                choose = input('输入‘是’继续查询,输入‘否’放弃查询\n')
                if ('是' in choose) | ('否' in choose) & (len(choose) == 1):
                    if '是' in choose:
                        choose = 1
                        break
                    else:
                        choose = 0
                        break
                else:
                    print('输入选择错误,请重新输入\n')
        else:
            print('输入日期错误,请重新输入\n')
    else:
        print('输入格式错误,请重新输入\n')

结果显示:

IDLE
IDLE
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档