C语言初学者,本人才刚学完指针部分,这个对于我来说还是有难度的,打鱼晒网问题。
1条回答 默认 最新
- Jettblue_jr 2022-12-13 21:35关注
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <time.h> using namespace std; // 判断星期几 int getWeekDay(const int year, const int yday) { int n = year - 1 + (int)((year - 1) / 4) - (int)((year - 1) / 100) + (int)((year - 1) / 400) + yday; return n % 7; } // 是否闰年 bool isLeapYear(const int year) { return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; } // 获取当天是一年中的第几天 int getYearDay(const int year, const int month, const int mday) { int yday = 0; for (int i = 1; i < month; i++) { switch (i) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: yday += 31; break; case 4: case 6: case 9: case 11: yday += 30; break; case 2: yday += (isLeapYear(year) ? 29 : 28); break; } } yday += mday; return yday; } // 计算两个日期的天数差(假设date1小于date2) int getDayCount(const struct tm &date1, const struct tm &date2) { int nday = 0; int yday1 = getYearDay(date1.tm_year + 1900, date1.tm_mon + 1, date1.tm_mday); int yday2 = getYearDay(date2.tm_year + 1900, date2.tm_mon + 1, date2.tm_mday); for (int i = date1.tm_year; i < date2.tm_year; i++) { if (isLeapYear(i + 1900)) nday += 366; else nday += 365; } nday += (yday2 - yday1); return nday; } // 公历节日,随便弄15个。 const char* festivals[] = { "1,1", "元旦", "2,14", "情人节", "3,8", "妇女节", "3,12", "植树节", "3,15", "消费者权益日", "4,1", "愚人节", "4,5", "清明节", "5,1", "劳动节", "5,4", "青年节", "6,1", "儿童节", "7,1", "建党节", "8,1", "建军节", "9,10", "教师节", "10,1", "国庆节", "12,25", "圣诞节" }; char *weekdays[] = { "日", "一", "二", "三", "四", "五", "六" }; void setDate(struct tm &date, const int year, const int month, const int day) { date.tm_year = year; date.tm_mon = month; date.tm_mday = day; } void testDate1() { int month, year, day; cout << "请输入你想知道的年月日(用逗号隔开):"; scanf("%d,%d,%d", &year, &month, &day); //cin >> year >> month >> day; //距离元旦的天数 int yday = getYearDay(year, month, day); // 将日期赋值到tm结构体中,方便函数调用 struct tm date; setDate(date, year - 1900, month - 1, day); // 取得今天的时间,并转换为tm结构体 time_t now = time((time_t*)NULL); struct tm *today = localtime(&now); int nday; // 将年月日换算成如20160412的整数然后进行比较,简单直观 if (year * 10000 + (month - 1) * 100 + day >= (today->tm_year + 1900) * 1000 + today->tm_mon *100 + today->tm_mday) nday = getDayCount(*today, date); else nday = getDayCount(date, *today); printf("%d,%d,%d离今天有%d天!\n", year, month, day, nday); int wday = getWeekDay(year, yday); cout << "是星期" << weekdays[wday] << endl; // 看看今天是什么节日 char szDate[10] = { '\0' }; sprintf(szDate, "%d,%d", month, day); for (int i = 0; i < 30; i+= 2) { if (strcmp(szDate, festivals[i]) == 0) { cout << "是" << festivals[i + 1] << "!\n"; break; } } } void testDate2() { struct tm date1900; setDate(date1900, 0, 0, 1); int year, month, day; cout << "请输入你想知道的年月日(用逗号隔开):"; scanf("%d,%d,%d", &year, &month, &day); struct tm date; setDate(date, year - 1900, month - 1, day); // 求出所输入日期和1900年1月1日的日期差就能判断 int ndays = getDayCount(date1900, date); // 三天打渔两天晒网,即每5天一个周期。 int cycle = ndays % 5; // 对5求模,则结果是0-3的话就是打渔,否则就是晒网 if (cycle < 3) cout << "这天是在打渔!" << endl; else cout << "这天是在晒网!" << endl; } int main() { cout << "1. 离今天还有多少天!\n" << "2. 是打渔还是晒网!\n" << "3. 退出!" << endl; int op; do { cout << "请选择 1,2,3!\n"; cin >> op; if (op < 1 || op > 3) continue; switch (op) { case 1: testDate1(); break; case 2: testDate2(); break; default: break; } } while (op != 3); system("pause"); return 0; }
望采纳
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 宇视监控服务器无法登录
- ¥15 PADS Logic 原理图
- ¥15 PADS Logic 图标
- ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
- ¥15 DruidDataSource一直closing
- ¥20 气象站点数据求取中~
- ¥15 如何获取APP内弹出的网址链接
- ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
- ¥50 STM32单片机传感器读取错误
- ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据