遍历万年历"/>
C语言,遍历万年历
目录
int getWeekdayByYearday(int iY, int iM, int iD)
功能:判断某天是周几
参数:年、月、日
返回值:0~6 周日-周6
int MyYear(int year, int month)
功能:判断某年某月有几天(需判断闰年,平年)
参数:年、月
返回值:天数 28 29 30 31
int MyOutPut(int year, int month)
功能:打印某年某月的万年历
参数:年、月
返回值:-1 传参错误,0打印成功
主函数main
int getWeekdayByYearday(int iY, int iM, int iD)
功能:判断某天是周几
参数:年、月、日
返回值:0~6 周日-周6
int getWeekdayByYearday(int iY, int iM, int iD)
{int iWeekDay = -1;if (1 == iM || 2 == iM) {iM += 12;iY--;}iWeekDay = (iD + 1 + 2 * iM + 3 * (iM + 1) / 5 + iY + iY / 4 - iY / 100 + iY / 400) % 7;return iWeekDay;
}
int MyYear(int year, int month)
功能:判断某年某月有几天(需判断闰年,平年)
参数:年、月
返回值:天数 28 29 30 31
int MyYear(int year, int month)
{int day = 0;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:day = 31;break;case 4:case 6:case 9:case 11:day = 30;break;case 2:if ((0 == year % 4 && 0 != year % 400) || 0 == year % 400) {day = 29;} else {day = 28;}break;}return day;
}
int MyOutPut(int year, int month)
功能:打印某年某月的万年历
参数:年、月
返回值:-1 传参错误,0打印成功
int MyOutPut(int year, int month)
{int day = 0;int week = 0;if (year <= 0 && (month <= 0) || month > 13) {printf("参数传递错误,请重新输入:");return -1;}day = MyYear(year, month);printf("[%d %d]:\n", year, month);printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");for (int i = 1; i <= day; i++) {week = getWeekdayByYearday(year, month, i);if (1 == i) {switch (week) {case 0:printf("%-2d\t", i);break;case 1:printf("\t%-2d\t", i);break;case 2:printf("\t\t%-2d\t", i);break;case 3:printf("\t\t\t%-2d\t", i);break;case 4:printf("\t\t\t\t%-2d\t", i);break;case 5:printf("\t\t\t\t\t%-2d\t", i);break;case 6:printf("\t\t\t\t\t\t%-2d\n", i);break;}} else {switch (week) {case 0:case 1:case 2:case 3:case 4:case 5:printf("%-2d\t", i);break;case 6:printf("%-2d\n", i);break;}}}printf("\n\n");return 0;
}
主函数main
int main(int argc, char const* argv[])
{printf("********************************\n");printf("*****按year输出万年历*************\n");printf("*****按month输出万年历************\n");printf("********************************\n");printf("point '1.year' or '2.month':");int choose = 0;int year = 0;int month = 0;int day = 0;
rester1:scanf("%d", &choose);if (1 != choose && 2 != choose) {printf("输出错误!请重新输出 1 or 2:");goto rester1;}if (1 == choose) {rester2:printf("请输出具体的年份,如2019:");scanf("%d", &year);if (year <= 0) {printf("输出错误!请重新输入年份year>0:");goto rester2;}for (int i = 1; i <= 12; i++) {day = MyOutPut(year, i);}}if (2 == choose) {printf("请输出具体的年份,月份,如2019 10:");scanf("%d%d", &year, &month);if (year <= 0) {printf("输出错误!请重新输入年份year>0,month>0且month<13:");goto rester2;}day = MyOutPut(year, month);}return 0;
}
更多推荐
C语言,遍历万年历
发布评论