早教吧作业答案频道 -->其他-->
C语言中国有句俗语叫做“三天打鱼两天晒网”求高手!中国有句俗语叫做“三天打鱼两天晒网”,这句话用在Tomcat身上正好.原来Tom从2000年1月1日搬到海边后每打三天鱼就要晒两天网.如今以前
题目详情
C语言中国有句俗语叫做“三天打鱼两天晒网”求高手!
中国有句俗语叫做“三天打鱼两天晒网”,这句话用在Tomcat身上正好.原来Tom从2000年1月1日搬到海边后每打三天鱼就要晒两天网.如今以前的邻居老鼠Jerry来看望Tom.请问Jerry会看到Tom在打鱼还是在晒网?
输入要求:
输入数据有多组,每组数据占一行,为Jerry看望Tom的日期,格式为yyyy-mm-dd.输入为“0”时结束,该数据不处理.
输出要求:
如果Tom在给定的日期打鱼,则输出"yyyy-mm-dd:he was fishing at that day.";如果Tom在给定的日期晒网,则输出"yyyy-mm-dd:he was sleeping at that day.".如果对于给定的日期不存在或者早于2000年1月1日,则输出"yyyy-mm-dd:Rrror!".
假如输入
2013-10-01
2010-08-30
2012-06-31
2013-05-31
1998-09-12
0
应当输出
2013-10-01:he was fishing at that day.
2010-08-30:he was sleeping at that day.
2012-06-31:Error!
2013-05-31:he was sleeping at that day.
1998-09-12:Error!
中国有句俗语叫做“三天打鱼两天晒网”,这句话用在Tomcat身上正好.原来Tom从2000年1月1日搬到海边后每打三天鱼就要晒两天网.如今以前的邻居老鼠Jerry来看望Tom.请问Jerry会看到Tom在打鱼还是在晒网?
输入要求:
输入数据有多组,每组数据占一行,为Jerry看望Tom的日期,格式为yyyy-mm-dd.输入为“0”时结束,该数据不处理.
输出要求:
如果Tom在给定的日期打鱼,则输出"yyyy-mm-dd:he was fishing at that day.";如果Tom在给定的日期晒网,则输出"yyyy-mm-dd:he was sleeping at that day.".如果对于给定的日期不存在或者早于2000年1月1日,则输出"yyyy-mm-dd:Rrror!".
假如输入
2013-10-01
2010-08-30
2012-06-31
2013-05-31
1998-09-12
0
应当输出
2013-10-01:he was fishing at that day.
2010-08-30:he was sleeping at that day.
2012-06-31:Error!
2013-05-31:he was sleeping at that day.
1998-09-12:Error!
▼优质解答
答案和解析
这是我的测试结果:可以识别不同的错误种类,包括日期格式错误,日期不存在等(空行也会被识别为错误):
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[length]!='\0' && length < MAX_CHAR_IN_LINE)
length ++;
return length;
}
bool checkFormat(char* string)
{
int i=0;
while(string[i])
{
if(i!=4 && i!=7)
{
if(string[i]'9' )
return false;
}
else
{
if (string[i]!='-')
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[12]={ 31,28,31,30,31,30,31,31,30,31,30,31};
if (isLeapYear(year))
table[1]=29;
return table[month-1];
}
int checkDate(char* string)
{
string[4]='\0';
string[7]='\0';
int year=atoi(string);
int month=atoi(&string[5]);
int day=atoi(&string[8]);
if(month>12 || month < 1 )
return -1;
if( 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_yeardate);
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);
free(input);
node* entry=NEW;
entry->date=date;
entry->next=NULL;
tail->next=entry;
tail=entry;
}
printList(head->next);
return 0;
}
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[length]!='\0' && length < MAX_CHAR_IN_LINE)
length ++;
return length;
}
bool checkFormat(char* string)
{
int i=0;
while(string[i])
{
if(i!=4 && i!=7)
{
if(string[i]'9' )
return false;
}
else
{
if (string[i]!='-')
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[12]={ 31,28,31,30,31,30,31,31,30,31,30,31};
if (isLeapYear(year))
table[1]=29;
return table[month-1];
}
int checkDate(char* string)
{
string[4]='\0';
string[7]='\0';
int year=atoi(string);
int month=atoi(&string[5]);
int day=atoi(&string[8]);
if(month>12 || month < 1 )
return -1;
if( 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_yeardate);
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);
free(input);
node* entry=NEW;
entry->date=date;
entry->next=NULL;
tail->next=entry;
tail=entry;
}
printList(head->next);
return 0;
}
看了 C语言中国有句俗语叫做“三天...的网友还看了以下:
求算黄金比例门要自己做活动板房的门,帮忙给个好的比例.我以后做盒子也要用到这个或者以后也行,宽0. 2020-04-25 …
设Sn是等比数列{an}的前n项和,S3,S9,S6成等差数列本题很简单可以由2s9=s3+s6得 2020-05-14 …
先想后做边想边做不想就做,三种做事方法.你赞同哪种方式,我们应该怎么做? 2020-05-16 …
1.某同学走进一个峡谷,他拍手后经过0.5秒听到右边山崖的回声,经过1.5秒以后听到走边山崖的回声 2020-06-20 …
找出最大绝对值和最小绝对值f(x,y)=x+y-xy在(0,0)(0,2)(4,0)三个顶点围成的 2020-07-30 …
x-2的绝对值=x-3,x=?我做了好久都做不出来也.!不对也,如果x=2.5,那左边=0.5,右边 2020-11-04 …
v0<0,a>0物体先做加速运动,后做减速运动vo>oa<o物体先做减速运动后做加速运动第一个为什么 2020-11-16 …
有效数字.有效数字.有效数字是指对于一个近似数,从左边第一个不是0的数字起,到精确到的位数止,所有的 2020-11-18 …
8.在水平地面上匀速行驶的拖拉机,前轮直径为0.8m,后轮直径为1.25m,两轮的轴水平距离2m,在 2020-11-24 …
舍不的........爱过后才懂得爱情有多深刻失去后才懂得该珍惜什么恨过后才懂得爱给的苦涩解脱后才懂 2020-12-03 …