关于C语言经典程序“打渔晒网”

关于C语言经典程序“打渔晒网”,第1张

楼主你好!!!俺仔细的看了一下程序代码,代码没有错误!!!凯或!

俺解释一下(就针对与楼主的问题)

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")

}

这是一个数学问题,观察之后可以知道规律是,凡是输入日期B与初始亏棚日期A的的差值与5的取余即可得到取余结果是1,2,3的日期为打渔,余数为4和0的为晒网

下面是代码

Private Sub Command1_Click()

Dim aa, bb, cc

aa = #12/31/1989#

Text1.SetFocus

bb = 埋返CDate(Text1.Text)         '月/日/年    并转换成日期格式

cc = (bb - aa) Mod 5

Form1.Cls

Select Case cc

Case 0 Or 4

Print "今天是晒网"

Case Else

Print "今天是打渔"

End 销液则Select

End Sub


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12257310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存