當前位置:首頁 » 編程語言 » 推理出今天是星期幾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
不過這個代碼寫的有點問題,應該是取整的
我個人比較喜歡用蔡勒公式或基姆拉爾森公式