当前位置:首页 » 编程语言 » 推理出今天是星期几c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

推理出今天是星期几c语言

发布时间: 2022-11-21 22:41:19

c语言程序,输入年月日算出当天星期几

#include <stdio.h>
int main()
{
int day,mn,yr,i,days=0,s,k;
int mont[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char wek[][9]={ {'S','u','n','d','a','y'},
{'M','o','n','d','a','y'},
{'T','u','e','s','d','a','y'},
{'W','e','d','n','s','d','a','y'},
{'T','h','u','r','s','d','a','y'},
{'F','r','i','d','a','y'},
{'S','a','t','u','r','d','a','y'}
};
printf("Inpute the date (year-month-day):");
scanf("%d-%d-%d",&yr,&mn,&day);
if (yr%4==0||yr%100==0||yr%400==0)
mont[2]=29;
else
mont[2]=28;
for (i=0;i<mn;i++)
days+=mont[i];
days+=day;
s=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+days;
k=s%7;
printf("%d-%d-%d is %s.",yr,mn,day,wek[k]);
return 0;
}

❷ C语言程序,输入年月日算出当天星期几

先做一个函数,计算1900年1月1日到该天的天数,然后用膜除求出星期几并输出。

具体代码如下:

#include<stdio.h>
#include<stdlib.h>

intDay(inty,intm,intd);

intmain(intargc,char*argv[]){
inti;//循环变量
intyear,month,day;//读取用户输入的年月日
intdays;//储存从1900-1-1到该天的天数
intweek=0;//储存求余后的星期
//字符串组合输出星期
charb[]={"星期"};
charc[7][4]={"日","一","二","三","四","五","六"};

loop:printf("请输入年月日:(空格分隔) ");
scanf("%d%d%d",&year,&month,&day);
days=Day(year,month,day);
//增强程序的健壮性
if(days==-1)
{
printf("输入格式有误,");
fflush(stdin);//防止用户输入字母等其他非数字字符
gotoloop;
}
else
{
week=days%7;//用求余计算星期几
printf("%d年%d月%d日是%s%s ",year,month,day,b,c[week]);
}
system("pause");
return0;
}

//函数功能:输入年月日,输出1900-1-1到该天的天数,-1位输入不合法
intDay(inty,intm,intd)
{
inti;
intr=0;//储存1900到该天的闰年个数
inta[]={31,28,31,30,31,30,31,31,30,31,30};//m给每出月的天数

if(y>=1900&&m>0&&m<13&&d>0&&d<32)
{
for(i=1900;i<=y;i++)//计算闰年的个数
{
if(i%400==0||i%100!=0&&i%4==0)
r++;
}
for(i=0;i<m-1;i++)//统计当年1月1日到当月的天数
{
d+=a[i];
}
if((y%400==0||y%100!=0&&y%4==0)&&m<3)//如果当年是闰年但不到二月就不能算进去
r--;
return365*(y-1900)+r+d;
}
else
return-1;
}

❸ c语言 判断某天星期几

#include "stdio.h"
#include "conio.h"
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month) /*先计算某月以前月份的总天数*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0)) /*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2) /*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %dth day.",sum);
getch();
}

❹ C语言中知道今天星期几,再判断某日星期几的方法

不用知道今天是星期几.
就能知道某日是星期几

#include <time.h>
#include <stdio.h>

int main(void)
{
struct tm date,*ptm;
time_t t;

memset(&date, 0x0, sizeof(struct tm));

//2009-4-21
date.tm_year = 2009 -1900;
date.tm_mon = 4 - 1;
date.tm_mday = 21;

t = mktime(&date);
ptm = localtime(&t);

printf("Week: [0-6] [Sunday:0]: %d\n", ptm->tm_wday);

return 0;
}

❺ C语言输入今天星期几

#include<stdio.h>
intmain(void)
{
enumweekday{sun,mon,tue,wed,thu,fri,sat};
intn;
printf("输入星期数(0-6):");
scanf("%d",&n);
switch(n)
{
casesun:printf("今天是星期天. ");break;
casemon:printf("今天是星期一. ");break;
casetue:printf("今天是星期二. ");break;
casewed:printf("今天是星期三. ");break;
casethu:printf("今天是星期四. ");break;
casefri:printf("今天是星期五. ");break;
casesat:printf("今天是星期六. ");break;
default:
break;
}
return0;
}

❻ c语言知道日期算星期几

//这定义的是一个二维数组(7行10列)
//每一个字符串,比如:"星期天"就是一行,共七个字符。
//汉字占两个字符,所以"星期天"就是7个字符(末尾应该还有一个''结束符)。
//这里的10确实是随便定义的数,但是要保证大于等于7
charstr[7][10]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
intyear,month,day;

//这是定义一个子函数,IsLeapYear也是随便取的,
//但是要符合C语言的命名规范,并且最好有实际意义
intIsLeapYear()
{
if((year%4==0&&year%100!=0)||(year%400==0))
return1;
else
return0;
}

//这和上面一样,定义子函数,名字是随便取的,
//下划线也是符合c语言命名规范的,所以可用
//intm是一个参数,用来保存主函数传递过来的值
intmonth_day(intm)
{
//这是数组初始化的一种格式,由于有初始值列表,
//系统会自动根据初始化数据确定数组大小
//比如这里相当于intmon_day[12]
intmon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};

这些都是基础,还是看看书吧

❼ C语言程序,输入年月日算出当天星期几

似乎是有时间函数,看看说明
其实弄个语言,主要的是使用中间的函数、工具、各种包,
语言本身比较简单,相对的,而那是不够的,
那些函数,也不都是语言本身写的,

❽ 用c语言输入日期输出星期几

#include<stdio.h>

intmain(intargc,charconst*argv[])
{
intdata;
scanf("%d",&data);
printf("星期%d ",(data+1)%7+1);
return0;
}

❾ C语言 求某日是星期几(结构体方法)

创建公式

首先,我们要用变量D,M和Y来表示日期。比如,1994年3月1日就用“D=1,M=3,Y=4”记录。我们的目标是让计算结果在0到6之间。0代表星期一,1代表星期二,2代表星期三,依此类推。

1994 年3月1日是个星期二,那么“D mod 7(日期变量除以7的余数))))”这个公式对于整个三月份都有效。比如3月18日是星期五,18 mod 7=4;而4正代表星期五。别忘了,整数的除法和求模有着密切的关系。比方说,26除以7商3余5,这就是说,26除以7商数取整等于3,而26除以7求模(简写为26 mod 7)等于5。以上这些意味着19 mod 7=12 mod 7= 5 mod 7=5。在运算规则中,负数求模运算法相似,所以依此类推,-2 mod 7=5, -9 mod 7=5。

在更正式的表达法中,统一用任意整数n和k表达上述关系,那么这个过程可以表达为n=qk+r,这里的q和r的取值范围同样是整数和0。表1中列出了所有月份的变换数据(shift information此处试译为“档级数据”,还请进一步校对--译者注)。为了尽可能地得出规律,二月被排在最后,同理,一月也是如此。

例1 (a)中的公式是仿照表1中的变换数据栏所描述的模式而创建的。这个公式中的除法一律是商数取整。所以得数是最接近真正商数的整数。表2得出了此功能得出的有趣的数值。凭直觉,我们不难发现,当M(代表月份的变量)的值以1为单位递增时,2M就成倍增长,而3(M+1)/5就以3/5为增长倍数。

这正是我们仿制3,2,3,2,3这个重复格式所需要的(表中右边的弯括号表明了这一点)。请注意,我们在以7为除数求模,那么从6到2的求模结果就会逐个增加3(顺序是6,0,1,2)。

现在,我们发现了适用于逐月向下推算的校正方法,并希望把它加入刚才的尝试中,就是那个mod7公式。还以1994年3月1日为例,这个日期的M=3。请注意,在例1(b)中,8 mod 7=1,所以当整个公式合并时,必须减去1。在做以7为除数求模的运算时,减1和加6是一样的,因为-1 mod 7=6 mod 7=6。

这样,例1(c)中的公式就可以计算这一年中剩下的月份了。其实,既然我们把一月和二月排在表1的最后,那么只要我们把它们看成是十三月和十四月,就能接着推算1995年的前两个月了。这是因为,虽然它们并不是一个完整的3,2,3,2,3结构,但恰好可以是这个结构的开始,为了使这个公式更完善,我们还是最好把一月和二月看成是上一年的十三月和十四月。

加入年份

顺着年份向下找,我们观察到1995年3月1日是星期三。这说明,每增加一年,我们公式的计算结果就会增加1。这太简单了,我们只要简单地把年份加上去就行了。再提醒你一次,我们必须确保出发点是正确的。由于1994 mod 7=6,我们在把Y加入已有的公式时就必须减去6。由此改进的例2(a)就更完善了。

1996年是个闰年,这带来了我们的下一个问题。这一年的3月1日是星期五,而不是刚才的公式推算出的星期四。所以每当我们碰上闰年时还得多加上1。判断闰年的规则是,能被4整除,并能被100和400同时整除的年份就是闰年。就这样,我们在原有的基础上添加Y/4--Y/100+Y/400。再强调一下,我们必须从一开始就确保正确。既然(1994/4--1994/100+1994/400) mod 7=(498--19+4) mod 7=483 mod 7=0,所以就不用再做任何调整了。这样,例2(b)就是我们最终的成果了。这个公式能一直工作下去,除非改变现行的日历系统。作为示例,让我们试着推算一下2000年7月4日:(4+2*3+(7+1)/5+2000+2000/4--2000/100+2000/400) mod 7= (4+14+2000+500--20+5) mod 7=2507 mod 7=1,所以那一天是星期二。

这个公式还能推算过去的日期;然而计算范围有限,让我们看看1752年9月14号这个星期四吧,我们的公式最远只能推算到这里了。不过像“1963年11月22日你在哪里”这样的日常问题中提到的日期还是可以轻松应对的:(22+2*11+3(11+1)/5+1963+1963/4--1963/100+ 1963/400) mod 7=(22+22+7+1963+490--19+4) mod 7=2489 mod 7=4。那天就是星期五。

例3例子3是一个C语言程序,按照把这个公式自动推算给定日期是星期几。

表1:每月变换数据

月份 天数 变换

三月 31 3

四月 30 2

五月 31 3

六月 30 2

七月 31 3

八月 31 3

九月 30 2

十月 31 3

十一月 30 2

十二月 31 3

一月 31 3

二月 28 3

表2:仿制变换数据形式的功能。例1中建立的公式可以适用于1994年。例2把这个公式的功能扩展到可以应用在不同的年份进行推算。

例3:用C语言程序表达上述公式

/*计算指定日期是星期几。默认输入的*/

