年历显示
嗯……C语言课程设计要求
(1)输入一个年份,输出的是屏幕上显示该年的日历,假定输入的年份在1940-2040年之间
(2)输入年月,输出该月的日历
(3)输入年月日,输出距今天还有多少天,是否是公历节日[/size]
[解决办法]
1)
[User:root Time:22:58:32 Path:/home/liangdong/c]$ cat src/main.c #include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char* const argv[]) { int year; char command[20]; while (scanf("%d", &year) == 1) { snprintf(command, sizeof(command), "cal '%d'", year); system(command); } return 0;}[User:root Time:22:58:05 Path:/home/liangdong/c]$ makegcc -g -I./include -c -o src/main.o src/main.cgcc -o output src/main.o -lpthread -lm -lzMakefile done.[User:root Time:22:58:07 Path:/home/liangdong/c]$ ./output 1999 1999 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 5 6 3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 1310 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 2017 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 2724 25 26 27 28 29 30 28 28 29 30 3131 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 1 2 3 4 5 4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 1211 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 1918 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 2625 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30 30 31 July August September Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 2 3 4 5 6 7 1 2 3 4 4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 1111 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 1818 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 2525 26 27 28 29 30 31 29 30 31 26 27 28 29 30 October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 1110 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 1817 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 2524 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31312012 2012 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 1 2 3 4 1 2 3 8 9 10 11 12 13 14 5 6 7 8 9 10 11 4 5 6 7 8 9 1015 16 17 18 19 20 21 12 13 14 15 16 17 18 11 12 13 14 15 16 1722 23 24 25 26 27 28 19 20 21 22 23 24 25 18 19 20 21 22 23 2429 30 31 26 27 28 29 25 26 27 28 29 30 31 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 1 2 3 4 5 1 2 8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 915 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 1622 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 2329 30 27 28 29 30 31 24 25 26 27 28 29 30 July August September Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 1 2 3 4 1 8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 815 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 1522 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 2229 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29 30 October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 1 2 3 1 7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 814 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 1521 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 2228 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29 30 31
[解决办法]
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <math.h>int main(int argc, char* const argv[]) { int year, month, day; struct tm past_tm; time_t past_time; time_t cur_time; while (scanf("%d%d%d", &year, &month, &day) == 3) { bzero(&past_tm, sizeof(struct tm)); past_tm.tm_year = year - 1900; past_tm.tm_mon = month - 1; past_tm.tm_mday = day; past_time = mktime(&past_tm); if (past_time != -1) { cur_time = time(NULL); struct tm *cur_tm = localtime(&cur_time); year = cur_tm->tm_year; month = cur_tm->tm_mon; day = cur_tm->tm_mday; bzero(cur_tm, sizeof(struct tm)); cur_tm->tm_year = year; cur_tm->tm_mon = month; cur_tm->tm_mday = day; cur_time = mktime(cur_tm); int secs = abs(cur_time - past_time); int days = secs / (60 * 60 * 24); printf("%d days\n", days); } } return 0;}[User:root Time:23:26:31 Path:/home/liangdong/c]$ ./output 2012 5 270 days2012 5 281 days^C
[解决办法]
可惜是C语言的,否则利用boost的date,date_duration解决很简单