C语言实现计算已经活了多少天

输入生日,通过系统或者自己输入,获得当前日期,计算已经存活了多少天。

#include<stdio.h>
#include<time.h>
/**
 * 函数介绍:
 * 通过输入生日,通过系统获取今天的日期或者自行输入今天的日期,计算你活了多少天了。
 * 参数介绍:
 * year_now:当前年份
 * month_now:当前月份
 * day_now:当然日子
 * year_b:生日年份
 * month_b:生日月份
 * day_b:生日日子
 */
int alive_days(int year_now, int month_now, int day_now, int year_b,
        int month_b, int day_b) {
    int sum = 0; //活了多少天
    int years = 0; //中途有几年整,比如1999-2001,有一整年。
    int years_arry[200]; //存放中途的整年数,用来判断平年闰年。
    int pingNian = 0;    //平年
    int runNian = 0;    //闰年
    years = year_now - year_b - 1;
    years_arry[0] = 0;
    //整年存入数组
    for (int i = 0; i < years; i++) {
        years_arry[i] = year_now - i - 1;
    }
    if (years_arry[0] > 0) {    //活了超过一年
        for (int i = 0; i < years; i++) {
            if (decide_year(years_arry[i]) == 1) {
                runNian++;
            } else {
                pingNian++;
            }
        }
        sum = pingNian * 365 + runNian * 366;
        sum = (sum + month_days(year_b, month_b) - day_b);
        while (++month_b <= 12) {
            sum = sum + month_days(year_b, month_b);
        }

        sum = sum + day_now;
        while (--month_now >= 1) {
            sum = sum + month_days(year_now, month_now);
        }
    } else {    //活着不到一年
        if (month_now == month_b) {
            sum = day_now - day_b;
        } else {
            sum = sum + month_days(year_b, month_b) - day_b;
            while (++month_b < month_now) {
                sum = sum + month_days(year_b, month_b);
            }
            sum = sum + day_now;
        }
    }

    return sum;
}
/**
 * 函数介绍:
 * 参数为年份与月份,返回这个月有多少天。
 */
int month_days(int year, int month) {
    int sum = 0;
    switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        sum = 31;
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        sum = 30;
        break;
    case 2:
        if (decide_year(year) == 1) {
            sum = 29;
        } else {
            sum = 28;
        }
    }
    return sum;
}
/**
 * 函数介绍:
 * 判断这是平年还是闰年
 * 返回1为闰年,返回0为平年。
 */
int decide_year(int year) {
    int flag = -1;
    if ((year % 4 == 0) && (year % 100 != 0)) {
        flag = 1;
    } else if (year % 400 == 0 && year % 100 == 0) {
        flag = 1;
    } else {
        flag = 0;
    }
    return flag;
}
/**
 * 函数介绍:
 * 程序入口,获取两个时间点。
 */
int main() {
    int year_now;    //当前年
    int month_now;    //当前月
    int day_now;    //当前日
    int year_b;    //生日年
    int month_b;    //生日月
    int day_b;    //生日日
    int days = 0;    //总存活天
    int flag;    //是否自己输入当前日期
    int alive_days(int year_now, int month_now, int day_now, int year_b,
            int month_b, int day_b);
    int month_days(int year, int month);
    int decide_year(int year);

    time_t timep;
    struct tm *p;
    time(&timep);
    p = gmtime(&timep);

    year_now = 1900 + p->tm_year;    //获取系统当前年
    month_now = 1 + p->tm_mon;    //获取系统当前月
    day_now = p->tm_mday;    //获取系统当前日

    //为了避免printf与scanf顺序出问题,设置缓存区为空。
    setvbuf(stdout, NULL, _IONBF, 0);

    printf("请输入您的出生日期:\n");
    printf("年:");
    scanf("%d", &year_b);
    printf("月:");
    scanf("%d", &month_b);
    printf("日:");
    scanf("%d", &day_b);
    printf("--------------------\n");

    printf("系统获取到今天的日期是:%d年%d月%d日\n", year_now, month_now, day_now);
    printf("是否使用当前日期?\n"
            "1.使用当前日期\t2.不使用,自己输入\n在此输入:");
    scanf("%d", &flag);
    if (flag == 2) {
        printf("请输入今天的日期:\n");
        printf("年:");
        scanf("%d", &year_now);
        printf("月:");
        scanf("%d", &month_now);
        printf("日:");
        scanf("%d", &day_now);
    } else {
        printf("使用当前系统时间进行计算!\n");
    }
    printf("--------------------\n");

    printf("您的出生日期为:%d-%d-%d\n", year_b, month_b, day_b);
    printf("今天的日期为:%d-%d-%d\n", year_now, month_now, day_now);
    days = alive_days(year_now, month_now, day_now, year_b, month_b, day_b);
    printf("您已经活了%d天,且行且珍惜。", days);
    return 0;
}

