输入现在的日期,输出明天的日期
首先, 定义结构体, 年, 月, 日
struct date{
int month;
int day;
int year;
};
然后,就可以输入今天的日期了
struct date today,tomorrow;
printf("Enter today's date(mm dd yyyy):");
scanf("%i %i %i",&today.year,&today.month,&today.day);
这里需要判断平年和闰年, 所以先调用一个函数
bool isLeap(struct date d)
{
bool leap = 0;
if((d.year %4==0 && d.year %100 !=0) || d.year%400 == 0){
leap = 1;
}
return leap;
}
返回的数值,就可以判断润平年了
我们思考一下,现在知道二月的天数了, 所以,我们要想知道明天日期,只用号数加一就可以了, 这里需要使用if 语句进行逐层排除
最简单的就是 , 只用号数加一天, 别的不用变, 所以我们要确保今天不是本月的最后一天, 所以就是拿着今天的号数和本月的天数作对比
today.day != number0fDays(today)
所以, 这里我们又需要进行, 调用一个含有结构体的函数, 来判断本月的天数了, 因为还要掺杂二月, 所以也得调用判断润平年的函数
int number0fDays(struct date d)
{
int days;
const int daysPerMOnth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(d.month == 2 && isLeap(d)){
days = 29;
}else{
days = daysPerMOnth[d.month-1];
}
return days;
}
我们这里和润平年定义的结构体参数是一样的, 因为我们需要同一个数据, 首先就是定义天数, 然后就是创建一个数组,
对每一个月进行天数填充, 可以只填平年的,做一个二月的判断就行了, 灵活掌握
然后就是, 天数对应的数组地址是月份减一, 因为是从0 开始算的.
也可以分开,自己掌握
int number0fDays(struct date d)
{
int days;
const int daysPerMOnth[12]={31,29,31,30,31,30,31,31,30,31,30,31};
const int daysPerMOnth_1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeap(d)){
days = daysPerMOnth[d.month-1];
}else{
days = daysPerMOnth_1[d.month-1];
}
return days;
}
接下来, 就简单了,判断, 当本号不等于 本月的天数的时候, 就把号数加一, 其他不变就行了
if(today.day != number0fDays(today)){
tomorrow.day = today.day+1;
tomorrow.month = today.month;
tomorrow.year = today.year;
}
现在思考特殊情况, 每月最后一天, 和一年最后一天, 先限制最少的, 所以就是, 每年最后一天的话, 第二天, 天数月份都变为
1, 年份加一就行了
else if(today.month == 12){
tomorrow.day = 1;
tomorrow.month = 1;
tomorrow.year = today.year+1;
}
最后就是, 每月的最后一天了, 直接号数变为1, 月份加一, 年份不变
else{
tomorrow.day = 1;
tomorrow.month = today.month + 1;
tomorrow.year = today.year;
}
从这里就得出一个规律, if语句, 先限制小范围, 剩余的就是 大范围相同的类型, 减少麻烦
最后输出就行了
printf("tomorrow是%i-%i-%i.\n",tomorrow.year,tomorrow.month,tomorrow.day);
return 0;
总结:我们在利用结构体进行函数参数调用的时候, 可以一次性调用很多, 但是如果真的要改变结构体函数的值的话, 就需要
利用指针, 对传入参数的地址, 进行修改, 不然的话, 调用函数的话, 只能通过return 返回数值了.
源代码:
#include <stdio.h>
#include <stdbool.h>struct date{int month;int day;int year;
};bool isLeap(struct date d);
int number0fDays(struct date d);int main(int argc, char const *argv[])
{struct date today,tomorrow;printf("Enter today's date(mm dd yyyy):");scanf("%i %i %i",&today.year,&today.month,&today.day);if(today.day != number0fDays(today)){tomorrow.day = today.day+1;tomorrow.month = today.month;tomorrow.year = today.year;}else if(today.month == 12){tomorrow.day = 1;tomorrow.month = 1;tomorrow.year = today.year+1;}else{tomorrow.day = 1;tomorrow.month = today.month + 1;tomorrow.year = today.year;}printf("tomorrow是%i-%i-%i.\n",tomorrow.year,tomorrow.month,tomorrow.day);return 0;}
int number0fDays(struct date d)
{int days;const int daysPerMOnth[12]={31,29,31,30,31,30,31,31,30,31,30,31};const int daysPerMOnth_1[12]={31,28,31,30,31,30,31,31,30,31,30,31};if(isLeap(d)){days = daysPerMOnth[d.month-1];}else{days = daysPerMOnth_1[d.month-1];}return days;
}bool isLeap(struct date d)
{bool leap = 0;if((d.year %4==0 && d.year %100 !=0) || d.year%400 == 0){leap =1 ;}return leap;
}
输入现在的日期,输出明天的日期相关推荐
- 获得昨天的日期,今天的日期,明天的日期
1.昨天的年 DateTime.Now.AddDays(-1).Year 昨天的月份 DateTime.Now.AddDays(-1).Month 昨天的额日期 DateTime.Now.AddDay ...
- C语言编程题 输入今天的日期年月日,输出明天的日期
#include <stdio.h> int main() {int y,m,d;printf("请输入年月日:");scanf("%d%d%d", ...
- java中输入日期_Java中的日期操作
在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...
- C语言实验(十三):函数(求两个任意分数和的最简形式、将正整数转换为字符串输出、某日期是该年第几天)
C语言实验(十三):函数(求两个任意分数和的最简形式.将正整数转换为字符串输出) 一.任意输入两个分数,用C语言编程求这两个分数和的最简形式.如:输入为"2/6 + 12/9 =" ...
- Python写,将输入的yyyy/mm/dd格式的日期显示为yyyy年mm月dd日。
7.(程序题)编程将输入的yyyy/mm/dd格式的日期显示为yyyy年mm月dd日. str = input("请输入日期:") length=len(str) if str[6 ...
- 计算明天的日期C语言,c语言源代码(计算明天的日期)
#include "stdio.h" struct date{ //声明结构体 int year; int month; int day; }; intnumberofday(st ...
- c语言已知年第几天求哪月哪日,已知今天的日期(年月日),求明天的日期(年月日)...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 已知今天的日期(年月日),求明天的日期(年月日): 要求考虑: 1.月份为12月时,年份应加1且月份变为1 2.天为当月最后一天时,月份应加1且天变为1 ...
- linux expect日期加减,如何“输出”出命令“日期”? (linux/expect/sftp)
我想从sftp服务器安排一个文件副本.公共密钥是不允许的,所以我只知道使用expect的一种方法.如何"输出"出命令"日期"? (linux/expect/sf ...
- python代码获取今天、昨天、明天的日期
python代码获取今天.昨天.明天的日期 #python代码获取今天.昨天.明天的日期 # Python program to find yesterday, # today and tomorro ...
最新文章
- 《C语言及程序设计》实践项目——画分支结构流程图
- 构建私有云时,需要考虑的十大要点
- VUE-生命周期钩子
- C++基础--简单Socket通信实例
- 使用 fail2ban 防御 SSH 暴力破解
- 数字图像处理王伟强_深度学习主导下,还有必要学数字图像处理?
- 安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】
- 安装nginx的过程
- CreateDirectory和SHCreateDirectoryExW区别
- webmail lite php,自建webmail网页客户端
- 面向对象编程Sample(C#)
- python os模块大全
- 如何在InfoPath2010中转换主数据源
- 文字游戏——《小黑屋》
- 共享自习室创业项目分析
- Python与Julia结合使用的个人经验
- 程序员进阶!阿里P7级别面试经验总结,深度好文
- 谷歌:加入账号其他设备登陆通知功能
- 电子科技大学和东北大学计算机专业哪个好,电子科技大学、南京航空航天大学、东北大学,你会怎么选择?...
- av_parser_parse2函数介绍
热门文章
- 身份证号码的严格校验(非正则)
- Jexl表达式引擎(2)
- python读取数据的函数详解_python之文件读写详解
- python中“羊车门问题”的简单分析与代码实现
- 命令行基础、目录和文件管理、教学环境介绍、
- Win10电脑怎么恢复出厂设置
- PDPS软件:碰撞检测功能介绍与使用方法
- android接入华为推送
- 怎样学好英语?(多年英语学习经验总结)
- javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? HTTPS请求异常