楼主你好!!!俺仔细的看了一下程序代码,代码没有错误!!!凯或!
俺解释一下(就针对与楼主的问题)
1.for(i=1i<day.monthi++) 这个for()语句没有错误,这句确实只算了11个月的,但前面的term.day=31 给了补上!!!原因是无论那一年,1月和12月都是31天,所以楼主先把1月和12月的算在一起啦!!!这也正是楼主第二个疑问的所在!!!
如果楼棚拿主不信的话!!!可以把每一年的打印出啦,看看是不是365/366
要是少算一个月的话,那一定不是365/365
修改如下:
#include<stdio.h>
#include<iostream.h>
struct date
{
int year
int month
int day
}
int days(struct date day)
{
static int day_tab[2][13]=
{
{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/
{0,31,29,31,30,31,30,31,31,30,31,30,31,},
}
int i,lp
lp=day.year%4==0&&day.year%100!=0||day.year%400==0
/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
for(i=1i<day.monthi++) /*计算本年中自1月1日起的天数*/
day.day+=day_tab[lp][i]
cout<<day.day<<endl
return day.day
}
void main()
{
struct date today,term
int yearday,year,day
printf("Enter year/month/day:")
scanf("%d%d%d",&today.year,&today.month,&today.day) /*输入日期*/
term.month=12 /*设置变量的初始值:月*/
term.day=31 链孙搭 /*设置变量的初始值:日*/
//注意这里哈
for(yearday=0,year=1990year<today.yearyear++)
{
term.year=year
yearday+=days(term) /*计算从1990年至指定年的前一年共有多少天*/
}
yearday+=days(today) /*加上指定年中到指定日期的天数*/
day=yearday%5 /*求余数*/
if(day>0&&day<4)
printf("he was fishing at that day.\n") /*打印结果*/
else
printf("He was sleeping at that day.\n")
}
根据题意可以将解题过程分为三步:
1、计算从1990年1月1日开始至指定日期共有多少天;
2、由于“打鱼”和“晒网”的周期为5天,所以将计袜仿埋算出的天数用5去除;
3、根据余数判断他是告蚂在“打鱼”还是在大轮“晒网”;若 余数为1,2,3,则他是在“打鱼”;否则 是在“晒网”。
#include <stdio.h>/*定义日期结构体*/
typedef struct date {
int year
int month
int day
} DATE
/*判断是否为闰年,是返回1,否返回0*/
int isLeap (int year) {
return ( (year%4==0 && year%100!=0) || (year%400==0) )
}
/*计算指定日期距离1990年1月1日的天数*/
int countDay (DATE currentDay) {
int perMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30} /*每月天数数组*/
int totalDay=0,year,i
/*求出指定日期之前的每一年的天数累加和*/
for(year=1990 year<currentDay.year year++) {
if(isLeap(year)) /*判断是否为闰年*/
totalDay=totalDay+366
else
totalDay=totalDay+365
}
/*如果为闰年,则二月份为29天*/
if(isLeap(currentDay.year))
perMonth[2]+=1
/*将本年内的天数累加到totalDay中*/
for(i=0 i<currentDay.month i++)
totalDay+=perMonth[i]
/*将本月内的天数累加到totalDay中*/
totalDay+=currentDay.day
/*返回totalDay*/
return totalDay
}
int main(void) {
DATE today /*指定日期*/
int totalDay /*指定日期距离1990年1月1日的天数*/
int result /*totalDay对5取余的结果*/
int error
do { /*输入指定日期*/
printf("Please input the year/month/day :\n")
scanf("%d/%d/%d", &today.year, &today.month, &today.day)
printf("\n")
error=0
if(today.year<1990) /*判断日期格式是否正确*/
{printf("The year should be larger than 1990!\n")error=1}
if(today.month<1||today.month>12)
{printf("The month input is error!\n")error=1}
if(today.day<0||today.day>31)
{printf("The day input is error!\n")error=1}
printf ("======================================================\n\n")
} while(error)
totalDay=countDay(today) /*求出指定日期距离1990年1月1日的天数*/
/*天数%5,判断输出打鱼还是晒网*/
result=totalDay%5
if(result>0 && result<4)
printf("fishing!\n")
else
printf("sleeping!\n")
printf("\n")
return 0
}
运行结果
1991/10/25,打渔
1992/10/25,晒网
日期输入错误
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)