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.使用系统提供当前日期
C语言实现计算“已经活了多少天”的更多相关文章
- C语言中计算变量占用内存空间
C语言中计算变量占用内存空间 在C语言中通常用[sizeof]运算符计算变量占内存空间,如下面的例子:
- 李洪强漫谈iOS开发[C语言-041]-计算月份天数
李洪强漫谈iOS开发[C语言-041]-计算月份天数
- C 语言实例 - 计算标准偏差
C 语言实例 - 计算标准偏差 计算标准偏差. 实例 #include <stdio.h> #include <math.h> float calculateSD(float ...
- C 语言实例 - 计算一个数的 n 次方
C 语言实例 - 计算一个数的 n 次方 计算一个数的 n 次方,例如: ,其中 为基数, 为指数. 实例 - 使用 while #include <stdio.h> int main() ...
- C 语言实例 - 计算自然数的和
C 语言实例 - 计算自然数的和 自然数是指表示物体个数的数,即由0开始,,,,,,……一个接一个,组成一个无穷的集体,即指非负整数. 实例 - 使用 for #include <stdio.h ...
- Problem Q: C语言习题 计算该日在本年中是第几天
Problem Q: C语言习题 计算该日在本年中是第几天 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 4572 Solved: 2474[Subm ...
- C 语言实例 - 计算两个时间段的差值
C 语言实例 - 计算两个时间段的差值 C 语言实例 C 语言实例 计算两个时间段的差值. 实例 #include <stdio.h> struct TIME { int seconds; ...
- C 语言实例 - 计算字符串长度
C 语言实例 - 计算字符串长度 C 语言实例 C 语言实例 计算字符串长度. 实例 - 使用 strlen() #include <stdio.h> #include <strin ...
- C 语言实例 - 计算平均值
C 语言实例 - 计算平均值 C 语言实例 C 语言实例 使用数组来计算几个数的平均值. 实例 #include <stdio.h> int main() { int n, i; ], s ...
随机推荐
- .NET使用StackTrace获取方法调用者信息
前言 在日常工作中,偶尔需要调查一些诡异的问题,而业务代码经过长时间的演化,很可能已经变得错综复杂,流程.分支众多,如果能在关键方法的日志里添加上调用者的信息,将对定位问题非常有帮助. 介绍 Stac ...
- GIN and RUM 索引性能比较
gin索引字段entry构造的TREE,在末端posting tree|list 里面存储的是entry对应的行号. 别无其他信息.rum索引,与GIN类似,但是在posting list|tree的 ...
- B树-插入
B树系列文章 1. B树-介绍 2. B树-查找 3. B树-插入 4. B树-删除 插入 根据B树的以下两个特性 每一个结点最多有m个子结点 有k个子结点的非叶子结点拥有 k − 1 个键 可以得出 ...
- Mysql阶段性项目——QQ数据库管理
MySql 数据库设计与应用 第七章项目练习 阶段项目--QQ数据库管理 任务概述: 模拟QQ在线聊天系统 后台数据库的创建 基本数据表的创建 表约束. 表间关系的添加 进行数据增加. 删除. 修改. ...
- k8s 中的 Pod 细节了解
k8s中Pod的理解 基本概念 k8s 为什么使用 Pod 作为最小的管理单元 如何使用 Pod 1.自主式 Pod 2.控制器管理的 Pod 静态 Pod Pod的生命周期 Pod 如何直接暴露服务 ...
- 谷歌MapReduce经典论文翻译(中英对照)
MapReduce: Simplified Data Processing on Large Clusters(MapReduce: 简化大型集群下的数据处理) 作者:Jeffrey Dean and ...
- git pull提示如下信息时候的操作
执行git pull时提示信息如下: There is no tracking information for the current branch. Please specify which bra ...
- 解决nexus仓库只能拉取不能推送的问题
当时正在使用jenkins自动构造镜像推送到nexus上的docker镜像仓库,突然间就报错如下,没法推送,超过重试次数后也是没法推送: ERROR: Build step failed with e ...
- vscode展示子文件夹
取消勾选设置-功能-compact Folders
- ofd格式文件转换成pdf格式的方法
ofd格式文件很多人还比较陌生,很多人接收到文件都不知如何打开阅读,把文件发给对方,还需要对方安装个专门的阅读软件,我们还有另一个办法,就是将OFD文件转换为PDF格式文件,然后把PDF格式文件发给对 ...