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

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

/*第三天、计算某日是该年的第几天*/
#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");
}

结果显示:

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

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')

结果显示:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏HansBug's Lab

2243: [SDOI2011]染色

2243: [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 3113  Solved...

2669
来自专栏微信公众号:Java团长

JavaSE入门篇:程序结构

二、选择结构:从名字就能看出,要选择嘛,到底是要漂亮滴妹子,还是要有钱滴妹子呢!当然,如果是个吊丝码农滴话,那你就不要多想了,还是老老实实码代码吧···

913
来自专栏用户2442861的专栏

awk工作常用技巧

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

642
来自专栏和蔼的张星的图像处理专栏

57. 三数之和双指针加set暴力去重

给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。

1181
来自专栏null的专栏

Shell编程——Shell中的数学运算

在Linux Shell中进行数学运算,通常可以使用的运算符有: 简单运算: let [] (()) 高级运算: expr bc 1、let命令 let命令...

3275
来自专栏IMWeb前端团队

bash 的 Test

原文 bash 中的 test 确实是一个让初学者迷糊的概念,但是理解了之后,发现它并没有深奥的地方。 实际场景 export NVM_DIR="/Users/...

1746
来自专栏运维技术迷

连仕彤博客[Python笔记] IPython使用技巧

帮助 ?:IPython的概述和简介   In [1]: ?   IPython -- An enhanced Interactive Python ====...

2735
来自专栏编舟记

命令式到函数式编程

应用场景:当我们用到 if-elseif-else 的时候,可以考虑使用 Optional 语义。 举例说明:

642
来自专栏King_3的技术专栏

leetcode-771-Jewels and Stones(建立哈希表,降低时间复杂度)

2814
来自专栏ml

HDUOJ----Super Jumping! Jumping! Jumping!

Super Jumping! Jumping! Jumping! Time Limit : 2000/1000ms (Java/Other)   Memory ...

2706

扫码关注云+社区