i int 1; char c21 }t,*s=&t S->1=0x3839 printf("High Byte: %cn", s->c[0D); printf("Lower Byte: %cIn", S->clD) 解: High Byte:9 Lower Byte 8 87定义一个表示日期的结构类型,然后定义下面函数: (1)计算一天是该年的第几天 (2)比较两个日期的大小 (3)计算两个日期的间的天数 (4)计算某日期之前若干天的日期 (5)计算某日期之后若干天的日期 用这些函数计算,你自己已经生活了多少天,到你的下一个生日还有几天,你最近的 生日已经过去几天了 解:参考程序如下: #include <stdio. h #include <dos. h> #include <math. h typedef struct int year, month,day;}Date;/*定义表示日期的结构*/ int yearday( int year)/*计算某年的天数*/ if(year%4==0&&year%100!=0| lyear%400=0) yday=366 lse yday=365: return yday: int monthday( int year)/*计算某年二月份的天数*/ int mday if (year%4==0&&year%100!=0 year%400==0) return mday int dayofyear( Date d)/*计算某日期是某年的第几天*/
{ int i; char c[2]; } t, *s=&t; s->i=0x3839; printf("High Byte:%c\n",s->c[0]); printf("Lower Byte:%c\n",s->c[1]); } 解:High Byte:9 Lower Byte:8 8.7 定义一个表示日期的结构类型,然后定义下面函数: (1)计算一天是该年的第几天。 (2)比较两个日期的大小 (3)计算两个日期的间的天数 (4)计算某日期之前若干天的日期 (5)计算某日期之后若干天的日期 用这些函数计算,你自己已经生活了多少天,到你的下一个生日还有几天,你最近的 生日已经过去几天了。 解:参考程序如下: #include <stdio.h> #include <dos.h> #include <math.h> typedef struct { int year,month,day; } Date; /*定义表示日期的结构*/ int yearday(int year) /* 计算某年的天数*/ { int yday; if (year%4==0&&year%100!=0||year%400==0) yday=366; else yday=365; return yday; } int monthday(int year) /*计算某年二月份的天数*/ { int mday; if (year%4==0&&year%100!=0||year%400==0) mday=29; else mday=28; return mday; } int dayofyear(Date d) /*计算某日期是某年的第几天*/
nt months[13]={(0,31,28,31,30,31,30,31,31,30,31,30,31}; months[2]monthday(d year) for(i=l; i<d month; i++) total+=months[i] total+=d day return total int cmpdate( Date d, Date s)/*比较两个日期的大小*/ I int result Hif (d month==s month) y) else result=d. day-s day else result=d. month-s. month else result=d. year-syear int interday( Date d, Date s)/*计算两个日期之间的天数*/ I int result, te, ts, total int year, start, end, day result=cmpdate(d, s) f (result>0) te=dayofyear(d) ts=dayofyear(s) ts=dayofyear(d) te=dayofyear(s) else return 0
{ int i,total=0; int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; months[2]=monthday(d.year); for (i=1;i<d.month;i++) total+=months[i]; total+=d.day; return total; } int cmpdate(Date d,Date s) /*比较两个日期的大小*/ { int result; if (d.year==s.year) {if (d.month==s.month) { if (d.day==s.day) result=0; else result=d.day-s.day; } else result=d.month-s.month; } else result=d.year-s.year; return result; } int interday(Date d,Date s) /*计算两个日期之间的天数*/ { int result,te,ts,total; int year,start,end,day; int i; result=cmpdate(d,s); if (result>0) { start=s.year; end=d.year; te=dayofyear(d); ts=dayofyear(s); } else if (result<0) { start=d.year; end=s.year; ts=dayofyear(d); te=dayofyear(s); } else return 0;
if (start=end i day=yearday(i) total+=day return total Date befday( Date d int n)/*求某日期之前若干天的日期* I int i, j, day, yda int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31} months [2]=monthday(d year) for(da month=1, i=1; i<=12; i++) (da i da. montI day=day-months[i] else else
if (start==end) return abs(te-ts); else {total=0; for (i=start;i<=end;i++) { day=yearday(i); if (i==start) total+=day-ts; else if (i==end) total+=te; else total+=day; } } return total; } Date befday(Date d,int n) /*求某日期之前若干天的日期 */ { int i,j,day,yday; Date da; int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; months[2]=monthday(d.year); day=dayofyear(d); if (day>n) { da.year=d.year; day=day-n; for (da.month=1,i=1;i<=12;i++) if (day-months[i]>=0) { da.month++; day=day-months[i]; } else { if (day) da.day=day; else da.day=1; break; } }