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

#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. java数组---初始化

    public class ArrayDemo { public static void main(String[] args) { int[] a={1,2,3,4,5,6,7,8,9}; //静态初 ...

  2. window桌面背景图片

    通过修改注册表项: \HKEY_CURRENT_USER\Control Panel\Desktop下的几个值,及可以将我们想要的图片设置成桌面的背景图 TileWallpaper   Wallpap ...

  3. 第六十五篇:Vue的过滤器

    好家伙, 过滤器,vue3取消了,只有vue2能用 1.过滤器 过滤器(Filters)是vue为开发者提供的功能,常用于文本的格式化. 过滤器可以用在两个地方:插值表达式和v-bind属性绑定. 过 ...

  4. Linux虚拟机启动报错挂载点丢失

    fstab 挂载失败 实验准备 1) 准备:vim /etc/fstab /mnt1/cdrom 挂载点不在 2) 系统启动报错截图 修复步骤 /etc/fstab 中的错误和损坏的文件系统可能会阻止 ...

  5. .NET使用StackTrace获取方法调用者信息

    前言 在日常工作中,偶尔需要调查一些诡异的问题,而业务代码经过长时间的演化,很可能已经变得错综复杂,流程.分支众多,如果能在关键方法的日志里添加上调用者的信息,将对定位问题非常有帮助. 介绍 Stac ...

  6. python的三层架构

    项目目录规范 Foo/ |-- core/ # 存放业务逻辑相关代码 | |-- core.py | |-- api/ # 存放接口文件,接口主要用于为业务逻辑提供数据操作. | |-- api.py ...

  7. MySQL DDL执行方式-Online DDL介绍

    1 引言 大家好,今天与大家一起分享一下 mysql DDL执行方式. 一般来说MySQL分为DDL(定义)和DML(操作). DDL:Data Definition Language,即数据定义语言 ...

  8. MyCLI :一个支持自动补全和语法高亮的 MySQL/MariaDB 客户端

    MyCLI 是一个易于使用的命令行客户端,可用于受欢迎的数据库管理系统 MySQL.MariaDB 和 Percona,支持自动补全和语法高亮.它是使用 prompt_toolkit 库写的,需要 P ...

  9. 常量的定义(const和#define)

    定义常量的方法 //均要在调用前(区别全局变量!!) 1.使用#define预处理器 2.使用const关键字 1.#define #define 常量名 常量值 //定义形式,常量名不可以是数字开头 ...

  10. 制造企业有可能自行开发ERP系统吗?

    当然可以啊! 生产企业对于ERP的需求是一直存在的,但市场上多为标准化的产品,与企业的个性化需求矛盾着. 有很多制造企业自行开发ERP系统啊!只是各个企业成效不同而已,毕竟不同企业的IT开发能力不同而 ...