dow.c
来自「国外网站上的一些精典的C程序」· C语言 代码 · 共 78 行
C
78 行
/*** DOW.C**** Public domain by VinhHao Nguyen, 03/94**** Note: This function is redundant with the function of the same name** in DAYNUM.C. Which one to use?**** If you're already using any functions in SCALDATE.C, DAYNUM.C,** or TODAY.C, ignore this file and use the other dow().**** If you need a stand-alone DOW() function without using any of** the rest of the SCALDATE package, use this file.*/#include "scaldate.h"#if ISO_CAL /* monday == 0 */ #define ADJ 5#else /* sunday == 0 */ #define ADJ 6#endifunsigned DOW(unsigned y, unsigned m, unsigned d){ if (m < 3) { m += 13; y--; } else m++; return (d + 26 * m / 10 + y + y / 4 - y / 100 + y / 400 + ADJ) % 7;}#ifdef TEST#include <stdio.h>#include <stdlib.h>main(int argc, char *argv[]){ int Day; void usage(void); unsigned d, m, y, days[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char *day[2][7] = { {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}, {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"} }; char *month[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",}; if (4 > argc) usage(); y = atoi(argv[1]); m = atoi(argv[2]); d = atoi(argv[3]); if (!m || m > 12) usage(); if (!d || d > days[m - 1]) usage(); if (y < 100) y += 1900; Day = DOW(y, m, d); printf("DOW(ISO_CAL=%d) returned %d, so %d %s %d is a %s\n", ISO_CAL, Day, d, month[m - 1], y, day[ADJ - 5][Day]); return 0;}void usage(void){ puts("Usage: DOW yy[yy] mm dd"); exit(-1);}#endif /* TEST */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?