/*数字代表正确的日期*/

/* 推算给定日期是星期几,假定输入是正确的数据 */
#include
char *name[] = { "Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
};
void main(){
int D,M,Y,A;
printf("Day: "); fflush(stdout);
scanf("%d",&D);
printf("Month: "); fflush(stdout);
scanf("%d",&M);
printf("Year: "); fflush(stdout);
scanf("%d",&Y);
/* January and February are treated as month 13 and 14, */
/* respectively, from the year before. */
if ((M == 1) || (M == 2)){
M += 12;
Y--;
}
A = (D + 2*M + 3*(M+1)/5 + Y + Y/4 - Y/100 + Y/400) % 7;
printf("It's a %s.\n",name[A]);
}

/*一月和二月被当作前一年的*/

/*十三月和十四月分别处理*/

-------------------------------------------------------------------------------------- 没怎么看明白,有点复杂
-------------------------------------------------------------------------------------- 呵呵,楼主可以直接去看CTime的源代码,把它取得week的代码研究一下,自己封装一个函数。
-------------------------------------------------------------------------------------- int GetDayOfWeek(int nYear, int nMonth, int nDay)
{
struct tm atm = {0};
atm.tm_mday = nDay;
atm.tm_mon = nMonth - 1;
atm.tm_year = nYear - 1900;
atm.tm_isdst = -1;
time_t t = mktime(&atm);

return localtime(&t)->tm_wday + 1;
}

