定义两个结构体变量,包括年月日,输入两个日期到这两个变量,求这两个日期间隔多少天

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定义两个结构体变量,包括年月日,输入两个日期到这两个变量,求这两个日期间隔多少天相关的知识,希望对你有一定的参考价值。

/*说明,我是用c++编的,编译成功了,要不要改成c语言的?还有注释说明,只剩下细节问题,根据你的需要加以修改,我未考虑错误数据的容错性,默认数据合理*/
#include <iostream>
using namespace std;
struct Date
int year;
int mon;
int day;
;

void main()
Date date1,date2,t;
int y,y1,y2;
cin>>date1.year>>date1.mon>>date1.day;
cin>>date2.year>>date2.mon>>date2.day;
if (date1.year>date2.year) //保证date1的日期小于date的,不知题目有没有保证
t=date1;
date1=date2;
date2=t;

int p(int year);
int monday(int m);
int mtime(int y,int m,int d);
int ytime(int d1,int d2);
int mtime_2(int y,int m,int d);
y=ytime(date1.year,date2.year);
y1=mtime(date1.year,date1.mon,date1.day);
y2=mtime_2(date2.year,date2.mon,date2.day);
cout<<y<<endl;//y是相隔整个年的日子数
cout<<y1<<endl;
cout<<y2<<endl;
cout<<y+y1+y2<<endl;//这是总和,也就是答案


int ytime(int d1,int d2)//计算相差多少个整年的总的日子数目,考虑到闰年的影响
int p(int year);
int sum=0;
do
d1=d1+1;
if (p(d1))sum=sum+366;
else sum=sum+365;
while (d1<d2-1);
return sum;


int p(int year)//判断是否为闰年
int leap;
if((year%4==0&&year%100!=0)||(year%400==0)) leap=1;
else leap=0;
return leap;

int mon_day(int y,int m)//判断月份的日子总数,考虑到月份的天数不一致性
int num;
switch (m)
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:num=31;break;
case 4:
case 6:
case 9:
case 11:num=30;break;
case 2:if (y&&(m=2)) num=29;//考虑到闰年的差异
else num=28;
break;

return num;

int mtime(int y,int m,int d)//计算非整年的日子之一,date1的该年到年终的日子数
int sum=0;
sum=mon_day(y,m)-d;
while (m<12)
m=m+1;
sum=sum+mon_day(y,m);
return sum;

int mtime_2(int y,int m,int d)//计算非整年的日子之二,date2的从年初到该日子的日子数目
int sum=0;
sum=d;
while (m>1)
m=m-1;
sum=sum+mon_day(y,m);
return sum;
参考技术A struct date
int year;
int mon;
int day;
;
写一个转换接口
int chenge_to_days(struct date);返回date是一年中的第几天
然后输入完转换,相减就能得到间隔。这样是不是容易理解.代码还是自己想吧毕竟思想是自己的
参考技术B struct date

int year;
int month;
int day;
;
问题主要是要知道一个日期是当年的第几天,和两个日期相隔年份的总天数,比如闰年等等,你要自己写一个函数对日期转化成天数,还有计算两个年份间相隔的天数,具体就是if,else或者switch语句了,请自己去完成吧

PTA结构体实验报告

五、PTA实验作业(结构体)

题目一:

   

 

 

    1.本题PTA提交列表:

    

 

  

  2.设计思路(包括流程图),主要描述题目算法

    //设计思路,由题目可知  

     1.该题采用结构体,结构体内要定义一个数据域和一个指针域

     2.定义两个变量max,和min用来标识最大最小值

    3.在主函数中用动态内存来为数据分派配内存并且判断是否分配内存成功;

    4.用for()循环来输入n个数据;先使最大最小值都为零,再通过for()循环用所有值一次判断是否都大于max,如果大于就max=i;同理min也是这么判断

    5.最后要释放内存,并且输出数据

   最终的代码如下:

    

    

     流程图如下:

      

 

  

    

            

 

  3.本题调试过程碰到的问题及PTA提交的情况说明(**注意:调试过程必须截图说明如何调试,如何解决问题,PTA提交的列表中的每一个错误详细说明为什么及如何解决)

  调试过程没有大问题,基本会做,但对动态内存和结构体数组有些不理解,特别是数组,结构体,指针综合运用时,时常弄混。所以还是得多做多看理解。

 

题目二:

  

 

  

  1.本题PTA提交列表:

    

 

  2.设计思路(包括流程图),主要描述题目算法

    //由题目,设计思路如下

    1.这道题采用三维数组可以巧妙地求解

    2.先定义一个三维数组,并且输入值

    3。再用三个for循环来比较总分,在比较过程中当三层循环都满足条件时,再进行分数求和

    4.最后输出名字,学号和总分就可以

   

      

           

  3.本题调试过程碰到的问题及PTA提交的情况说明(**注意:调试过程必须截图说明如何调试,如何解决问题,PTA提交的列表中的每一个错误详细说明为什么及如何解决)

         这道题一开始我是采用结构体,但多次都做不出正确的答案;最后在和同学讨论下,就采用了三位数组,用三维数组可以巧妙而且简单的求解;

  

题目三:

    

  1.本题PTA提交列表:

     

 

    

  2.设计思路(包括流程图),主要描述题目算法

      //由题目,设计思路如下

      1.先定义四个数组,用于存名字,存号码,生日

      2.输入一个n的值确定要输入的人数;再用for()循环来输入姓名,生日,号码

      3.再用两个for()循环来比较出生日期;

      4.最最后再用两个for()循环来输出已经排好的数据;

      

      

      

     

  3.本题调试过程碰到的问题及PTA提交的情况说明(**注意:调试过程必须截图说明如何调试,如何解决问题,PTA提交的列表中的每一个错误详细说明为什么及如何解决)

     调试过程没有问题,一开始不知从何下手来判断出生日,但后来查阅了一些资料就有了头绪,直接用循环和数组比较就能解决 

二、同学代码互评

   1.我的代码

         :

           

   2.同学:邢宇凡

      同学的代码  

         

   3.我和同学的代码有哪些不同?各自有哪些优势?你更喜欢那种代码的风格?

      同学的思路和我的基本相似,但方法不同。同学用数组来分配内存,比较完再输出;我是采用动态数组进行分配内存。 

 

三、截图本周题目集的PTA最后排名

      

 

四、本周学习总结

  1.本周你学会了什么?

      1.学会了结构体的基本定义,运用结构体来输入数据,

      2.初步接触了结构体数组,结构体指针,以及链表和链表的增删改查

  2.本周的内容,还有那些内容不会?

      结构体指针还有些模糊,链表的增删改查运用的还不是很熟

以上是关于定义两个结构体变量,包括年月日,输入两个日期到这两个变量,求这两个日期间隔多少天的主要内容,如果未能解决你的问题,请参考以下文章

C语言 定义一个结构体变量(包括年月日),计算该日在本年中是第几天

C语言 定义一个结构体变量(包括年月日),计算该日在本年中是第几天

结构体实例二

C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:

c语言怎么求两个日期相差的秒数,日期格式20140325150630和20140324150000

ZZNUOJ_用C语言编写程序实现1181:谁的年龄最小(结构体专题)(附完整源码)