先做一個函數,計算1900年1月1日到該天的天數,然后用膜除求出星期幾并輸出。
成都創新互聯是一家專業提供寧江企業網站建設,專注與網站設計制作、成都做網站、H5網站設計、小程序制作等業務。10年已為寧江眾多企業、政府機構等服務。創新互聯專業的建站公司優惠進行中。
具體代碼如下:
#include?stdio.h
#include?stdlib.h
int?Day(int?y,int?m,int?d);
int?main(int?argc,?char?*argv[])?{
int?i;??//循環變量
int?year,month,day;??//讀取用戶輸入的年月日
int?days;??//儲存從1900-1-1到該天的天數
int?week=0;??//儲存求余后的星期
//字符串組合輸出星期
char?b[]={"星期"};
char?c[7][4]={"日","一","二","三","四","五","六"};
loop:printf("請輸入年?月?日:(空格分隔)\n");
scanf("?%d%d%d",year,month,day);
days=Day(year,month,day);
//增強程序的健壯性
if(days==-1)
{
printf("輸入格式有誤,");
fflush(stdin);??//防止用戶輸入字母等其他非數字字符
goto?loop;
}
else
{
week=days%7;??//用求余計算星期幾
printf("%d年%d月%d日是%s%s\n",year,month,day,b,c[week]);
}
system("pause");
return?0;
}
//函數功能:輸入年月日,輸出1900-1-1到該天的天數,-1位輸入不合法
int?Day(int?y,int?m,int?d)
{
int?i;
int?r=0;??//儲存1900到該天的閏年個數
int?a[]={31,28,31,30,31,30,31,31,30,31,30};?//m給每出月的天數
if(y=1900??m0??m13??d0??d32)
{
for(i=1900;i=y;i++)??//計算閏年的個數
{
if(i%400==0||i%100!=0i%4==0)
r++;
}
for(i=0;im-1;i++)??//統計當年1月1日到當月的天數
{
d+=a[i];
}
if((y%400==0||y%100!=0y%4==0)m3)??//如果當年是閏年但不到二月就不能算進去
r--;
return?365*(y-1900)+r+d;
}
else
return?-1;
}
//?這定義的是一個二維數組(7行10列)
//?每一個字符串,比如:"星期天"就是一行,共七個字符。
//?漢字占兩個字符,所以"星期天"就是7個字符(末尾應該還有一個'\0'結束符)。
//?這里的?10?確實是隨便定義的數,但是要保證大于等于?7??
char?str[7][10]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
int?year,month,day;
//?這是定義一個子函數,IsLeapYear也是隨便取的,
//?但是要符合?C?語言的命名規范,并且最好有實際意義
int?IsLeapYear()?
{?
if((year%4==0year%100!=0)||(year%400==0))?
return?1;
else?
return?0;
}?
//?這和上面一樣,定義子函數,名字是隨便取的,
//?下劃線也是符合c?語言命名規范的,所以可用
//?int?m?是一個參數,用來保存主函數傳遞過來的值
int?month_day(int?m)?
{??
//?這是數組初始化的一種格式,由于有初始值列表,
//?系統會自動根據初始化數據確定數組大小
//?比如這里相當于int?mon_day[12]
int?mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
這些都是基礎,還是看看書吧
#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("請輸入年份:");
scanf("%d",year);
while(year1900){
printf("年份必須從1900年開始!\n\n");
printf("請輸入年份:");
scanf("%d",year);
}
printf("請輸入月份:");
scanf("%d",month);
while(month1||month12){
printf("月份必須是1到12之間!\n\n");
printf("請輸入月份:");
scanf("%d",month);
}
printf("請輸入日:");
scanf("%d",day);
while(daymonthDay(year,month)||day1){
printf("日必須從1開始,并且不能大于該月的天數!\n\n");
printf("請輸入日:");
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");
}
}
注意:本源碼中,函數GetWeekDay的返回值僅僅表示輸入參數是否“正確/有效”(例如前三個參數使用2001,2,29就是無效參數),能否得到預期的星期值;真正的星期值則是通過輸出變量返回給主調函數的。
#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語言函數
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;
}
當前名稱:c語言日期轉星期函數,由日期轉星期函數
當前路徑:http://vcdvsql.cn/article46/dsigohg.html
成都網站建設公司_創新互聯,為您提供手機網站建設、品牌網站建設、用戶體驗、網站導航、域名注冊、服務器托管
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