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

       编写一个计算天数的程序,用户从键盘中输入年、月、日,在屏幕中输出此日期是该年的第几天。 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 条评论
登录 后参与评论

相关文章

来自专栏wannshan(javaer,RPC)

dubbo负载均衡代码分析2(一致性hash策略)

接上篇 https://cloud.tencent.com/developer/article/1109586 说 这篇说dubbo一致性hash负载均衡策略。...

4076
来自专栏butterfly100

ConcurrentHashMap源码阅读

1. 前言 HashMap是非线程安全的,在多线程访问时没有同步机制,并发场景下put操作可能导致同一数组下的链表形成闭环,get时候出现死循环,导致CPU利用...

2897
来自专栏数据结构与算法

BZOJ1269: [AHOI2006]文本编辑器editor

Descriptio 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器。你能帮助他吗? 为了明确任务目标,可可对“文本编辑器...

2647
来自专栏偏前端工程师的驿站

MyBatis魔法堂:即学即用篇

一、前言                                          本篇内容以理解MyBatis的基本用法和快速在项目中实践为目的,...

2066
来自专栏尾尾部落

[剑指offer] 替换空格

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

1221
来自专栏博岩Java大讲堂

Java集合--ConcurrentHashMap原理

3415
来自专栏决胜机器学习

PHP数据结构(一)——顺序结构线性表

PHP数据结构(一)——顺序结构线性表 (原创内容,转载请注明来源,谢谢) 线性表的要求:存在唯一的“第一个”元素与“最后一个”元素,每个元素最多一个前驱和一个...

4638
来自专栏对角另一面

lodash源码分析之数组的差集

外部世界那些破旧与贫困的样子,可以使我内心世界得到平衡。 ——卡尔维诺《烟云》 本文为读 lodash 源码的第十七篇,后续文章会更新到这个仓库中,欢迎 s...

37914
来自专栏数据结构与算法

P3388 【模板】割点(割顶)

题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点。 输入输出格式 输入格式: 第一行输入n,m 下面m行每行输入x,y表示x到y有一条边 输...

3617
来自专栏Java Edge

UML 类图1 类

在UML 2.0的13种图形中,类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A Brief Guide ...

1911

扫码关注云+社区