先做一個(gè)函數(shù),計(jì)算1900年1月1日到該天的天數(shù),然后用膜除求出星期幾并輸出。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供寧江企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為寧江眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
具體代碼如下:
#include?stdio.h
#include?stdlib.h
int?Day(int?y,int?m,int?d);
int?main(int?argc,?char?*argv[])?{
int?i;??//循環(huán)變量
int?year,month,day;??//讀取用戶輸入的年月日
int?days;??//儲(chǔ)存從1900-1-1到該天的天數(shù)
int?week=0;??//儲(chǔ)存求余后的星期
//字符串組合輸出星期
char?b[]={"星期"};
char?c[7][4]={"日","一","二","三","四","五","六"};
loop:printf("請(qǐng)輸入年?月?日:(空格分隔)\n");
scanf("?%d%d%d",year,month,day);
days=Day(year,month,day);
//增強(qiáng)程序的健壯性
if(days==-1)
{
printf("輸入格式有誤,");
fflush(stdin);??//防止用戶輸入字母等其他非數(shù)字字符
goto?loop;
}
else
{
week=days%7;??//用求余計(jì)算星期幾
printf("%d年%d月%d日是%s%s\n",year,month,day,b,c[week]);
}
system("pause");
return?0;
}
//函數(shù)功能:輸入年月日,輸出1900-1-1到該天的天數(shù),-1位輸入不合法
int?Day(int?y,int?m,int?d)
{
int?i;
int?r=0;??//儲(chǔ)存1900到該天的閏年個(gè)數(shù)
int?a[]={31,28,31,30,31,30,31,31,30,31,30};?//m給每出月的天數(shù)
if(y=1900??m0??m13??d0??d32)
{
for(i=1900;i=y;i++)??//計(jì)算閏年的個(gè)數(shù)
{
if(i%400==0||i%100!=0i%4==0)
r++;
}
for(i=0;im-1;i++)??//統(tǒng)計(jì)當(dāng)年1月1日到當(dāng)月的天數(shù)
{
d+=a[i];
}
if((y%400==0||y%100!=0y%4==0)m3)??//如果當(dāng)年是閏年但不到二月就不能算進(jìn)去
r--;
return?365*(y-1900)+r+d;
}
else
return?-1;
}
//?這定義的是一個(gè)二維數(shù)組(7行10列)
//?每一個(gè)字符串,比如:"星期天"就是一行,共七個(gè)字符。
//?漢字占兩個(gè)字符,所以"星期天"就是7個(gè)字符(末尾應(yīng)該還有一個(gè)'\0'結(jié)束符)。
//?這里的?10?確實(shí)是隨便定義的數(shù),但是要保證大于等于?7??
char?str[7][10]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
int?year,month,day;
//?這是定義一個(gè)子函數(shù),IsLeapYear也是隨便取的,
//?但是要符合?C?語(yǔ)言的命名規(guī)范,并且最好有實(shí)際意義
int?IsLeapYear()?
{?
if((year%4==0year%100!=0)||(year%400==0))?
return?1;
else?
return?0;
}?
//?這和上面一樣,定義子函數(shù),名字是隨便取的,
//?下劃線也是符合c?語(yǔ)言命名規(guī)范的,所以可用
//?int?m?是一個(gè)參數(shù),用來保存主函數(shù)傳遞過來的值
int?month_day(int?m)?
{??
//?這是數(shù)組初始化的一種格式,由于有初始值列表,
//?系統(tǒng)會(huì)自動(dòng)根據(jù)初始化數(shù)據(jù)確定數(shù)組大小
//?比如這里相當(dāng)于int?mon_day[12]
int?mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
這些都是基礎(chǔ),還是看看書吧
#includestdio.h
int isRn(int num){
if((num%4==0num%400!=0)||num%400==0){
return 1;
}else{
return 0;
}
int monthDay(int year,int month){
if(month==1||month==3||month==5
||month==7||month==8||month==10
||month==12){
return 31;
}else if(month==4||month==6||month==9
||month==11)
{
return 30;
}else if(month==2){
if(isRn(int num)==1){
return 29;
}else{
return 28;
}
}
}
void main(){
int sum=0,year,month,day,i,temp,j;
printf("請(qǐng)輸入年份:");
scanf("%d",year);
while(year1900){
printf("年份必須從1900年開始!\n\n");
printf("請(qǐng)輸入年份:");
scanf("%d",year);
}
printf("請(qǐng)輸入月份:");
scanf("%d",month);
while(month1||month12){
printf("月份必須是1到12之間!\n\n");
printf("請(qǐng)輸入月份:");
scanf("%d",month);
}
printf("請(qǐng)輸入日:");
scanf("%d",day);
while(daymonthDay(year,month)||day1){
printf("日必須從1開始,并且不能大于該月的天數(shù)!\n\n");
printf("請(qǐng)輸入日:");
scanf("%d",day);
}
temp=month;
temp-=1;
for(i=1900;i=year;i++){
for(j=1;j=12;j++){
if(i==yearj==temp){
break;
}
sum+= monthDay(year,j);
}
}
sum+=day;
printf("%d年%d月%d日,是星期",year,month,day)
if(sum%7==0){
printf("日。\n");
}else if(sum%7==1){
printf("一。\n");
}else if(sum%7==2){
printf("二。\n");
}else if(sum%7==3){
printf("三。\n");
}else if(sum%7==4){
printf("四。\n");
}else if(sum%7==5){
printf("五。\n");
}else if(sum%7==2){
printf("六。\n");
}
}
注意:本源碼中,函數(shù)GetWeekDay的返回值僅僅表示輸入?yún)?shù)是否“正確/有效”(例如前三個(gè)參數(shù)使用2001,2,29就是無(wú)效參數(shù)),能否得到預(yù)期的星期值;真正的星期值則是通過輸出變量返回給主調(diào)函數(shù)的。
#include
time.h
#include
stdio.h
int
GetWeekDay(int
nYear,int
nMon,int
nDay,
int
*npWeekDay);
int
main()
{
int
nMyWeekDay;
int
nResult;
nResult
=
GetWeekDay(2007,1,10,nMyWeekDay);
return
0;
}
//輸入日期,返回星期的C語(yǔ)言函數(shù)
int
GetWeekDay(int
nYear,int
nMon,int
nDay,
int
*npWeekDay)
{
int
nRetVal
=
0;
time_t
tMyDateTime;
struct
tm
tmMyDate,*tmpMyDate;
if((nYear1900||nYear=3000)
||
(nMon1
||
nMon12)
||
(nDay1||nDay31)
)
{
nRetVal
=
1;
*npWeekDay
=
-1;
return
nRetVal;
}
//memset(tmMyDate,0,sizeof(struct
tm));
tmMyDate.tm_year
=
nYear-1900;
tmMyDate.tm_mon
=
nMon-1;
tmMyDate.tm_mday
=
nDay;
tmMyDate.tm_hour
=16;
tmMyDate.tm_min
=30;
tmMyDate.tm_sec
=30;
tMyDateTime
=
mktime(tmMyDate);
if(tMyDateTime0)
{
nRetVal
=
1;
*npWeekDay
=
-1;
return
nRetVal;
}
tmpMyDate
=
localtime(tMyDateTime);
*npWeekDay
=
tmpMyDate-tm_wday;
return
nRetVal;
}