三天打鱼两天晒网c语言编程(C语言三天打鱼两天晒网问题,帮我看一下哪里有错,运行结果不对,谢谢了)
本文目录
- C语言三天打鱼两天晒网问题,帮我看一下哪里有错,运行结果不对,谢谢了
- c语言 三天打鱼,两天晒网 中国有一句话:三天打鱼,两天晒网 某人从1992-2-1开始三天打鱼,两天晒网 问:输入
- 关于C语言经典程序“打渔晒网”
- 三天打鱼两天晒网c语言编程用结构体变量怎么写
- c语言编程之三天打鱼两天晒网
- C语言编程某人从某年1月1日开始,三天打鱼,两天晒网从键盘输入x年x月x日,问这个人在该年的
- C语言中国有句俗语叫做“三天打鱼两天晒网”求高手!!!
- c语言 三天打鱼两天晒网 在线等 急急急!
- C语言“三天打鱼两天晒网”问题
C语言三天打鱼两天晒网问题,帮我看一下哪里有错,运行结果不对,谢谢了
if(e%4==0&&e%100!=0||e%400==0)
这句话有问题 你&&运算符没学习好,它只需要判断一个为假就不会再判断, 对编译器而言
一旦e%4==0没有通过 编译器就不会再继续往下判断了,后面的都会被屏蔽 。
例如:0&&1 这句 他只需要知道有0 编译器就已经判断为假了 它就不会再往后面看了,也不需要在看后面 。
c语言 三天打鱼,两天晒网 中国有一句话:三天打鱼,两天晒网 某人从1992-2-1开始三天打鱼,两天晒网 问:输入
这个比较简单一点,仅供参考
#include《*****》
main()
{
int year,month,day,i,j=0,s,k,sum=0;
printf("Please enter year,month,day:\n");
scanf("%d,%d,%d",&year,&month,&day);
for(i=1992;i《year;i++)
{
if(i%400==0)
j+=366;
else
j+=365;}
switch(month)
{
case 1:s=0;break;
case 2:s=31;break;
case 3:s=59;break;
case 4:s=90;break;
case 5:s=120;break;
case 6:s=151;break;
case 7:s=181;break;
case 8:s=212;break;
case 9:s=243;break;
case 10:s=273;break;
case 11:s=304;break;
case 12:s=334;break;
default:printf("enter data error!");
}
if((year%400==0)&&(month》2))
{
sum=j+s+day+1;
k=sum%5;
if((k》=1)&&(k《=3))
printf("he was fishing at that day!\n");
if((k==4)||(k==0))
printf("he was sleeping at that day!\n");}
else
{
sum=j+s+day;
k=sum%5;
if((k》=1)&&(k《=3))
printf("he was fishing at that day!\n");
if((k==4)||(k==0))
printf("he was sleeping at that day!\n");}
}
关于C语言经典程序“打渔晒网”
楼主你好!!!俺仔细的看了一下程序代码,代码没有错误!!!!
俺解释一下(就针对与楼主的问题);
*****(i=1;i《*****;i++) 这个for()语句没有错误,这句确实只算了11个月的,但前面的*****=31; 给了补上!!!原因是无论那一年,1月和12月都是31天,所以楼主先把1月和12月的算在一起啦!!!这也正是楼主第二个疑问的所在!!!
如果楼主不信的话!!!可以把每一年的打印出啦,看看是不是365/366
要是少算一个月的话,那一定不是365/365;
修改如下:
#include《*****》
#include《*****》
struct date
{
int year;
int month;
int day;
};
int days(struct date day)
{
static int day_tab=
{
{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=*****%4==0&&*****%100!=0||*****%400==0;
/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
for(i=1;i《*****;i++) /*计算本年中自1月1日起的天数*/
*****+=day_tab;
cout《《*****《《endl;
return *****;
}
void main()
{
struct date today,term;
int yearday,year,day;
printf("Enter year/month/day:");
scanf("%d%d%d",&*****,&*****,&*****); /*输入日期*/
*****=12; /*设置变量的初始值:月*/
*****=31; /*设置变量的初始值:日*/
//注意这里哈
for(yearday=0,year=1990;year《*****;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");
}
三天打鱼两天晒网c语言编程用结构体变量怎么写
三天打鱼两天晒网c语言编程用结构体变量解题思路如下:
1、计算从 1990年1月1日开始至指定日期共有多少天;
2、由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3、根据余数判断是在“打鱼”还是在“晒网”;若余数为 1,2,3,则他是在“打鱼”否则是在“晒网”。
接下来的代码就可以根据自己所学的知识进行解决了。
c语言编程之三天打鱼两天晒网
#include 《*****》
#define MAX 100
#define leap(y) (y%4==0 && y%100!=0 || y%400==0)
struct d{int y,m,d;};
long days(struct d d1,struct d d2)
{
int mon= {{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; long td=0;
for(i=****;i《****;i++)
td+=leap(i)?366:365;
for(i=1;i《****;i++)
td-=mon;
td-=d1.d-1;
for(i=1;i《****;i++)
td+=mon;
td+=d2.d-1;
return td;
}
int main()
{
struct d now,start={1990,1,1};
int n,i,day;
scanf("%d",&n);
for(i=0;i《n;++i)
{
scanf("%d%d%d",&*****);
}
for(i=0;i《n;++i)
{
day=days(start,now);
if(day%5《3)
printf("He was fishing on %d %d %d\n",*****);
else
printf("He was basking on %d %d %d\n",*****);
}
return 0;
}
C语言编程某人从某年1月1日开始,三天打鱼,两天晒网从键盘输入x年x月x日,问这个人在该年的
你好!
程序发上来,你看看吧,满意请采纳
/*
如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,
编程实现当输入2011年1月1日,以后的任意一天,输出该渔夫是在打渔还是晒网。
*/
#include《*****》
int leap(int a) //自定义函数leap,判断输入的年份是否为闰年
{
if(a%4==0&&a%100!=0||a%400==0)
return 1;
else
return 0;
}
int number(int y,int m,int d)
{
int sum=0,i,j;
int a={31,29,31,30,31,30,31,31,30,31,30,31};
int b={31,28,31,30,31,30,31,31,30,31,30,31};
if(leap(y)==1)
{
for(i=0;i《=m-1;i++)
sum+=a;
}
else
{
for(i=0;i《=m-1;i++)
sum+=b;
}
for(j=2011;j《y;j++)
if(leap(j)==1)
sum+=366; //2011年到输入的年份是闰年加366
else
sum+=365; //2011年到输入的年份不是闰年加365
sum+=d;
return sum;
}
int main()
{
int y,m,d,n;
printf("请输入,年 月 日:\n");
scanf("%d%d%d",&y,&m,&d);
n=number(y,m,d);
if((n%5)《4&&(n%5)》0) //当余数是1,2,3时说明在打渔,否则在晒网
printf("%d年%d月%d日 打渔\n",y,m,d);
else
printf("%d年%d月%d日 晒网\n",y,m,d);
}
C语言中国有句俗语叫做“三天打鱼两天晒网”求高手!!!
这是我的测试结果:可以识别不同的错误种类,包括日期格式错误,日期不存在等(空行也会被识别为错误):
Please type in date as yyyy-mm-dd for each line
the last line should be 0
warning: this program uses gets(), which is unsafe.
输入:
2013-10-01
2010-08-30
2012-06-31
2013-05-31
1998-09-12
nothing
0
输出:
2013-10-01: he was fishing at that day
2010-08-30: he was sleeping at that day.
2012-06-31: Error: date doesn’t exist
2013-05-31: he was sleeping at that day.
1998-09-12: Error: date too early
: Error: wrong format
nothing: Error: wrong format
代码:
#include 《*****》
#include 《*****》
#include 《*****》
#define NEW (node *)malloc(sizeof(node))
#define MAX_CHAR_IN_LINE 50
typedef struct node{
char* date;
node* next;
} node;
int lengOfString(char* string)
{
int length=0;
while(string!=’\0’ && length 《 MAX_CHAR_IN_LINE)
length ++;
return length;
}
bool checkFormat(char* string)
{
int i=0;
while(string)
{
if(i!=4 && i!=7)
{
if(string》’9’ )
return false;
}
else
{
if (string!=’-’)
return false;
}
i++;
}
if(i!=10)
return false;
return true;
}
bool isLeapYear(int year)
{
if ((year % 4 == 0) && !(year % 100 == 0))
return true;
else if(year % 400 ==0)
return true;
return false;
}
int daysInMonth(int year, int month)
{
int table={ 31,28,31,30,31,30,31,31,30,31,30,31};
if (isLeapYear(year))
table=29;
return table;
}
int checkDate(char* string)
{
string=’\0’;
string=’\0’;
int year=atoi(string);
int month=atoi(&string);
int day=atoi(&string);
if(month》12 || month 《 1 )
return -1;
if( day 《1 || day》 daysInMonth(year,month))
return -1;
if(year 《 2000)
return -2;
int days=0;
int ite_year;
int ite_month;
for (ite_year=2000; ite_year《=year;ite_year++)
{
for(ite_month=1;ite_month《 (ite_year==year ? month : 13);ite_month++)
{
days+= daysInMonth(ite_year,ite_month);
}
}
days+=day;
int remainder=days%5;
if(remainder==4 || remainder==0)
return 0;//sleeping
else
return 1;//fishing
}
void printList(node* head)
{
while(head!=NULL)
{
printf("%s: ",head-》date);
if(checkFormat(head-》date))
{
int value=checkDate(head-》date);
if (value==-1)
printf("Error: date doesn’t exist\n");
if (value==-2)
printf("Error: date too early \n");
if (value==0)
printf("he was sleeping at that day. \n");
if (value==1)
printf("he was fishing at that day \n");
}
else
{
printf("Error: wrong format \n");
}
head=head-》next;
}
}
int main()
{
printf("Please type in date as yyyy-mm-dd for each line\n");
printf("the last line should be 0\n");
node* head=NEW;
node* tail=head;
while(true)
{
char* input=(char*)malloc(MAX_CHAR_IN_LINE*sizeof(char));
gets(input);
if (strncmp(input,"0",MAX_CHAR_IN_LINE)==0)
break;
int str_length=lengOfString(input+1);
char* date= (char*)malloc(sizeof(char)*str_length);
strcpy(date,input);
****(input);
node* entry=NEW;
entry-》date=date;
entry-》next=NULL;
tail-》next=entry;
tail=entry;
}
printList(head-》next);
return 0;
}
c语言 三天打鱼两天晒网 在线等 急急急!
#include《*****》
int main(){
int N, i;
scanf("%d", &N);
for (i = 0; i 《 N; i += 5);
if (i - N 》 1)
printf("这个人第%d天在“打鱼”\n", N)。else。
printf("这个人第%d天在“晒网”\n", N);
扩展资料:
C语言的注释符一般分为两种,一种是以“/*”开头,在中间加上注释内容,并以“*/”结尾的段落注释符。在“/*”和“*/”之间的即为注释。
另一种是以“//”开头,后面加注释内容的单行注释符。在“//”之后的即为注释。
C语言的注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。
注释用来向用户提示或解释程序的意义。在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不做处理,待调试结束后再去掉注释符。
C语言“三天打鱼两天晒网”问题
根据题意可以将解题过程分为三步:
1、计算从1990年1月1日开始至指定日期共有多少天;
2、由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3、根据余数判断他是在“打鱼”还是在“晒网”;若 余数为1,2,3,则他是在“打鱼”;否则 是在“晒网”。
#include 《*****》
/*定义日期结构体*/
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={0,31,28,31,30,31,30,31,31,30,31,30}; /*每月天数数组*/
int totalDay=0,year,i;
/*求出指定日期之前的每一年的天数累加和*/
for(year=1990; year《*****; year++) {
if(isLeap(year)) /*判断是否为闰年*/
totalDay=totalDay+366;
else
totalDay=totalDay+365;
}
/*如果为闰年,则二月份为29天*/
if(isLeap(*****))
perMonth+=1;
/*将本年内的天数累加到totalDay中*/
for(i=0; i《*****; i++)
totalDay+=perMonth;
/*将本月内的天数累加到totalDay中*/
totalDay+=*****;
/*返回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", &*****, &*****, &*****);
printf("\n");
error=0;
if(*****《1990) /*判断日期格式是否正确*/
{printf("The year should be larger than 1990!\n");error=1;}
if(*****《1||*****》12)
{printf("The month input is error!\n");error=1;}
if(*****《0||*****》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,晒网
日期输入错误
更多文章:
firefox清除缓存(请教问题:火狐浏览器清空缓存的快捷键是什么)
2026年5月2日 18:40
matlab解符号方程组的例子(matlab 求助 解方程组)
2026年5月2日 18:00