程序运行结果:

1.自己输入当前日期:

2.使用系统提供当前日期

原文地址:https://www.cnblogs.com/lurenjiaAlmost/p/12409032.html

时间: 2024-07-31 23:11:36

C语言实现计算已经活了多少天的相关文章

【C语言】 计算任意2个日期之间的天数

[本文原创于Paul的博客园技术博客.] [本文欢迎转载,转载请以链接形式注明出处.] [本博客所有文章都经博主精心整理,请尊重我的劳动成果.] [C语言] 计算任意2个日期之间的天数 1. 要判断时间的合法性(如果不想判断也可以) 2. 判断两个日期之间的天数 判断输入的年份是不是闰年:年份是否相同:月份是否相同:日是否相同?同年同月最好计算,日数相减就出来了:同年不同月也好计算,计算中间相隔几个月,转换成天数,小的日期距月底有多少天,大的日期距月初多少天,三个数相加:关键是不同年的日期计算:

李洪强漫谈iOS开发[C语言-041]-计算月份天数

李洪强漫谈iOS开发[C语言-041]-计算月份天数 

不同语言的计算精度和范围

Published: 2017-04-13 21:05:00 In Program. tags: Scala 不同语言的计算精度和范围问题 精度是数字中的数字个数,浮点数在计算机中的表达有限制,不能以任意精度存储 尤其是微小的或巨大的数字在运算时经常会有些意外情况, 在处理大数据的时候,数据量大,其中的一些关于数据量的运算很可能造成结果在少量数据时正常,而在大量数据时运算出现错误的情况. 说明 采用计算机计算数据的时候,数据的精度和数据的范围一定要注意,这方面的问题很隐蔽,在这里总结一下, 计算

C语言 &#183; 还款计算

标题: 还款计算 银行贷款的等额本息还款方法是: 每月还固定的金额,在约定的期数内正好还完(最后一个月可能会有微小的零头出入). 比如说小明在银行贷款1万元.贷款年化利率为5%,贷款期限为24个月. 则银行会在每个月进行结算: 结算方法是:计算本金在本月产生的利息: 本金 x (年利率/12) 则本月本金结余为:本金 + 利息 - 每月固定还款额 计算结果会四舍五入到"分". 经计算,此种情况下,固定还款额应为:438.71 这样,第一月结算时的本金余额是: 9602.96 第二个月结

自动机理论、语言和计算导论 by John E. Hopcroft

计算理论是计算机应用的基础,理论和应用缺一而不可. ---- 目录 ---- C01 自动机 C02 有穷自动机 C03 正则表达式与正则语言 C04 正则语言的性质 C05 上下文无关文法及上下文无关语言 C06 下推自动机 C07 上下文无关语言的性质 C08 图灵机 C09 不可判定性 C10 难解问题 C11 其他问题类 ---- C01 自动机 ---- 有穷自动机(FA)的两个重要因素是状态和跳转,状态是数据/环境,跳转是函数/响应. 自动机的结构表示法有两种,一种是正则表达式,正则

C语言源代码——计算任何一天是星期几

代码写的不严谨. 网上也有很多计算任何一天是星期几的C语言源代码,不过,有些代码含有一点点小错误.像闰年的分辨啊,或者是每个月的天数,再或者星期的计算公式,都是比较细微的环节,出一点错误都有可能导致结果不正确.这一点,我都进行过验证.下面我选出的这组代码,结构清晰,语法明确.希望能给各位C的爱好者或者要考计算机二级的同学们一点点帮助!当然,有错误的话,也请各位指出! 代码如下: 1 #include <stdio.h> 2 int main() 3 { 4 int day,mn,yr,i,da

C 语言实例 - 计算 int, float, double 和 char 字节大小。

使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小. sizeof 是 C 语言的一种单目操作符,如C语言的其他操作符++.--等,它并不是函数. sizeof 操作符以字节形式给出了其操作数的存储大小. #include <stdio.h>int main(){    int integerType;    float floatType;    double doubleType;    char charType;    // sizeof

【2016.12.11】JavaScrip计算自己活了多少天

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn"> <head> <met

R语言笔记 计算描述性统计量的函数

其中包括Hmisc.pastecs和psych.由于这些包并未包括在基础安装中. > library(Hmisc) > describe(mtcars[vars]) mtcars[vars] 3  Variables      32  Observations ----------------------------------------------------------------------------------------------------------------------