/*求出...是星期几*/

Pei_Pei 2010-04-03 03:45:35
/* 元年1月1日是星期天
计算输入的日期是星期几*/

#include "stdio.h"
#include "conio.h"
typedef struct date{
int year;
int month;
int day;
}DATE;

int pear(int year){
if(year%400==0||(year%4==0&&year%100!=0))
return 1;
else
return 0;
}

long days(DATE date1,DATE date2){
int i;
long dayday,dayt=0,dayt1=0,dayt2=0;
int d[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
for(i=date1.year;i<date2.year;i++){
if(pear(i))
dayt+=366;
else dayt+=365;
}
for(i=0;i<date1.month;++i)
dayt1+=d[pear(date1.year)][i];
dayt1+=date1.day;

for(i=0;i<date2.month;++i)
dayt2+=d[pear(date2.year)][i];
dayt2+=date2.day;

dayday=dayt+dayt2-dayt1;
return dayday;
}

main()
{ DATE date1={1,1,1},date2;
int p;
printf("Please input the date you want to know:");
scanf("%d-%d-%d",&date2.year,&date2.month,&date2.day);
p=(int)(days(date1,date2)%7);
printf("%d-%d-%d is %d.",date2.year,date2.month,date2.day,p);
getch();
}

我输入2010-4-3显示4
应该显示6才对吧~

帮忙看一下哪里错了~~~~~
...全文
235 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
blh 2010-04-04
  • 打赏
  • 举报
回复
http://blog.csdn.net/blh/archive/2009/07/12/4342248.aspx
Pei_Pei 2010-04-04
  • 打赏
  • 举报
回复
多谢各位了
Pei_Pei 2010-04-04
  • 打赏
  • 举报
回复
元年1月1日是星期一!!!!!
(我想应该是我的题目错了)

我最终的代码:

/*
元年1月1日是星期天?还是星期一?如果是星期一,就对了
计算输入的日期是星期几*/

#include "stdio.h"
#include "conio.h"
typedef struct date{
int year;
int month;
int day;
}DATE;

int pear(int year){ /*判断闰年*/
if((year%400==0&&year%100==0)||(year%4==0&&year%100!=0))
return 1;
else
return 0;
}

long days(DATE date1,DATE date2){/*计算从1-1-1到输入日期的天数*/
int i;
long dayday,dayt=0,dayt1=0,dayt2=0;
int d[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
for(i=date1.year;i<date2.year;i++){
if(pear(i))
dayt+=366;
else dayt+=365;
}
for(i=1;i<date1.month;++i)
dayt1+=d[pear(date1.year)][i-1];
dayt1+=date1.day;

for(i=1;i<date2.month;++i)
dayt2+=d[pear(date2.year)][i-1];
dayt2+=date2.day;

dayday=dayt+dayt2-dayt1;
return dayday;
}

main()
{ DATE date1={1,1,1},date2;
int p;
char *w;
printf("Please input the date you want to know:");
scanf("%d-%d-%d",&date2.year,&date2.month,&date2.day);
p=(days(date1,date2)+1)%7;
switch(p){ /*把数字转换成星期*/
case 0:
w="Sunday";
break;
case 1:
w="Monday";
break;
case 2:
w="Tuesday";
break;
case 3:
w="Wednesday";
break;
case 4:
w="Thursday";
break;
case 5:
w="Friday";
break;
case 6:
w="Saturday";
break;
}
printf("There are %ld days from 1-1-1 to today.\n",days(date1,date2));
printf("%d-%d-%d is %s.",date2.year,date2.month,date2.day,w);
getch();
}
电信用户 2010-04-04
  • 打赏
  • 举报
回复
不会 我看不懂
电信用户 2010-04-04
  • 打赏
  • 举报
回复
不会 我看不懂
flyyyri 2010-04-03
  • 打赏
  • 举报
回复
dinggg
huanmie_09 2010-04-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pei_pei 的回复:]
C/C++ code
{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}
};/*这个我没改*/
dayt1+=d[pear(date1.year)][i-1];/*但是我把这里加了1*/
[/Quote]
呵呵,元年一月一日是星期一.
http://zhidao.baidu.com/question/12479794.html
你当成周日了,开始改代码的时候前面的注释没有改过来。
Pei_Pei 2010-04-03
  • 打赏
  • 举报