帮你从MFC抄了一个,没做错误检测。
返回值和CTime的一样。
This method retrieves the day of the week based on local time; 1 = Sunday, 2 = Monday, ..., 7 = Saturday.
-------------------------------------------------------------------------------------- CTime time;
time=CTime::GetCurrentTime();
CString strDate=time.Format(%A,%B,%d,%Y,%H,%M,%S);
//分别表示为星期几,几月,几日,年,小时,分,秒

http://msdn2.microsoft.com/zh-CN/library/29btb3sw.aspx
-------------------------------------------------------------------------------------- int GetDayOfWeek(int nYear, int nMonth, int nDay)
{
struct tm atm = {0};
atm.tm_mday = nDay;
atm.tm_mon = nMonth - 1;
atm.tm_year = nYear - 1900;
atm.tm_isdst = -1;
time_t t = mktime(&atm);

return localtime(&t)->tm_wday + 1;
}

帮你从MFC抄了一个,没做错误检测。
返回值和CTime的一样。
This method retrieves the day of the week based on local time; 1 = Sunday, 2 = Monday, ..., 7 = Saturday.

❿ c语言知道日期 算星期几

这个是用于计算是周几的公式
参见下链第一个公式
http://hi..com/greation/item/4e9615dedba8c94fdcf9be51
不过这个代码写的有点问题,应该是取整的
我个人比较喜欢用蔡勒公式或基姆拉尔森公式