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

#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.使用系统提供当前日期

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

  1. C语言中计算变量占用内存空间

    C语言中计算变量占用内存空间 在C语言中通常用[sizeof]运算符计算变量占内存空间,如下面的例子:

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

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

  3. C 语言实例 - 计算标准偏差

    C 语言实例 - 计算标准偏差 计算标准偏差. 实例 #include <stdio.h> #include <math.h> float calculateSD(float ...

  4. C 语言实例 - 计算一个数的 n 次方

    C 语言实例 - 计算一个数的 n 次方 计算一个数的 n 次方,例如: ,其中 为基数, 为指数. 实例 - 使用 while #include <stdio.h> int main() ...

  5. C 语言实例 - 计算自然数的和

    C 语言实例 - 计算自然数的和 自然数是指表示物体个数的数,即由0开始,,,,,,……一个接一个,组成一个无穷的集体,即指非负整数. 实例 - 使用 for #include <stdio.h ...

  6. Problem Q: C语言习题 计算该日在本年中是第几天

    Problem Q: C语言习题 计算该日在本年中是第几天 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4572  Solved: 2474[Subm ...

  7. C 语言实例 - 计算两个时间段的差值

    C 语言实例 - 计算两个时间段的差值 C 语言实例 C 语言实例 计算两个时间段的差值. 实例 #include <stdio.h> struct TIME { int seconds; ...

  8. C 语言实例 - 计算字符串长度

    C 语言实例 - 计算字符串长度 C 语言实例 C 语言实例 计算字符串长度. 实例 - 使用 strlen() #include <stdio.h> #include <strin ...

  9. C 语言实例 - 计算平均值

    C 语言实例 - 计算平均值 C 语言实例 C 语言实例 使用数组来计算几个数的平均值. 实例 #include <stdio.h> int main() { int n, i; ], s ...

随机推荐

  1. 第七十五篇:Vue兄弟组件传值

    好家伙, 兄弟组件的传值用到Eventbus组件, 1.EventBus的使用步骤 ① 创建 eventBus.js 模块,并向外共享一个Vue的实例对象 ②在数据发送方, 调用bus.$emit(' ...

  2. KFS邮件自动告警-数据比对-数据修复配置方法

    一.告警机制 用户可以通过配置告警机制,在比对完成和节点报错时接收到邮件告警. 告警机制共包含3个方面: 1. 告警配置 2. 用户订阅 3. 告警历史 KFS邮箱分两个部分,一个是接收告警信息的邮箱 ...

  3. 新一代网络请求库:python-httpx库

    目录 httpx库 一. 概述 1. 简介 2. 命令行模式 3. 快速开始 3.1 get请求 3.2 post请求 3.2.1 表单 3.2.2 文件 3.2.3 JSON 3.2.4 二进制 3 ...

  4. Python中None作为索引的作用

    None的作用主要是在使用None的位置新增一个维度. a = np.arange(25).reshape(5,5) print(a) ''' [[ 0 1 2 3 4] [ 5 6 7 8 9] [ ...

  5. java 类名后加变量名是什么意思?

    回答这个问题我们需要先了解两个事情: A是一个类,我们如果对他进行实例化,需要这样写: A a = new A(); 详细解释一下这个语句,首先等号左边做的事情:在JVM栈内存(stack)中定义了一 ...

  6. 第一行代码Android(第3版).pdf下载

    2020年人民邮电出版社出版的图书 <第一行代码Android(第3版)>是2020年4月人民邮电出版社出版的图书,作者是郭霖. 封面: 内容简介: <第一行代码 Android 第 ...

  7. MySQL半同步复制源码解析

    今天 DBA 同事问了一个问题,MySQL在半同步复制的场景下,当关闭从节点时使得从节点的数量 < rpl_semi_sync_master_wait_for_slave_count时,show ...

  8. [Linux]-screen命令-切换终端

    在训练模型时,经常遇到需要采用多个策略同时跑的情况,直接运行的话比较费时,只要CPU和GPU支持,可以通过Linux的screen命令多终端并行,大大提升效率. 创建: screen -S name ...

  9. 论文解读(RvNN)《Rumor Detection on Twitter with Tree-structured Recursive Neural Networks》

    论文信息 论文标题:Rumor Detection on Twitter with Tree-structured Recursive Neural Networks论文作者:Jing Ma, Wei ...

  10. HCIA-STP原理与配置

    STP协议生成树协议: 为了保证网络可靠,所以在组网时需要设置冗余链路和设备,从而在物理结构上形成结构,又因为交换机的工作特点导致二层网络中产生广播风暴和MAC地址表震荡现象,影响用户体验. 广播风暴 ...