回复
{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}
};/*这个我没改*/
dayt1+=d[pear(date1.year)][i-1];/*但是我把这里加了1*/
huanmie_09 2010-04-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pei_pei 的回复:]
huanmie_09

(倩&文)
非常感谢你帮我改了代码,我看了很久
把for(i = 1; i < date1.month; ++i)也改了
但是p=(int)(days(date1, date2) % 7) + 1;这个地方+1就不对了
虽然输入2010-4-3是星期六,可是输入1-1-2就不对了。。。
我想很久也不知道是为什么。p=(int)(days(date1……
[/Quote]
把数组的定义形式也改一下:
int d[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}
};
Pei_Pei 2010-04-03
  • 打赏
  • 举报
回复

/*
元年1月1日是星期天
计算输入的日期是星期几*/

#include "stdio.h"
#include "conio.h"
typedef struct date{
int year;
int month;
int day;
}DATE;

int pear(int year){ /*判断闰年*/
if((year%400==0&&year%100==0)||(year%4==0&&year%100!=0))
return 1;
else
return 0;
}

long days(DATE date1,DATE date2){/*计算从1-1-1到输入日期的天数*/
int i;
long dayday,dayt=0,dayt1=0,dayt2=0;
int d[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
for(i=date1.year;i<date2.year;i++){
if(pear(i))
dayt+=366;
else dayt+=365;
}
for(i=1;i<date1.month;++i)
dayt1+=d[pear(date1.year)][i-1];
dayt1+=date1.day;

for(i=1;i<date2.month;++i)
dayt2+=d[pear(date2.year)][i-1];
dayt2+=date2.day;

dayday=dayt+dayt2-dayt1;
return dayday;
}

main()
{ DATE date1={1,1,1},date2;
int p;
char *w;
printf("Please input the date you want to know:");
scanf("%d-%d-%d",&date2.year,&date2.month,&date2.day);
p=days(date1,date2)%7;
switch(p){ /*把数字转换成星期*/
case 0:
w="Sunday";
break;
case 1:
w="Monday";
break;
case 2:
w="Tuesday";
break;
case 3:
w="Wednesday";
break;
case 4:
w="Thursday";
break;
case 5:
w="Friday";
break;
case 6:
w="Saturday";
break;
}
printf("There are %ld days from 1-1-1 to today.\n",days(date1,date2));
printf("%d-%d-%d is %s.",date2.year,date2.month,date2.day,w);
getch();
}






各位,有时间就帮忙想想行吗~
Pei_Pei 2010-04-03
  • 打赏
  • 举报
回复
huanmie_09

(倩&文)
非常感谢你帮我改了代码,我看了很久
把for(i = 1; i < date1.month; ++i)也改了
但是p=(int)(days(date1, date2) % 7) + 1;这个地方+1就不对了
虽然输入2010-4-3是星期六,可是输入1-1-2就不对了。。。
我想很久也不知道是为什么。p=(int)(days(date1, date2) % 7)会小了1~~~~~
huanmie_09 2010-04-03
  • 打赏
  • 举报
回复

/* 元年1月1日是星期天
计算输入的日期是星期几*/

#include "stdio.h"
#include "conio.h"

typedef struct date{
int year;
int month;
int day;
} DATE;

int pear(int year){
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
return 1;
else
return 0;
}

long days(DATE date1, DATE date2) {
int i;
long dayday, dayt = 0, dayt1 = 0, dayt2 = 0;
int d[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}
};
for(i = date1.year; i < date2.year; i++){
if(pear(i))
dayt += 366;
else
dayt += 365;
}
for(i = 1; i < date1.month; ++i)
dayt1 += d[pear(date1.year)][i];
dayt1 += date1.day;

for(i = 1; i < date2.month; ++i)
dayt2 += d[pear(date2.year)][i];
dayt2 += date2.day;

dayday = dayt + dayt2 - dayt1;
return dayday;
}

void main()
{
DATE date1 = {1, 1, 1}, date2;
int p;
printf("Please input the date you want to know:");
scanf("%d-%d-%d", &date2.year, &date2.month, &date2.day);

p=(int)(days(date1, date2) % 7) + 1;

printf("%d-%d-%d is %d.", date2.year, date2.month, date2.day, p);
getchar();
}
yzx714 2010-04-03
  • 打赏
  • 举报
回复
使用吉姆拉尔森来算吧……
匚匚 2010-04-03
  • 打赏
  • 举报
回复
#include <time.h>

/*

函数名称:int GetWeekDay(int year,int month,int day)

函数功能: 返回输入日期对应的一周中的第几天。

函数参数:year 输入日期的年;month 输入日期的月;day输入日期的日

如:2000年1月1日则是GetWeekDay(2000,1,1)

*/

int GetWeekDay(int year,int month,int day)

{

int i,j,count=0;

int Day_Index;

int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int MonthAdd[12] = {0,31,59,90,120,151,181,212,243,273,304,334};

#if 0

for(i = 1;i < month;i++)

count = count + days[i];

#else

count = MonthAdd[month-1];

#endif

count = count + day;

if((year%4 == 0&&year %100 != 0||year % 400 == 0)&& month >= 3)

count += 1;

count = count + (year - 1901) * 365;

for(j = 1901;j < year;j++)

{

if(j % 4 == 0 && j % 100 != 0 || j % 400 == 0)

count++;

}

return ((count+1) % 7);

}

main()

{

const char *Week[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

struct tm * Local;

long t;

int year,month,day;

#if 0

//下面仅仅是拿当前的日期作为计算,当然你也可以用来计算其他的日期。

//如:2000年1月1日则是GetWeekDay(2000,1,1)

t = time(NULL);

Local = localtime(&t);

year = Local->tm_year + 1900;

month = Local->tm_mon + 1;

day = Local-> tm_mday;

printf("%d年%d月%d日\t",year,month,day);

puts(Week[GetWeekDay(year,month,day)]);

//下面是访问tm结构体来得到当前是星期几

printf("%d年%d月%d日\t",year,month,day);

puts(Week[Local->tm_wday]);

#else

year = 2006;

month = 10;

day = 1;

printf("%d年%d月%d日\t",year,month,day);

puts(Week[GetWeekDay(year,month,day)]);

#endif

system("pause");

}
lovesi3344 2010-04-03
  • 打赏
  • 举报
回复



#include <stdio.h>
#include<conio.h>
char *week[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int main()
{
int Y;
int M;
int D;
int A;
printf("\nEnter year:");
scanf("%d",&Y);
printf("\nEnter month:");
scanf("%d",&M);
printf("\nEnter date(如果是一位数,请以0开头):");
scanf("%d",&D);
//下面的四条语句用来计算输入日期的星期数,是程序的核心部分,缺一不可
A = Y > 0 ? (5 + (Y + 1) + (Y - 1)/4 - (Y - 1)/100 + (Y - 1)/400) % 7
: (5 + Y + Y/4 - Y/100 + Y/400) % 7;

A = M > 2 ? (A + 2*(M + 1) + 3*(M + 1)/5) % 7
: (A + 2*(M + 2) + 3*(M + 2)/5) % 7;

if (((Y%4 == 0 && Y%100 != 0) || Y%400 == 0) && M>2)
{
A = (A + 1) % 7;
}
A = (A + D) % 7;
printf("\nI's a %s.\n\n",week[A]);
getch();
return 0;
}

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