feat: 更新
This commit is contained in:
parent
025242f1a4
commit
089bcc92a1
@ -1,5 +1,8 @@
|
|||||||
# UIT2024 项目考核 万年历
|
# UIT2024 项目考核 万年历
|
||||||
|
|
||||||
|
文件夹下已存放UIT2023的部分日历代码,`stu_2024` 下存放的均是2024级所有人的代码。
|
||||||
|
由于环境不同,代码仅供参考!
|
||||||
|
|
||||||
### 考核要求
|
### 考核要求
|
||||||
|
|
||||||
制作使用 C/C++ 编写一个命令行应用 万年历,有如下功能:
|
制作使用 C/C++ 编写一个命令行应用 万年历,有如下功能:
|
||||||
@ -15,4 +18,3 @@
|
|||||||
截止日期:2024年11月17日(周日)
|
截止日期:2024年11月17日(周日)
|
||||||
|
|
||||||
注意事项:**原则上禁止代码抄袭,我们将参考程序实际运行情况与代码内容进行提问!**
|
注意事项:**原则上禁止代码抄袭,我们将参考程序实际运行情况与代码内容进行提问!**
|
||||||
|
|
||||||
|
350
lcm.c
Normal file
350
lcm.c
Normal file
@ -0,0 +1,350 @@
|
|||||||
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
|
#pragma warning(disable:6031)
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
void one(int year);//查询对应年份的日历,要求可双列输出可单列输出
|
||||||
|
void two(int year, int month, int day);//查询对应日期的星期
|
||||||
|
void three(int year);//查询对应年份是否为闰年
|
||||||
|
int main() {
|
||||||
|
printf("1.查询对应年份的日历\n");
|
||||||
|
printf("2.查询对应日期的星期\n");
|
||||||
|
printf("3.查询对应年份是否为闰年\n");
|
||||||
|
printf("4.退出\n");
|
||||||
|
int a;
|
||||||
|
int year, month, day;
|
||||||
|
while (scanf("%d", &a) != EOF) {
|
||||||
|
system("cls");
|
||||||
|
if (a == 1) {
|
||||||
|
printf("请输入年份:");
|
||||||
|
while (scanf("%d", &year) != EOF) {
|
||||||
|
system("cls");
|
||||||
|
if (year > 0) {
|
||||||
|
one(year);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("请重新输入:");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (a == 2) {
|
||||||
|
printf("请输入日期(年 月 日):");
|
||||||
|
while (scanf("%d %d %d", &year, &month, &day) != EOF) {
|
||||||
|
system("cls");
|
||||||
|
if (year > 0 && month > 0 && month < 13) {
|
||||||
|
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
|
||||||
|
if (day > 0 && day <= 31) {
|
||||||
|
two(year, month, day);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("请重新输入日期(年 月 日):");
|
||||||
|
}
|
||||||
|
else if (month == 4 || month == 6 || month == 9 || month == 11) {
|
||||||
|
if (day > 0 && day <= 30) {
|
||||||
|
two(year, month, day);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("请重新输入日期(年 月 日):");
|
||||||
|
}
|
||||||
|
else if (month == 2) {
|
||||||
|
if (!(year % 4) && (year % 100)) {
|
||||||
|
if (day > 0 && day <= 29) {
|
||||||
|
two(year, month, day);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("请重新输入日期(年 月 日):");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (day > 0 && day <= 28) {
|
||||||
|
two(year, month, day);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("请重新输入日期(年 月 日):");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("请重新输入日期(年 月 日):");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (a == 3) {
|
||||||
|
printf("请输入年份:");
|
||||||
|
while (scanf("%d", &year) != EOF) {
|
||||||
|
system("cls");
|
||||||
|
if (year > 0) {
|
||||||
|
three(year);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("请重新输入:");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (a == 4) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("请重新输入:");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void one(int year) {
|
||||||
|
int a[13] = { 0,31,0,31,30,31,30,31,31,30,31,30,31 };
|
||||||
|
if (!(year % 4) && (year % 100)) {
|
||||||
|
a[2] = 29;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
a[2] = 28;
|
||||||
|
}
|
||||||
|
int g = ((year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7;
|
||||||
|
g++;
|
||||||
|
printf("1.单列输出\n");
|
||||||
|
printf("2.双列输出\n");
|
||||||
|
int q;
|
||||||
|
while (scanf("%d", &q) != EOF) {
|
||||||
|
system("cls");
|
||||||
|
if (q == 1 || q == 2) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("请重新输入:");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (q == 1) {
|
||||||
|
if (year != 1582) {
|
||||||
|
if (year < 1582)
|
||||||
|
g += 5;
|
||||||
|
if (g >= 7)
|
||||||
|
g %= 7;
|
||||||
|
|
||||||
|
printf("\n%d年\n", year);
|
||||||
|
int m = 1;
|
||||||
|
while (m <= 12) {
|
||||||
|
printf("\n%d月\n", m);
|
||||||
|
printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
|
||||||
|
for (int j = 0, k = 1;k <= a[m];j) {
|
||||||
|
if (j == g) {
|
||||||
|
g++;
|
||||||
|
j++;
|
||||||
|
printf("%d\t", k++);
|
||||||
|
if (j == 7) {
|
||||||
|
j = 0;
|
||||||
|
g = 0;
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
j++;
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
m++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("\n%d年", year);
|
||||||
|
int m = 1;
|
||||||
|
while (m <= 12) {
|
||||||
|
printf("\n%d月\n", m);
|
||||||
|
printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
|
||||||
|
for (int j = 0, k = 1;k <= a[m];j) {
|
||||||
|
if (j == g) {
|
||||||
|
g++;
|
||||||
|
j++;
|
||||||
|
if (m == 10 && k == 5)
|
||||||
|
k = 15;
|
||||||
|
printf("%d\t", k++);
|
||||||
|
if (j == 7) {
|
||||||
|
j = 0;
|
||||||
|
g = 0;
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
j++;
|
||||||
|
printf(" \t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
m++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (year < 1582) {
|
||||||
|
g += 5;
|
||||||
|
}
|
||||||
|
if (g >= 7) {
|
||||||
|
g %= 7;
|
||||||
|
}
|
||||||
|
int f = (g + 31) % 7;
|
||||||
|
int y = f;
|
||||||
|
printf("%d年\n", year);
|
||||||
|
int m = 1;
|
||||||
|
while (m <= 12) {
|
||||||
|
int n = m + 1;
|
||||||
|
printf("%d月\t\t\t\t\t\t\t\t%d月\n", m, n);
|
||||||
|
printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t\t星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
|
||||||
|
int i = 1, j = 1;
|
||||||
|
for (i = 1, j = 1;i <= a[m] || j <= a[n];i, j) {
|
||||||
|
for (int k = 0;1;k) {
|
||||||
|
if (k == g) {
|
||||||
|
k++, g++;
|
||||||
|
if (i <= a[m])
|
||||||
|
printf("%d\t", i++);
|
||||||
|
else
|
||||||
|
printf("\t");
|
||||||
|
if (k == 7) {
|
||||||
|
k = 0, g = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("\t");
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\t");
|
||||||
|
for (int k = 0;1;k) {
|
||||||
|
if (k == f) {
|
||||||
|
k++, f++;
|
||||||
|
if (year == 1582 && n == 10 && j == 5) {
|
||||||
|
j = 15;
|
||||||
|
}
|
||||||
|
if (j <= a[n])
|
||||||
|
printf("%d\t", j++);
|
||||||
|
else
|
||||||
|
printf("\t");
|
||||||
|
if (k == 7) {
|
||||||
|
k = 0, f = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("\t");
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
if (year == 1582 && m == 9) {
|
||||||
|
g = (y + a[n] - 10) % 7;
|
||||||
|
f = (g + a[n + 1]) % 7;
|
||||||
|
y = f;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
g = (y + a[n]) % 7;
|
||||||
|
f = (g + a[n + 1]) % 7;
|
||||||
|
y = f;
|
||||||
|
}
|
||||||
|
m += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
system("pause");
|
||||||
|
system("cls");
|
||||||
|
printf("1.查询对应年份的日历\n");
|
||||||
|
printf("2.查询对应日期的星期\n");
|
||||||
|
printf("3.查询对应年份是否为闰年\n");
|
||||||
|
printf("4.退出\n");
|
||||||
|
printf("\n\n请输入您接下来想要进行的操作:");
|
||||||
|
}
|
||||||
|
void two(int year, int month, int day) {
|
||||||
|
char n[7];
|
||||||
|
char a[7];
|
||||||
|
int g, i, k, r = 0;
|
||||||
|
g = ((year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7;
|
||||||
|
if (year != 1582) {
|
||||||
|
if (year < 1582)
|
||||||
|
g += 5;
|
||||||
|
if (g >= 7)
|
||||||
|
g %= 7;
|
||||||
|
}
|
||||||
|
if (year == 1582 && month == 10) {
|
||||||
|
if (day > 4 && day < 15) {
|
||||||
|
system("cls");
|
||||||
|
printf("由于一些特殊原因从1582年10月5日到1582年10月14日这十天被删去,所以请重新输入\n");
|
||||||
|
system("Pause");
|
||||||
|
system("cls");
|
||||||
|
printf("1.查询对应年份的日历\n");
|
||||||
|
printf("2.查询对应日期的星期\n");
|
||||||
|
printf("3.查询对应年份是否为闰年\n");
|
||||||
|
printf("4.退出\n");
|
||||||
|
printf("\n\n请输入您接下来想要进行的操作:");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (0)
|
||||||
|
{
|
||||||
|
case 0:a[0] = 's';
|
||||||
|
case 1:a[1] = 'm';
|
||||||
|
case 2:a[2] = 't';
|
||||||
|
case 3:a[3] = 'w';
|
||||||
|
case 4:a[4] = 'x';
|
||||||
|
case 5:a[5] = 'f';
|
||||||
|
case 6:a[6] = 'a';
|
||||||
|
}
|
||||||
|
for (i = 0, k = g;i < 7;i++, g++)
|
||||||
|
{
|
||||||
|
if (g == 7)
|
||||||
|
g = 0;
|
||||||
|
n[i] = a[g];
|
||||||
|
}
|
||||||
|
switch (month - 1)
|
||||||
|
{
|
||||||
|
case 12:r += 31;
|
||||||
|
case 11:r += 30;
|
||||||
|
case 10:r += 31;
|
||||||
|
case 9:r += 30;
|
||||||
|
case 8:r += 31;
|
||||||
|
case 7:r += 31;
|
||||||
|
case 6:r += 30;
|
||||||
|
case 5:r += 31;
|
||||||
|
case 4:r += 30;
|
||||||
|
case 3:r += 31;
|
||||||
|
case 2:r += 28;
|
||||||
|
case 1:r += 31;
|
||||||
|
}
|
||||||
|
if (!(year % 4) && (year % 100) && (month > 2))
|
||||||
|
r++;
|
||||||
|
r += day;
|
||||||
|
k = r % 7;
|
||||||
|
printf("%d年%d月%d日是", year, month, day);
|
||||||
|
switch (n[k])
|
||||||
|
{
|
||||||
|
case 's':printf("星期日\n");break;
|
||||||
|
case 'm':printf("星期一\n");break;
|
||||||
|
case 't':printf("星期二\n");break;
|
||||||
|
case 'w':printf("星期三\n");break;
|
||||||
|
case 'x':printf("星期四\n");break;
|
||||||
|
case 'f':printf("星期五\n");break;
|
||||||
|
case 'a':printf("星期六\n");break;
|
||||||
|
}
|
||||||
|
system("pause");
|
||||||
|
system("cls");
|
||||||
|
printf("1.查询对应年份的日历\n");
|
||||||
|
printf("2.查询对应日期的星期\n");
|
||||||
|
printf("3.查询对应年份是否为闰年\n");
|
||||||
|
printf("4.退出\n");
|
||||||
|
printf("\n\n请输入您接下来想要进行的操作:");
|
||||||
|
}
|
||||||
|
void three(int year) {
|
||||||
|
if ((year % 4 == 0) && (year % 100) != 0) {
|
||||||
|
printf("\n%d年是闰年\n\n", year);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("\n%d年不是闰年\n\n", year);
|
||||||
|
}
|
||||||
|
system("pause");
|
||||||
|
system("cls");
|
||||||
|
printf("1.查询对应年份的日历\n");
|
||||||
|
printf("2.查询对应日期的星期\n");
|
||||||
|
printf("3.查询对应年份是否为闰年\n");
|
||||||
|
printf("4.退出\n");
|
||||||
|
printf("请输入您接下来想要进行的操作:");
|
||||||
|
}
|
274
lix.cpp
Normal file
274
lix.cpp
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
//
|
||||||
|
// Created by Worth Lix on 2023/11/26 19:13.
|
||||||
|
//
|
||||||
|
#include <cstdio>
|
||||||
|
#include <ctime>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#define RESET "\033[0m"
|
||||||
|
#define RED "\033[31m"
|
||||||
|
#define GREEN "\033[32m"
|
||||||
|
#define YELLOW "\033[33m"
|
||||||
|
|
||||||
|
#define INFO (std::cout << RESET)
|
||||||
|
#define WARN (std::cout << YELLOW)
|
||||||
|
#define ERROR (std::cout << RED)
|
||||||
|
#define SUCCESS (std::cout << GREEN)
|
||||||
|
#define LOG_CLEAR (std::cout << "\033c")
|
||||||
|
|
||||||
|
vector<string> stringStream;
|
||||||
|
|
||||||
|
int get_week(int y, int m, int d) {
|
||||||
|
if (m == 1 || m == 2) {
|
||||||
|
m += 12;
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
return ((d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7) + 1;
|
||||||
|
}
|
||||||
|
int check_leap_year(int year) { return (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)); }
|
||||||
|
int get_month_days_count(int year, int month) {
|
||||||
|
// 1 3 5 7 8 10 12
|
||||||
|
if (month == 2) {
|
||||||
|
if (check_leap_year(year)) {
|
||||||
|
return 29;
|
||||||
|
} else {
|
||||||
|
return 28;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int day31[] = {1, 3, 5, 7, 8, 10, 12};
|
||||||
|
for (int i = 0; i <= 6; ++i) {
|
||||||
|
if (day31[i] == month) {
|
||||||
|
return 31;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 30;
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu() {
|
||||||
|
LOG_CLEAR;
|
||||||
|
time_t now = time(0);
|
||||||
|
struct tm *local = localtime(&now);
|
||||||
|
|
||||||
|
printf("现在的时间是: %d/%02d/%02d %02d:%02d:%02d\n\n菜单:\n", 1900 + local->tm_year, 1 + local->tm_mon,
|
||||||
|
local->tm_mday, local->tm_hour, local->tm_min, local->tm_sec);
|
||||||
|
WARN << "1.查询对应年份的日历" << endl;
|
||||||
|
WARN << "2.查询对应日期的星期" << endl;
|
||||||
|
WARN << "3.查询对应年份是否为闰年" << endl;
|
||||||
|
WARN << "4.退出" << endl;
|
||||||
|
|
||||||
|
INFO << endl << "请输入菜单编号(1-4): ";
|
||||||
|
}
|
||||||
|
|
||||||
|
void query_year() {
|
||||||
|
cout << "请输入要查询的年份:" << endl;
|
||||||
|
int query;
|
||||||
|
cin >> query;
|
||||||
|
LOG_CLEAR;
|
||||||
|
|
||||||
|
cout << "请选择想要输出的日历格式:" << endl;
|
||||||
|
cout << "1.竖向输出:" << endl;
|
||||||
|
cout << "2.2*6格式横向输出:" << endl;
|
||||||
|
|
||||||
|
int input;
|
||||||
|
cin >> input;
|
||||||
|
string cache;
|
||||||
|
|
||||||
|
string echo_month[100][100] = {};
|
||||||
|
int echo_month_line;
|
||||||
|
|
||||||
|
switch (input) {
|
||||||
|
case 1:
|
||||||
|
LOG_CLEAR;
|
||||||
|
if (query == 1582) {
|
||||||
|
ERROR << "不支持该年份的查询! 震惊派蒙一整年.jpg" << endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SUCCESS << "====================== " << query << "年 ======================" << endl;
|
||||||
|
for (int i = 1; i <= 12; ++i) {
|
||||||
|
cout << RED << i << "月" << endl;
|
||||||
|
cout << RESET << "周日\t周一\t周二\t周三\t周四\t周五\t周六" << endl;
|
||||||
|
int start = get_week(query, i, 1);
|
||||||
|
if (start < 7) {
|
||||||
|
for (int j = 0; j < start; ++j) { cout << "\t"; }
|
||||||
|
}
|
||||||
|
for (int j = 1; j <= get_month_days_count(query, i); ++j) {
|
||||||
|
printf("%02d\t", j);
|
||||||
|
if (get_week(query, i, j) == 6) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
LOG_CLEAR;
|
||||||
|
if (query == 1582) {
|
||||||
|
ERROR << "不支持该年份的查询! 震惊派蒙一整年.jpg" << endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SUCCESS << "====================== " << query << "年 ======================" << endl;
|
||||||
|
for (int i = 1; i < 12; i = i + 2) {
|
||||||
|
cache += RED + to_string(i) + "月" + "\t\t\t\t\t\t\t\t" + to_string(i + 1) + "月";
|
||||||
|
stringStream.push_back(cache);
|
||||||
|
cache.clear();
|
||||||
|
cache = cache + RESET + "周日\t周一\t周二\t周三\t周四\t周五\t周六" +
|
||||||
|
"\t\t周日\t周一\t周二\t周三\t周四\t周五\t周六";
|
||||||
|
stringStream.push_back(cache);
|
||||||
|
cache.clear();
|
||||||
|
int start = get_week(query, i, 1);
|
||||||
|
if (start < 7) {
|
||||||
|
for (int j = 0; j < start; ++j) { cache += "\t"; }
|
||||||
|
}
|
||||||
|
echo_month_line = 0;
|
||||||
|
for (int j = 1; j <= get_month_days_count(query, i); ++j) {
|
||||||
|
if (j < 10) {
|
||||||
|
cache += to_string(0) + to_string(j) + "\t";
|
||||||
|
} else {
|
||||||
|
cache += to_string(j) + "\t";
|
||||||
|
}
|
||||||
|
if (get_week(query, i, j) == 6) {
|
||||||
|
echo_month[i][echo_month_line] = cache;
|
||||||
|
cache.clear();
|
||||||
|
echo_month_line++;
|
||||||
|
}
|
||||||
|
if (j == get_month_days_count(query, i)) {
|
||||||
|
int week = get_week(query, i, j);
|
||||||
|
week = week == 7 ? 0 : week;
|
||||||
|
for (int k = 0; k < 7 - week; ++k) {
|
||||||
|
if (k == 7 - week - 1) {
|
||||||
|
cache + " ";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
cache += " \t";
|
||||||
|
}
|
||||||
|
echo_month[i][echo_month_line] = cache;
|
||||||
|
cache.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo_month_line = 0;
|
||||||
|
start = get_week(query, i + 1, 1);
|
||||||
|
if (start < 7) {
|
||||||
|
for (int j = 0; j < start; ++j) { cache += "\t"; }
|
||||||
|
}
|
||||||
|
for (int j = 1; j <= get_month_days_count(query, i + 1); ++j) {
|
||||||
|
if (j < 10) {
|
||||||
|
cache += to_string(0) + to_string(j) + "\t";
|
||||||
|
} else {
|
||||||
|
cache += to_string(j) + "\t";
|
||||||
|
}
|
||||||
|
if (get_week(query, i + 1, j) == 6 || j == get_month_days_count(query, i + 1)) {
|
||||||
|
echo_month[i + 1][echo_month_line] = cache;
|
||||||
|
cache.clear();
|
||||||
|
echo_month_line++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cache.clear();
|
||||||
|
|
||||||
|
for (int j = 0; j < 6; ++j) {
|
||||||
|
if (echo_month[i][j] == "") {
|
||||||
|
cache = " \t \t \t \t \t \t \t\t" + echo_month[i + 1][j];
|
||||||
|
} else {
|
||||||
|
cache = echo_month[i][j] + "\t" + echo_month[i + 1][j];
|
||||||
|
}
|
||||||
|
|
||||||
|
stringStream.push_back(cache);
|
||||||
|
|
||||||
|
cache.clear();
|
||||||
|
}
|
||||||
|
stringStream.push_back("\n");
|
||||||
|
}
|
||||||
|
for (unsigned int i = 0; i < stringStream.size(); ++i) { cout << stringStream[i] << endl; }
|
||||||
|
stringStream.clear();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cout << 123 << endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void query_week() {
|
||||||
|
cout << "请输入要查询的日期: (年月日才用空格间隔)" << endl;
|
||||||
|
int y, m, d;
|
||||||
|
cin >> y >> m >> d;
|
||||||
|
if (y == 1582) {
|
||||||
|
ERROR << "不支持该年份的查询! 震惊派蒙一整年.jpg" << endl;
|
||||||
|
} else {
|
||||||
|
int week = get_week(y, m, d);
|
||||||
|
|
||||||
|
switch (week) {
|
||||||
|
case 1:
|
||||||
|
SUCCESS << "周一" << endl;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
SUCCESS << "周二" << endl;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
SUCCESS << "周三" << endl;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
SUCCESS << "周四" << endl;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
SUCCESS << "周五" << endl;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
SUCCESS << "周六" << endl;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
SUCCESS << "周日" << endl;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void query_leap_year() {
|
||||||
|
cout << "请输入要查询的年份:" << endl;
|
||||||
|
int year;
|
||||||
|
cin >> year;
|
||||||
|
|
||||||
|
if (check_leap_year(year)) {
|
||||||
|
SUCCESS << "闰年" << endl;
|
||||||
|
} else {
|
||||||
|
SUCCESS << "平年" << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
system("chcp 65001");
|
||||||
|
int run = 1;
|
||||||
|
while (run) {
|
||||||
|
menu();
|
||||||
|
int command;
|
||||||
|
cin >> command;
|
||||||
|
|
||||||
|
switch (command) {
|
||||||
|
case 1:
|
||||||
|
LOG_CLEAR;
|
||||||
|
query_year();
|
||||||
|
system("pause");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
LOG_CLEAR;
|
||||||
|
query_week();
|
||||||
|
system("pause");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
LOG_CLEAR;
|
||||||
|
query_leap_year();
|
||||||
|
system("pause");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
run = 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ERROR << "菜单错误: 后面的区域请以后再探索吧!" << endl;
|
||||||
|
system("pause");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
264
stu2024/数技2401严一顺(有问题改不动了).cpp
Normal file
264
stu2024/数技2401严一顺(有问题改不动了).cpp
Normal file
@ -0,0 +1,264 @@
|
|||||||
|
#include "stdio.h"
|
||||||
|
/*判断闰年*/
|
||||||
|
int leap(int year)
|
||||||
|
{
|
||||||
|
return ((year % 4 == 0 && year % 100!= 0) || year % 400 == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*获取某月的天数*/
|
||||||
|
int ji_suan_tian_shu(int month, int year)
|
||||||
|
{ if(year==1582&&month==10)
|
||||||
|
{
|
||||||
|
return 21;
|
||||||
|
}
|
||||||
|
if (month == 2) {
|
||||||
|
return leap(year)? 29 : 28;
|
||||||
|
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
|
||||||
|
return 30;
|
||||||
|
} else {
|
||||||
|
return 31;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*计算1月1日是星期几*/
|
||||||
|
int ji_suan_di_yi_tian(int year)
|
||||||
|
{
|
||||||
|
int K=year%100;
|
||||||
|
int J=year/100;
|
||||||
|
if(year<1582)
|
||||||
|
{
|
||||||
|
return (1+(13*(1+1))/5+K+K/4+5-J)%7;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (1+(13*(1+1))/5+K+K/4+J/4+5*J)%7;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*输出日历的星期单列*/ void xing_qi()
|
||||||
|
{
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
}
|
||||||
|
/*处理1582年单列*/void chu_li_1582_nian_10_yue_de_ri_li(int *di_yi_tian)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
for (int i=0;i<*di_yi_tian;i++)//在前面加空格
|
||||||
|
{
|
||||||
|
printf("");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int day=1;day<=4;day++)//输出1到4号
|
||||||
|
{
|
||||||
|
printf("%5d",day);
|
||||||
|
if ((*di_yi_tian+day-1)%7==6)//到了周六换行
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int x=5;
|
||||||
|
for (int day=15;day<=31;day++)//输出15号及之后
|
||||||
|
{
|
||||||
|
if ((*di_yi_tian+x-1)%7==0)//一周换行
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("%5d",day);
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
//*di_yi_tian=(*di_yi_tian+21)%7;
|
||||||
|
}
|
||||||
|
/*输出某月的日历单列*/void shu_chu_yue_ri_li(int month, int year) {
|
||||||
|
int zhe_ge_yue_you_duo_shao_tian = ji_suan_tian_shu(month, year);
|
||||||
|
int zhe_ge_yue_di_yi_tian = ji_suan_di_yi_tian(year);
|
||||||
|
for (int i = 1; i < month; i++) //计算某月前面的月有多少天
|
||||||
|
{
|
||||||
|
zhe_ge_yue_di_yi_tian+= ji_suan_tian_shu(i, year);
|
||||||
|
}
|
||||||
|
zhe_ge_yue_di_yi_tian%= 7;//计算前面月的最后一天是周几
|
||||||
|
|
||||||
|
xing_qi();
|
||||||
|
|
||||||
|
|
||||||
|
/*输出前面的空格*/for (int i = 0; i <zhe_ge_yue_di_yi_tian ; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*处理1582年10月少的那10天*/if (year == 1582 && month == 10)
|
||||||
|
{
|
||||||
|
chu_li_1582_nian_10_yue_de_ri_li(&zhe_ge_yue_di_yi_tian);
|
||||||
|
//两个函数结合,准确输出1582年10月的月历
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// 输出其余日期
|
||||||
|
for (int i = 1; i <=zhe_ge_yue_you_duo_shao_tian; i++) {
|
||||||
|
printf("%5d", i);
|
||||||
|
if ((zhe_ge_yue_di_yi_tian + i) % 7 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((zhe_ge_yue_di_yi_tian + zhe_ge_yue_you_duo_shao_tian) % 7!= 0) {
|
||||||
|
printf("\n");//当前月1号星期加上有多少天判断是不是整的周数
|
||||||
|
}//判断该月最后一行是不是完整的
|
||||||
|
}
|
||||||
|
/*输出一年的日历*/ void shu_chu_ri_li(int year)
|
||||||
|
{
|
||||||
|
for (int month = 1; month <= 12; month++)
|
||||||
|
{
|
||||||
|
printf(" %d月\n", month);
|
||||||
|
shu_chu_yue_ri_li(month, year);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*输出一年的日历双列*/
|
||||||
|
void shu_chu_ri_li_2(int year)
|
||||||
|
{
|
||||||
|
int kai_shi_day[12];
|
||||||
|
kai_shi_day[0]=ji_suan_di_yi_tian(year);//储存开始日期
|
||||||
|
for (int month=1;month<12;month++) //计算每月起始星期几
|
||||||
|
{
|
||||||
|
kai_shi_day[month]=(kai_shi_day[month-1]+ji_suan_tian_shu(year,month))%7;//将每个月起始星期储存
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *yue_fen[]={"1月", "2月", "3月", "4月", "5月", "6月","7月", "8月", "9月", "10月", "11月", "12月"};
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; i++) //每行两个月
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
for (int j = 0; j < 2; j++) //两个月的标题
|
||||||
|
{
|
||||||
|
int month = i * 2 + j + 1;
|
||||||
|
printf(" %d %s ",year,yue_fen[month-1]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for (int j = 0; j < 2; j++)//星期标题
|
||||||
|
{
|
||||||
|
printf("日 一 二 三 四 五 六 ");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
int zui_duo_days[2] = { ji_suan_tian_shu(year, i * 2 + 1), ji_suan_tian_shu(year, i * 2 + 2) };//两个月的最大天数
|
||||||
|
int kai_shi_days[2] = { kai_shi_day[i * 2], kai_shi_day[i * 2 + 1] };//起始星期几
|
||||||
|
|
||||||
|
//打印日期
|
||||||
|
int day[2] = {1, 1}; //每个月的当前日期
|
||||||
|
int sheng_yu_days = 1; //是否有剩余日期
|
||||||
|
while (sheng_yu_days)//判断是否有剩余
|
||||||
|
{
|
||||||
|
sheng_yu_days = 0;
|
||||||
|
|
||||||
|
for (int j = 0; j < 2; j++)
|
||||||
|
{
|
||||||
|
if (day[j] == 1)//打印空格
|
||||||
|
{
|
||||||
|
for (int k = 0; k < kai_shi_days[j]; k++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (day[j] <= zui_duo_days[j] && ((day[j] + kai_shi_days[j] - 1) % 7) != 6)//打印日期
|
||||||
|
{
|
||||||
|
printf("%2d ",day[j]++);
|
||||||
|
sheng_yu_days=1;//设置为1表示未打印完
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (day[j] <= zui_duo_days[j])//最后一个日期,换行并进入下一个月
|
||||||
|
{
|
||||||
|
printf("%2d ",day[j]++);
|
||||||
|
sheng_yu_days=1;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
printf(" "); //填充空格
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(" "); //每月之间的间隔
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
for(;x!=4;)
|
||||||
|
{
|
||||||
|
printf(" menu\n ");
|
||||||
|
printf("1.判断是否是闰年\n");
|
||||||
|
printf("2.查询这一年的某一天是周几\n");
|
||||||
|
printf("3.输出这一年的日历\n");
|
||||||
|
printf("4.退出程序\n");
|
||||||
|
printf("扣1,2,3,4来选择功能\n");
|
||||||
|
scanf("%d",&x);
|
||||||
|
if(x>4)
|
||||||
|
{
|
||||||
|
printf("请从1 2 3 4中选择输入\n");
|
||||||
|
}//if的括号
|
||||||
|
|
||||||
|
else if(x==1)
|
||||||
|
{
|
||||||
|
int year;
|
||||||
|
printf("请输入年份:\t");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if((year%4==0&&year%100!=0)||year%400==0)
|
||||||
|
printf("是闰年\n");
|
||||||
|
else
|
||||||
|
printf("是平年\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
else if(x==2)
|
||||||
|
{
|
||||||
|
int year;
|
||||||
|
int month;
|
||||||
|
int day;
|
||||||
|
printf("请输入日期 (输入格式为 年 月 日):");
|
||||||
|
scanf("%d %d %d",&year,&month,&day);
|
||||||
|
if(year==1582&&month==10&&day>4&&day<15);
|
||||||
|
printf("不存在这一天,请重新输入 (输入格式为 年 月 日):\t");
|
||||||
|
scanf("%d %d %d",&year,&month,&day);
|
||||||
|
const char *chu_chun_xing_qi[]={"六","日","一","二","三","四","五"};
|
||||||
|
int K=year%100;
|
||||||
|
int J=year/100;
|
||||||
|
int w;
|
||||||
|
if(year<1582||(year==1582&&(month<10||(month==10&&day<=4))))
|
||||||
|
{
|
||||||
|
w=(day+(13*(month+1))/5+K+K/4+5-J)%7;
|
||||||
|
printf("这一天是周%s\n",chu_chun_xing_qi[w]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
w=(day+(13*(month+1))/5+K+K/4+J/4+5*J)%7;
|
||||||
|
printf("这一天是周%s\n",chu_chun_xing_qi[w]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(x==3)
|
||||||
|
{
|
||||||
|
int year;
|
||||||
|
printf("请输入年份:\t");
|
||||||
|
scanf("%d",&year);
|
||||||
|
printf("扣1 2选择\n1.单列\n2.双列\t");
|
||||||
|
int c;
|
||||||
|
scanf("%d",&c);
|
||||||
|
if(c==1)
|
||||||
|
{
|
||||||
|
shu_chu_ri_li(year);
|
||||||
|
}
|
||||||
|
else if(c==2)
|
||||||
|
{
|
||||||
|
shu_chu_ri_li_2(year) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//for的括号
|
||||||
|
return 0;
|
||||||
|
}
|
635
stu2024/数技2401田林(3).cpp
Normal file
635
stu2024/数技2401田林(3).cpp
Normal file
@ -0,0 +1,635 @@
|
|||||||
|
#define _CRT_SECURE_NO_WARNINGS 1
|
||||||
|
#include<iostream>
|
||||||
|
#include<Windows.h>
|
||||||
|
#include<string>
|
||||||
|
#include<math.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
using namespace std;
|
||||||
|
//1.展示模块,需要将内容展示出来,告诉别人这是万年历
|
||||||
|
//2.输入模块,将数字展示出来
|
||||||
|
//3.检查模块,检查输入是否正确,防止小孩儿乱输入
|
||||||
|
//4.弹窗{需要将日历展示出来,首先将每一年排好顺序,其次,注意1582年有问题
|
||||||
|
//随后,将周六周天的日期,表示为红色
|
||||||
|
// }
|
||||||
|
// 换行问题()
|
||||||
|
// 分割问题()
|
||||||
|
//
|
||||||
|
//5.展示结束,国旗
|
||||||
|
int mo1(void);
|
||||||
|
int mo2(int n);
|
||||||
|
void mo3(int n);
|
||||||
|
int mo4(void);
|
||||||
|
void mo5(int n);
|
||||||
|
void mo6(int n);
|
||||||
|
void aixin(void);
|
||||||
|
int zhanshi(void);
|
||||||
|
int dan1(int n);
|
||||||
|
void dan2(int n);
|
||||||
|
void xingqi(int aa);
|
||||||
|
|
||||||
|
void color(short x) //自定义函根据参数改变颜色
|
||||||
|
{
|
||||||
|
if (x >= 0 && x <= 15)//参数在0-15的范围颜色
|
||||||
|
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x); //只有一个参数,改变字体颜色
|
||||||
|
else//默认的颜色白色
|
||||||
|
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
int bao(int n)
|
||||||
|
{
|
||||||
|
if (n > 1000000) {
|
||||||
|
cout << "输入越界,请重新输入"<<endl;
|
||||||
|
return zhanshi();
|
||||||
|
}
|
||||||
|
else cout << "输入成功" << endl;
|
||||||
|
}
|
||||||
|
int zifu(string a)
|
||||||
|
{
|
||||||
|
int n = 0;
|
||||||
|
if (a.size() > 4) {
|
||||||
|
cout << "输入错误,请重新输入" << endl;
|
||||||
|
return zhanshi();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < a.size(); i++)
|
||||||
|
{
|
||||||
|
if (a[i] < '0' || a[i]>'9')
|
||||||
|
{
|
||||||
|
cout << "输入错误,请重新输入" << endl;
|
||||||
|
return zhanshi();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int p = a[i] - '0';
|
||||||
|
p = pow(10, a.size() - i - 1) * p;
|
||||||
|
n += p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int zhanshi(void)
|
||||||
|
{
|
||||||
|
string n;
|
||||||
|
int i = 0;
|
||||||
|
int a = 0;
|
||||||
|
char b;
|
||||||
|
color(6);
|
||||||
|
cout << "Hello young people!!!" << endl;
|
||||||
|
cout << "------------------------------------------------------------------------------------------------------------------------" << endl;
|
||||||
|
cout << "------------------------------------------------------------------------------------------------------------------------" << endl;
|
||||||
|
cout << "------------------------------------------------------------------------------------------------------------------------" << endl;
|
||||||
|
cout << "This is a perpetual calendar!!!" << endl;
|
||||||
|
color(7);
|
||||||
|
cout << "它有很多功能" << endl;
|
||||||
|
color(3);
|
||||||
|
cout << "1.告诉你这一天是星期几" << endl;//完成
|
||||||
|
cout << "2.今天是否是一个适合表白的日子" << endl;//完成
|
||||||
|
cout << "3.输入某年的月历" << endl;
|
||||||
|
cout << "4.展示某一年的日历" << endl;
|
||||||
|
cout << "5.判断某一年是否为闰年" << endl;//完成
|
||||||
|
color(12);
|
||||||
|
cout << "如果程序弹出,说明输入错误" << endl;
|
||||||
|
color(7);
|
||||||
|
cout << "现在 请输入您需要的服务" << endl;
|
||||||
|
do {
|
||||||
|
Sleep(100);
|
||||||
|
//scanf("%c", &n);
|
||||||
|
cin >> n;
|
||||||
|
//getchar();
|
||||||
|
if (n.size() > 1) {
|
||||||
|
cout << "输入不符合规范,请重新输入" << endl;
|
||||||
|
return zhanshi();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
b = n[0];
|
||||||
|
if (b < 48 || b > 53) {
|
||||||
|
cout << "请重新输入!!!" << endl;
|
||||||
|
cout << "重新输入前,请输入换行" << endl;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (i == 20) {
|
||||||
|
cout << "不会玩别玩了!!!" << endl;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (getchar() == '\n') {
|
||||||
|
a++;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (a > 5) return 0;
|
||||||
|
}
|
||||||
|
} while (b < 48 || b>53);
|
||||||
|
switch (b-'0') {
|
||||||
|
case 1: mo1(); break;
|
||||||
|
case 2: mo2(b); break;
|
||||||
|
case 3: mo6(b); break;
|
||||||
|
case 4: mo4(); break;
|
||||||
|
case 5: mo5(b); break;
|
||||||
|
default: return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int mo1(void)
|
||||||
|
{
|
||||||
|
int w;
|
||||||
|
string yy;
|
||||||
|
string mm;
|
||||||
|
string dd;
|
||||||
|
int ri[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
|
||||||
|
int y, m, d;
|
||||||
|
cout << "请输入年 月 日" << endl;
|
||||||
|
cin >> yy;
|
||||||
|
y = zifu(yy);
|
||||||
|
cin >> mm;
|
||||||
|
m = zifu(mm);
|
||||||
|
cin >> dd;
|
||||||
|
d = zifu(dd);
|
||||||
|
if (y == 1582 && m == 10) {
|
||||||
|
if (d < 15 && d>4) {
|
||||||
|
cout << "请重新输入" << endl;
|
||||||
|
return mo1();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
|
||||||
|
ri[2] += 1;
|
||||||
|
}
|
||||||
|
if (y < 0 || y>10000 || m < 1 || m>12 || d < 1 || d > ri[m]) {
|
||||||
|
return mo1();
|
||||||
|
}
|
||||||
|
if (y == 1582 && m == 10 && d > 4) {
|
||||||
|
|
||||||
|
if (d > 4 && d < 15) {
|
||||||
|
cout << "请重新输入"<<endl;
|
||||||
|
return mo1();
|
||||||
|
}
|
||||||
|
d -= 10;
|
||||||
|
}
|
||||||
|
if (m == 1 || m == 2) {
|
||||||
|
m += 12;
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
w = (d + 1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
|
||||||
|
|
||||||
|
switch (w)
|
||||||
|
{
|
||||||
|
case 1:cout << "星期一[Monday]" << endl; break;
|
||||||
|
case 2:cout << "星期二[Tuesday]" << endl; break;
|
||||||
|
case 3:cout << "星期三[Wednesday]" << endl; break;
|
||||||
|
case 4:cout << "星期四[Thursday]" << endl; break;
|
||||||
|
case 5:cout << "星期五[Friday]" << endl; break;
|
||||||
|
case 6:cout << "星期六[Saturday]" << endl; break;
|
||||||
|
case 0:cout << "星期天[Sunday]" << endl; break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int mo2(int n)
|
||||||
|
{
|
||||||
|
string aa;
|
||||||
|
string mm;
|
||||||
|
string pp;
|
||||||
|
int a;
|
||||||
|
int m;
|
||||||
|
int p;
|
||||||
|
int ri[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
|
||||||
|
cout << "请输入年 月 日" << endl;
|
||||||
|
|
||||||
|
cin >> aa;
|
||||||
|
a=zifu(aa);
|
||||||
|
bao(a);
|
||||||
|
cin >> mm;
|
||||||
|
m = zifu(mm);
|
||||||
|
cin >> pp;
|
||||||
|
p = zifu(pp);
|
||||||
|
bao(m);
|
||||||
|
if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0) {
|
||||||
|
ri[2] += 1;
|
||||||
|
}
|
||||||
|
if (m > 12 || m < 1) {
|
||||||
|
cout << "请重新输入" << endl;
|
||||||
|
return mo2(m);
|
||||||
|
}
|
||||||
|
bao(p);
|
||||||
|
if (p > ri[m] || p < 1) {
|
||||||
|
cout << "请重新输入" << endl;
|
||||||
|
return mo2(p);
|
||||||
|
}
|
||||||
|
if (m == 4 && p == 1) {
|
||||||
|
cout << "愚人节表白,建议换一个日子呢" << endl;
|
||||||
|
}
|
||||||
|
else if (m == 5 && p == 20 || p == 21) {
|
||||||
|
cout << "祝你成功!!!" << endl;
|
||||||
|
aixin();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
color(12);
|
||||||
|
cout << "不管你输入什么,都证明你有这样的想法" << endl;
|
||||||
|
cout << "勇敢的人有资格追求爱情,祝你成功!!!" << endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int mo4(void)
|
||||||
|
{
|
||||||
|
cout << "按1 单列输出" << endl;
|
||||||
|
cout << "按2 双列输出" << endl;
|
||||||
|
string aa;
|
||||||
|
int a;
|
||||||
|
cin >> aa;
|
||||||
|
a = zifu(aa);
|
||||||
|
bao(a);
|
||||||
|
if (a > 2 || a < 1) {
|
||||||
|
cout << "输入失败,请重新输入" << endl;
|
||||||
|
}
|
||||||
|
switch (a)
|
||||||
|
{
|
||||||
|
case 1:dan1(a); break;
|
||||||
|
case 2:dan2(a); break;
|
||||||
|
default:return mo4(); break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mo5(int n)
|
||||||
|
{
|
||||||
|
string aa;
|
||||||
|
int a;
|
||||||
|
cout << "请输入年份" << endl;
|
||||||
|
cin >> aa;
|
||||||
|
a = zifu(aa);
|
||||||
|
/* n = 0;
|
||||||
|
if (a.size() > 4) return;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < a.size(); i++)
|
||||||
|
{
|
||||||
|
if (a[i] < '0' || a[i]>'9')
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int p = a[i] - '0';
|
||||||
|
p = pow(10, a.size() - i - 1) * p;
|
||||||
|
n+=p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
if (n % 4 == 0 && n % 100 != 0 || n % 400 == 0) {
|
||||||
|
cout << "是闰年" << endl;
|
||||||
|
}
|
||||||
|
else cout << "不是闰年" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mo6(int n)
|
||||||
|
{
|
||||||
|
int d;
|
||||||
|
string yy;
|
||||||
|
string mm;
|
||||||
|
int y, m;
|
||||||
|
int w;
|
||||||
|
int t;
|
||||||
|
int j;
|
||||||
|
int ri[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
|
||||||
|
|
||||||
|
/* printf("_________________________________________\n");
|
||||||
|
printf(" 周日 周一 周二 周三 周四 周五 周六 \n");
|
||||||
|
printf("_________________________________________\n");*/
|
||||||
|
//判断1号为周几
|
||||||
|
//将1号之前的数输出空格
|
||||||
|
//scanf(%6d,&d);
|
||||||
|
//到七就换行;
|
||||||
|
//输出1
|
||||||
|
//输出2到31
|
||||||
|
//先输入
|
||||||
|
cout << "请输入年 月" << endl;
|
||||||
|
cin >> yy;
|
||||||
|
y = zifu(yy);
|
||||||
|
cin >> mm;
|
||||||
|
m = zifu(mm);
|
||||||
|
bao(y);
|
||||||
|
bao(m);
|
||||||
|
if (m > 12 || m < 1) {
|
||||||
|
return mo6(m);
|
||||||
|
}
|
||||||
|
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
|
||||||
|
ri[2] += 1;
|
||||||
|
}
|
||||||
|
j = m;
|
||||||
|
if (m == 1 || m == 2) {
|
||||||
|
m += 12;
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
w = (1 + 1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;//
|
||||||
|
printf("_________________________________________\n");
|
||||||
|
printf(" 周日 周一 周二 周三 周四 周五 周六 \n");
|
||||||
|
printf("_________________________________________\n");
|
||||||
|
for (int i = 0; i < w; i++) {
|
||||||
|
cout << " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
t = w;
|
||||||
|
if (y == 1582 && m == 10) {
|
||||||
|
for (int i = 1; i <= 4; i++) {
|
||||||
|
if (t == 7) {
|
||||||
|
cout << endl;
|
||||||
|
t = 0;
|
||||||
|
}
|
||||||
|
printf("%5d", i);
|
||||||
|
t++;
|
||||||
|
}
|
||||||
|
for (int i=15; i <= ri[j]; i++) {
|
||||||
|
if (t == 7) {
|
||||||
|
cout << endl;
|
||||||
|
t = 0;
|
||||||
|
}
|
||||||
|
printf("%5d", i);
|
||||||
|
t++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (int i = 1; i <= ri[j]; i++) {
|
||||||
|
if (t == 7) {
|
||||||
|
cout << endl;
|
||||||
|
t = 0;
|
||||||
|
}
|
||||||
|
printf("%5d", i);
|
||||||
|
t++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void aixin(void)
|
||||||
|
{
|
||||||
|
color(12);
|
||||||
|
float x, y, a;
|
||||||
|
for (y = 1.5f; y > -1; y -= 0.1f) {
|
||||||
|
for (x = -1.5f; x < 1.5f; x += .05f) {
|
||||||
|
a = x * x + y * y - 1;
|
||||||
|
putchar(a * a * a - x * x * y * y * y < 0.0f ? '*' : ' ');
|
||||||
|
}
|
||||||
|
Sleep(15);
|
||||||
|
putchar('\n');
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int dan1(int n)
|
||||||
|
{
|
||||||
|
int y, m, d;
|
||||||
|
string yy;
|
||||||
|
int w;
|
||||||
|
int t;
|
||||||
|
int ri[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
|
||||||
|
cout << "请输入年份" << endl;
|
||||||
|
//scanf("%d", &y);
|
||||||
|
cin >> yy;
|
||||||
|
y = zifu(yy);
|
||||||
|
bao(y);
|
||||||
|
for (int j = 1; j < 13; j++) {
|
||||||
|
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
|
||||||
|
ri[2]++;
|
||||||
|
}
|
||||||
|
m = j;
|
||||||
|
if (m == 1 || m == 2) {
|
||||||
|
m += 12;
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
w = (1 + 1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
|
||||||
|
printf("_________________________________________\n");
|
||||||
|
printf(" %d月 \n", j);
|
||||||
|
printf("_________________________________________\n");
|
||||||
|
printf(" 周日 周一 周二 周三 周四 周五 周六 \n");
|
||||||
|
printf("_________________________________________\n");
|
||||||
|
for (int i = 0; i < w; i++) {
|
||||||
|
cout << " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
t = w;
|
||||||
|
if (y == 1582 && j == 10) {
|
||||||
|
for (int i = 1; i <= 4; i++) {
|
||||||
|
if (t == 7) {
|
||||||
|
cout << endl;
|
||||||
|
t = 0;
|
||||||
|
}
|
||||||
|
printf("%5d", i);
|
||||||
|
t++;
|
||||||
|
if (i == ri[j])cout << endl;
|
||||||
|
}
|
||||||
|
for (int i = 15; i <= ri[j]; i++) {
|
||||||
|
if (t == 7) {
|
||||||
|
cout << endl;
|
||||||
|
t = 0;
|
||||||
|
}
|
||||||
|
printf("%5d", i);
|
||||||
|
t++;
|
||||||
|
if (i == ri[j])cout << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (int i = 1; i <= ri[j]; i++) {
|
||||||
|
if (t == 7) {
|
||||||
|
cout << endl;
|
||||||
|
t = 0;
|
||||||
|
}
|
||||||
|
printf("%5d", i);
|
||||||
|
t++;
|
||||||
|
if (i == ri[j])cout << endl;
|
||||||
|
}
|
||||||
|
ri[2] = 28;
|
||||||
|
if (m == 13 || m == 14) {
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void xingqi(int aa)
|
||||||
|
{
|
||||||
|
//int j = 1;
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
printf("_________________________________________\t");
|
||||||
|
}
|
||||||
|
cout << "\n";
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
printf(" %d月 \t", aa++);
|
||||||
|
}
|
||||||
|
cout << "\n";
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
printf("_________________________________________\t");
|
||||||
|
}
|
||||||
|
cout << "\n";
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
printf(" 周日 周一 周二 周三 周四 周五 周六 \t\t");
|
||||||
|
}
|
||||||
|
cout << "\n";
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
printf("_________________________________________\t");
|
||||||
|
}
|
||||||
|
cout << "\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dan2(int n)
|
||||||
|
{
|
||||||
|
cout << "请输入年份";
|
||||||
|
cout << endl;
|
||||||
|
int y;
|
||||||
|
string yy;
|
||||||
|
cin >> yy;
|
||||||
|
y = zifu(yy);
|
||||||
|
bao(y);
|
||||||
|
//////////////
|
||||||
|
int aa = 1;
|
||||||
|
int bb = 2;
|
||||||
|
//////////////
|
||||||
|
int m = 1;
|
||||||
|
int a = 1;
|
||||||
|
int b = 1;
|
||||||
|
int c = 1;
|
||||||
|
int tt = 6;
|
||||||
|
int d = 35;
|
||||||
|
//int w;
|
||||||
|
int ri[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
|
||||||
|
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
|
||||||
|
ri[2]++;
|
||||||
|
}
|
||||||
|
int w;//将一号的位置存起来
|
||||||
|
int ww[13] = { 0 };
|
||||||
|
int t[13] = { 0 };
|
||||||
|
for (m = 1; m < 13; m++) {
|
||||||
|
if (m == 1 || m == 2) {
|
||||||
|
m += 12;
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
w = (1 + 1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
|
||||||
|
ww[a] = w;
|
||||||
|
a++;
|
||||||
|
if (m == 13 || m == 14) {
|
||||||
|
m -= 12;
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
}//地址存入成功
|
||||||
|
for (int i = 1; i < 13; i++) {
|
||||||
|
t[i] = ww[i];
|
||||||
|
}
|
||||||
|
for (aa = 1, bb = 2; aa <= 11, bb <= 12; aa += 2, bb += 2) {
|
||||||
|
tt = 6;
|
||||||
|
b = 1;
|
||||||
|
c = 1;
|
||||||
|
xingqi(aa);
|
||||||
|
while (tt--) {
|
||||||
|
if (tt == 5) {
|
||||||
|
for (int i = 0; i < ww[aa]; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (; b <= ri[aa]; b++) {
|
||||||
|
printf("%5d", b);
|
||||||
|
t[aa]++;
|
||||||
|
if (t[aa] == 7) {
|
||||||
|
t[aa] = 0;
|
||||||
|
cout << "\t\t";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
b++;
|
||||||
|
if (t[aa] != 0) {
|
||||||
|
|
||||||
|
for (; t[aa] < 7; t[aa]++)
|
||||||
|
cout << " ";
|
||||||
|
cout << "\t\t";
|
||||||
|
}
|
||||||
|
if (tt == 0)
|
||||||
|
if (b > ri[aa]) {
|
||||||
|
cout << " \t\t\t\t";
|
||||||
|
}
|
||||||
|
if (tt == 5) {
|
||||||
|
for (int i = 0; i < ww[bb]; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (y == 1582 && bb == 10) {
|
||||||
|
for (; c <= ri[bb]; c++) {
|
||||||
|
if (c == 5) {
|
||||||
|
c += 10;
|
||||||
|
}
|
||||||
|
printf("%5d", c);
|
||||||
|
t[bb]++;
|
||||||
|
if (t[bb] == 7) {
|
||||||
|
t[bb] = 0;
|
||||||
|
printf("\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (c > ri[bb])cout << "\n";
|
||||||
|
}//////////////////////////
|
||||||
|
else for (; c <= ri[bb]; c++) {
|
||||||
|
printf("%5d", c);
|
||||||
|
t[bb]++;
|
||||||
|
if (t[bb] == 7) {
|
||||||
|
t[bb] = 0;
|
||||||
|
printf("\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}//结束循环,执行\n
|
||||||
|
c++;
|
||||||
|
|
||||||
|
if (tt == 0) {
|
||||||
|
cout << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
color(7);
|
||||||
|
string a;
|
||||||
|
int f=zhanshi();
|
||||||
|
color(7);
|
||||||
|
if (f)
|
||||||
|
{
|
||||||
|
//system("cls");
|
||||||
|
cout << "\n您是否想尝试其他模块?" << endl;
|
||||||
|
cout << "如果是的话,请输入YES" << endl;
|
||||||
|
cout << "如果不想尝试的话,请输入NO" << endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
cout << "Bye Bye"<<endl;
|
||||||
|
//cin >> a;
|
||||||
|
getchar();
|
||||||
|
getline(cin, a);
|
||||||
|
system("cls");
|
||||||
|
if (a == "YES") {
|
||||||
|
cout << "OK" << endl;
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
else if (a == "NO") {
|
||||||
|
cout << "再见!!!" << endl;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cout << "不会玩别玩了!!!" << endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
315
stu2024/数技2401赵仔航.c
Normal file
315
stu2024/数技2401赵仔航.c
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include<windows.h>
|
||||||
|
|
||||||
|
|
||||||
|
int Leap (int year) //判断闰年
|
||||||
|
{
|
||||||
|
return (year%4==0&&year%100!=0)||(year%400==0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Kimlareson(int year, int month, int day)
|
||||||
|
{
|
||||||
|
if (month<3) //1,2月要当做去年的13,14月算
|
||||||
|
{
|
||||||
|
month+=12;
|
||||||
|
year-=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int K = year % 100;
|
||||||
|
int J = year / 100;
|
||||||
|
|
||||||
|
|
||||||
|
if (year<1582||(year==1582&&(month<10||(month==10&&day<=4))))//1582年10月4日及之前
|
||||||
|
{
|
||||||
|
return (day+(13*(month+1))/5+K+K/4+5-J)%7;
|
||||||
|
}
|
||||||
|
|
||||||
|
else //1582年10月15日及之后
|
||||||
|
{
|
||||||
|
return (day+(13*(month+1))/5+K+K/4+J/4+5*J)%7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int daysinmonth(int year,int month)
|
||||||
|
{
|
||||||
|
switch(month)
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
return Leap(year)?29:28; //判断2月天数
|
||||||
|
case 4: case 6: case 9: case 11:
|
||||||
|
return 30;
|
||||||
|
default:
|
||||||
|
return 31;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void print_month_calendar(int year,int month,int *start_day)//单个月的日历
|
||||||
|
{
|
||||||
|
const char *months[]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
|
||||||
|
printf("\n %d %s\n",year,months[month - 1]);
|
||||||
|
printf("日 一 二 三 四 五 六\n");
|
||||||
|
int days_in_month=daysinmonth(year,month);
|
||||||
|
|
||||||
|
for (int i=0;i<*start_day;i++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int day=1;day<=days_in_month;day++)
|
||||||
|
{
|
||||||
|
|
||||||
|
printf("%2d ",day);
|
||||||
|
if ((*start_day+day)%7==0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
*start_day=(*start_day+days_in_month)%7;
|
||||||
|
}
|
||||||
|
void print_1582(int *start_day) //单独处理1582年10月这个怪胎(?)
|
||||||
|
{
|
||||||
|
printf("\n 十月 1582\n");
|
||||||
|
printf("日 一 二 三 四 五 六\n");
|
||||||
|
|
||||||
|
|
||||||
|
for (int i=0;i<*start_day;i++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印1-4日
|
||||||
|
for (int day=1;day<=4;day++)
|
||||||
|
{
|
||||||
|
printf("%2d ",day);
|
||||||
|
if ((*start_day+day-1)%7==6)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int current_day=5; //跳过5-14日
|
||||||
|
for (int day=15;day<=31;day++)
|
||||||
|
{
|
||||||
|
if ((*start_day+current_day-1)%7==0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("%2d ",day);
|
||||||
|
current_day++;
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
|
*start_day=(*start_day+21)%7; //1582年10月只有21天
|
||||||
|
}
|
||||||
|
void print_calendar(int year) //打印单列日历
|
||||||
|
{
|
||||||
|
int start_day=Kimlareson(year,1,1);
|
||||||
|
for (int month=1;month<=12;month++)
|
||||||
|
{
|
||||||
|
if (year==1582&&month==10)
|
||||||
|
{
|
||||||
|
print_1582(&start_day); //处理1582年10月
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print_month_calendar(year,month,&start_day);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_calendar_double(int year) //打印双列整年日历
|
||||||
|
{
|
||||||
|
int start_day[12];
|
||||||
|
start_day[0]=Kimlareson(year,1,1);
|
||||||
|
|
||||||
|
|
||||||
|
for (int month=1;month<12;month++) //计算每月起始星期几
|
||||||
|
{
|
||||||
|
start_day[month]=(start_day[month-1]+daysinmonth(year,month))%7;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *months[]={"一月", "二月", "三月", "四月", "五月", "六月","七月", "八月", "九月", "十月", "十一月", "十二月"};
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; i++) //每行输出两个月
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
for (int j = 0; j < 2; j++) //两个月的标题
|
||||||
|
{
|
||||||
|
int month = i * 2 + j + 1;
|
||||||
|
printf(" %d %s ",year,months[month-1]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
|
for (int j = 0; j < 2; j++) //星期标题
|
||||||
|
{
|
||||||
|
printf("日 一 二 三 四 五 六 ");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
int max_days[2] = { daysinmonth(year, i * 2 + 1), daysinmonth(year, i * 2 + 2) };//获取两个月的最大天数和起始星期几
|
||||||
|
int start_days[2] = { start_day[i * 2], start_day[i * 2 + 1] };
|
||||||
|
|
||||||
|
//打印日期
|
||||||
|
int day[2] = {1, 1}; //每个月的当前日期
|
||||||
|
int printed_anything = 1; //标记是否有剩余日期可打印
|
||||||
|
|
||||||
|
while (printed_anything) {
|
||||||
|
printed_anything = 0;
|
||||||
|
|
||||||
|
for (int j = 0; j < 2; j++)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (day[j] == 1) //打印月初的空格
|
||||||
|
{
|
||||||
|
for (int k = 0; k < start_days[j]; k++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while (day[j] <= max_days[j] && ((day[j] + start_days[j] - 1) % 7) != 6)//打印日期
|
||||||
|
{
|
||||||
|
printf("%2d ",day[j]++);
|
||||||
|
printed_anything=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (day[j] <= max_days[j])//打印最后一个日期,换行并跳到下一个月
|
||||||
|
{
|
||||||
|
printf("%2d ",day[j]++);
|
||||||
|
printed_anything=1;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
printf(" "); //填充空格保持对齐
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(" "); //每月之间的间隔
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n"); //换行到下一个星期
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
SetConsoleOutputCP(65001);
|
||||||
|
int x;
|
||||||
|
for(;x!=4;)
|
||||||
|
{
|
||||||
|
printf(" menu\n");
|
||||||
|
printf("[1]判断是否闰年\n");
|
||||||
|
printf("[2]输出该年份的日历\n");
|
||||||
|
printf("[3]求这一天是星期几\n");
|
||||||
|
printf("[4]退出\n");
|
||||||
|
|
||||||
|
|
||||||
|
scanf("%d",&x);
|
||||||
|
|
||||||
|
if(x==1)
|
||||||
|
{
|
||||||
|
int y,x;
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d",&y);
|
||||||
|
if (y<0)
|
||||||
|
{
|
||||||
|
printf("你确定你输的是对吗?\n");
|
||||||
|
}
|
||||||
|
else if(y>=10000)
|
||||||
|
{
|
||||||
|
printf("%d...你不觉得太过久远了吗?\n",y);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x=Leap(y);
|
||||||
|
if(x==1)
|
||||||
|
printf("是闰年\n");
|
||||||
|
else
|
||||||
|
printf("不是闰年\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(x==2)
|
||||||
|
{
|
||||||
|
int y,x;
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d",&y);
|
||||||
|
if (y<0)
|
||||||
|
{
|
||||||
|
printf("你确定你输的是对吗?\n");
|
||||||
|
}
|
||||||
|
else if(y>=10000)
|
||||||
|
{
|
||||||
|
printf("%d...你不觉得太过久远了吗?\n",y);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("请选择单列或双列输出(1.单列 2.双列):");
|
||||||
|
scanf("%d",&x);
|
||||||
|
if(x==1)
|
||||||
|
{
|
||||||
|
print_calendar(y);
|
||||||
|
}
|
||||||
|
else if(x==2)
|
||||||
|
{
|
||||||
|
print_calendar_double(y);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("啧...我觉得我说的很明显了呢...\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(x==3)
|
||||||
|
{
|
||||||
|
int year, month, day;
|
||||||
|
printf("请输入日期(年 月 日):");
|
||||||
|
scanf("%d %d %d", &year, &month, &day);
|
||||||
|
if(year<0||month<=0||day<=0)
|
||||||
|
{
|
||||||
|
printf("你是认真的吗?\n");
|
||||||
|
}
|
||||||
|
else if(year>=10000)
|
||||||
|
{
|
||||||
|
printf("%d...你不觉得太过久远了吗?\n",year);
|
||||||
|
}
|
||||||
|
else if(month>=13||day<=0||day>31)
|
||||||
|
{
|
||||||
|
printf("你是认真的吗?\n");
|
||||||
|
}
|
||||||
|
else if((month==2&&Leap(year)&&day>29)||(month==2&&Leap(year)==0&&day>28))
|
||||||
|
{
|
||||||
|
printf("你是认真的吗?\n");
|
||||||
|
}
|
||||||
|
else if(year==1582&&month==10&&day>4&&day<15)
|
||||||
|
{
|
||||||
|
printf("这一天已经被教皇大人吃掉了www\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int weekday=Kimlareson(year, month, day);
|
||||||
|
const char *weekdays[] = {"星期六","星期日","星期一","星期二","星期三","星期四","星期五"};
|
||||||
|
|
||||||
|
printf("%d年%d月%d日是:%s\n",year,month,day,weekdays[weekday]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(x==4)
|
||||||
|
exit(0);
|
||||||
|
else if(x==99)
|
||||||
|
printf("你先生,何时来的?\n是要时停扫地偷胖次吗?\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("请不要开玩笑了,我没有这个功能哦\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
359
stu2024/数技2402季界通.cpp
Normal file
359
stu2024/数技2402季界通.cpp
Normal file
@ -0,0 +1,359 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
/*闰年函数*/
|
||||||
|
int isLeapYear(int year)
|
||||||
|
{
|
||||||
|
if (year == 1582)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return ((year % 4 == 0 && year % 100!= 0) || (year % 400 == 0));
|
||||||
|
}
|
||||||
|
int getFirstDayOfYear(int year)
|
||||||
|
{
|
||||||
|
int d = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;
|
||||||
|
if (year > 1582)
|
||||||
|
{
|
||||||
|
if (year == 1583)
|
||||||
|
{
|
||||||
|
d -= 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return d % 7;
|
||||||
|
}
|
||||||
|
/*计算给定日期是星期几的函数*/
|
||||||
|
int getDayOfWeek(int year, int month, int day)
|
||||||
|
{
|
||||||
|
int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
|
||||||
|
if (month < 3)
|
||||||
|
{
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
return (year + year / 4 - year / 100 + year / 400 + t[month - 1] + day) % 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*单列日历函数*/
|
||||||
|
int danlie(int year)
|
||||||
|
{
|
||||||
|
int c[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
|
||||||
|
if((year%4==0&&year%100!=0)||year%400==0)
|
||||||
|
c[1]++;
|
||||||
|
|
||||||
|
int sum=(year-1)*365;
|
||||||
|
|
||||||
|
if(year>1582)
|
||||||
|
sum-=10;
|
||||||
|
|
||||||
|
for(int i=1;i<year;i++)
|
||||||
|
if((i%4==0&&i%100!=0)||i%400==0)
|
||||||
|
sum++;
|
||||||
|
|
||||||
|
int b=sum%7;
|
||||||
|
int a1[7]={4,5,6,7,1,2,3};
|
||||||
|
int fd=a1[b];
|
||||||
|
|
||||||
|
if(year==1582)
|
||||||
|
{
|
||||||
|
for(int y=1;y<=12;y++)
|
||||||
|
{
|
||||||
|
printf("\n\n%18d-%d\n",year,y);
|
||||||
|
printf(" Sun Mon Tue Wed Thu Fri Sat\n");
|
||||||
|
for(int z=1;z<=fd;z++)
|
||||||
|
printf(" ");
|
||||||
|
for(int x=1;x<=c[y-1];x++)
|
||||||
|
{
|
||||||
|
if(y==10&&x==5)
|
||||||
|
{
|
||||||
|
x=15;
|
||||||
|
fd=5;
|
||||||
|
}
|
||||||
|
if(fd==7)
|
||||||
|
{
|
||||||
|
fd=0;
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("%5d",x);
|
||||||
|
fd++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int y=1;y<=12;y++)
|
||||||
|
{
|
||||||
|
printf("\n\n%18d-%d\n",year,y);
|
||||||
|
printf(" Sun Mon Tue Wed Thu Fri Sat\n");
|
||||||
|
for(int z=1;z<=fd;z++)
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
for(int x=1;x<=c[y-1];x++)
|
||||||
|
{
|
||||||
|
if(fd==7)
|
||||||
|
{
|
||||||
|
fd=0;
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("%5d",x);
|
||||||
|
fd++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
/*双列日历函数*/
|
||||||
|
int shuanglie(int a)
|
||||||
|
{
|
||||||
|
int c[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
|
||||||
|
if((a%4==0&&a%100!=0)||a%400==0)
|
||||||
|
c[1]++;
|
||||||
|
|
||||||
|
int sum=(a-1)*365;
|
||||||
|
|
||||||
|
if(a>1582)
|
||||||
|
sum-=10;
|
||||||
|
|
||||||
|
for(int i=1;i<a;i++)
|
||||||
|
if((i%4==0&&i%100!=0)||i%400==0)
|
||||||
|
sum++;
|
||||||
|
|
||||||
|
int b=sum%7;
|
||||||
|
int a1[7]={4,5,6,7,1,2,3};
|
||||||
|
int fd=a1[b],d1,d2;
|
||||||
|
|
||||||
|
int m[12];
|
||||||
|
for(int x=0;x<12;x++)
|
||||||
|
{
|
||||||
|
if(x==0)
|
||||||
|
m[0]=fd;
|
||||||
|
else if(x==1)
|
||||||
|
m[1]=(fd+31)%7;
|
||||||
|
else
|
||||||
|
m[x]=(m[x-1]+c[x-1])%7;
|
||||||
|
} //这个月第一天=上个月的第一天加上上个月的天数再除以七
|
||||||
|
|
||||||
|
if(a==1582)
|
||||||
|
{
|
||||||
|
for(int y=1;y<12;y+=2)
|
||||||
|
{
|
||||||
|
int r=0;
|
||||||
|
d1=m[y-1],d2=m[y];
|
||||||
|
printf("\n\n%18d-%d %5d-%d\n",a,y,a,y+1);
|
||||||
|
printf(" Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat\n");
|
||||||
|
for(int z=1;z<=m[y-1];z++)
|
||||||
|
printf(" ");
|
||||||
|
for(int x=1;x<=c[y-1];x++)
|
||||||
|
{
|
||||||
|
int z,l;
|
||||||
|
if(x==1)
|
||||||
|
z=1;
|
||||||
|
printf("%5d",x);
|
||||||
|
d1++;
|
||||||
|
if(x==c[y-1])
|
||||||
|
for(d1;d1<7;d1++)
|
||||||
|
printf(" ");
|
||||||
|
if(d1==7)
|
||||||
|
{
|
||||||
|
d1=0;
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
if(x<8) //这边是为了让第一行只有一天的情况正常输出
|
||||||
|
{
|
||||||
|
d2=m[y];
|
||||||
|
for(int z=1;z<=d2;z++)
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for(l=z;l<=c[y];l++)
|
||||||
|
{
|
||||||
|
if(y==9&&l==5)
|
||||||
|
{
|
||||||
|
l=15;
|
||||||
|
d2=5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(l==c[y]&&r!=0)
|
||||||
|
break;
|
||||||
|
else if(l==c[y]&&r==0)
|
||||||
|
r++; //让1582正常输出
|
||||||
|
|
||||||
|
printf("%5d",l);
|
||||||
|
d2++;
|
||||||
|
|
||||||
|
if(d2==7)
|
||||||
|
{
|
||||||
|
z=l+1;
|
||||||
|
d2=0;
|
||||||
|
if(x==c[y-1]&&z<c[y])
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf(" ");
|
||||||
|
for(z;z<=c[y];z++)
|
||||||
|
printf("%5d",z);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int z=1;z<=m[y+1];z++)
|
||||||
|
printf(" \n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int y=1;y<12;y+=2) //y代表月份
|
||||||
|
{
|
||||||
|
int r=0;
|
||||||
|
d1=m[y-1],d2=m[y]; //d1代表单数月的第一天 d2代表双数月的第一天
|
||||||
|
printf("\n\n%18d-%d %5d-%d\n",a,y,a,y+1);
|
||||||
|
printf(" Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat\n");
|
||||||
|
for(int z=1;z<=m[y-1];z++)
|
||||||
|
printf(" ");
|
||||||
|
for(int x=1;x<=c[y-1];x++)
|
||||||
|
{
|
||||||
|
int z,l;
|
||||||
|
if(x==1)
|
||||||
|
z=1;
|
||||||
|
printf("%5d",x);
|
||||||
|
d1++;
|
||||||
|
if(x==c[y-1])
|
||||||
|
for(d1;d1<7;d1++)
|
||||||
|
printf(" ");
|
||||||
|
if(x==c[y-1]&&d2!=0)
|
||||||
|
break;
|
||||||
|
if(d1==7)
|
||||||
|
{
|
||||||
|
d1=0;
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
if(x<8)
|
||||||
|
{
|
||||||
|
d2=m[y];
|
||||||
|
for(int z=1;z<=d2;z++)
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
for(l=z;l<=c[y];l++) //l为偶数月日期
|
||||||
|
{
|
||||||
|
printf("%5d",l);
|
||||||
|
d2++;
|
||||||
|
if(x==c[y-1]&&l<c[y]&&d2==7)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
for(int v=z+7;v<=c[y];v++)
|
||||||
|
printf(" %5d",v);
|
||||||
|
printf("\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(d2==7)
|
||||||
|
{
|
||||||
|
z=l+1;
|
||||||
|
d2=0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
for(int z=1;z<=m[y+1];z++)
|
||||||
|
printf(" \n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
void ShowMenu()
|
||||||
|
{
|
||||||
|
printf("1.公主是想查询某天是星期几及该年是否是闰年吗?\n\n");
|
||||||
|
printf("2.公主是想输出某一年的日历吗?(单列)\n\n");
|
||||||
|
printf("3.公主是想输出某一年的日历吗?(双列)\n\n");
|
||||||
|
printf("4.公主是想退出吗?\n\n");
|
||||||
|
printf("公主请输入你的选择: ");
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int choice;
|
||||||
|
do {
|
||||||
|
ShowMenu();
|
||||||
|
if (scanf("%d", &choice)!= 1)
|
||||||
|
{
|
||||||
|
printf("你要不看看你输的是啥?重输!!\n");
|
||||||
|
while (getchar()!= '\n');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (choice)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
int year, month, day;
|
||||||
|
printf("请输入年 月 日(用空格隔开): ");
|
||||||
|
if (scanf("%d %d %d", &year, &month, &day)!= 3)
|
||||||
|
{
|
||||||
|
printf("啊哦 输入不对哦,请重新输入正确的年、月、日。\n");
|
||||||
|
while (getchar()!= '\n');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int weekday = getDayOfWeek(year, month, day);
|
||||||
|
printf("%d年%d月%d日是星期", year, month, day);
|
||||||
|
switch (weekday)
|
||||||
|
{
|
||||||
|
case 0: printf("日"); break;
|
||||||
|
case 1: printf("一"); break;
|
||||||
|
case 2: printf("二"); break;
|
||||||
|
case 3: printf("三"); break;
|
||||||
|
case 4: printf("四"); break;
|
||||||
|
case 5: printf("五"); break;
|
||||||
|
case 6: printf("六"); break;
|
||||||
|
}
|
||||||
|
printf(" , ");
|
||||||
|
if (isLeapYear(year))
|
||||||
|
{
|
||||||
|
printf("%d是闰年\n", year);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%d不是闰年\n", year);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
int year;
|
||||||
|
printf("公主请输入年份: ");
|
||||||
|
if (scanf("%d", &year)!= 1)
|
||||||
|
{
|
||||||
|
printf("你要不看看你输的是啥,请重输正确的年份!!\n");
|
||||||
|
while (getchar()!= '\n');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
danlie(year);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
int a;
|
||||||
|
printf("公主请输入年份吧: ");
|
||||||
|
if (scanf("%d", &a)!= 1)
|
||||||
|
{
|
||||||
|
printf("你要不看看你输的是啥,重输正确的年份!!\n");
|
||||||
|
while (getchar()!= '\n');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
shuanglie(a);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
printf("退出程序\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("你要不看看你输的是啥?重输!!\n");
|
||||||
|
}
|
||||||
|
} while (choice!= 4);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
393
stu2024/数技2402张一寒.cpp
Normal file
393
stu2024/数技2402张一寒.cpp
Normal file
@ -0,0 +1,393 @@
|
|||||||
|
#include "stdio.h"
|
||||||
|
#include "math.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
printf("1.查询对应年份的日历\n2.查询某具体日期的星期\n3.查询对应年份是否为闰年\n");
|
||||||
|
int num,year,mon,day,a,b,d;
|
||||||
|
printf("**********************\n");
|
||||||
|
printf("输入查询项目编号\n");
|
||||||
|
scanf("%d",&num);
|
||||||
|
system("cls");//清屏
|
||||||
|
if(num==1)
|
||||||
|
{
|
||||||
|
int nums;
|
||||||
|
printf("1.单列输出\n2.双列输出\n");
|
||||||
|
printf("输入想要表现形式的序号:\n");
|
||||||
|
scanf("%d",&nums);
|
||||||
|
if(nums==1)
|
||||||
|
{
|
||||||
|
printf("输入年份");
|
||||||
|
scanf("%d",&year);
|
||||||
|
a=(year%4==0&&year%100!=0||year%400==0);
|
||||||
|
b=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7;//每年一月一日是周几
|
||||||
|
if(year!=1582)
|
||||||
|
{
|
||||||
|
for(mon=1;mon<=12;mon++)
|
||||||
|
{
|
||||||
|
switch(mon)//判每月天数
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if(a==1)
|
||||||
|
day=29;
|
||||||
|
else
|
||||||
|
day=28;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
printf("----------------%d月---------------\n",mon);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");//一个中文占两个字节
|
||||||
|
switch(b)//判位置
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("%5c",'\40');
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("%10c",'\40');
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("%15c",'\40');
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("%20c",'\40');
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("%25c",'\40');
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("%30c",'\40');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for(int i=1,j=b;i<=day;i++,j++)
|
||||||
|
{
|
||||||
|
printf("%5d",i);
|
||||||
|
if(j%7==6)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
b=(b+day)%7;//下个月的第一天周几
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(year==1582)//1582的单列输出
|
||||||
|
{
|
||||||
|
d=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+11)%7;
|
||||||
|
for(mon=1;mon<=12;mon++)
|
||||||
|
{
|
||||||
|
switch(mon)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if(a==1)
|
||||||
|
day=29;
|
||||||
|
else
|
||||||
|
day=28;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
printf("----------------%d月---------------\n",mon);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
switch(d)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("%5c",'\40');
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("%10c",'\40');
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("%15c",'\40');
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("%20c",'\40');
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("%25c",'\40');
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("%30c",'\40');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for(int i=1,j=d;i<=day;i++,j++)
|
||||||
|
{
|
||||||
|
if(mon==10)
|
||||||
|
{
|
||||||
|
if(i>4&&i<15)
|
||||||
|
continue;
|
||||||
|
printf("%5d",i);
|
||||||
|
if(i==16||i==23||i==30)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%5d",i);
|
||||||
|
if(j%7==6)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(mon==10)
|
||||||
|
{
|
||||||
|
d=(d+day+ 1)%7;//下个月第一天是周几
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
d=(d+day)%7;//下个月第一天是周几
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(nums==2)//双列
|
||||||
|
{
|
||||||
|
printf("输入年份");
|
||||||
|
scanf("%d",&year);
|
||||||
|
a=(year%4==0&&year%100!=0||year%400==0);
|
||||||
|
b=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7;//每年一月一日是周几
|
||||||
|
for(mon=1;mon<=12;mon++)
|
||||||
|
{
|
||||||
|
switch(mon)//判每月天数
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if(a==1)
|
||||||
|
day=29;
|
||||||
|
else
|
||||||
|
day=28;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
day=30;
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
day=31;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
printf("----------------%d月----------------|",mon++);
|
||||||
|
printf("----------------%d月----------------\n",mon);
|
||||||
|
printf(" 日 一 二 三 四 五 六");
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
switch(b)//判位置
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("%5c",'\40');
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("%10c",'\40');
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("%15c",'\40');
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("%20c",'\40');
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("%25c",'\40');
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("%30c",'\40');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for(int i=1,j=b;i<=day;i++,j++)
|
||||||
|
{
|
||||||
|
printf("%5d",i);
|
||||||
|
if(j%7==6)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
b=(b+day)%7;//下个月的第一天周几
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(num==2)//判星期
|
||||||
|
{
|
||||||
|
int year,mon,day,a,b,c,d,e ;
|
||||||
|
printf("输入想要查询的具体日期\n");
|
||||||
|
printf("年:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
printf("月:\n");
|
||||||
|
scanf("%d",&mon);
|
||||||
|
printf("日:\n");
|
||||||
|
scanf("%d",&day);
|
||||||
|
int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if(year==1582)
|
||||||
|
arr[10]=21;
|
||||||
|
a=(year%4==0&&year%100!=0||year%400==0);
|
||||||
|
b=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7;
|
||||||
|
d=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+11)%7;
|
||||||
|
if(year>1582)
|
||||||
|
{
|
||||||
|
if(a==1)
|
||||||
|
arr[2]=29;
|
||||||
|
for(int i=0;i<mon;i++)
|
||||||
|
{
|
||||||
|
b=(b+arr[i])%7;
|
||||||
|
c=(b+day-1)%7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(year<1582)
|
||||||
|
{
|
||||||
|
if(a==1)
|
||||||
|
arr[2]=29;
|
||||||
|
for(int i=0;i<mon;i++)
|
||||||
|
{
|
||||||
|
d=(d+arr[i])%7;
|
||||||
|
c=(d+day-1)%7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(year==1582)
|
||||||
|
{
|
||||||
|
if(mon<=10&&day<5)
|
||||||
|
{
|
||||||
|
for(int i=0;i<mon;i++)
|
||||||
|
{
|
||||||
|
d=(d+arr[i])%7;
|
||||||
|
c=(d+day-1)%7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(mon==10&&15<=day<=31)
|
||||||
|
{
|
||||||
|
for(int i=0;i<mon;i++)
|
||||||
|
{
|
||||||
|
d=(d+arr[i])%7;
|
||||||
|
c=(d+day-11)%7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (mon>10)
|
||||||
|
{
|
||||||
|
for(int i=0;i<mon;i++)
|
||||||
|
{
|
||||||
|
d=(d+arr[i])%7;
|
||||||
|
c=(d+day-1)%7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch(c)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
printf("星期日");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
printf("星期一");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("星期二");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("星期三");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("星期四");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("星期五");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("星期六");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(num==3)
|
||||||
|
{
|
||||||
|
printf("输入年份");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
{
|
||||||
|
printf("闰年");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("不是闰年");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
353
stu2024/数技2402张韵轩.cpp
Normal file
353
stu2024/数技2402张韵轩.cpp
Normal file
@ -0,0 +1,353 @@
|
|||||||
|
#include "stdio.h"
|
||||||
|
#include "string.h"
|
||||||
|
#include "math.h"
|
||||||
|
|
||||||
|
int panduan(int a,int b,int c) // a年b月c日
|
||||||
|
{
|
||||||
|
if(b<=0||b>12)
|
||||||
|
{
|
||||||
|
printf("每年为12个月份,你所输入的%d不在这范围内",b);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
|
||||||
|
if(c<=0||c>31)
|
||||||
|
{
|
||||||
|
printf("你输入的为%d月,本月共31天,你输入的%d不在此范围内",b,c);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(b==4||b==6||b==9||b==11)
|
||||||
|
if(c<=0||c>30)
|
||||||
|
{
|
||||||
|
printf("你输入的为%d月,本月共30天,你输入的%d不在此范围内",b,c);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if((a%4==0&&a%100!=0)||a%400==0)
|
||||||
|
if(b==2)
|
||||||
|
if(c<=0||c>29)
|
||||||
|
{
|
||||||
|
printf("你输入的为闰年的2月,本月共29天,你输入的%d不在此范围内",c);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(b==2)
|
||||||
|
if(c<=0||c>28)
|
||||||
|
{
|
||||||
|
printf("你输入的不是闰年的2月,本月共28天,你输入的%d不在此范围内",c);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(a==1582&&b==10&&c>4&&c<15)
|
||||||
|
{
|
||||||
|
printf("因为特殊原因,不存在你所输入的1582年10月%d日",c);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char weak[7][5]={"周三","周四","周五","周六","周日","周一","周二"};
|
||||||
|
long long sum=365*(a-1)+c;
|
||||||
|
int p=a/100,m=a/400;
|
||||||
|
for(int l=1;l<a;l++)
|
||||||
|
if((l%4==0&&l%100!=0)||l%400==0)
|
||||||
|
sum++;
|
||||||
|
switch(b)
|
||||||
|
{
|
||||||
|
case 12:sum+=30; //11月30天
|
||||||
|
case 11:sum+=31; //10月31天
|
||||||
|
case 10:sum+=30; //9 月30天
|
||||||
|
case 9 :sum+=31; //8 月31天
|
||||||
|
case 8 :sum+=31; //7 月31天
|
||||||
|
case 7 :sum+=30; //6 月30天
|
||||||
|
case 6 :sum+=31; //5 月31天
|
||||||
|
case 5 :sum+=30; //4 月30天
|
||||||
|
case 4 :sum+=31; //3 月31天
|
||||||
|
case 3 :sum+=28; //2 月28天
|
||||||
|
case 2 :sum+=31; //1 月31天
|
||||||
|
}
|
||||||
|
if((a%4==0&&a%100!=0)||a%400==0)
|
||||||
|
{
|
||||||
|
printf("你输入的%d为闰年\n",a);
|
||||||
|
if(b>2)
|
||||||
|
sum++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("你输入的%d年不是闰年\n",a);
|
||||||
|
if(a>1582)
|
||||||
|
sum-=10;
|
||||||
|
else if(a==1582&&b>10)
|
||||||
|
sum-=10;
|
||||||
|
else if(a==1582&&b==10&&c>=15)
|
||||||
|
sum-=10;
|
||||||
|
else
|
||||||
|
sum;
|
||||||
|
int k=sum%7;
|
||||||
|
printf("你输入的%d年%d月%d日为%s",a,b,c,weak[k]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int danhang(int a)
|
||||||
|
{
|
||||||
|
int c[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
|
||||||
|
if((a%4==0&&a%100!=0)||a%400==0)
|
||||||
|
c[1]++;
|
||||||
|
|
||||||
|
int sum=(a-1)*365;
|
||||||
|
|
||||||
|
if(a>1582)
|
||||||
|
sum-=10;
|
||||||
|
|
||||||
|
for(int i=1;i<a;i++)
|
||||||
|
if((i%4==0&&i%100!=0)||i%400==0)
|
||||||
|
sum++;
|
||||||
|
|
||||||
|
int b=sum%7;
|
||||||
|
int a1[7]={4,5,6,7,1,2,3};
|
||||||
|
int fd=a1[b]; //确定一月一日为周几
|
||||||
|
|
||||||
|
if(a==1582)
|
||||||
|
{
|
||||||
|
for(int y=1;y<=12;y++)
|
||||||
|
{
|
||||||
|
printf("\n\n%d月\n",y);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
for(int z=1;z<=fd;z++)
|
||||||
|
printf(" ");
|
||||||
|
for(int x=1;x<=c[y-1];x++)
|
||||||
|
{
|
||||||
|
if(y==10&&x==5)
|
||||||
|
{
|
||||||
|
x=15;
|
||||||
|
fd=5;
|
||||||
|
}
|
||||||
|
if(fd==7)
|
||||||
|
{
|
||||||
|
fd=0;
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("%4d",x);
|
||||||
|
fd++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int y=1;y<=12;y++)
|
||||||
|
{
|
||||||
|
printf("\n\n%d月\n",y);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
for(int z=1;z<=fd;z++)
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
for(int x=1;x<=c[y-1];x++)
|
||||||
|
{
|
||||||
|
if(fd==7)
|
||||||
|
{
|
||||||
|
fd=0;
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("%4d",x);
|
||||||
|
fd++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int shuanghang(int a)
|
||||||
|
{
|
||||||
|
int c[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
|
||||||
|
if((a%4==0&&a%100!=0)||a%400==0)
|
||||||
|
c[1]++;
|
||||||
|
|
||||||
|
int sum=(a-1)*365;
|
||||||
|
|
||||||
|
if(a>1582)
|
||||||
|
sum-=10;
|
||||||
|
|
||||||
|
for(int i=1;i<a;i++)
|
||||||
|
if((i%4==0&&i%100!=0)||i%400==0)
|
||||||
|
sum++;
|
||||||
|
|
||||||
|
int b=sum%7;
|
||||||
|
int a1[7]={4,5,6,7,1,2,3};
|
||||||
|
int fd=a1[b],d1,d2; //确定一月一日为周几
|
||||||
|
|
||||||
|
int m[12];
|
||||||
|
for(int x=0;x<12;x++)
|
||||||
|
{
|
||||||
|
if(x==0)
|
||||||
|
m[0]=fd;
|
||||||
|
else if(x==1)
|
||||||
|
m[1]=(fd+31)%7;
|
||||||
|
else
|
||||||
|
m[x]=(m[x-1]+c[x-1])%7;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(a==1582)
|
||||||
|
{
|
||||||
|
for(int y=1;y<12;y+=2)
|
||||||
|
{
|
||||||
|
int r=0;
|
||||||
|
d1=m[y-1],d2=m[y];
|
||||||
|
printf("\n\n%d月 %d月\n",y,y+1);
|
||||||
|
printf(" 日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
|
||||||
|
for(int z=1;z<=m[y-1];z++)
|
||||||
|
printf(" ");
|
||||||
|
for(int x=1;x<=c[y-1];x++)
|
||||||
|
{
|
||||||
|
int z,l;
|
||||||
|
if(x==1)
|
||||||
|
z=1;
|
||||||
|
printf("%4d",x);
|
||||||
|
d1++;
|
||||||
|
if(x==c[y-1])
|
||||||
|
for(d1;d1<7;d1++)
|
||||||
|
printf(" ");
|
||||||
|
if(d1==7)
|
||||||
|
{
|
||||||
|
d1=0;
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
if(x<8)
|
||||||
|
{
|
||||||
|
d2=m[y];
|
||||||
|
for(int z=1;z<=d2;z++)
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for(l=z;l<=c[y];l++)
|
||||||
|
{
|
||||||
|
if(y==9&&l==5)
|
||||||
|
{
|
||||||
|
l=15;
|
||||||
|
d2=5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(l==c[y]&&r!=0)
|
||||||
|
break;
|
||||||
|
else if(l==c[y]&&r==0)
|
||||||
|
r++;
|
||||||
|
|
||||||
|
printf("%4d",l);
|
||||||
|
d2++;
|
||||||
|
|
||||||
|
if(d2==7)
|
||||||
|
{
|
||||||
|
z=l+1;
|
||||||
|
d2=0;
|
||||||
|
if(x==c[y-1]&&z<c[y])
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf(" ");
|
||||||
|
for(z;z<=c[y];z++)
|
||||||
|
printf("%4d",z);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int z=1;z<=m[y+1];z++)
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int y=1;y<12;y+=2) //y为月份
|
||||||
|
{
|
||||||
|
int r=0;
|
||||||
|
d1=m[y-1],d2=m[y];
|
||||||
|
printf("\n\n%d月 %d月\n",y,y+1);
|
||||||
|
printf(" 日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
|
||||||
|
for(int z=1;z<=m[y-1];z++)
|
||||||
|
printf(" ");
|
||||||
|
for(int x=1;x<=c[y-1];x++) //x为奇数月日期
|
||||||
|
{
|
||||||
|
int z,l;
|
||||||
|
if(x==1)
|
||||||
|
z=1;
|
||||||
|
printf("%4d",x);
|
||||||
|
d1++;
|
||||||
|
if(x==c[y-1])
|
||||||
|
for(d1;d1<7;d1++)
|
||||||
|
printf(" ");
|
||||||
|
if(x==c[y-1]&&d2!=0)
|
||||||
|
break;
|
||||||
|
if(d1==7)
|
||||||
|
{
|
||||||
|
d1=0;
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
if(x<8)
|
||||||
|
{
|
||||||
|
d2=m[y];
|
||||||
|
for(int z=1;z<=d2;z++)
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for(l=z;l<=c[y];l++) //l为偶数月日期
|
||||||
|
{
|
||||||
|
printf("%4d",l);
|
||||||
|
d2++;
|
||||||
|
if(x==c[y-1]&&l<c[y]&&d2==7)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
for(int v=z+7;v<=c[y];v++)
|
||||||
|
printf(" %4d",v);
|
||||||
|
printf("\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(d2==7)
|
||||||
|
{
|
||||||
|
z=l+1;
|
||||||
|
d2=0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
for(int z=1;z<=m[y+1];z++)
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
printf("本程序为万年历\n若你想知道这一年是否为闰年或者一天为周几,请输入1\n");
|
||||||
|
printf("若你想要输出一个年份的日历,请输入2\n");
|
||||||
|
scanf("%d",&i);
|
||||||
|
if(i==1)
|
||||||
|
{
|
||||||
|
int a,b,c;
|
||||||
|
printf("请输入年份:\n");
|
||||||
|
scanf("%d",&a);
|
||||||
|
printf("请输入月份:\n");
|
||||||
|
scanf("%d",&b);
|
||||||
|
printf("请输入日期:\n");
|
||||||
|
scanf("%d",&c);
|
||||||
|
panduan(a,b,c);
|
||||||
|
}
|
||||||
|
else if(i==2)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
printf("请选择是单列输出还是双列输出\n单列请输入1 双列请输入2\n");
|
||||||
|
scanf("%d",&c);
|
||||||
|
if(c==1)
|
||||||
|
{
|
||||||
|
int a;
|
||||||
|
printf("请输入年份:\n");
|
||||||
|
scanf("%d",&a);
|
||||||
|
danhang(a);
|
||||||
|
}
|
||||||
|
else if(c==2)
|
||||||
|
{
|
||||||
|
int a;
|
||||||
|
printf("请输入年份:\n");
|
||||||
|
scanf("%d",&a);
|
||||||
|
shuanghang(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
202
stu2024/数技2402张馨予.cpp
Normal file
202
stu2024/数技2402张馨予.cpp
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <process.h>
|
||||||
|
|
||||||
|
int yearstartday(int Year);
|
||||||
|
bool isLeapYear(int Year);
|
||||||
|
int monthDays(int Year, int Month);
|
||||||
|
int getWeekDay(int Year, int Month, int Day);
|
||||||
|
void outMonthDays(int Year, int Month);
|
||||||
|
void outMonthDays1582(int Year, int Month);
|
||||||
|
void menu();
|
||||||
|
void MenuChoice(int Choice);
|
||||||
|
void printYearCalendar(int Year);
|
||||||
|
|
||||||
|
const char* weekDays[] = {"日", "一", "二", "三", "四", "五", "六"};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
menu();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int yearstartday(int Year) {
|
||||||
|
int detayear, corday, weekstartday, detaday;
|
||||||
|
detayear = Year - 2000;
|
||||||
|
if (detayear > 0) {
|
||||||
|
corday = 2;
|
||||||
|
detayear -= 1;
|
||||||
|
} else {
|
||||||
|
corday = 0;
|
||||||
|
if (detayear <= -418) {
|
||||||
|
corday = -3;
|
||||||
|
if (detayear <= -2000) {
|
||||||
|
corday = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
detaday = (detayear / 400) * 2 - detayear / 100 + detayear / 4 + detayear + corday;
|
||||||
|
weekstartday = (6 + detaday % 7) % 7;
|
||||||
|
return weekstartday;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isLeapYear(int Year) {
|
||||||
|
return (Year % 4 == 0 && Year % 100 != 0) || (Year % 400 == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int monthDays(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 {
|
||||||
|
return isLeapYear(Year) ? 29 : 28;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int getWeekDay(int Year, int Month, int Day) {
|
||||||
|
int i, temp, weekday, Days = 0;
|
||||||
|
for (i = 1; i <= Month - 1; i++) {
|
||||||
|
Days += monthDays(Year, i);
|
||||||
|
}
|
||||||
|
Days = Days + Day - 1;
|
||||||
|
temp = yearstartday(Year) + Days;
|
||||||
|
weekday = temp % 7;
|
||||||
|
if (Year == 1582 && Month > 10) {
|
||||||
|
weekday -= 3;
|
||||||
|
}
|
||||||
|
return weekday;
|
||||||
|
}
|
||||||
|
|
||||||
|
void outMonthDays(int Year, int Month) {
|
||||||
|
int i, j, weekday;
|
||||||
|
printf(" %d月日历\n", Month);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
weekday = getWeekDay(Year, Month, 1);
|
||||||
|
for (i = 0; i < weekday; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for (j = 1; j <= monthDays(Year, Month); j++) {
|
||||||
|
printf("%4d", j);
|
||||||
|
if ((j + weekday) % 7 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
printf("-------------------------------------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void outMonthDays1582(int Year, int Month) {
|
||||||
|
int i, j, weekday;
|
||||||
|
printf(" %d月日历\n", Month);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
weekday = getWeekDay(Year, Month, 1);
|
||||||
|
for (i = 0; i < weekday; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for (j = 1; j <= monthDays(Year, Month); j++) {
|
||||||
|
if (Month == 10) {
|
||||||
|
if (j > 4 && j < 15) {
|
||||||
|
} else {
|
||||||
|
printf("%4d", j);
|
||||||
|
if (j == 16 || j == 23 || j == 30) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
printf("%4d", j);
|
||||||
|
if ((j + weekday) % 7 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
printf("-------------------------------------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void printYearCalendar(int Year) {
|
||||||
|
printf("Calendar for %d\n\n", Year);
|
||||||
|
for (int month = 1; month <= 12; month += 2) {
|
||||||
|
outMonthDays(Year, month);
|
||||||
|
printf("\n");
|
||||||
|
if (month + 1 <= 12) {
|
||||||
|
outMonthDays(Year, month + 1);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu() {
|
||||||
|
int choice;
|
||||||
|
while (1) {
|
||||||
|
printf("万年历\n1. 输入年月日输出星期几\n");
|
||||||
|
printf("2. 判断闰平年\n");
|
||||||
|
printf("3. 单列输出某年日历\n");
|
||||||
|
printf("4. 双列输出某年日历\n");
|
||||||
|
printf("5. 退出\n");
|
||||||
|
printf("请输入选择:");
|
||||||
|
scanf("%d", &choice);
|
||||||
|
MenuChoice(choice);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuChoice(int Choice) {
|
||||||
|
int Year, Month, Day;
|
||||||
|
switch (Choice) {
|
||||||
|
case 1:
|
||||||
|
printf("请输入年 月 日:");
|
||||||
|
scanf("%d %d %d", &Year, &Month, &Day);
|
||||||
|
if (Year == 1582 && Month == 10 && Day > 4 && Day < 15) {
|
||||||
|
printf("1582年10月5日至10月14日不存在\n");
|
||||||
|
} else {
|
||||||
|
int weekday = getWeekDay(Year, Month, Day);
|
||||||
|
printf("%d年%d月%d日是星期%s\n", Year, Month, Day, weekDays[weekday]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d", &Year);
|
||||||
|
if (isLeapYear(Year)) {
|
||||||
|
printf("%d年是闰年\n", Year);
|
||||||
|
} else {
|
||||||
|
printf("%d年是平年\n", Year);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d", &Year);
|
||||||
|
if (Year == 0) {
|
||||||
|
printf("输入错误,没有公元零年\n");
|
||||||
|
} else {
|
||||||
|
if (Year > 0) {
|
||||||
|
printf(" 公元%d年日历为:\n", Year);
|
||||||
|
} else {
|
||||||
|
printf(" 公元前%d年日历为:\n", -Year);
|
||||||
|
}
|
||||||
|
printf("=====================================\n");
|
||||||
|
if (Year != 1582) {
|
||||||
|
for (Month = 1; Month <= 12; Month++) {
|
||||||
|
outMonthDays(Year, Month);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (Month = 1; Month <= 12; Month++) {
|
||||||
|
outMonthDays1582(Year, Month);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d", &Year);
|
||||||
|
if (Year == 0) {
|
||||||
|
printf("输入错误,没有公元零年\n");
|
||||||
|
} else {
|
||||||
|
printYearCalendar(Year);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("退出程序\n");
|
||||||
|
exit(0);
|
||||||
|
default:
|
||||||
|
printf("无效的选择\n");
|
||||||
|
}
|
||||||
|
}
|
349
stu2024/数技2402樊璐瑶.cpp
Normal file
349
stu2024/数技2402樊璐瑶.cpp
Normal file
@ -0,0 +1,349 @@
|
|||||||
|
#include "stdio.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
|
||||||
|
//判断闰年
|
||||||
|
int isLeapYear(int year)
|
||||||
|
{
|
||||||
|
if(year%400==0||(year%100!=0&&year%4==0))
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算某年某月的天数
|
||||||
|
int daysInMonth(int year, int month)
|
||||||
|
{
|
||||||
|
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if (month == 2 && isLeapYear(year))
|
||||||
|
{
|
||||||
|
return 29;
|
||||||
|
}
|
||||||
|
return days[month - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算公元1年1月1日到给定日期的总天数
|
||||||
|
int totalDays(int year, int month, int day)
|
||||||
|
{
|
||||||
|
int total = 0;
|
||||||
|
for (int i = 1; i < year; i++)
|
||||||
|
{
|
||||||
|
if ((i % 4 == 0 && i % 100!= 0) || i % 400 == 0)
|
||||||
|
{
|
||||||
|
total += 366;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
total += 365;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 1; i < month; i++)
|
||||||
|
{
|
||||||
|
if (year == 1582 && i == 10)
|
||||||
|
{
|
||||||
|
// 如果是1582年且计算到10月,减去10天
|
||||||
|
if (day >= 15)
|
||||||
|
{
|
||||||
|
day -= 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
total += daysInMonth(year, i);
|
||||||
|
}
|
||||||
|
total += day;
|
||||||
|
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断输入是否为合法的数字
|
||||||
|
int isNumber(char *input)
|
||||||
|
{
|
||||||
|
for (int i = 0; input[i]!= '\0'; i++)
|
||||||
|
{
|
||||||
|
if (input[i] < '0' || input[i] > '9')
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断日期是否合法
|
||||||
|
int isValidDate(int year, int month, int day)
|
||||||
|
{
|
||||||
|
if (year <= 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (month < 1 || month > 12)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (day < 1 || day > daysInMonth(year, month))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//1852
|
||||||
|
int a(int year,int month,int day)
|
||||||
|
{
|
||||||
|
if(year==1582)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(month==10)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(day>4&&day<15)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出一个月的日历
|
||||||
|
void printMonth(int year, int month)
|
||||||
|
{
|
||||||
|
printf(" %d年%d月\n", year, month);
|
||||||
|
printf("日 一 二 三 四 五 六\n");
|
||||||
|
int startDay = (totalDays(year, month, 1) % 7);
|
||||||
|
for (int i = 0; i < startDay; i++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
int days = daysInMonth(year, month);
|
||||||
|
for (int i = 1; i <= days; i++)
|
||||||
|
{
|
||||||
|
printf("%2d ", i);
|
||||||
|
if ((totalDays(year, month, i) % 7) == 6)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((totalDays(year, month, days) % 7)!= 6)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取指定日期是周几
|
||||||
|
int isWeek(int totalDay) {
|
||||||
|
return (totalDay % 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算某月某天的日期
|
||||||
|
int Count_Day(int day[]) {
|
||||||
|
return (day[0] * 1000 + day[1] * 100 + day[2] * 10 + day[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 双列输出日历的核心函数
|
||||||
|
void printDoubleColumnCalendar(int year) {
|
||||||
|
// 对2个月分为6个块进行打印
|
||||||
|
for (int block = 0; block < 6; ++block) {
|
||||||
|
// 打印表头
|
||||||
|
printf("%2d月 %2d月 \n", block + 1, block + 7);
|
||||||
|
printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
|
||||||
|
|
||||||
|
|
||||||
|
int lineEnd_l = 1, lineEnd_r = 1;
|
||||||
|
int day_l[] = {year, block + 1, 1};
|
||||||
|
int day_r[] = {year, block + 7, 1};
|
||||||
|
int totalDay_l = Count_Day(day_l);
|
||||||
|
int totalDay_r = Count_Day(day_r);
|
||||||
|
|
||||||
|
// 每个月有5行需要输出
|
||||||
|
for (int line = 0; line < 5; ++line) {
|
||||||
|
// flag作标记位,每行有16个输出数字的位置,第9位和16位始终置0,其余位置不为0则输出数字
|
||||||
|
int flag[16] = {0};
|
||||||
|
// 标记第一行和其它行,用lineEnd_L和R作为整体的日期统计
|
||||||
|
if (line == 0) {
|
||||||
|
int monthFirstday_l = isWeek(totalDay_l) + 1;
|
||||||
|
int monthFirstday_r = isWeek(totalDay_r) + 1;
|
||||||
|
for (int stringStation = monthFirstday_l; stringStation < 8; ++stringStation) {
|
||||||
|
flag[stringStation] = lineEnd_l++;
|
||||||
|
}
|
||||||
|
for (int stringStation = monthFirstday_l + 8; stringStation < 16; ++stringStation) {
|
||||||
|
flag[stringStation] = lineEnd_r++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int stringStation = 1; stringStation < 8; ++stringStation) {
|
||||||
|
flag[stringStation] = lineEnd_l++;
|
||||||
|
if (lineEnd_l > (daysInMonth(year, block + 1))) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int stringStation = 9; stringStation < 16; ++stringStation) {
|
||||||
|
flag[stringStation] = lineEnd_r++;
|
||||||
|
if (lineEnd_r > (daysInMonth(year, block + 7) + 1)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出每行的日期
|
||||||
|
for (int i = 1; i < 16; ++i) {
|
||||||
|
if (i == 9) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
if (flag[i] == 0) {
|
||||||
|
printf(" ");
|
||||||
|
} else {
|
||||||
|
if (flag[i] < 10) {
|
||||||
|
printf(" %d", flag[i]);
|
||||||
|
} else {
|
||||||
|
printf(" %d", flag[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 菜单选项1:判断闰年和星期几
|
||||||
|
void option1(void)
|
||||||
|
{
|
||||||
|
char yearStr[10], monthStr[10], dayStr[10];
|
||||||
|
int year, month, day;
|
||||||
|
|
||||||
|
// 输入年份并验证
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%s", yearStr);
|
||||||
|
if (!isNumber(yearStr))
|
||||||
|
{
|
||||||
|
printf("输入错误,请输入数字!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
year = atoi(yearStr);
|
||||||
|
|
||||||
|
// 输入月份并验证
|
||||||
|
printf("请输入月份:");
|
||||||
|
scanf("%s", monthStr);
|
||||||
|
if (!isNumber(monthStr))
|
||||||
|
{
|
||||||
|
printf("请输入数字!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
month = atoi(monthStr);
|
||||||
|
|
||||||
|
// 输入日期并验证
|
||||||
|
printf("请输入日期:");
|
||||||
|
scanf("%s", dayStr);
|
||||||
|
if (!isNumber(dayStr))
|
||||||
|
{
|
||||||
|
printf("输入错误,请输入数字!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
day = atoi(dayStr);
|
||||||
|
|
||||||
|
// 验证日期整体合法性
|
||||||
|
if (!isValidDate(year, month, day))
|
||||||
|
{
|
||||||
|
printf("日期不合法!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!a(year,month,day))
|
||||||
|
{
|
||||||
|
printf("不存在此日期。\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断闰年并输出
|
||||||
|
if (isLeapYear(year))
|
||||||
|
{
|
||||||
|
printf("%d年是闰年。\n", year);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%d年不是闰年。\n", year);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算并输出星期几
|
||||||
|
int total = totalDays(year, month, day);
|
||||||
|
char *weekdays[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
|
||||||
|
printf("%d年%d月%d日是%s\n", year, month, day, weekdays[total % 7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 菜单选项2:输出一年的日历(实现较好的双列输出)
|
||||||
|
void option2(void)
|
||||||
|
{
|
||||||
|
char choiceStr[10];
|
||||||
|
int choice;
|
||||||
|
|
||||||
|
// 选择输出方式并验证
|
||||||
|
printf("请选择输出方式(1: 单列输出,2: 双列输出): ");
|
||||||
|
scanf("%s", choiceStr);
|
||||||
|
if (!isNumber(choiceStr))
|
||||||
|
{
|
||||||
|
printf("输入错误,请输入数字!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
choice = atoi(choiceStr);
|
||||||
|
if (choice!= 1 && choice!= 2)
|
||||||
|
{
|
||||||
|
printf("选择错误!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char yearStr[10];
|
||||||
|
int year;
|
||||||
|
|
||||||
|
// 输入年份并验证
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%s", yearStr);
|
||||||
|
if (!isNumber(yearStr))
|
||||||
|
{
|
||||||
|
printf("输入错误,请输入数字!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
year = atoi(yearStr);
|
||||||
|
if (year <= 0)
|
||||||
|
{
|
||||||
|
printf("年份不合法!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//单列输出
|
||||||
|
if (choice == 1)
|
||||||
|
{
|
||||||
|
for (int month = 1; month <= 12; month++)
|
||||||
|
{
|
||||||
|
printMonth(year, month);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printDoubleColumnCalendar(year);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int choice;
|
||||||
|
while(choice<=2)
|
||||||
|
{
|
||||||
|
// 显示菜单并获取用户选择
|
||||||
|
printf("1. 判断闰年和星期几\n");
|
||||||
|
printf("2. 输出一年的日历\n");
|
||||||
|
printf("请选择:");
|
||||||
|
scanf("%d", &choice);
|
||||||
|
|
||||||
|
switch (choice)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
option1();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
option2();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("退出程序\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
460
stu2024/数技2402赵思雨(1).cpp
Normal file
460
stu2024/数技2402赵思雨(1).cpp
Normal file
@ -0,0 +1,460 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
|
void rili(int year,int pri){//1.按月份输出
|
||||||
|
int a,b,con=0;
|
||||||
|
int c=0;
|
||||||
|
int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+1)%7;//判断某一年第一天
|
||||||
|
if(year<=1582){
|
||||||
|
a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+11)%7;
|
||||||
|
}
|
||||||
|
if((year%4==0&&year%100!=0)||year%400==0) //闰年
|
||||||
|
arr[2]=29;
|
||||||
|
if(pri==1){ //单列输出
|
||||||
|
for(int i=1;i<13;i++){
|
||||||
|
printf("=======================%2d月=======================\n",i);
|
||||||
|
printf("日\t一\t二\t三\t四\t五\t六\n");
|
||||||
|
if(year==1582&&i==11)
|
||||||
|
a=1;
|
||||||
|
if(year==1582&&i==112)
|
||||||
|
a=3;
|
||||||
|
if(a!=0){
|
||||||
|
for(int x=1;x<=a;x++)
|
||||||
|
{
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
|
for(int j=1;j<=arr[i];j++)
|
||||||
|
{
|
||||||
|
if(year==1582&&i==10&&(j>4&&j<15)){ //特殊年
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
con+=1;
|
||||||
|
printf("%d\t",j);
|
||||||
|
if((con+a)%7==0||j==arr[i])
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
a=(arr[i]+a)%7;
|
||||||
|
con=0;
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
} //单列结束
|
||||||
|
|
||||||
|
else if(pri==2){ //双列
|
||||||
|
con=0;
|
||||||
|
int q,m;
|
||||||
|
for(int i=1;i<13;i+=2){
|
||||||
|
printf("=======================%2d月=======================\t",i);
|
||||||
|
printf("=======================%2d月=======================\n",i+1);
|
||||||
|
printf("日\t一\t二\t三\t四\t五\t六\t日\t一\t二\t三\t四\t五\t六\n");
|
||||||
|
b=(arr[i]+a)%7;
|
||||||
|
q=7-b+1;
|
||||||
|
m=7-a+1;
|
||||||
|
if(year==1582&&i==11){
|
||||||
|
a=1;b=3;m=7;q=5;
|
||||||
|
}
|
||||||
|
if(a!=0){
|
||||||
|
for(int x=1;x<=a;x++)
|
||||||
|
{
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int x=1;x<=7-a;x++)
|
||||||
|
{
|
||||||
|
printf("%d\t",x);
|
||||||
|
}
|
||||||
|
if(year==1582&&i+1==10){
|
||||||
|
printf("\t1\t2\t3\t4\t15\t16\t");
|
||||||
|
q=17;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(b!=0)
|
||||||
|
{
|
||||||
|
for(int x=1;x<=b;x++)
|
||||||
|
{
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int y=1;y<=7-b;y++)
|
||||||
|
{
|
||||||
|
printf("%d\t",y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
/////////////////////////////////////第一行
|
||||||
|
for(int j=m;j<=arr[i];j++)
|
||||||
|
{
|
||||||
|
|
||||||
|
printf("%d\t",j);
|
||||||
|
|
||||||
|
if(j==arr[i]&&(j+a)%7!=0){
|
||||||
|
for(int g=0;g<=7-b-1;g++){
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if((j+a)%7==0||j==arr[i]){
|
||||||
|
|
||||||
|
for(int y=q;y<=arr[i+1];y++){
|
||||||
|
printf("%d\t",y);
|
||||||
|
if(year==1582&&(i+1)==10){
|
||||||
|
if(y==23||y==30||y==31){
|
||||||
|
q=y+1;
|
||||||
|
printf("\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(((y+b)%7==0||y==arr[i+1])&&j!=arr[i]){
|
||||||
|
q=y+1;
|
||||||
|
printf("\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if(j==arr[i]&&(y+b)%7==0&&y!=arr[i+1]){
|
||||||
|
q=y+1;
|
||||||
|
printf("\n\t\t\t\t\t\t\t");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(year==1582&&i==9&&j==29)
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
a=(arr[i+1]+b)%7;
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
void xingqi(int year,int mon,int day){ //查询星期
|
||||||
|
int a,b,con=0;
|
||||||
|
int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+1)%7;//判断某一年第一天
|
||||||
|
if(year<=1582){
|
||||||
|
a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+11)%7;
|
||||||
|
}
|
||||||
|
if((year%4==0&&year%100!=0)||year%400==0) //闰年
|
||||||
|
arr[2]=29;
|
||||||
|
if(year==1582){
|
||||||
|
arr[10]=21;
|
||||||
|
}
|
||||||
|
for(int i=1;i<mon;i++){
|
||||||
|
|
||||||
|
a=(a+arr[i])%7;
|
||||||
|
}
|
||||||
|
if(year==1582&&mon==10&&day>=15){
|
||||||
|
b=(day-10)%7;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
b=(a+day-1)%7;
|
||||||
|
switch(b){
|
||||||
|
case 1:printf("这一天是星期一\n");break;
|
||||||
|
case 2:printf("这一天是星期二\n");break;
|
||||||
|
case 3:printf("这一天是星期三\n");break;
|
||||||
|
case 4:printf("这一天是星期四\n");break;
|
||||||
|
case 5:printf("这一天是星期五\n");break;
|
||||||
|
case 6:printf("这一天是星期六\n");break;
|
||||||
|
case 0:printf("这一天是星期日\n");break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void run(int year){ //判断闰年
|
||||||
|
if((year%4==0&&year%100!=0)||year%400==0)
|
||||||
|
printf("%d是闰年\n",year);
|
||||||
|
else
|
||||||
|
printf("%d不是闰年\n",year);
|
||||||
|
}
|
||||||
|
bool nian(int year){
|
||||||
|
if(year>0&&year<10000)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool yue(int mon){
|
||||||
|
if(mon>0&&mon<13)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool ri(int year,int mon,int day){
|
||||||
|
int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if((year%4==0&&year%100!=0)||year%400==0) //闰年
|
||||||
|
arr[2]=29;
|
||||||
|
if(year==1582&&mon==10&&day>4&&day<15)
|
||||||
|
return false;
|
||||||
|
if(day>0&&day<=arr[mon])
|
||||||
|
return true;
|
||||||
|
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
int main(){
|
||||||
|
qwe:printf("1.查询对应年份的日历\n2.查询对应日期的星期\n3.查询对应年份是否为闰年\n4.退出\n(如果需要返回请按0)\n");
|
||||||
|
printf("请选择想要执行的项目:\n");
|
||||||
|
char num[100001]; //选择项目内容
|
||||||
|
int year=0,pri=0,mon=0,day=0,a,b,c;//年份 输出方式 月
|
||||||
|
char y[100001],p[100001],m[100001],d[100001];
|
||||||
|
while(gets(num)){
|
||||||
|
year=0;pri=0;mon=0;day=0;
|
||||||
|
if(strlen(num)!=1){
|
||||||
|
printf("输入错误!请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(num[0]=='1'){
|
||||||
|
asd: printf("请输入想要查询的年份:\n");
|
||||||
|
edc: while(gets(y)){
|
||||||
|
year=0;
|
||||||
|
if(y[0]=='0'&&strlen(y)==1){
|
||||||
|
goto qwe;
|
||||||
|
}
|
||||||
|
if(strlen(y)<=4){
|
||||||
|
for(int i=0;i<strlen(y);i++){
|
||||||
|
if(y[i]>='0'&&y[i]<='9'){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("输入有误!请重新输入:\n");
|
||||||
|
goto edc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printf("输入有误!请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
a=strlen(y)-1;
|
||||||
|
c=strlen(y);
|
||||||
|
while(a>=0){
|
||||||
|
|
||||||
|
b=((int)y[a]-48)*pow(10,c-a-1);
|
||||||
|
year+=b;
|
||||||
|
a-=1;
|
||||||
|
}
|
||||||
|
while(!nian(year)){
|
||||||
|
printf("您输入的年份有误请重新输入:\n");
|
||||||
|
goto edc;
|
||||||
|
}
|
||||||
|
printf("请选择日历的表现形式:\n1.单列输出\n2.双列输出\n");
|
||||||
|
bnm: while(gets(p)){
|
||||||
|
|
||||||
|
if(p[0]=='0'&&strlen(p)==1){
|
||||||
|
goto asd;
|
||||||
|
}
|
||||||
|
if(strlen(p)>1||(strlen(p)==1&&(p[0]>'2'||p[0]<'1'))){
|
||||||
|
printf("输入错误!请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pri=(int)p[0]-48;
|
||||||
|
while(pri!=1&&pri!=2){
|
||||||
|
printf("请输入1或2\n");
|
||||||
|
goto bnm;
|
||||||
|
}
|
||||||
|
|
||||||
|
rili(year,pri);
|
||||||
|
//执行1 输出日历
|
||||||
|
}
|
||||||
|
else if(num[0]=='2'){
|
||||||
|
rty: printf("请输入想要查询的具体日期\n");
|
||||||
|
printf("年:");
|
||||||
|
wsx: while(gets(y)){
|
||||||
|
year=0;
|
||||||
|
if(y[0]=='0'&&strlen(y)==1){
|
||||||
|
goto qwe;
|
||||||
|
}
|
||||||
|
if(strlen(y)<=4){
|
||||||
|
for(int i=0;i<strlen(y);i++){
|
||||||
|
if(y[i]>='0'&&y[i]<='9'){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("输入有误!请重新输入:\n");
|
||||||
|
goto wsx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printf("输入有误!请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
a=strlen(y)-1;
|
||||||
|
c=strlen(y);
|
||||||
|
while(a>=0){
|
||||||
|
|
||||||
|
b=((int)y[a]-48)*pow(10,c-a-1);
|
||||||
|
year+=b;
|
||||||
|
a-=1;
|
||||||
|
}
|
||||||
|
while(!nian(year)){
|
||||||
|
printf("您输入的年份有误请重新输入:\n");
|
||||||
|
goto wsx;
|
||||||
|
}
|
||||||
|
|
||||||
|
uio: printf("月:");
|
||||||
|
qaz: while(gets(m)){
|
||||||
|
mon=0;
|
||||||
|
if(m[0]=='0'&&strlen(m)==1){
|
||||||
|
goto rty;
|
||||||
|
}
|
||||||
|
if(strlen(m)>2||(strlen(m)<=2&&((m[0]>'9'||m[0]<'0')||((m[1]>'9'||m[1]<'0')&&m[1]!='\0')))){
|
||||||
|
printf("输入错误!请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
a=strlen(m)-1;
|
||||||
|
c=strlen(m);
|
||||||
|
while(a>=0){
|
||||||
|
|
||||||
|
b=((int)m[a]-48)*pow(10,c-a-1);
|
||||||
|
mon+=b;
|
||||||
|
a-=1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!yue(mon)){
|
||||||
|
printf("您输入的月份有误请重新输入:\n");
|
||||||
|
goto qaz;
|
||||||
|
}
|
||||||
|
printf("日:");
|
||||||
|
rfv: while(gets(d)){
|
||||||
|
day=0;
|
||||||
|
if(d[0]=='0'&&strlen(d)==1){
|
||||||
|
goto uio;
|
||||||
|
}
|
||||||
|
if(strlen(d)>2||(strlen(d)<=2&&((d[0]>'9'||d[0]<'0')||((d[1]>'9'||d[1]<'0')&&d[1]!='\0')))){
|
||||||
|
printf("输入错误!请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
a=strlen(d)-1;
|
||||||
|
c=strlen(d);
|
||||||
|
while(a>=0){
|
||||||
|
|
||||||
|
b=((int)d[a]-48)*pow(10,c-a-1);
|
||||||
|
day+=b;
|
||||||
|
a-=1;
|
||||||
|
}
|
||||||
|
while(!ri(year,mon,day)){
|
||||||
|
printf("您输入的日期有误请重新输入:\n");
|
||||||
|
goto rfv;
|
||||||
|
}
|
||||||
|
xingqi(year,mon,day);
|
||||||
|
}
|
||||||
|
else if(num[0]=='3'){ //3程序
|
||||||
|
printf("请输入想要查询的年份:\n");
|
||||||
|
tgb: while(gets(y)){
|
||||||
|
year=0;
|
||||||
|
if(y[0]=='0'&&strlen(y)==1){
|
||||||
|
goto qwe;
|
||||||
|
}
|
||||||
|
if(strlen(y)<=4){
|
||||||
|
for(int i=0;i<strlen(y);i++){
|
||||||
|
if(y[i]>='0'&&y[i]<='9'){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("输入有误!请重新输入:\n");
|
||||||
|
goto tgb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printf("输入有误!请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
} //判空字符
|
||||||
|
a=strlen(y)-1;
|
||||||
|
c=strlen(y);
|
||||||
|
while(a>=0){
|
||||||
|
|
||||||
|
b=((int)y[a]-48)*pow(10,c-a-1);
|
||||||
|
year+=b;
|
||||||
|
a-=1;
|
||||||
|
}
|
||||||
|
while(!nian(year)){
|
||||||
|
printf("您输入的年份有误请重新输入:\n");
|
||||||
|
goto tgb;
|
||||||
|
} //判错误年份
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
run(year);
|
||||||
|
}
|
||||||
|
else if(num[0]=='4')break;
|
||||||
|
|
||||||
|
else{ //判错误序号
|
||||||
|
printf("输入错误!请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
printf("想要在使用一次赵思雨的无敌旋风霹雳程序吗\n1.好的\n2.婉拒\n");//继续程序
|
||||||
|
char ok[100001];
|
||||||
|
|
||||||
|
int f=ok[100001]-48;
|
||||||
|
|
||||||
|
okf: while(gets(ok)){
|
||||||
|
|
||||||
|
if(strlen(ok)>1||(strlen(ok)==1&&(ok[0]>'2'||ok[0]<'1'))){
|
||||||
|
printf("输入错误!请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
f=(int)ok[0]-48;
|
||||||
|
while(f!=1&&f!=2){
|
||||||
|
printf("请输入1或2\n");
|
||||||
|
goto okf;
|
||||||
|
}
|
||||||
|
if(f==2)break;
|
||||||
|
else if(f==1){
|
||||||
|
system("cls");
|
||||||
|
goto qwe;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
236
stu2024/数科2401易诗雅.c
Normal file
236
stu2024/数科2401易诗雅.c
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int isLeapYear(int year)
|
||||||
|
{
|
||||||
|
return (year % 4 == 0 && year % 100!= 0) || (year % 400 == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int getDaysInMonth(int year, int month)
|
||||||
|
{
|
||||||
|
int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if (month == 1 && isLeapYear(year))
|
||||||
|
{
|
||||||
|
return 29;
|
||||||
|
}
|
||||||
|
return daysInMonth[month];
|
||||||
|
}
|
||||||
|
|
||||||
|
void printCalendarHeader()
|
||||||
|
{
|
||||||
|
printf(" Sun Mon Tue Wed Thu Fri Sat\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void printMonth(int year, int month)
|
||||||
|
{
|
||||||
|
int z;
|
||||||
|
int days = getDaysInMonth(year, month);
|
||||||
|
int firstDayOfMonth = (year * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7;
|
||||||
|
int i,day;
|
||||||
|
for (i = 0; i < month; i++)
|
||||||
|
{
|
||||||
|
firstDayOfMonth += getDaysInMonth(year, i);
|
||||||
|
}
|
||||||
|
firstDayOfMonth %= 7;
|
||||||
|
printCalendarHeader();
|
||||||
|
for (i = 0; i < firstDayOfMonth; i++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for (day = 1; day <= days; day++)
|
||||||
|
{
|
||||||
|
printf("%5d", day);
|
||||||
|
if ((firstDayOfMonth + day) % 7 == 0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int choice;
|
||||||
|
printf("1. 查询对应年份日历\n");
|
||||||
|
printf("2. 查询对应日期星期\n");
|
||||||
|
printf("3. 判断所输入年份是否为闰年\n");
|
||||||
|
printf("4. 退出\n");
|
||||||
|
scanf("%d", &choice);
|
||||||
|
int year,month,week,day,day_x,day_z=0,c=0;
|
||||||
|
int i,j,k,l,m,n,b;
|
||||||
|
char a;
|
||||||
|
start:
|
||||||
|
switch (choice)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d", &year);
|
||||||
|
int month;
|
||||||
|
int z;
|
||||||
|
printf("1.单列输出\n2.双列输出\n");
|
||||||
|
scanf("%d",&z);
|
||||||
|
for (month = 0; month < 12; month++)
|
||||||
|
{
|
||||||
|
printf("\n %d月\n", month + 1);
|
||||||
|
printMonth(year, month);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("请输入该查询的年份:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
printf("请输入该查询的月份:\n");
|
||||||
|
scanf("%d",&month);
|
||||||
|
printf("请输入该查询的日期: \n");
|
||||||
|
scanf("%d",&day);
|
||||||
|
if(year<1 || year>9999)
|
||||||
|
{
|
||||||
|
printf("输入年份错误,请重新输入:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
}
|
||||||
|
if(month<1 || month>12)
|
||||||
|
{
|
||||||
|
printf("输入月份错误,请重新输入:");
|
||||||
|
scanf("%d",&month);
|
||||||
|
}
|
||||||
|
if(day<1 || day>31)
|
||||||
|
{
|
||||||
|
printf("输入日期错误,请重新输入:");
|
||||||
|
scanf("%d",&day);
|
||||||
|
}
|
||||||
|
if(month<3)
|
||||||
|
{
|
||||||
|
year--;
|
||||||
|
month+=12;
|
||||||
|
}
|
||||||
|
if(year==1582 && month==10)
|
||||||
|
{
|
||||||
|
day_x=21;
|
||||||
|
if(day>=15)
|
||||||
|
{
|
||||||
|
k=year%100;j=year/100;l=day;m=month;
|
||||||
|
n=(l+(26*(m+1)/10)+k+(k/4)+(j/4)+5*j)%7;
|
||||||
|
switch(n)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
printf("星期六");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
printf("星期日");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("星期一");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("星期二");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("星期三");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("星期四");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("星期五");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
l=day+10;
|
||||||
|
k=year%100;j=year/100;m=month;
|
||||||
|
n=(l+(26*(m+1)/10)+k+(k/4)+(j/4)+5*j)%7;
|
||||||
|
switch(n)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
printf("星期六");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
printf("星期日");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("星期一");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("星期二");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("星期三");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("星期四");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("星期五");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
k=year%100;j=year/100;l=day;m=month;
|
||||||
|
n=(l+(26*(m+1)/10)+k+(k/4)+(j/4)+5*j)%7;
|
||||||
|
switch(n)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
printf("星期六");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
printf("星期日");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("星期一");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("星期二");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("星期三");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("星期四");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("星期五");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("请输入年份:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year%4==0 && year%100!=0 || year%400==0)
|
||||||
|
{
|
||||||
|
printf("%d是闰年\n",year);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%d不是闰年\n",year);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
a=choice;
|
||||||
|
if(a==4)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("无效的选择,请重新输入(1~4):\n");
|
||||||
|
scanf("%d",&choice);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if(choice>4 || choice==0)
|
||||||
|
{
|
||||||
|
printf("无效选择,请重新输入:");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while(choice<=4 && choice!=0);
|
||||||
|
goto start;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
150
stu2024/数科2401谢诗涵.c
Normal file
150
stu2024/数科2401谢诗涵.c
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int choice;
|
||||||
|
int j,k,l,m,n;
|
||||||
|
printf("菜单选项:\n");
|
||||||
|
printf("1.查询对应年份的日历\n");
|
||||||
|
printf("2.查询对应日期的星期\n");
|
||||||
|
printf("3.查询对应年份是否为闰年\n");
|
||||||
|
printf("4.退出\n");
|
||||||
|
printf("请输入你的选择(1-4):");
|
||||||
|
scanf("%d", &choice);
|
||||||
|
start:
|
||||||
|
switch (choice) {
|
||||||
|
case 1:
|
||||||
|
|
||||||
|
printf("请输入需要查询的年份\n");
|
||||||
|
|
||||||
|
int year;
|
||||||
|
scanf("%d", &year);
|
||||||
|
int month,day;
|
||||||
|
int i,k;
|
||||||
|
|
||||||
|
|
||||||
|
// 单列输出日历
|
||||||
|
printf("单列日历输出如下:\n");
|
||||||
|
for (month = 1; month <= 12; month++) {
|
||||||
|
// 每个月的天数数组,先按非闰年设置,后续根据是否闰年调整2月天数
|
||||||
|
int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if ((year % 4 == 0 && year % 100!= 0) || year % 400 == 0) {
|
||||||
|
daysInMonth[1] = 29;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算该月1号是星期几,蔡氏公式简化版思路
|
||||||
|
int y = year % 100;
|
||||||
|
int c = year / 100;
|
||||||
|
if (month < 3) {
|
||||||
|
y -= 1;
|
||||||
|
c -= 1;
|
||||||
|
}
|
||||||
|
int firstDay = (1 + (13 * (month + 1) / 5) + y + (y / 4) + (c / 4) - 2 * c) % 7;
|
||||||
|
firstDay = firstDay < 0? firstDay + 7 : firstDay;
|
||||||
|
|
||||||
|
// 输出月份标题
|
||||||
|
printf(" %d年%d月\n", year, month);
|
||||||
|
printf("日 一 二 三 四 五 六\n");
|
||||||
|
|
||||||
|
// 输出该月1号前的空格
|
||||||
|
for (i = 0; i < firstDay; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出该月每天的日期
|
||||||
|
int numDays = daysInMonth[month - 1];
|
||||||
|
for (day = 1; day <= numDays; day++) {
|
||||||
|
printf("%2d ", day);
|
||||||
|
if ((firstDay + day) % 7 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果该月最后一行不满7个,补充换行
|
||||||
|
if ((firstDay + numDays) % 7!= 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
|
||||||
|
printf("请输入需要查询的日期\n");
|
||||||
|
{
|
||||||
|
|
||||||
|
printf("请输入该查询的年份:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
printf("请输入该查询的月份:\n");
|
||||||
|
scanf("%d",&month);
|
||||||
|
printf("请输入该查询的日期: \n");
|
||||||
|
scanf("%d",&day);
|
||||||
|
if(month<3)
|
||||||
|
{
|
||||||
|
year--;
|
||||||
|
month+=12;
|
||||||
|
}
|
||||||
|
k=year%100;j=year/100;l=day;m=month;
|
||||||
|
n=(l+(26*(m+1)/10)+k+(k/4)+(j/4)+5*j)%7;
|
||||||
|
switch(n)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
printf("星期六");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
printf("星期日");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("星期一");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("星期二");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("星期三");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("星期四");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("星期五");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
printf("请输入需要查询的年份\n");
|
||||||
|
{
|
||||||
|
|
||||||
|
int year;
|
||||||
|
printf("请输入一个年份:");
|
||||||
|
scanf("%d", &year);
|
||||||
|
if ((year % 4 == 0 && year % 100!= 0) || year % 400 == 0) {
|
||||||
|
printf("%d年是闰年\n", year);
|
||||||
|
} else {
|
||||||
|
printf("%d年不是闰年\n", year);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("正在退出程序...\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
|
||||||
|
printf("无效的选择,请重新输入(1~4)\n");
|
||||||
|
scanf("%d",&choice);
|
||||||
|
if(choice<=4)
|
||||||
|
{
|
||||||
|
goto start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
150
stu2024/网络2401郑世凯_02.cpp
Normal file
150
stu2024/网络2401郑世凯_02.cpp
Normal file
File diff suppressed because one or more lines are too long
231
stu2024/网络2401鹿逸翔.cpp
Normal file
231
stu2024/网络2401鹿逸翔.cpp
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
#include<bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
// 判断是否为闰年
|
||||||
|
bool run_nian(int year) {
|
||||||
|
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算某年某月的天数
|
||||||
|
int TIANSHU(int year, int month) {
|
||||||
|
static int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||||
|
if (month == 2 && run_nian(year))
|
||||||
|
return 29;
|
||||||
|
|
||||||
|
return days[month];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算指定日期是星期几(蔡勒公式)
|
||||||
|
int WEEK(int year, int month, int day) {
|
||||||
|
int week;
|
||||||
|
if (month < 3) {
|
||||||
|
month += 12;
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
int c = year / 100;
|
||||||
|
int y = year % 100;
|
||||||
|
if ((year < 1582) || (year == 1582 && month <= 10 && day <= 4))
|
||||||
|
week = (day + 1 + 2 * month + 3 * (month + 1) / 5 + year + year / 4 + 5) % 7;
|
||||||
|
else if ((year > 1582) || (year == 1582 && month >= 10 && day >= 10))
|
||||||
|
week = (c / 4 - 2 * c + y + y / 4 + 13 * (month + 1) / 5 + day - 1) % 7;
|
||||||
|
else
|
||||||
|
week = 8;
|
||||||
|
if (week < 0)
|
||||||
|
week += 7;
|
||||||
|
return week;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印单月日历
|
||||||
|
void danlie(int year, int month) {
|
||||||
|
if (year != 1582) {
|
||||||
|
cout << " " << year << "年" << month << "月\n";
|
||||||
|
cout << " 一 二 三 四 五 六 日\n";
|
||||||
|
|
||||||
|
int weekday = WEEK(year, month, 1);
|
||||||
|
for (int i = 0; i < weekday % 7; i++)
|
||||||
|
cout << " ";
|
||||||
|
|
||||||
|
int days = TIANSHU(year, month);
|
||||||
|
for (int i = 1; i <= days; ++i) {
|
||||||
|
cout << setw(3) << i;
|
||||||
|
if ((weekday + i) % 7 == 0)
|
||||||
|
cout << "\n";
|
||||||
|
}
|
||||||
|
cout << "\n";
|
||||||
|
} else {
|
||||||
|
if (month != 10) {
|
||||||
|
cout << " " << year << "年" << month << "月\n";
|
||||||
|
cout << " 一 二 三 四 五 六 日\n";
|
||||||
|
|
||||||
|
int weekday = WEEK(year, month, 1);
|
||||||
|
for (int i = 0; i < weekday % 7; i++)
|
||||||
|
cout << " ";
|
||||||
|
|
||||||
|
int days = TIANSHU(year, month);
|
||||||
|
for (int i = 1; i <= days; ++i) {
|
||||||
|
cout << setw(3) << i;
|
||||||
|
if ((weekday + i) % 7 == 0)
|
||||||
|
cout << "\n";
|
||||||
|
}
|
||||||
|
cout << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
cout << " " << year << "年" << month << "月\n";
|
||||||
|
cout << " 一 二 三 四 五 六 日\n";
|
||||||
|
|
||||||
|
int weekday = WEEK(year, month, 1);
|
||||||
|
for (int i = 0; i < weekday % 7; i++)
|
||||||
|
cout << " ";
|
||||||
|
|
||||||
|
int days = TIANSHU(year, month);
|
||||||
|
for (int i = 1; i <= days; ++i) {
|
||||||
|
if (i <= 4 || i > 14)
|
||||||
|
cout << setw(3) << i;
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
if (i == 16 || i == 23 || i == 30)
|
||||||
|
cout << "\n";
|
||||||
|
}
|
||||||
|
cout << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 打印双月日历(并排显示两个月)
|
||||||
|
void shuang_yueli(int year, int month) {
|
||||||
|
int days1 = TIANSHU(year, month);
|
||||||
|
int days2 = TIANSHU(year, month + 1);
|
||||||
|
|
||||||
|
cout << " " << year << "年" << month << "月 - " << year << "年" << month + 1 << "月\n";
|
||||||
|
cout << " 一 二 三 四 五 六 日 一 二 三 四 五 六 日\n";
|
||||||
|
|
||||||
|
int weekday1 = WEEK(year, month, 1);
|
||||||
|
int weekday2 = WEEK(year, month + 1, 1);
|
||||||
|
int i, j, ij1, ij2;
|
||||||
|
for (int m = 0; m < weekday1; ++m)
|
||||||
|
cout << " ";
|
||||||
|
for (i = 1; i < days1; i++) {
|
||||||
|
for (j = 1; j < days2; j++) {
|
||||||
|
for (ij1 = 1; ij1 <= (weekday1 + i) % 7; ij1++) {
|
||||||
|
cout << setw(3) << i;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
for (int m = 0; m < weekday2; ++m)
|
||||||
|
cout << " ";
|
||||||
|
for (ij2 = 1; ij2 <= (weekday2 + j) % 7; ij2++) {
|
||||||
|
cout << setw(3)<< j;
|
||||||
|
j++;
|
||||||
|
if((weekday2+j)%7==0)
|
||||||
|
{
|
||||||
|
cout<<"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示菜单并获取用户选择
|
||||||
|
int menu() {
|
||||||
|
int choice;
|
||||||
|
cout << "万年历程序菜单:\n";
|
||||||
|
cout << "1. 查询某年某月某日是周几及该年是否为闰年\n";
|
||||||
|
cout << "2. 输出指定年份的单月日历\n";
|
||||||
|
cout << "3. 输出指定年份的双月日历\n";
|
||||||
|
cout << "4. 退出程序\n";
|
||||||
|
cout << "请输入你的选择:";
|
||||||
|
while (scanf("%d", &choice) != 1) {
|
||||||
|
while (getchar() != '\n') ;
|
||||||
|
printf("无效的选择,请重新输入\n");
|
||||||
|
}
|
||||||
|
return choice;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取有效年份输入
|
||||||
|
int wannianli() {
|
||||||
|
int year;
|
||||||
|
cout << "请输入年份(公元后):";
|
||||||
|
while (scanf("%d", &year) != 1) {
|
||||||
|
while (getchar() != '\n') ;
|
||||||
|
printf("无效的选择,请重新输入\n");
|
||||||
|
}
|
||||||
|
return year;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取有效月份输入
|
||||||
|
int month_1() {
|
||||||
|
int month;
|
||||||
|
cout << "请输入月份(1 - 12):";
|
||||||
|
while (scanf("%d", &month) != 1) {
|
||||||
|
while (getchar() != '\n') ;
|
||||||
|
printf("无效的选择,请重新输入\n");
|
||||||
|
}
|
||||||
|
if (month > 12 || month < 1) {
|
||||||
|
printf("无效的选择,请重新输入\n");
|
||||||
|
}
|
||||||
|
return month;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取有效日期输入
|
||||||
|
int DAY(int year, int month) {
|
||||||
|
int date;
|
||||||
|
cout << "请输入日期(1 - " << TIANSHU(year, month) << "):";
|
||||||
|
while (scanf("%d", &date) != 1) {
|
||||||
|
while (getchar() != '\n') ;
|
||||||
|
printf("无效的选择,请重新输入\n");
|
||||||
|
}
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int choice;
|
||||||
|
do {
|
||||||
|
choice = menu();
|
||||||
|
|
||||||
|
switch (choice) {
|
||||||
|
case 1: {
|
||||||
|
int year = wannianli();
|
||||||
|
int month = month_1();
|
||||||
|
int date = DAY(year, month);
|
||||||
|
|
||||||
|
bool leap = run_nian(year);
|
||||||
|
int weekday = WEEK(year, month, date);
|
||||||
|
if (weekday == 0)
|
||||||
|
cout << year << "年" << month << "月" << date << "日是星期天。\n";
|
||||||
|
if (weekday == 8)
|
||||||
|
cout << year << "年" << month << "月" << date << "日不存在。\n";
|
||||||
|
if (weekday < 8 && weekday > 0)
|
||||||
|
cout << year << "年" << month << "月" << date << "日是星期" << weekday << "。\n";
|
||||||
|
cout << year << (leap ? "是闰年。\n" : "不是闰年。\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2: {
|
||||||
|
int year = wannianli();
|
||||||
|
for (int month = 1; month <= 12; ++month) {
|
||||||
|
danlie(year, month);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3: {
|
||||||
|
int year = wannianli();
|
||||||
|
for (int month = 1; month < 12; month += 2) {
|
||||||
|
shuang_yueli(year, month);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
cout << "程序已退出。\n";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cout << "无效的选择,请重新输入。\n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (choice != 4);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
219
stu2024/网络2402崔依晨.cpp
Normal file
219
stu2024/网络2402崔依晨.cpp
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// 判断是否为闰年
|
||||||
|
int runjudge(int year) {
|
||||||
|
if (year < 1582) {
|
||||||
|
// 儒略历的闰年规则
|
||||||
|
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
|
||||||
|
} else {
|
||||||
|
// 公历的闰年规则
|
||||||
|
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取某个月的天数
|
||||||
|
int getnumberdaysinmonth(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)
|
||||||
|
return runjudge(year) ? 29 : 28;
|
||||||
|
else if (year == 1582 && month == 10)
|
||||||
|
return 21; // 1582年10月4日后改为15日,中间10天被删除,所以返回21天
|
||||||
|
else
|
||||||
|
return 0; // 错误的月份
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算某日是星期几
|
||||||
|
// 假设日期(如公元1年1月1日)是星期日,
|
||||||
|
int getstartday(int year, int month, int day) {
|
||||||
|
int sum = 0;
|
||||||
|
// 目标年份前一年的总天数
|
||||||
|
for (int y = 1; y < year; y++) {
|
||||||
|
sum += runjudge(y) ? 366 : 365;
|
||||||
|
}
|
||||||
|
// 年份是1582年,1582年10月少了10天
|
||||||
|
if (year == 1582) {
|
||||||
|
for (int m = 1; m < 10; m++) {
|
||||||
|
sum += getnumberdaysinmonth(1582, m);//调用函数
|
||||||
|
}
|
||||||
|
sum += 4; // 1582年10月只计算到14日
|
||||||
|
} else {
|
||||||
|
// 计算到目标月份前一个月的总天数
|
||||||
|
for (int m = 1; m < month; m++) {
|
||||||
|
sum += getnumberdaysinmonth(year, m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 加上目标月的天数
|
||||||
|
|
||||||
|
|
||||||
|
//计算星期几
|
||||||
|
int wd = sum % 7;
|
||||||
|
|
||||||
|
return (wd+7)%7; //
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印星期的表头
|
||||||
|
void printbegin() {
|
||||||
|
printf(" Sun Mon Tue Wed Thu Fri Sat \n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印某个月的天数
|
||||||
|
void printmonthday(int year, int month) {
|
||||||
|
int firstday = getstartday(year, month, 1); // 获取该月第一天是星期几
|
||||||
|
int monthday = getnumberdaysinmonth(year, month); // 获取该月天数
|
||||||
|
|
||||||
|
// 打印空格
|
||||||
|
for (int i = 0; i < firstday; i++) {
|
||||||
|
printf(" "); // 每个空格代表一个星期的单元格
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印每一天
|
||||||
|
for (int n = 1; n <= monthday; n++) {
|
||||||
|
printf("%4d", n); //
|
||||||
|
if ((firstday + n) % 7 == 0) { // 如果到达周末,换行
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n"); // 月末换行
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印某个月的日历
|
||||||
|
void printcalendar(int year, int month) {
|
||||||
|
printbegin();
|
||||||
|
printmonthday(year, month);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印某年的所有月份的日历
|
||||||
|
void printyearcalendar(int year) {
|
||||||
|
for (int i = 1; i <= 12; ++i) {
|
||||||
|
printf("%d月:\n", i);
|
||||||
|
printcalendar(year, i);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_calendar(int firstday1, int monthday1, int firstday2, int monthday2,int m,int y) {
|
||||||
|
// 打印标题
|
||||||
|
printf("%d年 %d月: %d年 %d月:\n",y,m,y,m+1);
|
||||||
|
printf("Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat\n");
|
||||||
|
// 最长行的最大行数
|
||||||
|
int max_rows = (monthday1 + firstday1 + 6) / 7; // 计算1月的最大行数,极端情况下假设第一天是周六,
|
||||||
|
if ((monthday2 + firstday2 + 6) / 7 > max_rows) {
|
||||||
|
max_rows = (monthday2 + firstday2 + 6) / 7; // 计算2月的最大行数第一天为星期几+这一天有多少天去最大行数
|
||||||
|
}
|
||||||
|
for (int row = 0; row < max_rows; row++) {
|
||||||
|
// 打印1月
|
||||||
|
for (int i = 0; i < 7; i++) {//最内层,i为每一列,zuobiaosuoyin
|
||||||
|
if (row * 7 + i < firstday1) {
|
||||||
|
printf(" "); // 打印空格
|
||||||
|
} else if (row * 7 + i - firstday1 < monthday1) {//索引,下棋
|
||||||
|
printf("%-3d ", row * 7 + i - firstday1 + 1);//三个字节,当前位置在有效范围,打印
|
||||||
|
} else {
|
||||||
|
printf(" "); // 超过该月天数,打印空格
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 打印间隔
|
||||||
|
printf(" ");
|
||||||
|
// 打印2月
|
||||||
|
for (int i = 0; i < 7; i++) {
|
||||||
|
if (row * 7 + i < firstday2) {
|
||||||
|
printf(" "); // 打印空格
|
||||||
|
} else if (row * 7 + i - firstday2 < monthday2) {
|
||||||
|
printf("%-3d ", row * 7 + i - firstday2 + 1);
|
||||||
|
} else {
|
||||||
|
printf(" "); // 超过该月天数,打印空格
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n"); // 换行
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印某年所有月份的日历(双列输出)
|
||||||
|
void printdoubleyearcalendar(int year,int month,int day)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
for (int month = 1; month <= 12; month += 2) //两层嵌套循环,最外层遍历每一行,调用上一个函数进行内层循环
|
||||||
|
{
|
||||||
|
|
||||||
|
int firstday1= getstartday(year, month, 1);
|
||||||
|
|
||||||
|
// 获取第一个月的第一天
|
||||||
|
int monthday1 = getnumberdaysinmonth(year, month); // 获取第一个月的天数
|
||||||
|
int firstday2 = getstartday(year, month + 1, 1); // 获取第二个月的第一天
|
||||||
|
int monthday2 = getnumberdaysinmonth(year, month + 1); // 获取第二个月的天数
|
||||||
|
print_calendar(firstday1, monthday1, firstday2, monthday2,month,year);//进行连接
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int choice,year,month,day;
|
||||||
|
int wwd=getstartday(year,month,day);
|
||||||
|
do{
|
||||||
|
printf("\n======菜单======\n");
|
||||||
|
printf("1.请输入一个日期,得到是周几\n");
|
||||||
|
printf("2.请输入一个年份,得到那年的日历\n");
|
||||||
|
printf(" 2.1 单列输出\n");
|
||||||
|
printf(" 2.2 双列输出\n");
|
||||||
|
|
||||||
|
printf("3.请输入一个年份,判断那年是否为闰年\n");
|
||||||
|
printf("4.退出\n");
|
||||||
|
printf("请选择一个选项:");
|
||||||
|
scanf("%d",&choice);
|
||||||
|
switch(choice)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("请输入您要查找的 年 月 日:");
|
||||||
|
scanf("%d %d %d",&year,&month,&day);
|
||||||
|
getstartday(year,month,day);
|
||||||
|
|
||||||
|
printf("您所查找的日期为%d\n",wwd);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("请选择输出方式:\n");
|
||||||
|
printf("1. 单列输出\n");
|
||||||
|
printf("2. 双列输出\n");
|
||||||
|
|
||||||
|
int outputChoice;
|
||||||
|
scanf("%d", &outputChoice);
|
||||||
|
printf("请输入您要查找的年份: ");
|
||||||
|
scanf("%d", &year);
|
||||||
|
if (outputChoice == 1) {
|
||||||
|
printyearcalendar(year); // 打印单列日历
|
||||||
|
} else if (outputChoice == 2) {
|
||||||
|
printdoubleyearcalendar(year,month,day); // 打印双列日历
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ printf("无效的输出方式\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("请输入您要查找的年份:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
runjudge(year);
|
||||||
|
if(runjudge(year)==1)
|
||||||
|
printf("这是一个闰年\n");
|
||||||
|
else
|
||||||
|
printf("这不是一个闰年\n");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("退出程序\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("无效的选项,请重新输入\n");
|
||||||
|
}
|
||||||
|
}while(choice!=4);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
51
stu2024/网络2402朱治雨.c
Normal file
51
stu2024/网络2402朱治雨.c
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
int y,m,d,w,b,FOE=0;
|
||||||
|
char a[2]={'\0'};
|
||||||
|
while(FOE==0){
|
||||||
|
printf("万年历程序菜单:\n1 输出指定年份的日历\n2 查询指定日期的星期\n3 查询指定年份是否为闰年\n4 退出\n:");//菜单
|
||||||
|
while(gets(a)){
|
||||||
|
if(a[0]=='4'&&a[1]=='\0'){ FOE=1; break; }//退出;
|
||||||
|
else if(a[0]=='1'&&a[1]=='\0'){
|
||||||
|
printf("想要查询的年份:"); scanf("%d",&y);
|
||||||
|
printf("日历的表现形式:\n1 单列输出\n2 双列输出\n"); scanf("%d",&b);
|
||||||
|
if(b==1) printf("111");
|
||||||
|
else if(b==2) printf("222");
|
||||||
|
getchar();
|
||||||
|
}//单双列;
|
||||||
|
else if(a[0]=='2'&&a[1]=='\0'){
|
||||||
|
printf("想查询的具体日期\n年:"); scanf("%d",&y);
|
||||||
|
printf("月:"); scanf("%d",&m);
|
||||||
|
printf("日:"); scanf("%d",&d);
|
||||||
|
if(m==1||m==2) y--,m+=12;
|
||||||
|
if(y<=1582&&m<=10&&d<=4){
|
||||||
|
if(m==1||m==2) y--,m+=12;
|
||||||
|
w=(d+2*m+3*(m+1)/5+y+y/4+5)%7+1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(m==1||m==2) y--,m+=12;
|
||||||
|
w=(d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
|
||||||
|
}
|
||||||
|
if(w==0) w=7;
|
||||||
|
printf("该日期是星期%d.\n按下Enter以继续",w);
|
||||||
|
getchar();
|
||||||
|
}//星期几;
|
||||||
|
else if(a[0]=='3'&&a[1]=='\0'){
|
||||||
|
printf("想查询的年份:"); scanf("%d",&y);
|
||||||
|
if((y%4==0&&y%100!=0)||y%400==0) printf("%d 是闰年.",y);
|
||||||
|
else printf("%d 不是闰年.按下Enter以继续\n",y);
|
||||||
|
getchar();
|
||||||
|
}//闰年查询;
|
||||||
|
|
||||||
|
if(a[0]!='1'&&a[0]!='2'&&a[0]!='3'&&a[0]!='4'&&a[0]!='\0'){ printf("输入错误!请重新输入:\n");a[0]='\0';a[1]='\0';continue;}
|
||||||
|
else if((a[0]=='1'||a[0]=='2'||a[0]=='3'||a[0]=='4')&&a[1]!='\0'){ printf("输入错误!请重新输入:\n");a[0]='\0';a[1]='\0';continue;}
|
||||||
|
FOE=0;
|
||||||
|
if(a[0]!='\0') getchar();
|
||||||
|
system("cls");
|
||||||
|
a[0]='\0';a[1]='\0';
|
||||||
|
break;
|
||||||
|
//防报错(部分);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
192
stu2024/虚拟2401刘军保(1).c
Normal file
192
stu2024/虚拟2401刘军保(1).c
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
//判断读入的n值-------------------------------------------------------------------------------------------------------
|
||||||
|
int durun() {
|
||||||
|
int i;
|
||||||
|
char x;
|
||||||
|
printf("1.查询某年某月是星期几是否为闰年\n2.打印单列日历\n3.打印双列日历\n4.退出程序\n");
|
||||||
|
scanf(" %c",&x);
|
||||||
|
if(x=='1')
|
||||||
|
x=1;
|
||||||
|
else if(x=='2')
|
||||||
|
x=2;
|
||||||
|
else if(x=='3')
|
||||||
|
x=3;
|
||||||
|
else if(x=='4')
|
||||||
|
x=4;
|
||||||
|
else x=5;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
//判断年份-------------------------------------------------------------------------------------------------------------
|
||||||
|
int runian(int x1) {
|
||||||
|
int m=28;
|
||||||
|
if(x1%4==0&&x1%100!=0||x1%400==0)
|
||||||
|
m=29;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
int riqi(int x1) {
|
||||||
|
int w,i;
|
||||||
|
if(x1>2000)
|
||||||
|
w=((x1-1)*365+((x1-1)/4)-((x1-1)/100)+((x1-1)/400)+1)%7;
|
||||||
|
else w=(x1/100)/4-2*(x1/100)+x1%100+(x1%100)/4+(13*12/5);
|
||||||
|
w=w%7;
|
||||||
|
if(w==0)
|
||||||
|
w=7;
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
//主体-----------------------------------------------------------------------------------------------------------------
|
||||||
|
int main() {
|
||||||
|
for(;;) {
|
||||||
|
qaz:;
|
||||||
|
int m[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
int n,year,ri;
|
||||||
|
n=durun();
|
||||||
|
if(n==5) {
|
||||||
|
system("cls");
|
||||||
|
printf("输入错误请从新输入\n\n");
|
||||||
|
goto qaz;
|
||||||
|
}
|
||||||
|
if(n==4)
|
||||||
|
break;
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
if(n==1) {
|
||||||
|
system("cls");
|
||||||
|
zaq:;
|
||||||
|
int xiqi,i;
|
||||||
|
printf("请依次输入年 月 日\n返回上一级请输入-1\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year==-1) {
|
||||||
|
system("cls");
|
||||||
|
goto qaz;
|
||||||
|
}
|
||||||
|
scanf("%d%d",&m[0],&ri);
|
||||||
|
m[2]=runian(year);
|
||||||
|
if(year<=9999&&year>0&&m[0]>=1&&m[0]<=12&&ri>0&&ri<=m[m[0]]) {
|
||||||
|
xiqi=riqi(year);
|
||||||
|
if(year==1582) {
|
||||||
|
if(m[0]==10&&ri>4&&ri<15) {
|
||||||
|
printf("输入错误\n\n");
|
||||||
|
goto zaq;
|
||||||
|
}
|
||||||
|
if(m[0]>10)
|
||||||
|
m[10]-=10;
|
||||||
|
if(ri>=15&&m[0]==10)
|
||||||
|
xiqi=xiqi-10;
|
||||||
|
}
|
||||||
|
for(i=1; i<m[0]; i++)
|
||||||
|
xiqi+=m[i];
|
||||||
|
xiqi+=ri;
|
||||||
|
xiqi=(xiqi-1)%7;
|
||||||
|
if(xiqi==0)
|
||||||
|
xiqi=7;
|
||||||
|
printf("%d年%d月%d日是星期%d",year,m[0],ri,xiqi);
|
||||||
|
if(m[2]==29)
|
||||||
|
printf("是闰年\n\n");
|
||||||
|
else printf("不是闰年\n\n");
|
||||||
|
} else printf("输入错误\n\n");
|
||||||
|
}
|
||||||
|
//--------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
if(n==2) {
|
||||||
|
system("cls");
|
||||||
|
int i,j,w,year;
|
||||||
|
printf("请输入年份\n返回上一级请输入-1\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year==-1) {
|
||||||
|
system("cls");
|
||||||
|
goto qaz;
|
||||||
|
}
|
||||||
|
m[2]=runian(year);
|
||||||
|
w=riqi(year);
|
||||||
|
if(year<=9999&&year>0) {
|
||||||
|
printf("======================%.4d======================\n\n\n",year);
|
||||||
|
for(i=1; i<=12; i++) {
|
||||||
|
printf("=======================%.2d=======================\n",i);
|
||||||
|
printf("星期一 星期二 星期三 星期四 星期五 星期六 星期日\n");
|
||||||
|
for(j=1; j<w; j++)
|
||||||
|
printf(" ");
|
||||||
|
for(j=1; j<=m[i]; j++) {
|
||||||
|
if(year==1582&&i==10) {
|
||||||
|
if(j==5)
|
||||||
|
j=15;
|
||||||
|
}
|
||||||
|
printf(" %.2d ",j);
|
||||||
|
w++;
|
||||||
|
if(w>7) {
|
||||||
|
printf("\n");
|
||||||
|
w=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
} else printf("输入错误\n\n");
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
if(n==3) {
|
||||||
|
system("cls");
|
||||||
|
int i,j1,w,w2,year;
|
||||||
|
int x1,x2,x3,x4,x5;
|
||||||
|
printf("请输入年份\n返回上一级请输入-1\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year==-1) {
|
||||||
|
system("cls");
|
||||||
|
goto qaz;
|
||||||
|
}
|
||||||
|
m[2]=runian(year);
|
||||||
|
w=riqi(year);
|
||||||
|
if(year<=9999&&year>0) {
|
||||||
|
printf("===============================================%.4d===============================================\n\n\n",year);
|
||||||
|
for(i=1; i<=12; i=i+2) {
|
||||||
|
x1=1,x3=1,x4=1;
|
||||||
|
printf(" \n");
|
||||||
|
printf("=======================%.2d======================= ",i);
|
||||||
|
printf("=======================%.2d=======================\n",i+1);
|
||||||
|
printf("星期一 星期二 星期三 星期四 星期五 星期六 星期日 ");
|
||||||
|
printf(" 星期一 星期二 星期三 星期四 星期五 星期六 星期日\n");
|
||||||
|
w2=(w+m[i])%7;
|
||||||
|
if(w2==0)
|
||||||
|
w2=7;
|
||||||
|
for(j1=1; j1<w; j1++)
|
||||||
|
printf(" ");
|
||||||
|
for(j1=1; j1<=38; j1++) {
|
||||||
|
if(j1<=m[i])
|
||||||
|
printf(" %.2d ",j1);
|
||||||
|
else if(x4==m[i+1])
|
||||||
|
break;
|
||||||
|
else printf(" ");
|
||||||
|
w++;
|
||||||
|
if(w>7) {
|
||||||
|
if(x1==1) {
|
||||||
|
for(x2=1; x2<w2; x2++)
|
||||||
|
printf(" ");
|
||||||
|
x1=0;
|
||||||
|
x5=w2;
|
||||||
|
}
|
||||||
|
for(x3; x3<=m[i+1]; x3++) {
|
||||||
|
if(x4<=m[i+1]) {
|
||||||
|
if(year==1582&&i==9&&x4==5) {
|
||||||
|
x4=15;
|
||||||
|
}
|
||||||
|
printf(" %.2d ",x4);
|
||||||
|
x4++;
|
||||||
|
}
|
||||||
|
x5++;
|
||||||
|
if(x5>7) {
|
||||||
|
x5=1;
|
||||||
|
printf("\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
w=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(year==1582&&i==9)
|
||||||
|
m[10]=21;
|
||||||
|
w=(w2+m[i+1])%7;
|
||||||
|
if(w==0)
|
||||||
|
w=7;
|
||||||
|
}
|
||||||
|
} else printf("输入错误\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
123
stu2024/虚拟2401张博文.c
Normal file
123
stu2024/虚拟2401张博文.c
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
// 判断是否为闰年
|
||||||
|
int isLeapYear(int year) {
|
||||||
|
return (year % 4 == 0 && year % 100!= 0) || (year % 400 == 0);
|
||||||
|
}
|
||||||
|
// 计算某月有多少天
|
||||||
|
int daysInMonth(int year, int month) {
|
||||||
|
int days[] = {31, 28 + isLeapYear(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
return days[month - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算1900年1月1日到给定日期的总天数
|
||||||
|
int totalDays(int year, int month, int day) {
|
||||||
|
int total = 0;
|
||||||
|
int y;
|
||||||
|
for (y = 1900; y < year; y++) {
|
||||||
|
total += 365 + isLeapYear(y);
|
||||||
|
}
|
||||||
|
int m;
|
||||||
|
for (m = 0; m < month; m++) {
|
||||||
|
total += daysInMonth(year, m);
|
||||||
|
}
|
||||||
|
total += day;
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印日历
|
||||||
|
void printCalendar(int year, int singleColumn) {
|
||||||
|
int startDay = (totalDays(year, 1, 1) + 1) % 7;
|
||||||
|
printf("Calendar - %d\n", year);
|
||||||
|
if (singleColumn) {
|
||||||
|
int month;
|
||||||
|
for ( month = 1; month <= 12; month++) {
|
||||||
|
int days = daysInMonth(year, month);
|
||||||
|
printf("\n\t%d月\n", month);
|
||||||
|
printf("\tMon\tTue\tWed\tThu\tFri\tSat\tSun\n");
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < startDay; i++)
|
||||||
|
printf("\t");
|
||||||
|
int day;
|
||||||
|
for (day = 1; day <= days; day++) {
|
||||||
|
printf("\t%d", day);
|
||||||
|
if ((startDay + day) % 7 == 0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
if ((startDay + days) % 7!= 0)
|
||||||
|
printf("\n");
|
||||||
|
startDay = (startDay + days) % 7;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
printf("\tMon\tTue\tWed\tThu\tFri\tSat\tSun\t\tMon\tTue\tWed\tThu\tFri\tSat\tSun\n");
|
||||||
|
int month;
|
||||||
|
for (month = 1; month <= 12; month++) {
|
||||||
|
int days = daysInMonth(year, month);
|
||||||
|
int currentStartDay = (totalDays(year, month, 1) + 1) % 7;
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < currentStartDay; i++)
|
||||||
|
printf("\t");
|
||||||
|
int day;
|
||||||
|
for (day = 1; day <= days; day++) {
|
||||||
|
printf("\t%d", day);
|
||||||
|
if ((currentStartDay + day) % 7 == 0)
|
||||||
|
printf("\t\t");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询某日期是周几
|
||||||
|
void queryDay() {
|
||||||
|
int year, month, day;
|
||||||
|
printf("请输入日期(年 月 日):");
|
||||||
|
scanf("%d %d %d", &year, &month, &day);
|
||||||
|
int total = totalDays(year, month, day);
|
||||||
|
int weekDay = (total - 1) % 7;
|
||||||
|
char *weekDays[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat","Sun"};
|
||||||
|
printf("%d年%d月%d日是 %s\n", year, month, day, weekDays[weekDay]);
|
||||||
|
printf("该年是 %s年\n", isLeapYear(year)? "闰" : "平");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 菜单
|
||||||
|
void menu() {
|
||||||
|
int choice;
|
||||||
|
int year;
|
||||||
|
int singleColumn = 1;
|
||||||
|
while (1) {
|
||||||
|
printf("\n1. 查询某日期是周几并判断是否为闰年\n");
|
||||||
|
printf("2. 打印某一年的日历(单列)\n");
|
||||||
|
printf("3. 打印某一年的日历(双列)\n");
|
||||||
|
printf("4. 退出\n");
|
||||||
|
printf("请选择操作:");
|
||||||
|
scanf("%d", &choice);
|
||||||
|
switch (choice) {
|
||||||
|
case 1:
|
||||||
|
queryDay();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d", &year);
|
||||||
|
printCalendar(year, singleColumn);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
singleColumn = 0;
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d", &year);
|
||||||
|
printCalendar(year, singleColumn);
|
||||||
|
singleColumn = 1;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
exit(0);
|
||||||
|
default:
|
||||||
|
printf("无效的选择,请重新选择\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
menu();
|
||||||
|
return 0;
|
||||||
|
}
|
164
stu2024/虚拟2401彭子杰.c
Normal file
164
stu2024/虚拟2401彭子杰.c
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
|
||||||
|
int isAvailable(int year);
|
||||||
|
void getDay(int year,int first_day[]);
|
||||||
|
int weak(int year);
|
||||||
|
void drawCalendar(int days[],int first_day[]);
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
int year=0;
|
||||||
|
int days[12]={31,28.31,30,31,30,31,30,31,30,31,30};
|
||||||
|
int first_day[12]={0};
|
||||||
|
int i,t;
|
||||||
|
|
||||||
|
for(t=1;t==1;){
|
||||||
|
int n;
|
||||||
|
printf("=============兴趣使然=============\n");
|
||||||
|
printf("1.查询某年日历(单列输出)\n");
|
||||||
|
printf("2,查询某年是什么年\n");
|
||||||
|
printf("3.查询某年某月是星期几\n");
|
||||||
|
printf("4.退出系统\n\n");
|
||||||
|
|
||||||
|
|
||||||
|
printf("请输入选项下:");
|
||||||
|
scanf("%d",&n);
|
||||||
|
while(1){
|
||||||
|
|
||||||
|
if(n==1){
|
||||||
|
printf("请输入要查询的年份:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
|
||||||
|
if(!isAvailable(year)){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
getDay(year,first_day);
|
||||||
|
|
||||||
|
if((year%4==0 && year%100!=0) || year%400==0){
|
||||||
|
days[1]=29;
|
||||||
|
}
|
||||||
|
|
||||||
|
drawCalendar(days,first_day);
|
||||||
|
putchar('\n');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(n==2){
|
||||||
|
printf("请输入要查询的年份:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
|
||||||
|
if(!isAvailable(year)){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((year%4==0 && year%100!=0) || year%400==0){
|
||||||
|
printf("%d是闰年\n",year);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printf("%d是平年\n",year);
|
||||||
|
}
|
||||||
|
putchar('\n');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if(n==4){
|
||||||
|
t=0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printf("请输入要查询的年份:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(!isAvailable(year)){
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
int weak1=0;
|
||||||
|
weak1=weak(year);
|
||||||
|
printf("星期%d",weak1);
|
||||||
|
putchar('\n');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int isAvailable(int year){
|
||||||
|
if(year>0){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
void getDay(int year,int first_day[]){
|
||||||
|
int m=0;
|
||||||
|
int d=1;
|
||||||
|
int w=0;
|
||||||
|
int y=year;
|
||||||
|
for(m=3;m<=12;m++){
|
||||||
|
w=(d + 1 + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400) % 7;
|
||||||
|
first_day[m]=w;
|
||||||
|
}
|
||||||
|
y-=1;
|
||||||
|
for(m=13;m<=14;m++){
|
||||||
|
w=(d + 1 + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400) % 7;
|
||||||
|
first_day[m-13]=w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawCalendar(int days[],int first_day[]){
|
||||||
|
int space=0;
|
||||||
|
int i=0,d=0,j=0;
|
||||||
|
for(i=0;i<12;i++){
|
||||||
|
space=first_day[i];
|
||||||
|
|
||||||
|
printf(" %2d月日历\n",i+1);
|
||||||
|
printf("|-----------------------------|\n");
|
||||||
|
printf("| 日 一 二 三 四 五 六 |\n");
|
||||||
|
printf("|-----------------------------|\n|");
|
||||||
|
|
||||||
|
for(j=0;j<space;j++){
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
days[0]=31,days[2]=30,days[11]=30;
|
||||||
|
for(d=1;d<=days[i];d++){
|
||||||
|
printf(" %2d",d);
|
||||||
|
if((d+space)%7==0){
|
||||||
|
printf("|\n|");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
space=7-(d-1+space)%7;
|
||||||
|
for(j=0;j<space;j++){
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
printf("|\n|----------------------------|\n|");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int weak(int year){
|
||||||
|
int d=0,k,j;
|
||||||
|
k=year%100;
|
||||||
|
j=year/100;
|
||||||
|
int m=0;
|
||||||
|
int w=0;
|
||||||
|
int y=year;
|
||||||
|
printf("请输入要查阅的月份及其日期:");
|
||||||
|
scanf("%d%d",&m,&d);
|
||||||
|
|
||||||
|
if(m<3){
|
||||||
|
switch(m){
|
||||||
|
case 1:m=13;break;
|
||||||
|
case 2:m=14;break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
w=(d + 13 * (m + 1) / 5 + k + k / 4 + j / 4 + 5 * j)% 7;
|
||||||
|
switch(w){
|
||||||
|
case 0:w=6;break;
|
||||||
|
case 1:w=7;break;
|
||||||
|
case 2:w=1;break;
|
||||||
|
case 3:w=2;break;
|
||||||
|
case 4:w=3;break;
|
||||||
|
case 5:w=4;break;
|
||||||
|
case 6:w=5;break;
|
||||||
|
}
|
||||||
|
return w;
|
||||||
|
}
|
160
stu2024/虚拟2401房靖皓.cpp
Normal file
160
stu2024/虚拟2401房靖皓.cpp
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
int main(){
|
||||||
|
int n;
|
||||||
|
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
for(;;){
|
||||||
|
printf("1.查询星期\n2.打印日历\n输入需要的序号\n");
|
||||||
|
scanf("%d",&n);
|
||||||
|
if(n==1)
|
||||||
|
{
|
||||||
|
int year,a=0,b,i,j;
|
||||||
|
printf("输入年份 月份 日期\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
m[2]=29;
|
||||||
|
scanf("%d",&m[0]);
|
||||||
|
scanf("%d",&b);
|
||||||
|
if(year==1582&&m[0]==10&&b>4&&b<15)
|
||||||
|
printf("输入错误\n");
|
||||||
|
else if(year<0||m[0]<0||m[0]>12||b<0||b>31){
|
||||||
|
printf("输入错误\n");
|
||||||
|
}else if(m[2]==28&&b>28||m[2]==29&&b>29)
|
||||||
|
printf("输入错误\n");
|
||||||
|
else if((m[0]==1||m[0]==3||m[0]==5||m[0]==7||m[0]==8||m[0]==10||m[0]==12)&&b==31)
|
||||||
|
printf("输入错误\n");
|
||||||
|
else {
|
||||||
|
j=b;
|
||||||
|
if(year==1582){
|
||||||
|
m[10]-=10;
|
||||||
|
if(b>=15)
|
||||||
|
b-=10;
|
||||||
|
}
|
||||||
|
if(year>=2000)
|
||||||
|
a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+1)%7;
|
||||||
|
else a=(year/100)/4-2*(year/100)+year%100+(year%100)/4+(13*12/5);
|
||||||
|
for(i=1;i<m[0];i++){
|
||||||
|
b+=m[i];
|
||||||
|
}
|
||||||
|
a+=b-1;
|
||||||
|
a=a%7;
|
||||||
|
if(a==0)
|
||||||
|
a=7;
|
||||||
|
if(year==1582){
|
||||||
|
if(b>=15)
|
||||||
|
b-=10;
|
||||||
|
}
|
||||||
|
printf("%d年%d月%d日是星期%d\n",year,m[0],j,a);
|
||||||
|
if(m[2]==29)
|
||||||
|
printf("%d年是闰年\n",year);
|
||||||
|
else printf("%d年不是闰年\n",year);
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
if(n==2)
|
||||||
|
{
|
||||||
|
int year,a=0,i,j,b,f;
|
||||||
|
printf("输入年份\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year<0)
|
||||||
|
printf("输入错误\n");
|
||||||
|
else {
|
||||||
|
printf("1.1*12输出\n2.2*6输出\n输入需要的序号\n");
|
||||||
|
scanf("%d",&n);
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
m[2]=29;
|
||||||
|
if(year>=2000)
|
||||||
|
a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+1)%7;
|
||||||
|
else a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+1)%7;
|
||||||
|
if(a==0)
|
||||||
|
a=7;
|
||||||
|
if(n==1)
|
||||||
|
{
|
||||||
|
printf("~~~~~~~~~~~~~~~~~~~~~~%.4d~~~~~~~~~~~~~~~~~~~~~~\n\n\n",year);
|
||||||
|
for(i=1;i<=12;i++){
|
||||||
|
printf("~~~~~~~~~~~~~~~~~~~~~~~%.2d~~~~~~~~~~~~~~~~~~~~~~~\n",i);
|
||||||
|
printf("星期一 星期二 星期三 星期四 星期五 星期六 星期日\n");
|
||||||
|
for(b=1;b<a;b++)
|
||||||
|
printf(" ");
|
||||||
|
for(j=1;j<=m[i];j++){
|
||||||
|
if(year==1582&&i==10){
|
||||||
|
if(j==5)
|
||||||
|
j=15;
|
||||||
|
}
|
||||||
|
printf(" %.2d ",j);
|
||||||
|
a++;
|
||||||
|
if(a>7){
|
||||||
|
printf("\n");
|
||||||
|
a=1;
|
||||||
|
}
|
||||||
|
}printf("\n");
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
if(n==2){
|
||||||
|
int x1,x2,x3,x4;
|
||||||
|
printf("===============================================%.4d===============================================\n\n\n",year);
|
||||||
|
for(i=1;i<=12;i+=2){
|
||||||
|
x2=1,x3=1;
|
||||||
|
printf("~~~~~~~~~~~~~~~~~~~~~~~%.2d~~~~~~~~~~~~~~~~~~~~~~~ ",i);
|
||||||
|
printf("~~~~~~~~~~~~~~~~~~~~~~~%.2d~~~~~~~~~~~~~~~~~~~~~~~\n",i+1);
|
||||||
|
printf("星期一 星期二 星期三 星期四 星期五 星期六 星期日 ");
|
||||||
|
printf("星期一 星期二 星期三 星期四 星期五 星期六 星期日\n");
|
||||||
|
for(b=1;b<a;b++)
|
||||||
|
printf(" ");
|
||||||
|
f=(a+m[i])%7;
|
||||||
|
if(f==0)
|
||||||
|
f=7;
|
||||||
|
x1=1;
|
||||||
|
for(j=1;j<=40;j++){
|
||||||
|
if(j<=m[i])
|
||||||
|
printf(" %.2d ",j);
|
||||||
|
else if(x3>m[i+1]){
|
||||||
|
break;
|
||||||
|
}else printf(" ");
|
||||||
|
a++;
|
||||||
|
if(a>7){
|
||||||
|
if(x1==1){
|
||||||
|
for(b=1;b<f;b++)
|
||||||
|
printf(" ");
|
||||||
|
x1=0;
|
||||||
|
x2=f,x4=f;
|
||||||
|
}
|
||||||
|
for(x2;x2<=38;x2++){
|
||||||
|
if(year==1582&&(i+1)==10){
|
||||||
|
if(x3==5)
|
||||||
|
x3=15;
|
||||||
|
}
|
||||||
|
if(x3<=m[i+1]){
|
||||||
|
printf(" %.2d ",x3);
|
||||||
|
x3++;
|
||||||
|
}
|
||||||
|
x4++;
|
||||||
|
if(x4>7){
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
a=1;
|
||||||
|
x2++;
|
||||||
|
x4=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(year==1582&&(i+1)==10){
|
||||||
|
m[10]-=10;
|
||||||
|
}
|
||||||
|
a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+1)%7;
|
||||||
|
int x5;
|
||||||
|
for(x5=1;x5<=i+1;x5++)
|
||||||
|
a+=m[x5];
|
||||||
|
a=a%7;
|
||||||
|
if(a==0)
|
||||||
|
a=7;
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
printf("输入错误\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else printf("输入错误\n");
|
||||||
|
}
|
||||||
|
}
|
259
stu2024/虚拟2401才忠鑫(1).cpp
Normal file
259
stu2024/虚拟2401才忠鑫(1).cpp
Normal file
@ -0,0 +1,259 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<math.h>
|
||||||
|
|
||||||
|
// print函数用于显示菜单时,打印星号和空格。
|
||||||
|
void print(char c, int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 1; i <= n; i++)
|
||||||
|
{
|
||||||
|
putchar(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询某年某月某日的日期是周几。
|
||||||
|
int getWeekday(int year, int month, int day) {
|
||||||
|
// 计算1582年10月4日后是星期几的函数
|
||||||
|
if (year <= 1582) {
|
||||||
|
if (month < 3) {
|
||||||
|
year--;
|
||||||
|
month += 12;
|
||||||
|
}
|
||||||
|
int h = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
|
||||||
|
return h + 1;
|
||||||
|
}
|
||||||
|
// 计算1582年10月4日及以前给定日期是星期几的函数
|
||||||
|
else if (year > 1582) {
|
||||||
|
if (month < 3) {
|
||||||
|
year--;
|
||||||
|
month += 12;
|
||||||
|
}
|
||||||
|
int c = year / 100;
|
||||||
|
int y = year % 100;
|
||||||
|
int m = month;
|
||||||
|
int d = day;
|
||||||
|
int w = c / 4 - 2 * c + y + y / 4 + (13 * (m + 1) / 5) + d - 1;
|
||||||
|
w = w % 7;
|
||||||
|
if (w < 0) {
|
||||||
|
w += 7;
|
||||||
|
}
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查日期合法性的函数
|
||||||
|
int isDateValid(int year, int month, int day) {
|
||||||
|
if (month < 1 || month > 12) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (day < 1) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (month == 2) {
|
||||||
|
if (((year % 4 == 0 && year % 100!= 0) || year % 400 == 0) && day > 29) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (day > 28) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否为闰年
|
||||||
|
int isLeapYear(int year) {
|
||||||
|
return ((year % 4 == 0 && year % 100!= 0) || year % 400 == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取指定月份的天数
|
||||||
|
int getDaysInMonth(int month, int year) {
|
||||||
|
int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||||
|
if (month == 2 && isLeapYear(year)) {
|
||||||
|
return 29;
|
||||||
|
}
|
||||||
|
return days[month - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出日历头部(月份和星期)
|
||||||
|
void printCalendarHeader(int month, int year) {
|
||||||
|
const char* months[] = { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" };
|
||||||
|
if (year == 1582 && month == 10) {
|
||||||
|
printf("\n十月 1582 (Special Month)\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("\n%s %d\n", months[month - 1], year);
|
||||||
|
}
|
||||||
|
printf("星期一 星期二 星期三 星期四 星期五 星期六 星期日\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出日历主体(日期部分)
|
||||||
|
void printCalendarBody(int month, int year, int format,int day) {
|
||||||
|
int daysInMonth = getDaysInMonth(month, year);
|
||||||
|
if (month < 3) {
|
||||||
|
year--;
|
||||||
|
month += 12;
|
||||||
|
}
|
||||||
|
int k = year % 100;
|
||||||
|
int j = year / 100;
|
||||||
|
int firstDay =(day + 13 * (month + 1) / 5 + k + k / 4 + j / 4 + 5 * j) % 7-1;
|
||||||
|
if (format == 1) { // 单列格式输出逻辑
|
||||||
|
if (year == 1582 && month == 10) {
|
||||||
|
for (int day = 1; day <=4; day++) {
|
||||||
|
printf(" %.2d ", day);
|
||||||
|
if ((firstDay + day) % 7 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int day = 15; day <= daysInMonth; day++) {
|
||||||
|
printf(" %.2d ", day);
|
||||||
|
if ((firstDay + day) % 7 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
for (int i = 0; i < firstDay; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for (int day = 1; day <= daysInMonth; day++) {
|
||||||
|
printf(" %.2d ",day);
|
||||||
|
if((firstDay + day) % 7 == 0){
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else { //双列格式输出逻辑
|
||||||
|
if (year == 1582 && month == 10) {
|
||||||
|
for (int day = 1; day <=4; day++) {
|
||||||
|
printf(" %.2d ", day);
|
||||||
|
}
|
||||||
|
for (int day = 15; day <= daysInMonth; day++) {
|
||||||
|
printf(" %.2d ", day);
|
||||||
|
if ((firstDay + day) % 7 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((firstDay + daysInMonth) % 7!= 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (int i = 1; i < firstDay; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int day = 1; day <= daysInMonth; day++) {
|
||||||
|
printf(" %.2d ", day);
|
||||||
|
if ((firstDay + day) % 7 == 6) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((firstDay + daysInMonth) % 7!= 6) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void showMenu()
|
||||||
|
{
|
||||||
|
putchar('\n');
|
||||||
|
print(' ', 10);
|
||||||
|
print('*', 60);
|
||||||
|
putchar('\n');
|
||||||
|
print(' ', 20);
|
||||||
|
printf("1--查询某年某月某日的日期是周几\n");
|
||||||
|
print(' ', 20);
|
||||||
|
printf("2--该年是否为闰年\n");
|
||||||
|
print(' ', 20);
|
||||||
|
printf("3--输入年份,输出这一年的日历\n");
|
||||||
|
print(' ', 10);
|
||||||
|
print('*', 60);
|
||||||
|
putchar('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int choice;
|
||||||
|
char ifcontinue;
|
||||||
|
int year, month, day;
|
||||||
|
|
||||||
|
showMenu();
|
||||||
|
// 选择菜单。
|
||||||
|
while (1) {
|
||||||
|
printf("\n请选择一个菜单(1-3): ");
|
||||||
|
scanf("%d", &choice);
|
||||||
|
switch (choice) {
|
||||||
|
case 1:
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d", &year);
|
||||||
|
printf("请输入月份:");
|
||||||
|
scanf("%d", &month);
|
||||||
|
printf("请输入日期:");
|
||||||
|
scanf("%d", &day);
|
||||||
|
if (isDateValid(year, month, day)) {
|
||||||
|
int weekday = getWeekday(year, month, day);
|
||||||
|
switch (weekday) {
|
||||||
|
case 0:
|
||||||
|
printf("%d年%d月%d日是星期日\n", year, month, day);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
printf("%d年%d月%d日是星期一\n", year, month, day);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("%d年%d月%d日是星期二\n", year, month, day);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("%d年%d月%d日是星期三\n", year, month, day);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("%d年%d月%d日是星期四\n", year, month, day);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("%d年%d月%d日是星期五\n", year, month, day);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("%d年%d月%d日是星期六\n", year, month, day);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("计算出现错误\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("输入的日期不合法,请重新输入正确的日期\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("请输入一个年份: ");
|
||||||
|
scanf("%d", &year);
|
||||||
|
if (isLeapYear(year)) {
|
||||||
|
printf("%d年是闰年\n", year);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("%d年不是闰年\n", year);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("请输入年份: ");
|
||||||
|
scanf("%d", &year);
|
||||||
|
int format;
|
||||||
|
printf("请选择日历输出格式(1表示单列,2表示双列): ");
|
||||||
|
scanf("%d", &format);
|
||||||
|
for (int m = 1; m <= 12; m++) {
|
||||||
|
printCalendarHeader(m, year);
|
||||||
|
printCalendarBody(m, year, format,day);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("\n无效\n");
|
||||||
|
}
|
||||||
|
printf("\n返回请输入6:");
|
||||||
|
getchar(); // 处理scanf输入后的换行符
|
||||||
|
ifcontinue = getchar();
|
||||||
|
if (ifcontinue!= '6') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
202
stu2024/虚拟2401杨博深.c
Normal file
202
stu2024/虚拟2401杨博深.c
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
int menu() {
|
||||||
|
char g;
|
||||||
|
int h;
|
||||||
|
|
||||||
|
printf("1. 查询星期\n");
|
||||||
|
printf("2. 打印日历\n");
|
||||||
|
printf("输入x退出\n");
|
||||||
|
printf("请输入选项:");
|
||||||
|
scanf(" %c", &g);
|
||||||
|
if (g >= '1' && g <= '2') {
|
||||||
|
h = g - '0'; // 将字符 '1' 或 '2' 转换为整数 1 或 2
|
||||||
|
}
|
||||||
|
else if (g == 'x' || g == 'X') {
|
||||||
|
h = -2; // 表示退出程序
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
h = -1; // 表示无效输入
|
||||||
|
}
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
//------------------------------------------------------
|
||||||
|
int main() {
|
||||||
|
int n;
|
||||||
|
int m[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; //一年的月份
|
||||||
|
for (;;) { //无限循环程序
|
||||||
|
mjq:;
|
||||||
|
n = menu();//用n替换h的值
|
||||||
|
if (n == -2)
|
||||||
|
break; //退出程序
|
||||||
|
else if (n == 1)
|
||||||
|
{
|
||||||
|
int year, a = 0, b, i, j;
|
||||||
|
printf("输入年份 月份 日期\n输入-1返回上一级\n");
|
||||||
|
scanf("%d", &year);
|
||||||
|
if (year == -1)
|
||||||
|
goto mjq;//返回首页
|
||||||
|
if (year < 0 || year>9999)//检测输入合法 万年历真的只有一万年哇!
|
||||||
|
printf("输入错误\n\n");
|
||||||
|
else {
|
||||||
|
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) //判断闰年 是的话将月份中的二月换成29天
|
||||||
|
m[2] = 29;
|
||||||
|
scanf("%d", &m[0]);
|
||||||
|
scanf("%d", &b);
|
||||||
|
if (year == 1582 && m[0] == 10 && b > 4 && b < 15) //1582年10月4日至14日之间的日期这段时间在历史上被格里高利历改革所跳过
|
||||||
|
printf("输入错误\n1582年10月4日至14日之间的日期这段时间在历史上被格里高利历改革所跳过。\n\n");
|
||||||
|
else if (year < 0 || m[0] < 0 || m[0]>12 || b < 0 || b>31) { //检查年份、月份和日期是否在有效范围内
|
||||||
|
printf("输入错误\n\n");
|
||||||
|
}
|
||||||
|
else if (m[2] == 28 && b > 28 || m[2] == 29 && b > 29)//检查日期是否超过了该月的天数 闰年29天
|
||||||
|
printf("输入错误\n\n");
|
||||||
|
else if ((m[0] == 1 || m[0] == 3 || m[0] == 5 || m[0] == 7 || m[0] == 8 || m[0] == 10 || m[0] == 12) && b > 31)//如果这些月份是输入值大于31天则错误
|
||||||
|
printf("输入错误\n\n");
|
||||||
|
else {
|
||||||
|
j = b;
|
||||||
|
if (year == 1582) {
|
||||||
|
m[10] -= 10; //1582年10月4日至14日之间的日期这段时间在历史上被格里高利历改革所跳过 减去
|
||||||
|
|
||||||
|
if (b >= 15) //调整当月的日期
|
||||||
|
b -= 10;
|
||||||
|
}
|
||||||
|
if (year >= 2000)
|
||||||
|
a = ((year - 1) * 365 + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1) % 7;//计算从公元1年到year-1年(包括year年如果它是闰年的话)之间的闰年总数 %7计算当天是星期几
|
||||||
|
else a = (year / 100) / 4 - 2 * (year / 100) + year % 100 + (year % 100) / 4 + (13 * 12 / 5);
|
||||||
|
for (i = 1; i < m[0]; i++) {
|
||||||
|
b += m[i];
|
||||||
|
}
|
||||||
|
a += b - 1;
|
||||||
|
a = a % 7;
|
||||||
|
if (a == 0)
|
||||||
|
a = 7; //如果a=0 a就是星期天
|
||||||
|
if (year == 1582) {
|
||||||
|
if (b >= 15) //同上
|
||||||
|
b -= 10;
|
||||||
|
}
|
||||||
|
printf("%d年%d月%d日是星期%d\n", year, m[0], j, a);
|
||||||
|
if (m[2] == 29)
|
||||||
|
printf("%d年是闰年\n\n", year);
|
||||||
|
else printf("%d年不是闰年\n", year);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (n == 2)
|
||||||
|
{
|
||||||
|
int year, a = 0, i, j, b, f;
|
||||||
|
cxk:;
|
||||||
|
printf("输入年份\n输入-1返回上一级\n");
|
||||||
|
scanf("%d", &year);
|
||||||
|
if (year == -1)
|
||||||
|
goto cxk;
|
||||||
|
if (year < 0 && year > 9999)
|
||||||
|
printf("输入错误\n\n");
|
||||||
|
else {
|
||||||
|
printf("1.单列输出\n2.双列输出\n输入-1返回上一级\n输入需要的序号\n");
|
||||||
|
scanf("%d", &n);
|
||||||
|
if (n == -1)
|
||||||
|
goto cxk;
|
||||||
|
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
|
||||||
|
m[2] = 29;
|
||||||
|
if (year >= 2000)
|
||||||
|
a = ((year - 1) * 365 + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1) % 7;
|
||||||
|
else a = ((year - 1) * 365 + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1) % 7;
|
||||||
|
if (a == 0)
|
||||||
|
a = 7;
|
||||||
|
|
||||||
|
if (n == 1)
|
||||||
|
{
|
||||||
|
printf("======================%.4d======================\n\n\n", year); //输出查询年份表头
|
||||||
|
for (i = 1; i <= 12; i++) {
|
||||||
|
printf("=======================%.2d=======================\n", i); //单列输出
|
||||||
|
printf("星期一 星期二 星期三 星期四 星期五 星期六 星期天\n");
|
||||||
|
for (b = 1; b < a; b++) //输出每个月空着的天数
|
||||||
|
printf(" ");
|
||||||
|
for (j = 1; j <= m[i]; j++) {
|
||||||
|
if (year == 1582 && i == 10) {
|
||||||
|
if (j == 5) //将5跳到15号
|
||||||
|
j = 15;
|
||||||
|
}
|
||||||
|
printf(" %.2d ", j);
|
||||||
|
a++;
|
||||||
|
if (a > 7) {
|
||||||
|
printf("\n");
|
||||||
|
a = 1;
|
||||||
|
}
|
||||||
|
}printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (n == 2) {
|
||||||
|
int x1, x2, x3, x4;
|
||||||
|
printf("===============================================%.4d===============================================\n\n\n", year);
|
||||||
|
for (i = 1; i <= 12; i += 2) {
|
||||||
|
x2 = 1, x3 = 1;
|
||||||
|
printf("=======================%.2d======================= ", i); //双列输出
|
||||||
|
printf("=======================%.2d=======================\n", i + 1);
|
||||||
|
printf("星期一 星期二 星期三 星期四 星期五 星期六 星期天 ");
|
||||||
|
printf("星期一 星期二 星期三 星期四 星期五 星期六 星期天\n");
|
||||||
|
for (b = 1; b < a; b++)
|
||||||
|
printf(" ");
|
||||||
|
f = (a + m[i]) % 7;
|
||||||
|
if (f == 0)
|
||||||
|
f = 7;
|
||||||
|
x1 = 1;
|
||||||
|
for (j = 1; j <= 40; j++) {
|
||||||
|
if (j <= m[i])
|
||||||
|
printf(" %.2d ", j);
|
||||||
|
else if (x3 > m[i + 1]) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else printf(" ");
|
||||||
|
a++;
|
||||||
|
if (a > 7) {
|
||||||
|
if (x1 == 1) {
|
||||||
|
for (b = 1; b < f; b++)
|
||||||
|
printf(" ");
|
||||||
|
x1 = 0;
|
||||||
|
x2 = f, x4 = f;
|
||||||
|
}
|
||||||
|
for (x2; x2 <= 38; x2++) {
|
||||||
|
if (year == 1582 && (i + 1) == 10) {
|
||||||
|
if (x3 == 5)
|
||||||
|
x3 = 15;
|
||||||
|
}
|
||||||
|
if (x3 <= m[i + 1]) {
|
||||||
|
printf(" %.2d ", x3);
|
||||||
|
x3++;
|
||||||
|
}
|
||||||
|
x4++;
|
||||||
|
if (x4 > 7) {
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
a = 1;
|
||||||
|
x2++;
|
||||||
|
x4 = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (year == 1582 && (i + 1) == 10) {
|
||||||
|
m[10] -= 10;
|
||||||
|
}
|
||||||
|
a = ((year - 1) * 365 + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1) % 7;
|
||||||
|
int x5;
|
||||||
|
for (x5 = 1; x5 <= i + 1; x5++)
|
||||||
|
a += m[x5];
|
||||||
|
a = a % 7;
|
||||||
|
if (a == 0)
|
||||||
|
a = 7;
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("输入错误\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else { printf("\n\n"); }
|
||||||
|
}
|
||||||
|
}
|
211
stu2024/虚拟2402周丛笑.c
Normal file
211
stu2024/虚拟2402周丛笑.c
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void printfMenu ()
|
||||||
|
{
|
||||||
|
printf("1.单列输出\n");
|
||||||
|
printf("2.双列输出\n");
|
||||||
|
}
|
||||||
|
//判断是否为闰年
|
||||||
|
int isLeapyear(int y)
|
||||||
|
{
|
||||||
|
if(y%4==0&&y%100!=0 || y%400==0)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//这个函数用于计算返回该月的天数
|
||||||
|
int daysInMonth(int y, int m)
|
||||||
|
{
|
||||||
|
switch(m){
|
||||||
|
case 1:
|
||||||
|
case 3:
|
||||||
|
case 5:
|
||||||
|
case 7:
|
||||||
|
case 8:
|
||||||
|
case 10:
|
||||||
|
{
|
||||||
|
if(y==1582)
|
||||||
|
{
|
||||||
|
days=21;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 12:days = 31;break;
|
||||||
|
case 4:
|
||||||
|
case 6:
|
||||||
|
case 9:
|
||||||
|
case 11:days = 30;break;
|
||||||
|
case 2:{
|
||||||
|
if(((year%4) == 0) && ((year%100)!=0) || ((year%400) == 0)){
|
||||||
|
days = 29;
|
||||||
|
}else{
|
||||||
|
days = 28;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return days;
|
||||||
|
}
|
||||||
|
|
||||||
|
//判断指定日期是星期几
|
||||||
|
int dayOfWeek(int y, int m, int d)
|
||||||
|
{
|
||||||
|
if(y>1852 && m>10 && d>4)//1582.10.4之后
|
||||||
|
{
|
||||||
|
if (m < 3)
|
||||||
|
{
|
||||||
|
m += 12;
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
int h = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
|
||||||
|
return h + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int K,J,h;
|
||||||
|
K=y%100;
|
||||||
|
J=y/100;
|
||||||
|
switch(m)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
m=3;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
m=4;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
m=5;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
m=6;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
m=7;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
m=8;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
m=9;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
m=10;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
m=11;
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
m=12;
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
m=13;
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
m=14;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
h=(d+(13*(m+1)/5)+K+K/4+5-J)%7;
|
||||||
|
switch(h)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
h=6;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
h=7;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
h=1;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
h=2;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
h=3;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
h=4;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
h=5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//显示指定年月的月历
|
||||||
|
void MonthCalendar(int y, int m, int d)
|
||||||
|
{
|
||||||
|
printf("日\t一\t二\t三\t四\t五\t六")//\t制表符
|
||||||
|
int ofday=DaysInMonth(y,m);//获取每个月有多少天
|
||||||
|
int first_day = dayOfWeek(y, m, 1); //获取每月1号是周几
|
||||||
|
int ofday = daysInMonth(y, m); //获取一个月有多少天
|
||||||
|
int count = first_day;
|
||||||
|
for (int i = 0; i <= ofday; i++)
|
||||||
|
{
|
||||||
|
//使日期能对齐对应的星期
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < count % 7; j++)
|
||||||
|
{
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%2d\t", i);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//循环打印一周后换行
|
||||||
|
if (count % 7 == 0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
//这个函数用于显示指定年份 year 的全年日历
|
||||||
|
void YearCalendar(int y)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
for (i = 1; i <= 12; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
MonthCalendar(y, i, day);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//这个函数用于验证给定的日期是否有效
|
||||||
|
int isTureDate(int y, int m, int day)
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int y,m,d,a;
|
||||||
|
|
||||||
|
printf("1.查询对应年份的日历\n");
|
||||||
|
printf("2.查询对应日期的星期");
|
||||||
|
printf("3.查询对应年份是否为闰年\n");
|
||||||
|
printf("4.退出\n");
|
||||||
|
|
||||||
|
scanf("%d",&a);
|
||||||
|
switch(a)
|
||||||
|
case 1:
|
||||||
|
scanf("%d",&y);
|
||||||
|
YearCalendar(y);
|
||||||
|
case 2:
|
||||||
|
scanf("%d %d %d",&y,&m,&d);
|
||||||
|
dayOfWeek(y,m,d);
|
||||||
|
case 3:
|
||||||
|
scanf("%d",&y);
|
||||||
|
isLeapyear(y);
|
||||||
|
case 4:
|
||||||
|
default :
|
||||||
|
printf("输入错误请重新输入。")
|
||||||
|
|
||||||
|
|
||||||
|
}
|
173
stu2024/虚拟2402康诗曼(1).c
Normal file
173
stu2024/虚拟2402康诗曼(1).c
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
int fangbao()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char x;
|
||||||
|
printf("1.查询日期所对应的星期\n2.查询该年份日历并竖向输出\n3.查询该年份日历并以2*6格式输出\n4.查询该年是否为闰年\n5.退出程序\n");
|
||||||
|
scanf(" %c",&x);
|
||||||
|
if(x=='1')
|
||||||
|
x=1;
|
||||||
|
else if(x=='2')
|
||||||
|
x=2;
|
||||||
|
else if(x=='3')
|
||||||
|
x=3;
|
||||||
|
else if(x=='4')
|
||||||
|
x=4;
|
||||||
|
else if(x='5')
|
||||||
|
x=5;
|
||||||
|
else
|
||||||
|
x=6;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
int runnian(int year,int month)
|
||||||
|
{
|
||||||
|
int md[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if((year%4==0&&year%100!=0||year%400==0)&&month==2)
|
||||||
|
return 29;
|
||||||
|
else
|
||||||
|
return md[month];
|
||||||
|
}
|
||||||
|
int date(int year,int month,int day)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
if(month<3)
|
||||||
|
{
|
||||||
|
month+=12;
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
if(year!=1582)
|
||||||
|
{
|
||||||
|
int a,b;
|
||||||
|
a=year/100;
|
||||||
|
b=year%100;
|
||||||
|
c=(a/4-2*a+b+b/4+13*(month+1)/5+day-1)%7;
|
||||||
|
if(c<0)
|
||||||
|
c+=7;
|
||||||
|
}
|
||||||
|
else if(year==1582&&month<=10&&day<=4)
|
||||||
|
|
||||||
|
c=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
||||||
|
else if(year==1582&&month>=10&&day>=15)
|
||||||
|
c=(day+1+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
void yeartb(int year,int month)
|
||||||
|
{
|
||||||
|
int h,j,i;
|
||||||
|
h=runnian(1582,month);
|
||||||
|
j=date(1582,month,1);
|
||||||
|
for(i=0;i<j;i++)
|
||||||
|
printf(" ");
|
||||||
|
for(i=1;i<=h;i++)
|
||||||
|
{
|
||||||
|
if(month==10&&i==5)
|
||||||
|
{
|
||||||
|
i+=10;
|
||||||
|
}
|
||||||
|
printf("%3d",i);
|
||||||
|
if(month==10&&i>=5&&(i-10+j)%7==0)
|
||||||
|
printf("\n");
|
||||||
|
else if(month!=10&&(i+j)%7==0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
void monthtwo(int year, int month)
|
||||||
|
{
|
||||||
|
int w,k,e;
|
||||||
|
w=runnian(year,month);
|
||||||
|
k=date(year,month,1);
|
||||||
|
for(e=0;e<k;e++)
|
||||||
|
printf(" ");
|
||||||
|
for(e=1;e<=w;e++)
|
||||||
|
{
|
||||||
|
printf("%3d",e);
|
||||||
|
if((e+k)%7==0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
int year,month,day,d,e;
|
||||||
|
d=fangbao();
|
||||||
|
if(d==6)
|
||||||
|
{
|
||||||
|
printf("输入错误请从新输入\n\n");
|
||||||
|
}
|
||||||
|
if(d==5)
|
||||||
|
break;
|
||||||
|
if(d==1)
|
||||||
|
{
|
||||||
|
int year,month,day,m;
|
||||||
|
printf("请输入日期:\n");
|
||||||
|
scanf("%d%d%d",&year,&month,&day);
|
||||||
|
if(year<0||month>12||(month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31||(month==4||month==6||month==9||month==11)&&day>30)
|
||||||
|
printf("输入错误\n");
|
||||||
|
if((year%4==0&&year%100!=0||year%400==0)&&month==2&&day>29||(year%4!=0&&year%100==0||year%400!=0)&&day>28)
|
||||||
|
printf("输入错误\n");
|
||||||
|
if(year==1582)
|
||||||
|
{
|
||||||
|
if(month==10&&day>4&&day<15)
|
||||||
|
printf("输入错误\n\n");
|
||||||
|
}
|
||||||
|
m=date(year,month,day);
|
||||||
|
if(m==0)
|
||||||
|
printf("该日期为星期日\n");
|
||||||
|
else
|
||||||
|
printf("该日期为星期%d\n",m);
|
||||||
|
}
|
||||||
|
if(d==2)
|
||||||
|
{
|
||||||
|
int f,g;
|
||||||
|
printf("请输入年份:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year<0)
|
||||||
|
printf("输入错误\n");
|
||||||
|
printf("%4d年的日历为:\n",year);
|
||||||
|
for(month=1;month<=12;month++)
|
||||||
|
{
|
||||||
|
printf("%d月\n",month);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
if(year!=1582)
|
||||||
|
monthtwo(year,month);
|
||||||
|
else
|
||||||
|
yeartb(year,month);
|
||||||
|
if(month!=12)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(d==3)
|
||||||
|
{
|
||||||
|
printf("请输入年份:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year<0)
|
||||||
|
printf("输入错误\n");
|
||||||
|
printf("%4d年的日历为:\n",year);
|
||||||
|
for(month=1;month<=12;month+=2)
|
||||||
|
{
|
||||||
|
printf("%d月",month);
|
||||||
|
printf("%d月\n",month+1);
|
||||||
|
printf(" 日 一 二 三 四 五 六");
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
monthtwo(year,month);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(d==4)
|
||||||
|
{
|
||||||
|
int year;
|
||||||
|
printf("请输入年份:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year<0)
|
||||||
|
printf("输入错误\n");
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
printf("该年份为闰年\n");
|
||||||
|
else
|
||||||
|
printf("该年份不是闰年\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
389
stu2024/计科2401侯维.cpp
Normal file
389
stu2024/计科2401侯维.cpp
Normal file
@ -0,0 +1,389 @@
|
|||||||
|
#include<iostream>
|
||||||
|
using namespace std;
|
||||||
|
int year, month, day,allday,wannian,con,b,c=0,firstday;
|
||||||
|
int wannain_month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
|
||||||
|
int arr[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
|
||||||
|
//判断闰年并返回一年的天数
|
||||||
|
int runyear(int year)
|
||||||
|
{
|
||||||
|
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
|
||||||
|
{
|
||||||
|
return 366;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 365;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 蔡勒公式
|
||||||
|
int week(int y, int m, int d)
|
||||||
|
{
|
||||||
|
if (y < 1582 || y == 1582) { if (m < 10 || (m == 10 && d < 5))d += 3; else if (m == 10 && (4 < d && d < 15))return -1; }
|
||||||
|
if (m < 3) { y--; m += 12; }return ((d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7 + 1) % 7;
|
||||||
|
}
|
||||||
|
void clprintf(int year, int shuchu) {
|
||||||
|
int yearfirstday, b, con = 0;
|
||||||
|
int c = 0;
|
||||||
|
int monthday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
|
||||||
|
yearfirstday = ((year - 1) * 365 + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1) % 7;
|
||||||
|
if (year <= 1582) {
|
||||||
|
yearfirstday = ((year - 1) * 365 + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 11) % 7;
|
||||||
|
}
|
||||||
|
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
|
||||||
|
monthday[2] = 29;
|
||||||
|
if (shuchu == 1)
|
||||||
|
{
|
||||||
|
for (int i = 1; i < 13; i++) {
|
||||||
|
printf("------------------------%2d-------------------------\n", i);
|
||||||
|
printf("SUM\tMON\tTUE\tWEN\tTHU\tFRI\tSAT\n");
|
||||||
|
if (yearfirstday != 0){
|
||||||
|
for (int x = 1; x <= yearfirstday; x++)
|
||||||
|
{
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int j = 1; j <= monthday[i]; j++)
|
||||||
|
{
|
||||||
|
if (year == 1582 && i == 10 && (j > 4 && j < 15))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
con += 1;
|
||||||
|
printf("%d\t", j);
|
||||||
|
if ((con + yearfirstday) % 7 == 0 || j == monthday[i])
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
yearfirstday = (monthday[i] + yearfirstday) % 7;
|
||||||
|
con = 0;
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (shuchu == 2)
|
||||||
|
{
|
||||||
|
con = 0;
|
||||||
|
int q, m;
|
||||||
|
for (int i = 1; i < 13; i += 2)
|
||||||
|
{
|
||||||
|
printf("------------------------%d月------------------------\t", i);
|
||||||
|
printf("------------------------%d月------------------------\n", i + 1);
|
||||||
|
printf("SUM\tMON\tTUE\tWEN\tTHU\tFRI\tSAT\tSUM\tMON\tTUE\tWEN\tTHU\tFRI\tSAT\n");
|
||||||
|
b = (monthday[i] + yearfirstday) % 7;
|
||||||
|
q = 7 - b + 1;
|
||||||
|
m = 7 - yearfirstday + 1;
|
||||||
|
if (yearfirstday != 0)
|
||||||
|
{
|
||||||
|
for (int x = 1; x <= yearfirstday; x++)
|
||||||
|
{
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int x = 1; x <= 7 - yearfirstday; x++)
|
||||||
|
{
|
||||||
|
printf("%d\t", x);
|
||||||
|
}
|
||||||
|
if (year == 1582 && i + 1 == 10)
|
||||||
|
{
|
||||||
|
printf("\t1\t2\t3\t4\t15\t16\t");
|
||||||
|
q = 17;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (b != 0)
|
||||||
|
{
|
||||||
|
for (int x = 1; x <= b; x++)
|
||||||
|
{
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int y = 1; y <= 7 - b; y++)
|
||||||
|
{
|
||||||
|
printf("%d\t", y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
for (int j = m; j <= monthday[i]; j++)
|
||||||
|
{
|
||||||
|
|
||||||
|
printf("%d\t", j);
|
||||||
|
|
||||||
|
if (j == monthday[i] && (j + yearfirstday) % 7 != 0)
|
||||||
|
{
|
||||||
|
for (int g = 0; g <= 7 - b - 1; g++)
|
||||||
|
{
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((j + yearfirstday) % 7 == 0 || j == monthday[i])
|
||||||
|
{
|
||||||
|
for (int y = q; y <= monthday[i + 1]; y++)
|
||||||
|
{
|
||||||
|
printf("%d\t", y);
|
||||||
|
if (year == 1582 && (i + 1) == 10)
|
||||||
|
{
|
||||||
|
if (y == 23 || y == 30 || y == 31)
|
||||||
|
{
|
||||||
|
q = y + 1;
|
||||||
|
printf("\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (((y + b) % 7 == 0 || y == monthday[i + 1]) && j!=monthday[i])
|
||||||
|
{
|
||||||
|
q = y + 1;
|
||||||
|
printf("\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (j == monthday[i] && (y + b) % 7 == 0 && y != monthday[i + 1])
|
||||||
|
{
|
||||||
|
q = y + 1;
|
||||||
|
printf("\n\t\t\t\t\t\t\t");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (j == monthday[i] && q != monthday[i + 1])
|
||||||
|
{
|
||||||
|
/*for (int flag = q; flag <= monthday[i + 1]; flag++)
|
||||||
|
{
|
||||||
|
printf("%d\t", flag);
|
||||||
|
break;
|
||||||
|
}*/
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
if (year == 1582 && i == 9 && j == 29)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
yearfirstday = (monthday[i + 1] + b) % 7;
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
void checkFestival(int year, int month, int day) {
|
||||||
|
// 元旦
|
||||||
|
if (month == 1 && day == 1) {
|
||||||
|
printf("元旦\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 春节,简单假设大致在公历1月21日至1月27日(实际应根据农历准确判断)
|
||||||
|
if (month == 1 && (21 <= day && day <= 27)) {
|
||||||
|
printf("春节\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清明节,一般在公历4月4日至4月6日之间,这里以4月5日为例
|
||||||
|
if (month == 4 && day == 5) {
|
||||||
|
printf("清明节\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 劳动节,5月1日
|
||||||
|
if (month == 5 && day == 1) {
|
||||||
|
printf("劳动节\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 端午节,简单假设大致在公历6月10日左右(实际应根据农历准确判断)
|
||||||
|
if (month == 6 && day == 10) {
|
||||||
|
printf("端午节\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 中秋节,简单假设大致在公历9月17日左右(实际应根据农历准确判断)
|
||||||
|
if (month == 9 && day == 17) {
|
||||||
|
printf("中秋节\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 国庆节,10月1日
|
||||||
|
if (month == 10 && day == 1) {
|
||||||
|
printf("国庆节\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("无\n");
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
cout << "\033[1;31;47m输入1:查询输入天数的信息 \033[0m" << '\n' << "\033[1;32;47m输入2:查询输入年份的日历 \033[0m" << '\n' << "\033[1;30;47m输入3:查询输入年份是否为闰年 \033[0m" << '\n' << "\033[1;34;47m输入4:退出 \033[0m" << '\n';
|
||||||
|
int a; cin >> a;
|
||||||
|
if (cin.fail() || a < 1 || a > 4)
|
||||||
|
{
|
||||||
|
cin.clear(); // 清除错误状态
|
||||||
|
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略错误输入
|
||||||
|
cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n';
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
switch (a)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
cout << "输入查询的天数(年 月 日,例如:2024 11 11) :";
|
||||||
|
cin >> year >> month >> day;
|
||||||
|
if (cin.fail() || month < 1 || month > 12)
|
||||||
|
{
|
||||||
|
|
||||||
|
cin.clear(); // 清除错误状态
|
||||||
|
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略错误输入
|
||||||
|
cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n';
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
if (cin.fail() || day < 1 || (month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31 || (month==4||month==6||month==9||month==11)&&day>30||(runyear(year)==366)&&(month==2)&&day>29|| (runyear(year) == 365) && (month == 2) && day > 28)
|
||||||
|
{
|
||||||
|
|
||||||
|
cin.clear(); // 清除错误状态
|
||||||
|
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略错误输入
|
||||||
|
cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n';
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
if (cin.fail() || year==1582&&month==10&&(day>4&&day<15))
|
||||||
|
{
|
||||||
|
|
||||||
|
cin.clear(); // 清除错误状态
|
||||||
|
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略错误输入
|
||||||
|
cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n';
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
if (cin.fail() || year < 0 || year > 999999)
|
||||||
|
{
|
||||||
|
|
||||||
|
cin.clear(); // 清除错误状态
|
||||||
|
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略错误输入
|
||||||
|
cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n';
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
int cinday;
|
||||||
|
cinday = week(year, month, day);
|
||||||
|
switch (cinday)
|
||||||
|
{
|
||||||
|
case 0: cout << year << "年" << month << "月" << day << "日是" << "星期日" << '\n' << '\n'; break;
|
||||||
|
case 1: cout << year << "年" << month << "月" << day << "日是" << "星期一" << '\n' << '\n'; break;
|
||||||
|
case 2: cout << year << "年" << month << "月" << day << "日是" << "星期二" << '\n' << '\n'; break;
|
||||||
|
case 3: cout << year << "年" << month << "月" << day << "日是" << "星期三" << '\n' << '\n'; break;
|
||||||
|
case 4: cout << year << "年" << month << "月" << day << "日是" << "星期四" << '\n' << '\n'; break;
|
||||||
|
case 5: cout << year << "年" << month << "月" << day << "日是" << "星期五" << '\n' << '\n'; break;
|
||||||
|
case 6: cout << year << "年" << month << "月" << day << "日是" << "星期六" << '\n' << '\n'; break;
|
||||||
|
}
|
||||||
|
cout << '\n' << '\n';
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
cout << "1.单列输出" << '\n' << "2.双列输出" << '\n';
|
||||||
|
int b; cin >> b;
|
||||||
|
if (cin.fail() || b < 1 || b > 2) {
|
||||||
|
|
||||||
|
cin.clear(); // 清除错误状态
|
||||||
|
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略错误输入
|
||||||
|
cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n';
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
switch (b)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
cout << "输入查询的年份 :";
|
||||||
|
cin >> wannian;
|
||||||
|
if (cin.fail() || wannian < 0 || wannian > 99999) {
|
||||||
|
|
||||||
|
cin.clear(); // 清除错误状态
|
||||||
|
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略错误输入
|
||||||
|
cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n';
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
clprintf(wannian, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
cout << "输入查询的年份 :";
|
||||||
|
cin >> wannian;
|
||||||
|
if (cin.fail() || wannian < 0 || wannian > 10000) {
|
||||||
|
|
||||||
|
cin.clear(); // 清除错误状态
|
||||||
|
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略错误输入
|
||||||
|
cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n';
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
clprintf(wannian, 2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
cout << "输入查询的年份 :";
|
||||||
|
cin >> year;
|
||||||
|
if (cin.fail() || year < 0 || year > 99999) {
|
||||||
|
|
||||||
|
cin.clear(); // 清除错误状态
|
||||||
|
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略错误输入
|
||||||
|
cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n';
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
if (runyear(year) == 366)
|
||||||
|
cout << year << "年是闰年" << '\n' << '\n';
|
||||||
|
else
|
||||||
|
cout << year << "年不是闰年" << '\n' << '\n';
|
||||||
|
}
|
||||||
|
main();
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
int y, m, d;
|
||||||
|
cout << "查询节假日" << '\n';
|
||||||
|
cin >> y >> m >> d;
|
||||||
|
checkFestival(y, m, d);
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
cout << "\033[31m退出请输出uit最帅的人的名字首字母\033[0m" << '\n';
|
||||||
|
string shuai;
|
||||||
|
cin >> shuai;
|
||||||
|
if (shuai == "lxm" || shuai == "tl" || shuai == "zsk")
|
||||||
|
{
|
||||||
|
cout << "\033[33m哈哈\033[0m" << '\n'; return 0;
|
||||||
|
}
|
||||||
|
else if (shuai == "gxk")
|
||||||
|
{
|
||||||
|
cout << "\033[33m我高哥就是帅怎么了\033[0m" << '\n'; return 0;
|
||||||
|
}
|
||||||
|
else if (shuai == "yxx")
|
||||||
|
{
|
||||||
|
cout << "\033[33m我小小哥就是帅怎么了\033[0m" << '\n'; return 0;
|
||||||
|
}
|
||||||
|
else if (shuai == "mzn")
|
||||||
|
{
|
||||||
|
cout << "\033[33m我马哥就是帅怎么了\033[0m" << '\n'; return 0;
|
||||||
|
}
|
||||||
|
else if (shuai == "lcm")
|
||||||
|
{
|
||||||
|
cout << "\033[33m我陆哥就是帅怎么了\033[0m" << '\n'; return 0;
|
||||||
|
}
|
||||||
|
else if (shuai == "djy")
|
||||||
|
{
|
||||||
|
cout << "\033[33m请输入他的真名(s开头)\033[0m" << '\n';
|
||||||
|
cin >> shuai;
|
||||||
|
if (shuai == "sys")
|
||||||
|
cout << "\033[33m哈哈\033[0m" << '\n'; return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cout << "\033[33m再想想\033[0m" << '\n';
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
368
stu2024/计科2401孙美琪.c
Normal file
368
stu2024/计科2401孙美琪.c
Normal file
@ -0,0 +1,368 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
void Monthhead(int month)
|
||||||
|
{
|
||||||
|
|
||||||
|
printf("%s\n",(month==1)?"Jan":(month==2)?"Feb":(month==3)?"Mar":(month==4)?"Apr":(month==5)?"May":(month==6)?"Jun":(month==7)?"Jul":(month==8)?"Aug":(month==9)?"Sep":(month==10)?"Oct":(month==11)?"Nov":"Dec");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
void dayHead()
|
||||||
|
{
|
||||||
|
printf(" Sun Mon Tue Med Thu Fri Sat\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int firstDay(int year)
|
||||||
|
{
|
||||||
|
int b=(year-1)*365+(year-1)*400+(year-1)*4-(year-1)*100+1;
|
||||||
|
return b%7;
|
||||||
|
}
|
||||||
|
int Week6(int year,int month)
|
||||||
|
{
|
||||||
|
int w,c,y;
|
||||||
|
int day=1;
|
||||||
|
if(month<3)
|
||||||
|
{
|
||||||
|
month+=12;
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
c=year/100;
|
||||||
|
y=year%100;
|
||||||
|
w=(c/4-2*c+y+y/4+13*(month+1)/5+day-1)%7;
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
int Week(int year,int month,int day)
|
||||||
|
{
|
||||||
|
int w,c,y;
|
||||||
|
if(year<=1582&&month<=10&&day<15)
|
||||||
|
{
|
||||||
|
if(month<3)
|
||||||
|
{
|
||||||
|
month+=12;
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
day-=4;
|
||||||
|
c=year/100;
|
||||||
|
y=year%100;
|
||||||
|
w=(c/4-2*c+y+y/4+13*(month+1)/5+day-1)%7;
|
||||||
|
}else{
|
||||||
|
if(month<3)
|
||||||
|
{
|
||||||
|
month+=12;
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
c=year/100;
|
||||||
|
y=year%100;
|
||||||
|
w=(c/4-2*c+y+y/4+13*(month+1)/5+day-1)%7;
|
||||||
|
}
|
||||||
|
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
int isLeapYear(int year)
|
||||||
|
{
|
||||||
|
return (year%4==0&&year%100!=0)||year%400==0;
|
||||||
|
|
||||||
|
}
|
||||||
|
int DayMonth(int year,int month)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(month==2)
|
||||||
|
{
|
||||||
|
if(isLeapYear(year))
|
||||||
|
{
|
||||||
|
return 29;
|
||||||
|
}else{
|
||||||
|
return 28;
|
||||||
|
}
|
||||||
|
}else if(month==4||month==6||month==9||month==11){
|
||||||
|
return 30;
|
||||||
|
}else{
|
||||||
|
return 31;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void printCalendar3(int year)
|
||||||
|
{
|
||||||
|
int first=firstDay(year);
|
||||||
|
int month,day;
|
||||||
|
for(month=1;month<=9;month++)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
Monthhead(month);
|
||||||
|
dayHead();
|
||||||
|
for(day=1;day<=first;day++)
|
||||||
|
printf(" ");
|
||||||
|
int dayMonth=DayMonth(year,month);
|
||||||
|
for(day=1;day<=dayMonth;day++)
|
||||||
|
{
|
||||||
|
printf("%4d",day);
|
||||||
|
if((day+first)%7==0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if((day+first)%7!=0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
first=(first+dayMonth)%7;
|
||||||
|
}
|
||||||
|
for(month=10;month<=12;month++)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
|
||||||
|
day=1;
|
||||||
|
if(month==10)
|
||||||
|
{
|
||||||
|
int a[21]={1,2,3,4,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
|
||||||
|
Monthhead(month);
|
||||||
|
dayHead();
|
||||||
|
|
||||||
|
int first2=Week(year,month,day);
|
||||||
|
for(i=1;i<=first2;i++)
|
||||||
|
printf(" ");
|
||||||
|
for(i=0;i<21;i++)
|
||||||
|
{
|
||||||
|
printf("%4d",a[i]);
|
||||||
|
if((i+first2+1)%7==0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if((i+first2)%7!=0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
first2=(first2+21)%7;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
int first3=Week(year,month,day);
|
||||||
|
Monthhead(month);
|
||||||
|
dayHead();
|
||||||
|
for(i=1;i<=first3;i++)
|
||||||
|
printf(" ");
|
||||||
|
int dayMonth;
|
||||||
|
if(month==11){
|
||||||
|
dayMonth=30;
|
||||||
|
}else if(month==12){
|
||||||
|
dayMonth=31;
|
||||||
|
}
|
||||||
|
for(i=1;i<=dayMonth;i++)
|
||||||
|
{
|
||||||
|
printf("%4d",i);
|
||||||
|
if((i+first3)%7==0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if((i+first3)%7!=0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
first3=(first3+dayMonth)%7;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
void printCalendar(int year)
|
||||||
|
{
|
||||||
|
int first=firstDay(year);
|
||||||
|
int month,day;
|
||||||
|
for(month=1;month<=12;month++)
|
||||||
|
{
|
||||||
|
Monthhead(month);
|
||||||
|
dayHead();
|
||||||
|
for(day=1;day<=first;day++)
|
||||||
|
printf(" ");
|
||||||
|
int dayMonth=DayMonth(year,month);
|
||||||
|
for(day=1;day<=dayMonth;day++)
|
||||||
|
{
|
||||||
|
printf("%4d",day);
|
||||||
|
if((day+first)%7==0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if((day+first)%7!=0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
first=(first+dayMonth)%7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
long int f(int year,int month)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
if(month<3) return year-1;
|
||||||
|
|
||||||
|
else return year;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
long int g(int month)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
if(month<3) return month+13;
|
||||||
|
|
||||||
|
else return month+1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
long int n(int year,int month,int day)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
return 1461L*f(year,month)/4+153L*g(month)/5+day;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int w(int year,int month,int day)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
return(int) ((n(year,month,day)%7-621049L%7+7)%7);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int date[12][6][7];
|
||||||
|
|
||||||
|
int day_tbl[ ][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
|
||||||
|
|
||||||
|
int Double(int year)
|
||||||
|
{
|
||||||
|
|
||||||
|
int sw,leap,i,j,k,wd,day;
|
||||||
|
|
||||||
|
char title[]="SUM MON TUE WED THU FRI SAT";
|
||||||
|
|
||||||
|
sw=w(year,1,1);
|
||||||
|
|
||||||
|
leap=(year%4==0&&year%100!=0)||year%400==0;
|
||||||
|
|
||||||
|
for(i=0;i<12;i++)
|
||||||
|
|
||||||
|
for(j=0;j<6;j++)
|
||||||
|
|
||||||
|
for(k=0;k<7;k++)
|
||||||
|
|
||||||
|
date[i][j][k]=0;
|
||||||
|
|
||||||
|
for(i=0;i<12;i++)
|
||||||
|
|
||||||
|
for(wd=0,day=1;day<=day_tbl[leap][i];day++)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
date[i][wd][sw]=day;
|
||||||
|
|
||||||
|
sw=++sw%7;
|
||||||
|
if(sw==0) wd++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n================== The Calendar of Year %d==================\n",year);
|
||||||
|
|
||||||
|
for(i=0;i<6;i++)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
for(wd=0,k=0;k<7;k++)
|
||||||
|
|
||||||
|
wd+=date[i][5][k]+date[i+6][5][k];
|
||||||
|
|
||||||
|
wd=wd?6:5;
|
||||||
|
|
||||||
|
printf("%2d %s %2d %s\n",i+1,title,i+7,title);
|
||||||
|
|
||||||
|
for(j=0;j<6;j++)
|
||||||
|
{
|
||||||
|
|
||||||
|
/*printf(" ");*/
|
||||||
|
|
||||||
|
for(k=0;k<7;k++)
|
||||||
|
|
||||||
|
if(date[i][j][k])
|
||||||
|
|
||||||
|
printf("%5d",date[i][j][k]);
|
||||||
|
|
||||||
|
else printf(" ");
|
||||||
|
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
|
||||||
|
for(k=0;k<7;k++)
|
||||||
|
|
||||||
|
if(date[i+6][j][k])
|
||||||
|
|
||||||
|
printf("%5d",date[i+6][j][k]);
|
||||||
|
|
||||||
|
else printf(" ");
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void choiceCalendar(int year)
|
||||||
|
{
|
||||||
|
|
||||||
|
int choose;
|
||||||
|
while(1){printf("1.单列\n2.双列\n");
|
||||||
|
scanf("%d",&choose);
|
||||||
|
switch(choose){
|
||||||
|
case 1: if(year!=1582)
|
||||||
|
{
|
||||||
|
printCalendar(year);
|
||||||
|
}else if(year==1582){
|
||||||
|
printCalendar3(year);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:Double(year);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("输入有错误\n");
|
||||||
|
break;
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int choice,year,month,day;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
printf("1.某年日历\n2.星期几\n3.闰年判断\n4.退出程序\n");
|
||||||
|
printf("选哪个!\n");
|
||||||
|
scanf("%d",&choice);
|
||||||
|
switch(choice){
|
||||||
|
case 1:printf("输入年份:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
choiceCalendar(year);
|
||||||
|
break;
|
||||||
|
case 2:printf("输入某年某月某日(空格隔开):\n");
|
||||||
|
scanf("%d %d %d",&year,&month,&day);
|
||||||
|
int w=Week(year,month,day);
|
||||||
|
printf("%d\n",w);
|
||||||
|
break;
|
||||||
|
case 3:printf("输入年份:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(isLeapYear(year)){
|
||||||
|
printf("YES\n");
|
||||||
|
}else{
|
||||||
|
printf("NO\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4: return 0;
|
||||||
|
break;
|
||||||
|
default:printf("无效选择\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
601
stu2024/计科2401常迦鑫.cpp
Normal file
601
stu2024/计科2401常迦鑫.cpp
Normal file
@ -0,0 +1,601 @@
|
|||||||
|
#include<bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
#include<math.h>
|
||||||
|
#include<string>
|
||||||
|
#include<iostream>
|
||||||
|
int run (int n)
|
||||||
|
{
|
||||||
|
if(n%400==0||(n%4==0&&n%100!=0))
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int rq (int n,int y,int r)
|
||||||
|
{
|
||||||
|
if (y <= 2)
|
||||||
|
{
|
||||||
|
y += 12;
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
int k = n % 100;
|
||||||
|
int j = n / 100;
|
||||||
|
int h = (r + 13 * (y + 1) / 5 + k + k / 4 + j / 4 + 5 * j) % 7;
|
||||||
|
if (y > 12)
|
||||||
|
{
|
||||||
|
y -= 12;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
h--;
|
||||||
|
if(h==-1)
|
||||||
|
{
|
||||||
|
h=6;
|
||||||
|
}
|
||||||
|
if((n==1582&&y==10&&r<=4)||(n==1582&&y<10)||(n<1582))
|
||||||
|
{
|
||||||
|
switch(h)
|
||||||
|
{
|
||||||
|
case 6:h=2;break;
|
||||||
|
case 5:h=1;break;
|
||||||
|
case 4:h=0;break;
|
||||||
|
case 3:h=6;break;
|
||||||
|
case 2:h=5;break;
|
||||||
|
case 1:h=4;break;
|
||||||
|
case 0:h=3;break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
int dy (int n,int y)
|
||||||
|
{
|
||||||
|
if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)
|
||||||
|
{
|
||||||
|
return 31;
|
||||||
|
}else if(y==2)
|
||||||
|
{
|
||||||
|
if(run(n))
|
||||||
|
{
|
||||||
|
return 29;
|
||||||
|
}
|
||||||
|
return 28;
|
||||||
|
}else
|
||||||
|
return 30;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
for(int f=1000;f>=0;f--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
wen1:
|
||||||
|
cout<<"1.查询日期:"<<endl;
|
||||||
|
cout<<"2.判断闰年:"<<endl;
|
||||||
|
cout<<"3.查看某年日历:"<<endl;
|
||||||
|
cout<<"4.退出:"<<endl<<endl<<endl;
|
||||||
|
string a;
|
||||||
|
cin>>a;
|
||||||
|
if(a=="1")
|
||||||
|
{
|
||||||
|
int year, month, day;
|
||||||
|
for(int i=1000;i>=0;i--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout <<endl<< "请输入年、月、日:" << endl;
|
||||||
|
cin >> year >> month >> day;
|
||||||
|
if(month>12||day>31)
|
||||||
|
{
|
||||||
|
goto wen;
|
||||||
|
}
|
||||||
|
char week[8][10] = {"周日","周一","周二","周三","周四","周五","周六"};
|
||||||
|
int h=rq(year,month,day);
|
||||||
|
for(int f=1000;f>=0;f--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<endl<<year<<"年"<<month<<"月"<<day<<"日是"<<week[h]<<endl;
|
||||||
|
}else if(a=="2")
|
||||||
|
{
|
||||||
|
for(int i=1000;i>=0;i--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<endl<<"请出入你想查询的年份:"<<endl;
|
||||||
|
int n ;
|
||||||
|
cin>>n;
|
||||||
|
cout<<endl;
|
||||||
|
if(run(n))
|
||||||
|
{
|
||||||
|
for(int i=1000;i>=0;i--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<n<<"年是闰年"<<endl;
|
||||||
|
goto wen;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
for(int i=1000;i>=0;i--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<n<<"年不是闰年"<<endl<<endl;
|
||||||
|
goto wen;
|
||||||
|
}
|
||||||
|
}else if(a=="3")
|
||||||
|
{
|
||||||
|
for(int i=1000;i>=0;i--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
wen2:
|
||||||
|
cout<<"1.单行输出"<<endl;
|
||||||
|
cout<<"2.双行输出"<<endl;
|
||||||
|
string e;
|
||||||
|
cin>>e;
|
||||||
|
if(e=="1")
|
||||||
|
{
|
||||||
|
for(int i=1000;i>=0;i--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<"请输入你想查询的年份:"<<endl;
|
||||||
|
int year1;
|
||||||
|
cin>>year1;
|
||||||
|
if(year1!=1582){
|
||||||
|
|
||||||
|
char week1[8][10] = {"周日","周一","周二","周三","周四","周五","周六"};
|
||||||
|
char yue[20][20] = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
|
||||||
|
for(int i=0;i<12;i++)
|
||||||
|
{
|
||||||
|
cout<<" "<<yue[i]<<endl;
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
cout<<week1[j]<<" ";
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
int test=rq(year1,i+1,1);
|
||||||
|
int t2=1;
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(j==test)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t2<<" ";
|
||||||
|
t2++;
|
||||||
|
test++;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<" ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
int t3=1;
|
||||||
|
for(int j=t2;j<=dy(year1,i+1);j++,t2++)
|
||||||
|
{
|
||||||
|
if(t3==8)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
t3=1;
|
||||||
|
}
|
||||||
|
if(j<10)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t2<<" ";
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<t2<<" ";
|
||||||
|
}
|
||||||
|
t3++;
|
||||||
|
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<"请输入你想查询的年份:"<<endl;
|
||||||
|
int year1=1582;
|
||||||
|
char week1[8][10] = {"周日","周一","周二","周三","周四","周五","周六"};
|
||||||
|
char yue[20][20] = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
|
||||||
|
for(int i=0;i<12;i++)
|
||||||
|
{
|
||||||
|
cout<<" "<<yue[i]<<endl;
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
cout<<week1[j]<<" ";
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
int test=rq(year1,i+1,1);
|
||||||
|
int t2=1;
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
if(i==9&&j==5)
|
||||||
|
{
|
||||||
|
t2=15;
|
||||||
|
}
|
||||||
|
if(j==test)
|
||||||
|
{
|
||||||
|
if(t2<10)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t2<<" ";
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<t2<<" ";
|
||||||
|
}
|
||||||
|
t2++;
|
||||||
|
test++;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<" ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
int t3=1;
|
||||||
|
for(int j=t2;j<=dy(year1,i+1);j++,t2++)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(t3==8)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
t3=1;
|
||||||
|
}
|
||||||
|
if(j<10)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t2<<" ";
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<t2<<" ";
|
||||||
|
}
|
||||||
|
t3++;
|
||||||
|
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
}else if(e=="2")
|
||||||
|
{
|
||||||
|
for(int f=1000;f>=0;f--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<"请输入你想要查询的年份:"<<endl;
|
||||||
|
int year1;
|
||||||
|
cin>>year1;
|
||||||
|
if(year1!=1582){
|
||||||
|
|
||||||
|
char week1[8][10] = {"周日","周一","周二","周三","周四","周五","周六"};
|
||||||
|
char yue[20][20] = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
|
||||||
|
for(int i=0;i<12;i+=2)
|
||||||
|
{
|
||||||
|
int ttt;
|
||||||
|
cout<<" "<<yue[i]<<" "<<yue[i+1]<<endl;
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
cout<<week1[j]<<" ";
|
||||||
|
}
|
||||||
|
cout<<" ";
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
cout<<week1[j]<<" ";
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
int test1=rq(year1,i+1,1),test2=rq(year1,i+2,1);
|
||||||
|
int t2=1,t22=1;
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(j==test1)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t2<<" ";
|
||||||
|
t2++;
|
||||||
|
test1++;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<" ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<" ";
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(j==test2)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t22<<" ";
|
||||||
|
t22++;
|
||||||
|
test2++;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<" ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<endl<<endl;
|
||||||
|
int t3=1,t33=1;
|
||||||
|
int j1=t22;
|
||||||
|
for(int j=t2;j<=dy(year1,i+1);j++,t2++)
|
||||||
|
{
|
||||||
|
if(t3==8)
|
||||||
|
{
|
||||||
|
nb:
|
||||||
|
cout<<" ";
|
||||||
|
for(j1;j1<=dy(year1,i+2);j1++,t22++)
|
||||||
|
{
|
||||||
|
if(t33==8)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
t33=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(j1<10)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t22<<" ";
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<t22<<" ";
|
||||||
|
}
|
||||||
|
t33++;
|
||||||
|
if(t22==dy(year1,i+2))
|
||||||
|
{
|
||||||
|
if(j==dy(year1,i+1)&&(t3!=8||rq(year1,i+1,t2)==6))
|
||||||
|
{
|
||||||
|
goto nb111;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<endl<<endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if(j==dy(year1,i+1)&&(t22!=dy(year1,i+2))&&t33==8)
|
||||||
|
{
|
||||||
|
cout<<endl<<" ";
|
||||||
|
t2++;
|
||||||
|
t33=1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
t3=1;
|
||||||
|
}
|
||||||
|
if(j<10)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t2<<" ";
|
||||||
|
}else if(j>=10)
|
||||||
|
{
|
||||||
|
cout<<t2<<" ";
|
||||||
|
}
|
||||||
|
t3++;
|
||||||
|
if(j==dy(year1,i+1))
|
||||||
|
{
|
||||||
|
for(int m=1;m<8-t3;m++)
|
||||||
|
{
|
||||||
|
cout<<" ";
|
||||||
|
}
|
||||||
|
if(t3!=8)
|
||||||
|
{
|
||||||
|
cout<<" ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(j1!=dy(year1,i+2))
|
||||||
|
{
|
||||||
|
goto nb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
nb111:
|
||||||
|
cout<<endl<<endl;
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
int year1=1582;
|
||||||
|
char week1[8][10] = {"周日","周一","周二","周三","周四","周五","周六"};
|
||||||
|
char yue[20][20] = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
|
||||||
|
for(int i=0;i<12;i+=2)
|
||||||
|
{
|
||||||
|
int ttt;
|
||||||
|
cout<<" "<<yue[i]<<" "<<yue[i+1]<<endl;
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
cout<<week1[j]<<" ";
|
||||||
|
}
|
||||||
|
cout<<" ";
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
cout<<week1[j]<<" ";
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
int test1=rq(year1,i+1,1),test2=rq(year1,i+2,1);
|
||||||
|
int t2=1,t22=1;
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(j==test1)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t2<<" ";
|
||||||
|
t2++;
|
||||||
|
test1++;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<" ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<" ";
|
||||||
|
for(int j=0;j<7;j++)
|
||||||
|
{
|
||||||
|
if(i+1==9&&j==5)
|
||||||
|
{
|
||||||
|
t22=15;
|
||||||
|
}
|
||||||
|
if(j==test2)
|
||||||
|
{
|
||||||
|
if(t22<10)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t22<<" ";
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<t22<<" ";
|
||||||
|
}
|
||||||
|
t22++;
|
||||||
|
test2++;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<" ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<endl<<endl;
|
||||||
|
int t3=1,t33=1;
|
||||||
|
int j1=t22;
|
||||||
|
for(int j=t2;j<=dy(year1,i+1);j++,t2++)
|
||||||
|
{
|
||||||
|
if(t3==8&&t22!=dy(year1,i+2))
|
||||||
|
{
|
||||||
|
nb44:
|
||||||
|
cout<<" ";
|
||||||
|
for(j1;j1<=dy(year1,i+2);j1++,t22++)
|
||||||
|
{
|
||||||
|
if(t33==8)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
t33=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(j1<10)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t22<<" ";
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<t22<<" ";
|
||||||
|
}
|
||||||
|
t33++;
|
||||||
|
if(t22==dy(year1,i+2))
|
||||||
|
{
|
||||||
|
if(j==dy(year1,i+1)&&(t3!=8||rq(year1,i+1,t2)==6))
|
||||||
|
{
|
||||||
|
goto nb1;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
cout<<endl<<endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if(j==dy(year1,i+1)&&(t22!=dy(year1,i+2))&&t33==8)
|
||||||
|
{
|
||||||
|
cout<<endl<<" ";
|
||||||
|
t2++;
|
||||||
|
t33=1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
t3=1;
|
||||||
|
}
|
||||||
|
if(i==8&&(t2==23||t2==30))
|
||||||
|
{
|
||||||
|
cout<<endl<<endl<<endl;
|
||||||
|
}
|
||||||
|
if(j<10)
|
||||||
|
{
|
||||||
|
cout<<"0"<<t2<<" ";
|
||||||
|
}else if(j>=10)
|
||||||
|
{
|
||||||
|
cout<<t2<<" ";
|
||||||
|
}
|
||||||
|
t3++;
|
||||||
|
if(j==dy(year1,i+1))
|
||||||
|
{
|
||||||
|
for(int m=1;m<8-t3;m++)
|
||||||
|
{
|
||||||
|
cout<<" ";
|
||||||
|
}
|
||||||
|
if(t3!=8)
|
||||||
|
{
|
||||||
|
cout<<" ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(j1!=dy(year1,i+2))
|
||||||
|
{
|
||||||
|
goto nb44;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
nb1:
|
||||||
|
cout<<endl<<endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
for(int i=1000;i>=0;i--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<"输入错误,请重新选择:";
|
||||||
|
goto wen2;
|
||||||
|
}
|
||||||
|
}else if(a=="4")
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
for(int i=1000;i>=0;i--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<"输入错误,请重新选择:";
|
||||||
|
goto wen1;
|
||||||
|
}
|
||||||
|
wen:
|
||||||
|
cout<<"1.继续查询:"<<endl;
|
||||||
|
cout<<"2.退出"<<endl;
|
||||||
|
string b;
|
||||||
|
cin>>b;
|
||||||
|
if(b=="1")
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}else if(b=="2")
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
|
||||||
|
for(int i=1000;i>=0;i--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<"输入错误,请重新选择:"<<endl;
|
||||||
|
goto wen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i=1000;i>=0;i--)
|
||||||
|
{
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout << " ******** ******** "<< endl;
|
||||||
|
cout << " *********** ************ "<< endl;
|
||||||
|
cout << "************* *************" << endl;
|
||||||
|
cout << " ************************* "<< endl;
|
||||||
|
cout << " ******谢谢!!!******** "<< endl;
|
||||||
|
cout << " ******************** "<< endl;
|
||||||
|
cout << " ****************** "<< endl;
|
||||||
|
cout << " **************** "<< endl;
|
||||||
|
cout << " ************ "<< endl;
|
||||||
|
cout << " ******** "<< endl;
|
||||||
|
cout << " **** "<< endl;
|
||||||
|
cout << " 谢谢!!! "<< endl;
|
||||||
|
cout << " **** "<< endl;
|
||||||
|
cout << " ******** "<< endl;
|
||||||
|
cout << " ************ "<< endl;
|
||||||
|
cout << " **************** "<< endl;
|
||||||
|
cout << " ****************** "<< endl;
|
||||||
|
cout << " ******************** "<< endl;
|
||||||
|
cout << " *******谢谢!!!****** "<< endl;
|
||||||
|
cout << " ************************ "<< endl;
|
||||||
|
cout << " ************* ************ "<< endl;
|
||||||
|
cout << " *********** *********** "<< endl;
|
||||||
|
cout << " ******** ******** "<< endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
272
stu2024/计科2401王需.cpp
Normal file
272
stu2024/计科2401王需.cpp
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
int j;
|
||||||
|
printf("1.查询某年某月是星期几,并判断是否为闰年\n");
|
||||||
|
printf("2.打印单列日历\n");
|
||||||
|
printf("3.打印双列日历\n");
|
||||||
|
printf("4.退出\n");
|
||||||
|
scanf("%d",&x);
|
||||||
|
int year;
|
||||||
|
int month;
|
||||||
|
int day;
|
||||||
|
int week;
|
||||||
|
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
int c;
|
||||||
|
int y;
|
||||||
|
int k=1;
|
||||||
|
int a=2;
|
||||||
|
int dayss=1;
|
||||||
|
switch(x)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
scanf("%d-%d-%d",&year,&month,&day);
|
||||||
|
if(((year%4==0)&&(year%100!=0))||(year%400==0))
|
||||||
|
{
|
||||||
|
days[2]=29;
|
||||||
|
printf("闰年\n");
|
||||||
|
} else printf("平年\n");
|
||||||
|
if((month==1&&day<=31)||(days[2]==29&&month==2&&day<=29)||(days[2]==28&&month==2&&day<=28)||(month==3&&day<=31)||(month==4&&day<=30)||
|
||||||
|
(month==5&&day<=31)||(month==6&&day<=30)||(month==7&&day<=31)||(month==8&&day<=31)||(month==9&&day<=30)||(year!=1582&&month==10&&day<=31)||(month==11&&day<=30)||
|
||||||
|
(month==12&&day<=31)||(year==1582&&month==10&&day!=5&&day!=6&&day!=7&&day!=8&&day!=9&&day!=10&&day!=11&&day!=12&&day!=13&&day!=14))
|
||||||
|
{
|
||||||
|
if (month == 1 || month == 2)
|
||||||
|
year--, month += 12;
|
||||||
|
c = year / 100;
|
||||||
|
y = year - c * 100;
|
||||||
|
if(year>1582)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
||||||
|
else if(year==1582&&month>10)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
||||||
|
else if((year==1582&&month==10)&&day>4)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
||||||
|
else
|
||||||
|
week=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
||||||
|
if(month==13||month==14)
|
||||||
|
year++;
|
||||||
|
while(week < 0)
|
||||||
|
week += 7;
|
||||||
|
week %= 7;
|
||||||
|
switch (week)
|
||||||
|
{
|
||||||
|
case 1:printf("星期一\n"); break;
|
||||||
|
case 2:printf("星期二\n"); break;
|
||||||
|
case 3:printf("星期三\n"); break;
|
||||||
|
case 4:printf("星期四\n"); break;
|
||||||
|
case 5:printf("星期五\n"); break;
|
||||||
|
case 6:printf("星期六\n"); break;
|
||||||
|
case 0:printf("星期天\n"); break;
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
else printf("输入错误");
|
||||||
|
case 2:
|
||||||
|
scanf("%d-%d-%d",&year,&month,&day);
|
||||||
|
if((month==1&&day<=31)||(days[2]==29&&month==2&&day<=29)||(days[2]==28&&month==2&&day<=28)||(month==3&&day<=31)||(month==4&&day<=30)||
|
||||||
|
(month==5&&day<=31)||(month==6&&day<=30)||(month==7&&day<=31)||(month==8&&day<=31)||(month==9&&day<=30)||(year!=1582&&month==10&&day<=31)||(month==11&&day<=30)||
|
||||||
|
(month==12&&day<=31)||(year==1582&&month==10&&day!=5&&day!=6&&day!=7&&day!=8&&day!=9&&day!=10&&day!=11&&day!=12&&day!=13&&day!=14))
|
||||||
|
{
|
||||||
|
for( j=1;j<=12;j++)
|
||||||
|
{
|
||||||
|
month=j;
|
||||||
|
printf("\n");
|
||||||
|
printf("%d 月\n",month);
|
||||||
|
printf("周日 周一 周二 周三 周四 周五 周六\n");
|
||||||
|
if (month == 1 || month == 2)
|
||||||
|
year--, month += 12;
|
||||||
|
c = year / 100;
|
||||||
|
y = year - c * 100;
|
||||||
|
if(year>1582)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
||||||
|
else if(year==1582&&month>10)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
||||||
|
else if((year==1582&&month==10)&&day>4)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
||||||
|
else
|
||||||
|
week=(1+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
||||||
|
if(month==13||month==14)
|
||||||
|
year++;
|
||||||
|
while(week < 0)
|
||||||
|
week += 7;
|
||||||
|
week %= 7;
|
||||||
|
if(year==1582&&month==10)
|
||||||
|
week=1;
|
||||||
|
switch (week)
|
||||||
|
{
|
||||||
|
case 1:printf(" "); break;
|
||||||
|
case 2:printf(" "); break;
|
||||||
|
case 3:printf(" "); break;
|
||||||
|
case 4:printf(" "); break;
|
||||||
|
case 5:printf(" "); break;
|
||||||
|
case 6:printf(" "); break;
|
||||||
|
}
|
||||||
|
for(day=1;day<=days[j];day++)
|
||||||
|
{
|
||||||
|
month=j;
|
||||||
|
while((year==1582&&month==10)&&(day==5||day==6||day==7||day==8||day==9||day==10||day==11||day==12||day==13||day==14))
|
||||||
|
day++;
|
||||||
|
if (month == 1 || month == 2)
|
||||||
|
year--, month += 12;
|
||||||
|
c = year / 100;
|
||||||
|
y = year - c * 100;
|
||||||
|
if(year>1582)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
||||||
|
else if(year==1582&&month>10)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
||||||
|
else if((year==1582&&month==10)&&day>4)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
||||||
|
else
|
||||||
|
week=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
||||||
|
if(month==13||month==14)
|
||||||
|
year++;
|
||||||
|
while(week < 0)
|
||||||
|
week += 7;
|
||||||
|
week %= 7;
|
||||||
|
if(week==6)
|
||||||
|
printf("%2d\n",day);
|
||||||
|
else
|
||||||
|
printf("%2d ",day);
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
}else printf("输入错误");
|
||||||
|
case 3:
|
||||||
|
scanf("%d-%d-%d",&year,&month,&day);
|
||||||
|
if((month==1&&day<=31)||(days[2]==29&&month==2&&day<=29)||(days[2]==28&&month==2&&day<=28)||(month==3&&day<=31)||(month==4&&day<=30)||
|
||||||
|
(month==5&&day<=31)||(month==6&&day<=30)||(month==7&&day<=31)||(month==8&&day<=31)||(month==9&&day<=30)||(year!=1582&&month==10&&day<=31)||(month==11&&day<=30)||
|
||||||
|
(month==12&&day<=31)||(year==1582&&month==10&&day!=5&&day!=6&&day!=7&&day!=8&&day!=9&&day!=10&&day!=11&&day!=12&&day!=13&&day!=14))
|
||||||
|
{
|
||||||
|
for( j=1;j<=12;j+=2)
|
||||||
|
{day=1;
|
||||||
|
month=j;
|
||||||
|
printf("\n");
|
||||||
|
printf("%d 月 %d月\n",month,month+1);
|
||||||
|
printf("周日 周一 周二 周三 周四 周五 周六 周日 周一 周二 周三 周四 周五 周六\n");
|
||||||
|
if (month == 1 || month == 2)
|
||||||
|
year--, month += 12;
|
||||||
|
c = year / 100;
|
||||||
|
y = year - c * 100;
|
||||||
|
if(year>1582)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
||||||
|
else if(year==1582&&month>10)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
||||||
|
else if((year==1582&&month==10)&&day>4)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
||||||
|
else
|
||||||
|
week=(1+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
||||||
|
if(month==13||month==14)
|
||||||
|
year++;
|
||||||
|
while(week < 0)
|
||||||
|
week += 7;
|
||||||
|
week %= 7;
|
||||||
|
if(year==1582&&month==10)
|
||||||
|
week=1;
|
||||||
|
switch (week)
|
||||||
|
{
|
||||||
|
case 1:printf(" "); break;
|
||||||
|
case 2:printf(" "); break;
|
||||||
|
case 3:printf(" "); break;
|
||||||
|
case 4:printf(" "); break;
|
||||||
|
case 5:printf(" "); break;
|
||||||
|
case 6:printf(" "); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(;day<=days[k];day++)
|
||||||
|
{
|
||||||
|
month=k;
|
||||||
|
while((year==1582&&month==10)&&(day==5||day==6||day==7||day==8||day==9||day==10||day==11||day==12||day==13||day==14))
|
||||||
|
day++;
|
||||||
|
if (month == 1 || month == 2)
|
||||||
|
year--, month += 12;
|
||||||
|
c = year / 100;
|
||||||
|
y = year - c * 100;
|
||||||
|
if(year>1582)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
||||||
|
else if(year==1582&&month>10)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
||||||
|
else if((year==1582&&month==10)&&day>4)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
||||||
|
else
|
||||||
|
week=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
||||||
|
if(month==13||month==14)
|
||||||
|
year++;
|
||||||
|
while(week < 0)
|
||||||
|
week += 7;
|
||||||
|
week %= 7;
|
||||||
|
if(week!=6)
|
||||||
|
printf("%2d ",day);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%2d ",day);
|
||||||
|
for( ;a<=12;a+=2)
|
||||||
|
{
|
||||||
|
month=a;
|
||||||
|
if (month == 1 || month == 2)
|
||||||
|
year--, month += 12;
|
||||||
|
c = year / 100;
|
||||||
|
y = year - c * 100;
|
||||||
|
if(year>1582)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
||||||
|
else if(year==1582&&month>10)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
||||||
|
else if((year==1582&&month==10)&&day>4)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
||||||
|
else
|
||||||
|
week=(1+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
||||||
|
if(month==13||month==14)
|
||||||
|
year++;
|
||||||
|
while(week < 0)
|
||||||
|
week += 7;
|
||||||
|
week %= 7;
|
||||||
|
if(year==1582&&month==10)
|
||||||
|
week=1;
|
||||||
|
switch (week)
|
||||||
|
{
|
||||||
|
case 1:printf(" "); break;
|
||||||
|
case 2:printf(" "); break;
|
||||||
|
case 3:printf(" "); break;
|
||||||
|
case 4:printf(" "); break;
|
||||||
|
case 5:printf(" "); break;
|
||||||
|
case 6:printf(" "); break;
|
||||||
|
}}
|
||||||
|
for(;dayss<=days[a];dayss++)
|
||||||
|
{
|
||||||
|
month=a;
|
||||||
|
while((year==1582&&month==10)&&(dayss==5||dayss==6||dayss==7||dayss==8||dayss==9||dayss==10||dayss==11||dayss==12||dayss==13||dayss==14))
|
||||||
|
dayss++;
|
||||||
|
if (month == 1 || month == 2)
|
||||||
|
year--, month += 12;
|
||||||
|
c = year / 100;
|
||||||
|
y = year - c * 100;
|
||||||
|
if(year>1582)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + dayss - 1;
|
||||||
|
else if(year==1582&&month>10)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + dayss - 1;
|
||||||
|
else if((year==1582&&month==10)&&day>4)
|
||||||
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + dayss - 1;
|
||||||
|
else
|
||||||
|
week=(dayss+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
||||||
|
|
||||||
|
if(month==13||month==14)
|
||||||
|
year++;
|
||||||
|
while(week < 0)
|
||||||
|
week += 7;
|
||||||
|
week %= 7;
|
||||||
|
if(week==6)
|
||||||
|
{printf("%2d\n",dayss);continue;}
|
||||||
|
else
|
||||||
|
printf("%2d ",dayss);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
break;
|
||||||
|
default: printf("输入错误");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
1380
stu2024/计科2401高在毅(1).cpp
Normal file
1380
stu2024/计科2401高在毅(1).cpp
Normal file
File diff suppressed because it is too large
Load Diff
454
stu2024/计科2402 胡深然.cpp
Normal file
454
stu2024/计科2402 胡深然.cpp
Normal file
@ -0,0 +1,454 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
int run (int y);
|
||||||
|
void search (void);
|
||||||
|
int pand(int a,int b,int c);
|
||||||
|
void input(int *a,int *b,int *c);
|
||||||
|
void rls(void);
|
||||||
|
void rld (void);
|
||||||
|
void choice(void);
|
||||||
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
int xz;
|
||||||
|
printf("请选择所需要的功能:\n");
|
||||||
|
printf("1.查询某年某月某日为星期几,并判断是否为闰年\n");
|
||||||
|
printf("2.输出这一年的日历\n");
|
||||||
|
printf("请输入:1 or 2\n");
|
||||||
|
scanf("%ld",&xz);
|
||||||
|
if (xz==1)
|
||||||
|
search();
|
||||||
|
else if (xz==2)
|
||||||
|
choice();
|
||||||
|
else
|
||||||
|
printf("输入有误请重开");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//输入年月日并判断
|
||||||
|
void input( int *pa,int *pb,int *pc)
|
||||||
|
{
|
||||||
|
printf("请输入年:\n");
|
||||||
|
scanf("%ld",pa);
|
||||||
|
printf("请输入月:\n");
|
||||||
|
scanf("%ld",pb);
|
||||||
|
printf("请输入日:\n");
|
||||||
|
scanf("%ld",pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7
|
||||||
|
|
||||||
|
int run(int x)
|
||||||
|
{
|
||||||
|
if((x%4)==0&&(x%100)!=0||(x%400)==0)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//判断输入是否有误
|
||||||
|
int pand(int a,int b,int c)
|
||||||
|
{
|
||||||
|
int i=0;
|
||||||
|
int j[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if(a>0&&a<99999)
|
||||||
|
i=0;
|
||||||
|
else
|
||||||
|
i=-1;
|
||||||
|
if(b>=1&&b<=12)
|
||||||
|
i=0;
|
||||||
|
else
|
||||||
|
i=-1;
|
||||||
|
if(run(a))
|
||||||
|
j[2]=29;
|
||||||
|
if(j[b-1]>=c&&j[b-1]>=1)
|
||||||
|
i=0;
|
||||||
|
else
|
||||||
|
i=-1;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询某年某月某日为星期几,并判断是否为闰年
|
||||||
|
void search()
|
||||||
|
{
|
||||||
|
int year,mouth,day;
|
||||||
|
|
||||||
|
input(&year,&mouth,&day);
|
||||||
|
int a,b,c;
|
||||||
|
b=mouth;
|
||||||
|
c=day;
|
||||||
|
char s[10];
|
||||||
|
a=pand(year,mouth,day);
|
||||||
|
if(a==-1)
|
||||||
|
printf("输入有误,请重开");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i=0,j=year/100,y=year%100;
|
||||||
|
if(year<1582||year==1582&&mouth<10||year==1582&&mouth==10&&c<3)
|
||||||
|
{
|
||||||
|
if(mouth==1||mouth==2)
|
||||||
|
{
|
||||||
|
mouth+=12;
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
i=(y+(y/4)+(j/4)-2*j+(13*(b+1)/5)+c+2)%7;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(mouth==1||mouth==2)
|
||||||
|
{
|
||||||
|
mouth+=12;
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
i=((j/4)-2*j+y+(y/4)+(13*(b+1)/5)+c-1)% 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(i)
|
||||||
|
{
|
||||||
|
case 0:printf("是星期日");break;
|
||||||
|
case 1:printf("是星期一");break;
|
||||||
|
case 2:printf("是星期二");break;
|
||||||
|
case 3:printf("是星期三");break;
|
||||||
|
case 4:printf("是星期四");break;
|
||||||
|
case 5:printf("是星期五");break;
|
||||||
|
case 6:printf("是星期六");
|
||||||
|
}
|
||||||
|
if(run(year))
|
||||||
|
printf("\n今年是闰年");
|
||||||
|
else
|
||||||
|
printf("\n今年不是闰年");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
void choice()
|
||||||
|
{
|
||||||
|
int s;
|
||||||
|
printf("请选择输出格式\n");
|
||||||
|
printf("1.单列 or 2.双列 :");
|
||||||
|
scanf("%ld",&s);
|
||||||
|
printf("\n");
|
||||||
|
if(s==1)
|
||||||
|
rld();
|
||||||
|
else if(s==2)
|
||||||
|
rls();
|
||||||
|
else
|
||||||
|
printf("输入有误请重开");
|
||||||
|
}
|
||||||
|
|
||||||
|
//输出这一年的日历
|
||||||
|
void rld()
|
||||||
|
{
|
||||||
|
int year,mouth,day;
|
||||||
|
input(&year,&mouth,&day);
|
||||||
|
|
||||||
|
//printf("请选择")
|
||||||
|
int u=pand(year,mouth,day);
|
||||||
|
if(u==-1)
|
||||||
|
printf("输入有误,请重开");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
int i,j,n=0,leap;
|
||||||
|
leap=(year%4==0&&year%100!=0)||(year%100==0);
|
||||||
|
int k=year/100,y=(year%100)-1;
|
||||||
|
if(year<=1582)
|
||||||
|
{
|
||||||
|
n=(y+(y/4)+(k/4)-2*k+(13*14/5)+3)%7;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
n=((k/4)-2*k+y+(y/4)+(13*14/5))% 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
//printf("%d",n);
|
||||||
|
|
||||||
|
for(mouth=1;mouth<=12;mouth++)
|
||||||
|
{
|
||||||
|
switch(mouth)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
day=31;
|
||||||
|
printf("一月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if(leap)
|
||||||
|
day=29;
|
||||||
|
else
|
||||||
|
day=28;
|
||||||
|
printf("二月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
day=31;
|
||||||
|
printf("三月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
day=30;
|
||||||
|
printf("四月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
day=31;
|
||||||
|
printf("五月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
day=30;
|
||||||
|
printf("六月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
day=31;
|
||||||
|
printf("七月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
day=31;
|
||||||
|
printf("八月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
day=30;
|
||||||
|
printf("九月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
day=31;
|
||||||
|
printf("十月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
day=30;
|
||||||
|
printf("十一月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
day=31;
|
||||||
|
printf("十二月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
printf("----------------------------------------------------\n");
|
||||||
|
printf(" SUN MON TUE WED THD FRI SAT\n");
|
||||||
|
|
||||||
|
switch(n)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("%5c",'\40');
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("%10c",'\40');
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("%15c",'\40');
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("%20c",'\40');
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("%25c",'\40');
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("%30c",'\40');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i=1,j=n;i<=day;i++,j++)
|
||||||
|
{
|
||||||
|
printf("%5d",i);
|
||||||
|
|
||||||
|
if(j%7==6)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
n=(n+day)%7;
|
||||||
|
printf("\n----------------------------------------------------");
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void rls()
|
||||||
|
{
|
||||||
|
int year,mouth,day;
|
||||||
|
input(&year,&mouth,&day);
|
||||||
|
int u=pand(year,mouth,day);
|
||||||
|
if(u==-1)
|
||||||
|
printf("输入有误,请重开");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i,j,n1=0,leap;
|
||||||
|
leap=(year%4==0&&year%100!=0)||(year%100==0);
|
||||||
|
int day1,day2;
|
||||||
|
int k=year/100,y=(year%100)-1;
|
||||||
|
if(year<=1582)
|
||||||
|
{
|
||||||
|
n1=(y+(y/4)+(k/4)-2*k+(13*14/5)+3)%7;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
n1=((k/4)-2*k+y+(y/4)+(13*14/5))% 7;
|
||||||
|
}
|
||||||
|
for(mouth=1;mouth<=12;mouth+=2)
|
||||||
|
{
|
||||||
|
switch(mouth)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
day1=31;
|
||||||
|
printf("一月\t\t%d",year);
|
||||||
|
if(leap)
|
||||||
|
day2=29;
|
||||||
|
else
|
||||||
|
day2=28;
|
||||||
|
printf("\t\t\t\t\t二月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
day1=31;
|
||||||
|
printf("三月\t\t%d",year);
|
||||||
|
day2=30;
|
||||||
|
printf("\t\t\t\t\t四月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
day1=31;
|
||||||
|
printf("五月\t\t%d",year);
|
||||||
|
day2=30;
|
||||||
|
printf("\t\t\t\t\t六月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
day1=31;
|
||||||
|
printf("七月\t\t%d",year);
|
||||||
|
day2=31;
|
||||||
|
printf("\t\t\t\t\t八月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
day1=30;
|
||||||
|
printf("九月\t\t%d",year);
|
||||||
|
day2=31;
|
||||||
|
printf("\t\t\t\t\t十月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
day1=30;
|
||||||
|
printf("十一月\t\t%d",year);
|
||||||
|
day2=31;
|
||||||
|
printf("\t\t\t\t\t十二月\t\t%d\n",year);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
printf("--------------------------------------------------------------------------------------------------------\n");
|
||||||
|
printf(" SUN MON TUE WED THD FRI SAT\t\t SUN MON TUE WED THD FRI SAT\n");
|
||||||
|
|
||||||
|
int n2=(n1+day1)%7;
|
||||||
|
|
||||||
|
switch(n1)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("%5c",'\40');
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("%10c",'\40');
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("%15c",'\40');
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("%20c",'\40');
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("%25c",'\40');
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("%30c",'\40');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
int x=1,y=n2;
|
||||||
|
for(i=1,j=n1;i<=50;i++)
|
||||||
|
{
|
||||||
|
if(i<=day1)
|
||||||
|
printf("%5d",i);
|
||||||
|
if(i==day1)
|
||||||
|
{
|
||||||
|
switch((n1+day1)%7)
|
||||||
|
{
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
printf("%30c",'\40');
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("%25c",'\40');
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("%20c",'\40');
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("%15c",'\40');
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("%10c",'\40');
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("%5c",'\40');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(j%7==6||i==day1&&x!=day2)
|
||||||
|
{
|
||||||
|
printf("\t\t");
|
||||||
|
if(j==6)
|
||||||
|
{
|
||||||
|
switch(n2)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("%5c",'\40');
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("%10c",'\40');
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("%15c",'\40');
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("%20c",'\40');
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("%25c",'\40');
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("%30c",'\40');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while(x<=day2)
|
||||||
|
{
|
||||||
|
printf("%5d",x);
|
||||||
|
if(y%7==6)
|
||||||
|
{
|
||||||
|
x+=1;
|
||||||
|
y+=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
x++;
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
j++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int temp=n1;
|
||||||
|
n1=(n2+day)%7;
|
||||||
|
n2=(temp+day)%7;
|
||||||
|
printf("\n--------------------------------------------------------------------------------------------------------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
326
stu2024/计科2402刘相宁.cpp
Normal file
326
stu2024/计科2402刘相宁.cpp
Normal file
@ -0,0 +1,326 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
|
||||||
|
int a;
|
||||||
|
|
||||||
|
printf("1:查看日期为星期几,该年是否为闰年\n");
|
||||||
|
printf("2:单列输出该年日历\n");
|
||||||
|
printf("3:双列输出该年日历\n");
|
||||||
|
printf("0:输出0退出程序\n");
|
||||||
|
printf("请输出你想查询的序号\n");
|
||||||
|
scanf("%d",&a);
|
||||||
|
switch(a){
|
||||||
|
case(0):break;
|
||||||
|
|
||||||
|
|
||||||
|
case(1):
|
||||||
|
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
//星期计算方法:公元元年1月1日至指定日期总天数%7
|
||||||
|
int year,month,day;
|
||||||
|
printf("请输入年(格式:0000年)\n");
|
||||||
|
scanf("%d",&year);//输入年份
|
||||||
|
|
||||||
|
if(year==0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
if(year==1582&&month==10&&day>4&&day<15){
|
||||||
|
printf("输入有误,请重新输入\n\n\n");
|
||||||
|
continue;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//判断年的天数
|
||||||
|
int sumyear1=0;//表示从公元元年开始 ,表示闰年总数
|
||||||
|
if(year>1582){
|
||||||
|
for(int i=1;i<=year-1;i++){
|
||||||
|
if((i%4==0&&i%100!=0)||i%400==0)//公历判断闰年方法
|
||||||
|
sumyear1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
for(int i=1;i<=year-1;i++){
|
||||||
|
if(i%4==0){
|
||||||
|
sumyear1++;
|
||||||
|
}
|
||||||
|
//儒略历判断闰年方法
|
||||||
|
}
|
||||||
|
sumyear1+=5;//儒略历1582年公元元年是星期六,所以加上五天
|
||||||
|
}
|
||||||
|
int sumday;//统计总天数
|
||||||
|
sumday=(year-1)*365+sumyear1;//统计至去年的总天数
|
||||||
|
|
||||||
|
// 判断公历与儒略历二月天数
|
||||||
|
int feb;
|
||||||
|
if(year>1582){
|
||||||
|
if((year%4==0&&year%100!=0)||year%400==0){
|
||||||
|
printf("%d年是闰年\n\n",year);
|
||||||
|
feb=29;}
|
||||||
|
else{
|
||||||
|
printf("%d年是平年\n\n",year);
|
||||||
|
feb=28;}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(year%4==0){
|
||||||
|
|
||||||
|
feb=29;
|
||||||
|
printf("%d年是闰年\n\n",year);}
|
||||||
|
else{
|
||||||
|
printf("%d年是平年\n\n",year);
|
||||||
|
feb=28;}
|
||||||
|
}
|
||||||
|
int a[13]={0,31,feb,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
printf("请输入月(格式:00月)\n");
|
||||||
|
scanf("%d",&month);
|
||||||
|
if(month==0)
|
||||||
|
break;//输入月份
|
||||||
|
|
||||||
|
//统计公元元年至去年总天数加本年一月至上月总天数
|
||||||
|
for(int i=1;i<=month-1;i++)
|
||||||
|
sumday+=a[i];//统计完成
|
||||||
|
if(year==1582&&(month==11||month==12))
|
||||||
|
sumday+=11;
|
||||||
|
|
||||||
|
printf("请输入日(格式:00日)\n\n");
|
||||||
|
scanf("%d",&day);//输入日
|
||||||
|
if(day==0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if(year==1582&&month==10&&day>4&&day<15){
|
||||||
|
printf("输入有误,请重新输入\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//从公元元年开始求星期
|
||||||
|
int week;
|
||||||
|
if(year==1582&&month==10&&day>=15){
|
||||||
|
week=(sumday+day-10)%7;
|
||||||
|
}
|
||||||
|
else week=(sumday+day)%7;
|
||||||
|
if(week!=0){
|
||||||
|
printf("%d年%d月%d日是星期%d\n\n",year,month,day,week);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printf("%d年%d月%d日是星期日\n\n",year,month,day);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
case(2):
|
||||||
|
while(1){/////////////重复 单列输出
|
||||||
|
//星期计算方法:公元元年1月1日至指定日期总天数%7
|
||||||
|
int year,month;
|
||||||
|
printf("请输入年(格式:0000年)\n");
|
||||||
|
scanf("%d",&year);//输入年份
|
||||||
|
|
||||||
|
if(year==0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
//判断年的天数
|
||||||
|
int sumyear1=0;//表示从公元元年开始 ,表示闰年总数
|
||||||
|
if(year>1582){
|
||||||
|
for(int i=1;i<=year-1;i++){
|
||||||
|
if((i%4==0&&i%100!=0)||i%400==0)//公历判断闰年方法
|
||||||
|
sumyear1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
for(int i=1;i<=year-1;i++){
|
||||||
|
if(i%4==0){
|
||||||
|
sumyear1++;
|
||||||
|
}
|
||||||
|
//儒略历判断闰年方法
|
||||||
|
}
|
||||||
|
sumyear1+=5;//儒略历1582年公元元年是星期六,所以加上五天
|
||||||
|
}
|
||||||
|
int sumday;//统计总天数
|
||||||
|
sumday=(year-1)*365+sumyear1;//统计至去年的总天数
|
||||||
|
|
||||||
|
// 判断公历与儒略历二月天数
|
||||||
|
int feb;
|
||||||
|
if(year>1582){
|
||||||
|
if((year%4==0&&year%100!=0)||year%400==0){
|
||||||
|
feb=29;}
|
||||||
|
else{
|
||||||
|
feb=28;}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(year%4==0){
|
||||||
|
|
||||||
|
feb=29;}
|
||||||
|
else{
|
||||||
|
feb=28;}
|
||||||
|
}
|
||||||
|
int a[13]={0,31,feb,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
for(month=1;month<=12;month++){
|
||||||
|
//统计公元元年至去年总天数加本年一月至上月总天数
|
||||||
|
for(int i=1;i<=month-1;i++)
|
||||||
|
sumday+=a[i];//统计完成
|
||||||
|
if(year==1582&&(month==11||month==12))
|
||||||
|
sumday+=11;
|
||||||
|
|
||||||
|
int day=1,week;
|
||||||
|
week=(sumday+day)%7;
|
||||||
|
|
||||||
|
printf("\n------------------ %d 年 %d 月 ---------------------\n\n",year,month);
|
||||||
|
printf("日 一 二 三 四 五 六\n\n");
|
||||||
|
|
||||||
|
///放入1号
|
||||||
|
for(int j=1;j<=week;j++){
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
//放入其他日期 当天日期加1号>=7
|
||||||
|
if(year==1582&&month==10){
|
||||||
|
for(int j=1;j<=a[month];j++){
|
||||||
|
printf("%d ", j);
|
||||||
|
if((week+j)>=7){
|
||||||
|
printf("\n\n");
|
||||||
|
week-=7;
|
||||||
|
}
|
||||||
|
if(j==4){//单独判断1582
|
||||||
|
j+=10;
|
||||||
|
week-=10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
for(int j=1;j<=a[month];j++){
|
||||||
|
printf("%d ", j);
|
||||||
|
if((week+j)>=7){
|
||||||
|
printf("\n\n");
|
||||||
|
week-=7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
case(3):
|
||||||
|
while(1){/////////////重复 双列输出
|
||||||
|
//星期计算方法:公元元年1月1日至指定日期总天数%7
|
||||||
|
int year,month;
|
||||||
|
printf("请输入年(格式:0000年)\n");
|
||||||
|
scanf("%d",&year);//输入年份
|
||||||
|
|
||||||
|
if(year==0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
//判断年的天数
|
||||||
|
int sumyear1=0;//表示从公元元年开始 ,表示闰年总数
|
||||||
|
if(year>1582){
|
||||||
|
for(int i=1;i<=year-1;i++){
|
||||||
|
if((i%4==0&&i%100!=0)||i%400==0)//公历判断闰年方法
|
||||||
|
sumyear1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
for(int i=1;i<=year-1;i++){
|
||||||
|
if(i%4==0){
|
||||||
|
sumyear1++;
|
||||||
|
}
|
||||||
|
//儒略历判断闰年方法
|
||||||
|
}
|
||||||
|
sumyear1+=5;//儒略历1582年公元元年是星期六,所以加上五天
|
||||||
|
}
|
||||||
|
int sumday;//统计总天数
|
||||||
|
sumday=(year-1)*365+sumyear1;//统计至去年的总天数
|
||||||
|
|
||||||
|
// 判断公历与儒略历二月天数
|
||||||
|
int feb;
|
||||||
|
if(year>1582){
|
||||||
|
if((year%4==0&&year%100!=0)||year%400==0){
|
||||||
|
feb=29;}
|
||||||
|
else{
|
||||||
|
feb=28;}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(year%4==0){
|
||||||
|
|
||||||
|
feb=29;}
|
||||||
|
else{
|
||||||
|
feb=28;}
|
||||||
|
}
|
||||||
|
int a[13]={0,31,feb,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
for(month=1;month<=12;month++){
|
||||||
|
//统计公元元年至去年总天数加本年一月至上月总天数
|
||||||
|
for(int i=1;i<=month-1;i++)
|
||||||
|
sumday+=a[i];//统计完成
|
||||||
|
if(year==1582&&(month==11||month==12))
|
||||||
|
sumday+=11;
|
||||||
|
|
||||||
|
int day=1,week;
|
||||||
|
week=(sumday+day)%7;
|
||||||
|
|
||||||
|
printf("\n--------------------------------------------\n\n");
|
||||||
|
printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六 \n\n");
|
||||||
|
for(month=1;month<=12;month+=2){
|
||||||
|
|
||||||
|
///放入1号
|
||||||
|
for(int j=1;j<=week;j++){
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
//放入其他日期 当天日期加1号>=7
|
||||||
|
|
||||||
|
for(int j=1;j<=a[month+2];j++){
|
||||||
|
printf("%d ", j);
|
||||||
|
if((week+j)>=7){
|
||||||
|
printf("\n\n");
|
||||||
|
week-=7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(month=2;month<=12;month+=2){
|
||||||
|
for(int j=1;j<=week;j++){
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
//放入其他日期 当天日期加1号>=7
|
||||||
|
if(year==1582&&month==10){
|
||||||
|
for(int j=1;j<=a[month];j++){
|
||||||
|
printf("%d ", j);
|
||||||
|
if((week+j)>=7){
|
||||||
|
printf("\n\n");
|
||||||
|
week-=7;
|
||||||
|
}
|
||||||
|
if(j==4){//单独判断1582
|
||||||
|
j+=10;
|
||||||
|
week-=10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
for(int j=1;j<=a[month];j++){
|
||||||
|
printf("%d ", j);
|
||||||
|
if((week+j)>=7){
|
||||||
|
printf("\n\n");
|
||||||
|
week-=7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
254
stu2024/计科2402吕伟焘.cpp
Normal file
254
stu2024/计科2402吕伟焘.cpp
Normal file
@ -0,0 +1,254 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<math.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
|
||||||
|
void arr(long long int year,int month,int day)//判断星期几
|
||||||
|
{
|
||||||
|
int w;
|
||||||
|
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n");
|
||||||
|
printf(" **************************************\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" * 欢迎使用万年历!! *\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" **************************************\n");
|
||||||
|
printf(" *请输入所查日期:");
|
||||||
|
while(scanf("%lld %d %d",&year,&month,&day)!=EOF)
|
||||||
|
{
|
||||||
|
int c=year/100;
|
||||||
|
int y=year%100;
|
||||||
|
if(month<0||month>12||day>31)
|
||||||
|
{
|
||||||
|
printf(" *请重新输入所查日期:");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(year<1582||(year==1582&&month<10)||(year==1582&&month==10&&day<=4))
|
||||||
|
{
|
||||||
|
|
||||||
|
if(month==1||month==2)
|
||||||
|
{
|
||||||
|
y--;
|
||||||
|
month+=12;
|
||||||
|
}
|
||||||
|
w=(y+y/4+c/4-2*c+(13*(month+1))/5+day+2)%7;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(month==1||month==2)
|
||||||
|
{
|
||||||
|
y--;
|
||||||
|
month+=12;
|
||||||
|
}
|
||||||
|
w=(y+y/4+c/4-2*c+(13*(month+1))/5+day-1)%7;
|
||||||
|
|
||||||
|
}
|
||||||
|
if(year==1582&&month>10)
|
||||||
|
{
|
||||||
|
w -=3;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(w)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("星期一\n");break;
|
||||||
|
case 2:
|
||||||
|
printf("星期二\n");break;
|
||||||
|
case 3:
|
||||||
|
printf("星期三\n");break;
|
||||||
|
case 4:
|
||||||
|
printf("星期四\n");break;
|
||||||
|
case 5:
|
||||||
|
printf("星期五\n");break;
|
||||||
|
case 6:
|
||||||
|
printf("星期六\n");break;
|
||||||
|
case 0:
|
||||||
|
printf("星期日\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
void add(long long int year)//判断闰年
|
||||||
|
{
|
||||||
|
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n");
|
||||||
|
printf(" **************************************\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" * 欢迎使用万年历!! *\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" **************************************\n");
|
||||||
|
printf(" *请输入年份:");
|
||||||
|
scanf("%lld",&year);
|
||||||
|
if((year%4==0&&year%100!=0)||(year%100==0))
|
||||||
|
printf(" 闰年");
|
||||||
|
else
|
||||||
|
printf(" 平年");
|
||||||
|
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
void abb(long long int year,int month,int day)//日历
|
||||||
|
{
|
||||||
|
|
||||||
|
int i,j,n,leap;
|
||||||
|
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n");
|
||||||
|
printf(" **************************************\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" * 欢迎使用万年历!! *\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" * *\n");
|
||||||
|
printf(" **************************************\n");
|
||||||
|
printf(" *请输入年份:");
|
||||||
|
scanf("%lld",&year);
|
||||||
|
printf("\n\n");
|
||||||
|
|
||||||
|
leap=(year%4==0&&year%100!=0)||(year%100==0);
|
||||||
|
|
||||||
|
n=((year-1)*365+ (year-1)/4-(year-1)/100+(year-1)/400+1) % 7;
|
||||||
|
|
||||||
|
for(month=1;month<=12;month++)
|
||||||
|
{
|
||||||
|
switch(month)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
day=31;
|
||||||
|
printf("一月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if(leap)
|
||||||
|
day=29;
|
||||||
|
else
|
||||||
|
day=28;
|
||||||
|
printf("二月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
day=31;
|
||||||
|
printf("三月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
day=30;
|
||||||
|
printf("四月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
day=31;
|
||||||
|
printf("五月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
day=30;
|
||||||
|
printf("六月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
day=31;
|
||||||
|
printf("七月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
day=31;
|
||||||
|
printf("八月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
day=30;
|
||||||
|
printf("九月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
day=31;
|
||||||
|
printf("十月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
day=30;
|
||||||
|
printf("十一月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
day=31;
|
||||||
|
printf("十二月(%d)\t\t%lld\n",month,year);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
printf("----------------------------------------------------\n");
|
||||||
|
printf(" SUN MON TUE WED THD FRI SAT\n");
|
||||||
|
|
||||||
|
switch(n)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("%5c",'\40');
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("%10c",'\40');
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("%15c",'\40');
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("%20c",'\40');
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("%25c",'\40');
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("%30c",'\40');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i=1,j=n;i<=day;i++,j++)
|
||||||
|
{
|
||||||
|
printf("%5d",i);
|
||||||
|
|
||||||
|
if(j%7==6)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
n=(n+day)%7;
|
||||||
|
printf("\n----------------------------------------------------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
void mean_main(long long int year,int month,int day)//菜单
|
||||||
|
{
|
||||||
|
int a;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
|
||||||
|
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n");
|
||||||
|
printf(" **************************************\n");
|
||||||
|
printf(" * 欢迎使用万年历!! *\n");
|
||||||
|
printf(" * 1.查阅闰年 *\n");
|
||||||
|
printf(" * 2.输出日历 *\n");
|
||||||
|
printf(" * 3.查询对应的日期 *\n");
|
||||||
|
printf(" * 4.退出系统 *\n");
|
||||||
|
printf(" **************************************\n");
|
||||||
|
printf(" *请输入(1~4):");
|
||||||
|
do
|
||||||
|
{
|
||||||
|
scanf("%d",&a);
|
||||||
|
if(a>0&&a<5)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf(" *请重新输入:");
|
||||||
|
|
||||||
|
}while(1);
|
||||||
|
system("cls");
|
||||||
|
switch(a)
|
||||||
|
{
|
||||||
|
case 1:add(year);break;
|
||||||
|
case 2:abb(year,month,day);break;
|
||||||
|
case 3:arr(year,month,day);break;
|
||||||
|
case 4:break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
long long int year;
|
||||||
|
int month,day;
|
||||||
|
mean_main(year,month,day);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
183
stu2024/计科2402沈意佳.cpp
Normal file
183
stu2024/计科2402沈意佳.cpp
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
int isLeapYear(int year) {
|
||||||
|
if ((year % 4 == 0 && year % 100!= 0) || (year % 400 == 0)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int getDaysInMonth(int year,int month){
|
||||||
|
scanf("%d%d",&year,&month);
|
||||||
|
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
|
||||||
|
printf("31");
|
||||||
|
else if(month==4||month==6||month==9||month==11)
|
||||||
|
printf("30");
|
||||||
|
else{
|
||||||
|
if((year % 4 == 0 && year % 100!= 0) || (year % 400 == 0))
|
||||||
|
printf("29");
|
||||||
|
else
|
||||||
|
printf("28");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getDayOfWeek(int year, int month, int day) {
|
||||||
|
if (month < 3) {
|
||||||
|
month += 12;
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
int c = year / 100;
|
||||||
|
int y = year % 100;
|
||||||
|
int week = (day + 2 * month + 3 * (month + 1) / 5 + y + y / 4 + c / 4 - 2 * c + 7) % 7;
|
||||||
|
return week;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*单月日历*/
|
||||||
|
void x(int year, int month) {
|
||||||
|
printf("%d%d\n", year, month);
|
||||||
|
printf("日 一 二 三 四 五 六\n");
|
||||||
|
|
||||||
|
int dayOfWeek = getDayOfWeek(year, month, 1);
|
||||||
|
for (int i = 0; i < dayOfWeek; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
int daysInMonth;
|
||||||
|
int getDaysInMonth;
|
||||||
|
for (int i = 1; i <= daysInMonth; i++) {
|
||||||
|
printf("%2d ", i);
|
||||||
|
if ((i + dayOfWeek) % 7 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((daysInMonth + dayOfWeek) % 7!= 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void z(int year, int month) {
|
||||||
|
printf(" %d%d%d%d\n", year, month, year, month + 1);
|
||||||
|
printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
|
||||||
|
|
||||||
|
int dayOfWeek1 = getDayOfWeek(year, month, 1);
|
||||||
|
int dayOfWeek2 = getDayOfWeek(year, month + 1, 1);
|
||||||
|
|
||||||
|
for (int i = 0; i < dayOfWeek1; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
int daysInMonth1 ;
|
||||||
|
int daysInMonth2 ;
|
||||||
|
|
||||||
|
int i1 = 1, i2 = 1;
|
||||||
|
while (i1 <= daysInMonth1 || i2 <= daysInMonth2) {
|
||||||
|
if (i1 <= daysInMonth1) {
|
||||||
|
printf("%2d ", i1);
|
||||||
|
i1++;
|
||||||
|
} else {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((i1 + dayOfWeek1 - 1) % 7 == 0 && i1 <= daysInMonth1) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i2 <= daysInMonth2) {
|
||||||
|
printf("%2d ", i2);
|
||||||
|
i2++;
|
||||||
|
} else {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((i2 + dayOfWeek2 - 1) % 7 == 0 && i2 <= daysInMonth2) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((daysInMonth1 + dayOfWeek1) % 7!= 0 || (daysInMonth2 + dayOfWeek2) % 7!= 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void showMenu() {
|
||||||
|
printf("菜单:\n");
|
||||||
|
printf("1. 查询某年某月某日的日期是周几及该年是否为闰年\n");
|
||||||
|
printf("2. 输入年份,输出这一年的单月日历\n");
|
||||||
|
printf("3. 输入年份,输出这一年的双月日历(并排显示两个月)\n");
|
||||||
|
printf("4.");
|
||||||
|
}
|
||||||
|
int main() {
|
||||||
|
int choice;
|
||||||
|
int year, month, day;
|
||||||
|
int m;
|
||||||
|
do {
|
||||||
|
showMenu();
|
||||||
|
scanf("%d",&choice);
|
||||||
|
|
||||||
|
switch (choice) {
|
||||||
|
case 1:
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
printf("请输入月份:");
|
||||||
|
scanf("%d",&month);;
|
||||||
|
printf("请输入日期:");
|
||||||
|
scanf("%d",&day);
|
||||||
|
|
||||||
|
if (year < 1583 && year == 1582 && month == 10 && day >= 5 && day <= 14) {
|
||||||
|
printf("1582年10月5日 - 14日不存在,请重新输入。\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%d%d%d", year, month, day);
|
||||||
|
switch (getDayOfWeek(year, month, day)) {
|
||||||
|
case 0:
|
||||||
|
printf("日\n");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
printf("一\n");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("二\n");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("三\n");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("四\n");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("五\n");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("六\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is LeapYear){
|
||||||
|
printf("%d\n", year);
|
||||||
|
} else {
|
||||||
|
printf("%d年不是闰年\n", year);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
for (month = 1; month <= 12; month++) {
|
||||||
|
x(year, month);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d",&year);;
|
||||||
|
for (month = 1; month <= 11; month += 2) {
|
||||||
|
z(year, month);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("无效的选择,请重新输入。\n");
|
||||||
|
}
|
||||||
|
} while (choice!= 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
249
stu2024/计科2402王娅晗.cpp
Normal file
249
stu2024/计科2402王娅晗.cpp
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
void fun(void);
|
||||||
|
int year;
|
||||||
|
int shiji;
|
||||||
|
int yue;
|
||||||
|
int ri;
|
||||||
|
int w;//星期
|
||||||
|
int y; //年份后两位
|
||||||
|
void getday(int first_day[],int y);
|
||||||
|
void shuchurili(int days[],int first_day[]);
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{{
|
||||||
|
int a;
|
||||||
|
printf("查询某年某月某日的日期是周几,该年是否为闰年 请输入1\n");
|
||||||
|
printf("输入年份,输出这一年的日历,要求能够单列输出和双列输出 请输入2\n");
|
||||||
|
scanf("%d",&a);
|
||||||
|
if(a==1)
|
||||||
|
{
|
||||||
|
scanf("%d-%d-%d",&year,&yue,&ri);
|
||||||
|
if((year<=0||yue<=0||ri<=0)||(year==1582&&yue==10&&(ri==5||ri==6||ri==7||ri==8||ri==9||ri==10||ri==11||ri==12||ri==13||ri==14))
|
||||||
|
{{
|
||||||
|
printf("输入错误,请重新输入:");
|
||||||
|
scanf("%d-%d-%d",&year,&yue,&ri);
|
||||||
|
} }else {
|
||||||
|
if(yue<3)
|
||||||
|
{
|
||||||
|
year--;
|
||||||
|
yue+=12;
|
||||||
|
}
|
||||||
|
shiji=(year/100);
|
||||||
|
y=year%100;
|
||||||
|
w=shiji/4-2*shiji+y+y/4+13*(yue+1)/5+ri-1;
|
||||||
|
if(w%7==0)
|
||||||
|
printf("星期7");
|
||||||
|
else
|
||||||
|
printf("星期%d ",w%7);
|
||||||
|
if((year%4==0&&year%100!=0)||(year%400==0))
|
||||||
|
printf("闰年");
|
||||||
|
else
|
||||||
|
printf("非闰年");
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
|
||||||
|
|
||||||
|
//第二部分
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(a==2)
|
||||||
|
{
|
||||||
|
//单双列输出选择
|
||||||
|
printf("请选择您要输出的格式\n");
|
||||||
|
printf("单列输出请按1\n");
|
||||||
|
printf("双列输出请按2\n");
|
||||||
|
int b;
|
||||||
|
scanf("%d",&b);
|
||||||
|
if(b==1)
|
||||||
|
{
|
||||||
|
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
int first_day[12]={0};
|
||||||
|
int year=0;
|
||||||
|
int i=0;
|
||||||
|
int a=1;
|
||||||
|
while(a)
|
||||||
|
{
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
//报错
|
||||||
|
if(year<=0)
|
||||||
|
{
|
||||||
|
printf("输入错误,请重新输入:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
}
|
||||||
|
--a;
|
||||||
|
}
|
||||||
|
//获取该年每个月所属星期
|
||||||
|
getday(first_day,year);
|
||||||
|
if((year%4==0&&year%100!=0)||(year%400==0))
|
||||||
|
days[1]=29;
|
||||||
|
//输出日历
|
||||||
|
shuchurili(days,first_day);
|
||||||
|
return 0;
|
||||||
|
}else
|
||||||
|
|
||||||
|
|
||||||
|
//双列输出
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
int first_day[12]={0};
|
||||||
|
int year=0;
|
||||||
|
int i=0;
|
||||||
|
int a=1;
|
||||||
|
while(a)
|
||||||
|
{
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
//报错
|
||||||
|
if(year<=0)
|
||||||
|
{
|
||||||
|
printf("输入错误,请重新输入:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
}
|
||||||
|
--a;
|
||||||
|
}
|
||||||
|
//获取该年每个月所属星期
|
||||||
|
getday(first_day,year);
|
||||||
|
if((year%4==0&&year%100!=0)||(year%400==0))
|
||||||
|
days[1]=29;
|
||||||
|
//输出日历
|
||||||
|
shuchurili(days,first_day);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void getday(int first_day[],int y)
|
||||||
|
{
|
||||||
|
int m=0;
|
||||||
|
int d=1;
|
||||||
|
int w=0;
|
||||||
|
for(m=3;m<=12;m++)
|
||||||
|
{
|
||||||
|
w=(d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
|
||||||
|
first_day[m-1]=w;
|
||||||
|
}
|
||||||
|
y-=1;
|
||||||
|
for (m=13;m<=14;m++)
|
||||||
|
{
|
||||||
|
w = (d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
|
||||||
|
first_day[m-13] = w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void shuchurili(int days[],int first_day[])
|
||||||
|
{
|
||||||
|
int dyt=0;
|
||||||
|
int d=0,i=0,j=0;
|
||||||
|
for(i=0;i<12;i++)
|
||||||
|
{
|
||||||
|
dyt=first_day[i];
|
||||||
|
printf(" %2d 月 \n", i+1);
|
||||||
|
printf(" 日 一 二 三 四 五 六 \n");
|
||||||
|
//1号前的空格
|
||||||
|
//改后
|
||||||
|
for(j=0;j<dyt;j++)
|
||||||
|
printf(" ");
|
||||||
|
for(d=1;d<=days[i];d++)
|
||||||
|
{
|
||||||
|
printf(" %2d",d);
|
||||||
|
if((d+dyt)%7==0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
//第二部分
|
||||||
|
|
||||||
|
|
||||||
|
#include<string.h>
|
||||||
|
//判断闰年的函数
|
||||||
|
int isleapyear(int year)
|
||||||
|
{
|
||||||
|
return ((year%4==0&&year%100!=0)||(year%400==0));
|
||||||
|
}
|
||||||
|
|
||||||
|
//计算每月天数的函数
|
||||||
|
int month(int year,int yue)
|
||||||
|
{
|
||||||
|
int run[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if(yue==2&&isleapyear(year))
|
||||||
|
{
|
||||||
|
return 29;
|
||||||
|
}
|
||||||
|
return run[yue];
|
||||||
|
}
|
||||||
|
|
||||||
|
//计算给定日期是星期几(蔡勒公式)
|
||||||
|
int week(int year,int yue,int ri)
|
||||||
|
{
|
||||||
|
if(yue<3)
|
||||||
|
{
|
||||||
|
year--;
|
||||||
|
yue+=12;
|
||||||
|
}
|
||||||
|
shiji=(year/100);
|
||||||
|
y=year%100;
|
||||||
|
w=shiji/4-2*shiji+y+y/4+13*(yue+1)/5+ri-1;
|
||||||
|
return (w%7+7)%7;
|
||||||
|
}
|
||||||
|
|
||||||
|
//输出日历函数
|
||||||
|
void rili(int year)
|
||||||
|
{
|
||||||
|
char *week[]={"一","二","三","四","五","六","日"};
|
||||||
|
scanf("&d-%d-%d",&year,&yue,&ri);
|
||||||
|
for(yue=1;yue<=12;yue++)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
printf("%d ",yue);
|
||||||
|
for(i=0;i<7;i++)
|
||||||
|
printf("%s",week[i]);
|
||||||
|
printf("\n");
|
||||||
|
int w=week(year,yue,1);//w为每月第一日是星期几
|
||||||
|
int jx=month(year,yue);
|
||||||
|
char a[w]={"0"};
|
||||||
|
char b[][7];//输出日期的数组
|
||||||
|
if((year%4==0&&year%100!=0)||(year%400==0))
|
||||||
|
{
|
||||||
|
for(int n=0;n<7;n++)
|
||||||
|
{
|
||||||
|
for(int m=1;m<jx;m++)
|
||||||
|
{
|
||||||
|
for(int e=1;e<jx;e++)
|
||||||
|
b[m][n]='e';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int m=0;m<6;m++)
|
||||||
|
{
|
||||||
|
for(int n=0;n<7;n++)
|
||||||
|
printf("%d",a[m][n]);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
96
stu2024/软件2401丁翔宇.cpp
Normal file
96
stu2024/软件2401丁翔宇.cpp
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
int year,month,day;
|
||||||
|
int run[12]={31,29,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
int ping[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
char weekday[7][10]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
|
||||||
|
char yuefen[12][20]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
|
||||||
|
int leap(int year)
|
||||||
|
{
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int nian(int year,int month,int day,int run[],int ping[])
|
||||||
|
{
|
||||||
|
int i,sum=0;
|
||||||
|
for(i=1900;i<year;i++)
|
||||||
|
{
|
||||||
|
if(leap(i)==1)
|
||||||
|
{
|
||||||
|
sum+=366;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sum+=365;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(i=0;i<month-1;i++)
|
||||||
|
{
|
||||||
|
if(leap(year)==1)
|
||||||
|
{
|
||||||
|
sum+=run[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sum+=ping[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
void dy(int sum,int year,int month)
|
||||||
|
{
|
||||||
|
int result,temp,i;
|
||||||
|
result=sum%7;
|
||||||
|
for(i=0;i<result;i++)
|
||||||
|
{
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
temp=7-result;
|
||||||
|
if(leap(year)==1)
|
||||||
|
{
|
||||||
|
for(i=1;i<=run[month-1];i++)
|
||||||
|
{
|
||||||
|
printf("%d\t",i);
|
||||||
|
if(i==temp||(i-temp)%7==0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(i=1;i<=ping[month-1];i++)
|
||||||
|
{
|
||||||
|
printf("%d\t",i);
|
||||||
|
if(i==temp||(i-temp)%7==0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
printf("请输入年月:");
|
||||||
|
scanf("%d%d",&year,&month);
|
||||||
|
for(int i=0;i<12;i++)
|
||||||
|
{
|
||||||
|
printf("%s\n",yuefen[i]);
|
||||||
|
for(int j=0;j<=7;j++)
|
||||||
|
{
|
||||||
|
printf("%s\t",weekday[j]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
int sum=nian(year,month,day,run,ping);
|
||||||
|
dy(sum,year,month);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
186
stu2024/软件2401毕洺瑞.cpp
Normal file
186
stu2024/软件2401毕洺瑞.cpp
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
#include<bits/stdc++.h>
|
||||||
|
|
||||||
|
// 判断是否为闰年 (考虑1582年前后差异)
|
||||||
|
int isLeapYear(int year) {
|
||||||
|
if (year >= 1582) {
|
||||||
|
if ((year%4 ==0 && year%100!=0) || year%400==0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
if (year % 4 == 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查输入是否为数字
|
||||||
|
int isnumber(char input[]) {
|
||||||
|
int i = 0;
|
||||||
|
while (input[i]!= '\0') {
|
||||||
|
if (input[i] < '0' || input[i] > '9') {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查日期是否有效
|
||||||
|
int Dateisture(int year, int month, int day) {
|
||||||
|
if (year == 1582 && month == 10 && (day > 4 && day <= 14)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int daysInMonth[] = {0, 31, 28, 31, 32, 30, 31, 30, 31, 30, 31, 30, 31};
|
||||||
|
if (isLeapYear(year)) {
|
||||||
|
daysInMonth[2] = 29;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(year>=1 && month>=1 && month<=12 && day>=1 && day<=daysInMonth[month]){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算给定日期是星期几(考虑1582年前后差异)
|
||||||
|
int dayOfWeek(int year, int month, int day) {
|
||||||
|
if (year >= 1582) {
|
||||||
|
if (month < 3) {
|
||||||
|
year--;
|
||||||
|
month += 12;
|
||||||
|
}
|
||||||
|
int c = year / 100;
|
||||||
|
int y = year % 100;
|
||||||
|
int week = (c / 4 - 2 * c + y + y / 4 + 13 * (month + 1) / 5 + day - 1) % 7;
|
||||||
|
if (week < 0) {
|
||||||
|
week += 7;
|
||||||
|
}
|
||||||
|
return week;
|
||||||
|
} else {
|
||||||
|
int a = (14 - month) / 12;
|
||||||
|
int y = year - a;
|
||||||
|
int m = month + 12 * a - 2;
|
||||||
|
int week = (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12) % 7;
|
||||||
|
return week;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出(单列)
|
||||||
|
void Single(int year) {
|
||||||
|
int daysInMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if (isLeapYear(year)) {
|
||||||
|
daysInMonth[2] = 29;
|
||||||
|
}
|
||||||
|
printf("%d年的日历(单列):\n", year);
|
||||||
|
int dayOfWeekJan1 = dayOfWeek(year, 1, 1);
|
||||||
|
for (int month = 1; month <= 12; month++) {
|
||||||
|
printf("Mon Tue Wed Thu Fri Sat Sun\n");
|
||||||
|
for (int day = 1; day <= daysInMonth[month]; day++) {
|
||||||
|
printf("%3d ", day);
|
||||||
|
if ((dayOfWeekJan1 + day) % 7 == 0 && day!= daysInMonth[month]) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}printf("\n");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出(双列)
|
||||||
|
void Double(int year) {
|
||||||
|
int daysInMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if (isLeapYear(year)) {
|
||||||
|
daysInMonth[2] = 29;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%d年的日历(双列):\n", year);
|
||||||
|
int dayOfWeekJan1 = dayOfWeek(year, 1, 1);
|
||||||
|
for (int month = 1; month <= 12; month++) {
|
||||||
|
printf("Mon Tue Wed Thu Fri Sat Sun \t Mon Tue Wed Thu Fri Sat Sun");
|
||||||
|
for (int day = 1; day <= daysInMonth[month]; day++) {
|
||||||
|
printf("%3d ", day);
|
||||||
|
if ((dayOfWeekJan1 + day) % 7 == 0 && day!= daysInMonth[month]) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}printf("\n");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char choice[10];
|
||||||
|
int zh;
|
||||||
|
do{
|
||||||
|
printf("1. 我想查询某年某月某日是星期几,该年是否为闰年\n");
|
||||||
|
printf("2. 我想查询某年的日历\n");
|
||||||
|
printf("3. 上个厕所\n");
|
||||||
|
printf("请选择: ");
|
||||||
|
scanf("%9s",choice);
|
||||||
|
if(!isnumber(choice)){
|
||||||
|
printf("输入错误,请重新输入\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
zh=choice[0]-'0';
|
||||||
|
switch(zh){
|
||||||
|
case 1: char years[10], months[10], days[10];
|
||||||
|
int year, month, day;
|
||||||
|
while (1) {
|
||||||
|
printf("请输入年份: ");
|
||||||
|
scanf("%s", years);
|
||||||
|
if (!isnumber(years)) {
|
||||||
|
printf("错误,重新开始\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
year = atoi(years);
|
||||||
|
printf("请输入月份: ");
|
||||||
|
scanf("%s", months);
|
||||||
|
if (!isnumber(months)) {
|
||||||
|
printf("请误,重新开始\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
month = atoi(months);
|
||||||
|
|
||||||
|
printf("请输入日期: ");
|
||||||
|
scanf("%s", days);
|
||||||
|
if (!isnumber(days)) {
|
||||||
|
printf("请误,重新开始\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
day = atoi(days);
|
||||||
|
|
||||||
|
if (!Dateisture(year, month, day)) {
|
||||||
|
printf("输入错误,请重新输入\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int weekDay = dayOfWeek(year, month, day);
|
||||||
|
char weekDayNames[][10] = {"周一", "周二", "周三", "周四", "周五", "周六", "周天"};
|
||||||
|
printf("%d-%02d-%02d是%s\n", year, month, day, weekDayNames[weekDay]);
|
||||||
|
if (isLeapYear(year)) {
|
||||||
|
printf("%d年是闰年\n", year);
|
||||||
|
} else {
|
||||||
|
printf("%d年不是闰年\n", year);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
char yearss[10];
|
||||||
|
while (1) {
|
||||||
|
printf("请输入年份: ");
|
||||||
|
scanf("%s", yearss);
|
||||||
|
if (!isnumber(yearss)) {
|
||||||
|
printf("请输入正确的年份\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
year = atoi(yearss);
|
||||||
|
Single(year);
|
||||||
|
Double(year);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:printf("不行");break;
|
||||||
|
default:printf("请选择正确选项\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}while(zh!=3);
|
||||||
|
}
|
195
stu2024/软件2401范慈惠.cpp
Normal file
195
stu2024/软件2401范慈惠.cpp
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<time.h>
|
||||||
|
#include<stdbool.h>
|
||||||
|
void Menu1()
|
||||||
|
{
|
||||||
|
printf("请输入一个数字来表示你要进行的操作:\n");
|
||||||
|
printf("1.让我看看这一年的日历(单行)\n");
|
||||||
|
printf("2.让我看看这一年的日历(双行)\n");
|
||||||
|
printf("3.让我看看这天是周几\n");
|
||||||
|
printf("4.让我看看这一年是不是闰年\n");
|
||||||
|
}//构建菜单
|
||||||
|
int main() {
|
||||||
|
int menu, year;
|
||||||
|
|
||||||
|
Menu1(); // 显示菜单
|
||||||
|
scanf("%d", &menu);
|
||||||
|
|
||||||
|
if (menu == 1) {
|
||||||
|
printf("让我看看这一年的日历(单行)\n");
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d", &year);
|
||||||
|
|
||||||
|
// 清除输入缓冲区中的换行符
|
||||||
|
while (getchar() != '\n');
|
||||||
|
|
||||||
|
if (year <= 0) {
|
||||||
|
printf("您输入的年份有误!\n");
|
||||||
|
return 1; // 使用返回值表示错误
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int runnian(int n)//记录闰年月份日期
|
||||||
|
{
|
||||||
|
switch(n)
|
||||||
|
{
|
||||||
|
case 1:return 31;
|
||||||
|
case 2:return 29;
|
||||||
|
case 3:return 31;
|
||||||
|
case 4:return 30;
|
||||||
|
case 5:return 31;
|
||||||
|
case 6:return 30;
|
||||||
|
case 7:return 31;
|
||||||
|
case 8:return 31;
|
||||||
|
case 9:return 30;
|
||||||
|
case 10:return 31; }
|
||||||
|
}
|
||||||
|
int pingnian(int year,int month)//记录平年月份日期
|
||||||
|
{
|
||||||
|
if (year==1582&&month==10)
|
||||||
|
{
|
||||||
|
return 21;//1582年10月只有21天
|
||||||
|
}
|
||||||
|
switch(month)
|
||||||
|
{
|
||||||
|
case 1:return 31;
|
||||||
|
case 2:return 28;
|
||||||
|
case 3:return 31;
|
||||||
|
case 4:return 30;
|
||||||
|
case 5:return 31;
|
||||||
|
case 6:return 30;
|
||||||
|
case 7:return 31;
|
||||||
|
case 8:return 31;
|
||||||
|
case 9:return 30;
|
||||||
|
case 10:return 31;
|
||||||
|
case 11:return 30;
|
||||||
|
case 12:return 31;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void run(int week)//闰年日历输出
|
||||||
|
{
|
||||||
|
int n=0;//记录换行次数
|
||||||
|
int w=week;
|
||||||
|
int i,j,k;
|
||||||
|
for(i=1;i<=12;i++)
|
||||||
|
{
|
||||||
|
printf("%d月\n",i);
|
||||||
|
printf("日 一 二 三 四 五 六\n") ;
|
||||||
|
for(k=0;k<w;k++)//空格对齐
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
for(j=1;j<=runnian(i);j++){//输出每月的天
|
||||||
|
if(n%7==0){
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("%d ",j);
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
w=(w+runnian(i))%7;//周数
|
||||||
|
n=n-w;
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void ping(int year)//平年日历输出
|
||||||
|
{
|
||||||
|
int n=0;//记录换行
|
||||||
|
int w=getFirstDayOfYear(year);//获取该年第一天是星期几
|
||||||
|
int i,j,k;
|
||||||
|
for(i=1;i<=12;i++)
|
||||||
|
{
|
||||||
|
printf("%d月\n", i);
|
||||||
|
printf("Sun Mon Tue Wed Thu Fri Sat\n");
|
||||||
|
for (k=0;k<w;k++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
for (j=1;j<=pingnian(year,i);j++)
|
||||||
|
{//输出每月的天
|
||||||
|
if(n%7==0) // 七天换行
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("%d ",j);
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
w=(w+pingnian(year,i))%7;
|
||||||
|
n=n-w;
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 获取某个月的天数
|
||||||
|
int getDaysInMonth(int year, int month) {
|
||||||
|
switch (month) {
|
||||||
|
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
|
||||||
|
return 31;
|
||||||
|
case 4: case 6: case 9: case 11:
|
||||||
|
return 30;
|
||||||
|
case 2:
|
||||||
|
return isLeapYear(year) ? 29 : 28;
|
||||||
|
default:
|
||||||
|
return 0; // 不会发生,只是为了完整性
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main() {
|
||||||
|
int year;
|
||||||
|
printf("Enter the year: ");
|
||||||
|
scanf("%d", &year);
|
||||||
|
printCalendar(year);
|
||||||
|
}
|
||||||
|
if(menu==3)
|
||||||
|
{
|
||||||
|
int weekday=week(year,month,day);
|
||||||
|
else if(menu==3)
|
||||||
|
{
|
||||||
|
int year,month,day;
|
||||||
|
{printf("查询某年某月某日的日期是周几\n");
|
||||||
|
scanf("%d %d %d",&year,&month,&day);
|
||||||
|
if(month<3)
|
||||||
|
{
|
||||||
|
year--;
|
||||||
|
month+=12;
|
||||||
|
printf("%d",year);//一年中前两个月较为特殊归入前一年内计算(1月—— 13月,2 月—— 14月
|
||||||
|
}
|
||||||
|
else
|
||||||
|
scanf("%d %d %d",&year,&month,&day);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
int y,c;
|
||||||
|
int week;
|
||||||
|
y=year/100;
|
||||||
|
c=year%100;
|
||||||
|
if(year<1582&&month<10&&day<4)
|
||||||
|
week=(day+1+2*month+3*(month+1)/5+y+y/4+5) % 7;
|
||||||
|
else
|
||||||
|
week=(day+1+2*month+3*(month+1)/5+y+y/4-y/100+y/400)%7;//利用蔡乐公式计算某年某月某日的日期是周几
|
||||||
|
do{
|
||||||
|
switch(week)
|
||||||
|
{
|
||||||
|
case 1:printf("Monday");break;
|
||||||
|
case 2:printf("Tuesday");break;
|
||||||
|
case 3:printf("Wednesday");break;
|
||||||
|
case 4:printf("Thursday");break;
|
||||||
|
case 5:printf("Friday");break;
|
||||||
|
case 6:printf("Saturday");break;
|
||||||
|
case 7:printf("Sunday");break;
|
||||||
|
default:break;
|
||||||
|
}
|
||||||
|
}while(week>0&&week<8);//利用循环得到某年某月某日的日期是周几
|
||||||
|
}
|
||||||
|
if (menu == 4) {
|
||||||
|
printf("4.让我看看这一年是不是闰年\n");
|
||||||
|
|
||||||
|
{
|
||||||
|
int year,month,day;
|
||||||
|
printf("请输入一个年份,判断该年是否为闰年");
|
||||||
|
if((year%4==0&&year%100!=0)||(year%400==0))//判断是闰年还是平年
|
||||||
|
{printf("是闰年");}
|
||||||
|
else
|
||||||
|
{printf("不是闰年");}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
147
stu2024/软件2401邱毅杰.cpp
Normal file
147
stu2024/软件2401邱毅杰.cpp
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
int runYear(int n); //日历不会写痛苦
|
||||||
|
int RunYear(int year);
|
||||||
|
void printMonth(int year, int month);
|
||||||
|
int dayOfWeek(int year, int month, int day);
|
||||||
|
void printMonth(int year, int month)
|
||||||
|
{
|
||||||
|
int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
int startDay = dayOfWeek(year, month, 1);
|
||||||
|
int days = daysInMonth[month - 1];
|
||||||
|
if (month == 2 && RunYear(year))
|
||||||
|
{
|
||||||
|
days = 29;
|
||||||
|
}
|
||||||
|
else if (year == 1582 && month == 10)
|
||||||
|
{
|
||||||
|
days = 21;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n%d年%d月\n", year, month);
|
||||||
|
printf("日 一 二 三 四 五 六\n");
|
||||||
|
|
||||||
|
// 打印空格直到第一天
|
||||||
|
for (int i = 0; i < startDay; i++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印日期
|
||||||
|
for (int day = 1; day <= days; day++)
|
||||||
|
{
|
||||||
|
printf("%2d ", day);
|
||||||
|
if ((day + startDay) % 7 == 0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int dayOfWeek(int year, int month, int day)
|
||||||
|
{
|
||||||
|
if (month < 3)
|
||||||
|
{
|
||||||
|
month += 12;
|
||||||
|
year -= 1;
|
||||||
|
}
|
||||||
|
int k = year % 100;
|
||||||
|
int j = year / 100;
|
||||||
|
int h = day + 13 * (month + 1) / 5 + k + k / 4 + j / 4 + 5 * j; //zeller公式
|
||||||
|
h = h % 7;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int RunYear(int year)
|
||||||
|
{
|
||||||
|
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
|
||||||
|
}
|
||||||
|
int runYear(int n)
|
||||||
|
{
|
||||||
|
printf("请输入年份\n");
|
||||||
|
scanf("%d",&n);
|
||||||
|
if(n%4==0&&n%100!=0||n%400==0)
|
||||||
|
{
|
||||||
|
printf("是闰年\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("不是闰年\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int choice,n,year,month,day;
|
||||||
|
printf("1.查询对应的年份的日历\n");
|
||||||
|
printf("2.查询对应日期的星期\n");
|
||||||
|
printf("3.查询对应年份是否为闰年\n");
|
||||||
|
printf("4.退出\n");
|
||||||
|
printf("请选择序号=");
|
||||||
|
scanf("%d",&choice);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
switch(choice)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
int year;
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d", &year);
|
||||||
|
|
||||||
|
// 打印全年的日历
|
||||||
|
for (int month = 1; month <= 12; month++)
|
||||||
|
{
|
||||||
|
printMonth(year, month);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
printf("请输日期(年 月 日)\n");
|
||||||
|
scanf("%d %d %d",&year,&month,&day);
|
||||||
|
int runYear(year);
|
||||||
|
if(0)
|
||||||
|
{
|
||||||
|
if (month < 3) //平年
|
||||||
|
{
|
||||||
|
month += 12;
|
||||||
|
year -= 1;
|
||||||
|
}
|
||||||
|
int c = year % 100;
|
||||||
|
int y = year / 100;
|
||||||
|
int h = day + 13 * (month + 1) / 5 + c + c / 4 + y / 4 + 5 * y; //zeller公式
|
||||||
|
h = h % 7;
|
||||||
|
printf("星期%d",h);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (month < 3) //润年
|
||||||
|
{
|
||||||
|
month += 12;
|
||||||
|
year -= 1;
|
||||||
|
}
|
||||||
|
int c = year % 100;
|
||||||
|
int y = year / 100;
|
||||||
|
int h = day-1 + 13 * (month + 1) / 5 + c + c / 4 + y / 4 + 5 * y; //zeller公式
|
||||||
|
h = h % 7;
|
||||||
|
printf("星期%d",h);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
runYear(n);
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
printf("输入错误!请重新选择\n");
|
||||||
|
printf("请选择序号=");
|
||||||
|
scanf("%d",&choice);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while(choice);
|
||||||
|
return 0;
|
||||||
|
}
|
384
stu2024/软件2401陈思宇(1).cpp
Normal file
384
stu2024/软件2401陈思宇(1).cpp
Normal file
@ -0,0 +1,384 @@
|
|||||||
|
#include<bits/stdc++.h>
|
||||||
|
//需求:
|
||||||
|
//1.设计判断闰年函数
|
||||||
|
//2.设计查询某年某日日期星期几,
|
||||||
|
//3.日历的输出(单双列)
|
||||||
|
//4.菜单选择要有纠错功能 ,也就是说每个菜单要有一个函数可供返回 ,即每个最好要有一个单独的函数来满足
|
||||||
|
//5.1528年少了十天,据查证是因为罗马教皇决定在1582年10月4日后使用格利戈里历法,英国是在1752年9月3日后才接受使用格利戈里历法
|
||||||
|
|
||||||
|
//1.闰年判断函数,思路:常见判断闰年条件
|
||||||
|
int isLeapyear(int year)
|
||||||
|
{
|
||||||
|
return(year%400==0)||(year%4==0&&year%100!=0);//如果是闰年,则为真
|
||||||
|
}
|
||||||
|
int monthsday(int year,int month)
|
||||||
|
{
|
||||||
|
int monthsday[]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if (month==2&&isLeapyear(year))//如果是闰年,二月有二十九天
|
||||||
|
{
|
||||||
|
return 29;
|
||||||
|
}
|
||||||
|
return monthsday[month-1];
|
||||||
|
}
|
||||||
|
int getFirstDayOfYear(int year)//今年的第一天是周几
|
||||||
|
{
|
||||||
|
int d=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400;
|
||||||
|
if (year>1582)
|
||||||
|
{
|
||||||
|
if (year==1583)
|
||||||
|
{
|
||||||
|
d-=10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return d%7;
|
||||||
|
}
|
||||||
|
int getDaysInMonth(int year,int month)
|
||||||
|
{
|
||||||
|
int daysInMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if(month==2&&isLeapyear(year))
|
||||||
|
{
|
||||||
|
return 29;//闰年二月有29天
|
||||||
|
}
|
||||||
|
if (year == 1582 && month == 10) {
|
||||||
|
return 21; // 1582年十月只有21天
|
||||||
|
}
|
||||||
|
return daysInMonth[month-1];//返回对应月份的天数
|
||||||
|
}
|
||||||
|
//计算给定日期是星期几(0表示星期日1-6表示周一到周六)
|
||||||
|
int getDayOfWeek(int year, int month, int day)
|
||||||
|
{
|
||||||
|
int t[]={0,3,2,5,0,3,5,1,4,6,2,4};//调整不同月在不同年中的偏移
|
||||||
|
if (month<3)
|
||||||
|
{
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
return(year+year/4-year/100+year/400+t[month-1]+day)%7;
|
||||||
|
}
|
||||||
|
//2.查询哪年哪月是周几
|
||||||
|
int week(int year,int month,int day)//运用泰勒公式
|
||||||
|
{
|
||||||
|
if(month<3)
|
||||||
|
{
|
||||||
|
month+=12;
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
if(year<1583)
|
||||||
|
{
|
||||||
|
int h=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
||||||
|
return h; //h表示某时间是星期几
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
int h=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;//蔡勒公式w=(d + 1+ 2*m+3*(m+1)/5+y+y/4-y/100+y/400(闰年调整))%
|
||||||
|
return h+1;//h+1是因为1582年以后,蔡勒公式计算会少一天
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//3.日历的输出
|
||||||
|
int runnian(int n)//记录闰年月份日期
|
||||||
|
{
|
||||||
|
switch(n)
|
||||||
|
{
|
||||||
|
case 1:return 31;
|
||||||
|
case 2:return 29;
|
||||||
|
case 3:return 31;
|
||||||
|
case 4:return 30;
|
||||||
|
case 5:return 31;
|
||||||
|
case 6:return 30;
|
||||||
|
case 7:return 31;
|
||||||
|
case 8:return 31;
|
||||||
|
case 9:return 30;
|
||||||
|
case 10:return 31;
|
||||||
|
case 11:return 30;
|
||||||
|
case 12:return 31;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int pingnian(int year,int month)//记录平年月份日期
|
||||||
|
{
|
||||||
|
if (year==1582&&month==10)
|
||||||
|
{
|
||||||
|
return 21;//1582年10月只有21天
|
||||||
|
}
|
||||||
|
switch(month)
|
||||||
|
{
|
||||||
|
case 1:return 31;
|
||||||
|
case 2:return 28;
|
||||||
|
case 3:return 31;
|
||||||
|
case 4:return 30;
|
||||||
|
case 5:return 31;
|
||||||
|
case 6:return 30;
|
||||||
|
case 7:return 31;
|
||||||
|
case 8:return 31;
|
||||||
|
case 9:return 30;
|
||||||
|
case 10:return 31;
|
||||||
|
case 11:return 30;
|
||||||
|
case 12:return 31;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void run(int week)//闰年日历输出
|
||||||
|
{
|
||||||
|
int n=0;//记录换行次数
|
||||||
|
int w=week;
|
||||||
|
for(int i=1;i<=12;i++)
|
||||||
|
{
|
||||||
|
printf("%d月\n",i);
|
||||||
|
printf("日 一 二 三 四 五 六\n") ;
|
||||||
|
for(int k=0;k<w;k++)//空格对齐
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
for(int j=1;j<=runnian(i);j++){//输出每月的天
|
||||||
|
if(n%7==0){
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("%d ",j);
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
w=(w+runnian(i))%7;//周数
|
||||||
|
n=n-w;
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void ping(int year)//平年日历输出
|
||||||
|
{
|
||||||
|
int n=0;//记录换行
|
||||||
|
int w=getFirstDayOfYear(year);//获取该年第一天是星期几
|
||||||
|
for(int i=1;i<=12;i++)
|
||||||
|
{
|
||||||
|
printf("%d月\n", i);
|
||||||
|
printf("Sun Mon Tue Wed Thu Fri Sat\n");
|
||||||
|
for (int k=0;k<w;k++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
for (int j=1;j<=pingnian(year,i);j++)
|
||||||
|
{//输出每月的天
|
||||||
|
if(n%7==0) // 七天换行
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("%d ",j);
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
w=(w+pingnian(year,i))%7;
|
||||||
|
n=n-w;
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//两个月的日历
|
||||||
|
void printTwoMonths(int year)
|
||||||
|
{
|
||||||
|
static int printed=0;//静态变量检测是否打印过日历
|
||||||
|
if(printed)
|
||||||
|
{
|
||||||
|
return;//如果打印过直接返回
|
||||||
|
}
|
||||||
|
int start_day[12];
|
||||||
|
start_day[0]=getFirstDayOfYear(year);
|
||||||
|
for (int month=1;month<12;month++)//计算每月起始星期几
|
||||||
|
{
|
||||||
|
start_day[month]=(start_day[month-1]+getDaysInMonth(year,month))%7;
|
||||||
|
}
|
||||||
|
const char *months[]={ "一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
|
||||||
|
for (int i=0;i<6;i++)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
for (int j=0; j < 2; j++)
|
||||||
|
{
|
||||||
|
int month=i*2+j+1;
|
||||||
|
printf(" %s %d ", months[month-1],year);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for (int j=0;j<2;j++)
|
||||||
|
{
|
||||||
|
printf("Sun Mon Tue Wed Thu Fri Sat ");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
int max_days[2]={getDaysInMonth(year,i*2+1),getDaysInMonth(year,i*2+2)};//获取两个月的最大天数和起始星期几
|
||||||
|
int start_days[2]={start_day[i*2],start_day[i*2+1]};
|
||||||
|
//打印日期
|
||||||
|
int day[2]={1,1};//每个月的当前日期
|
||||||
|
int printed_anything=1;//标记是否有剩余日期可打印
|
||||||
|
while(printed_anything)
|
||||||
|
{
|
||||||
|
printed_anything=0;
|
||||||
|
|
||||||
|
for(int j=0;j<2;j++)
|
||||||
|
{
|
||||||
|
if(day[j]==1)//打印月初的空格
|
||||||
|
{
|
||||||
|
for(int k=0;k<start_days[j];k++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while(day[j]<=max_days[j]&&((day[j]+start_days[j]-1)%7)!=6) // 打印日期
|
||||||
|
{
|
||||||
|
printf(" %2d ",day[j]);
|
||||||
|
day[j]++;
|
||||||
|
printed_anything=1;
|
||||||
|
}
|
||||||
|
if(day[j] <= max_days[j]) // 打印最后一个日期,换行并跳到下一个月
|
||||||
|
{
|
||||||
|
printf(" %2d ",day[j]);
|
||||||
|
day[j]++;
|
||||||
|
printed_anything=1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf(" ");// 对齐
|
||||||
|
}
|
||||||
|
printf(" ");//每月之间的间隔
|
||||||
|
}
|
||||||
|
printf("\n");//换行到下一个星期
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printed = 1; // 表示已经打印过日历
|
||||||
|
}
|
||||||
|
//4.菜单,设这个仅仅是为了能够返回,而且方便点。
|
||||||
|
void Menu1()
|
||||||
|
{
|
||||||
|
printf("请输入一个数字来表示你要进行的操作喵~:\n");
|
||||||
|
printf("1.让我看看这年的日历吧~\n");
|
||||||
|
printf("2.我想看看这天是星期几捏?\n");
|
||||||
|
printf("3.我要看看这个年是不是闰年!\n");
|
||||||
|
printf("4.不看了nya\n");
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int year,month,day,menu;
|
||||||
|
const char* week_days[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
Menu1();//菜单选项
|
||||||
|
if(scanf("%d",&menu)!=1)//检查输入是否成功
|
||||||
|
{
|
||||||
|
while (getchar()!='\n');//清除输入缓冲区,这样输入中文就会返回了
|
||||||
|
printf("输入的格式不对,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(menu==1)
|
||||||
|
{
|
||||||
|
printf("你想看的形式是什么呢?输入以下数字查看相应方式。\n1.我要看单列输出!\n2.请给我看双列输出。\n");
|
||||||
|
int ds;
|
||||||
|
if(scanf("%d",&ds)!=1)//检查输入是否成功
|
||||||
|
{
|
||||||
|
while(getchar()!='\n');
|
||||||
|
printf("输入的格式不对,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(ds==1)//单列输出
|
||||||
|
{
|
||||||
|
printf("输入你想查询的年份吧:");
|
||||||
|
if (scanf("%d",&year)!=1)
|
||||||
|
{
|
||||||
|
while(getchar() != '\n');
|
||||||
|
printf("您输入的年份有误,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (year<1)
|
||||||
|
{
|
||||||
|
printf("您输入的年份有误,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (isLeapyear(year))
|
||||||
|
{
|
||||||
|
run(year);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (year==1582)
|
||||||
|
{
|
||||||
|
ping(year);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ping(year);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(ds==2)//双列输出
|
||||||
|
{
|
||||||
|
printf("输入你想查询的年份吧: ");
|
||||||
|
if (scanf("%d",&year)!=1)//检查输入是否成功
|
||||||
|
{
|
||||||
|
while (getchar()!='\n');
|
||||||
|
printf("您输入的年份有误,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (year<=0)
|
||||||
|
{
|
||||||
|
printf("您输入的年份有误,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int startDay=getFirstDayOfYear(year);
|
||||||
|
for (int i=1;i<12;i+=2)
|
||||||
|
{
|
||||||
|
printTwoMonths(year);
|
||||||
|
startDay=(startDay+(i==2?(isLeapyear(year)?29:28):(i==4||i==6||i==9?30:31)))%7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("输入的格式不对,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (menu == 2)
|
||||||
|
{
|
||||||
|
printf("请输入你想看的日期,格式是年-月-日哦:");
|
||||||
|
if (scanf("%d %d %d",&year,&month,&day)!=3)
|
||||||
|
{
|
||||||
|
while (getchar()!='\n');
|
||||||
|
printf("输入的日期有误,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int weekday=week(year,month,day);
|
||||||
|
const char* week[]={"周日","周一","周二","周三", "周四","周五","周六"};
|
||||||
|
if (year<1||month<1||month>12||day<1||day>getDaysInMonth(year,month))
|
||||||
|
{
|
||||||
|
printf("输入的日期有误,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%d年%d月%d日是%s\n",year,month,day,week[weekday]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (menu == 3)
|
||||||
|
{
|
||||||
|
printf("你想看看哪一年呢:");
|
||||||
|
if(scanf("%d", &year) != 1)
|
||||||
|
{
|
||||||
|
while(getchar() != '\n');
|
||||||
|
printf("输入的年份有误,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(year<1)
|
||||||
|
{
|
||||||
|
printf("输入的年份有误,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%d年%s是闰年哦\n",year,isLeapyear(year)?"":"不");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(menu==4)
|
||||||
|
{
|
||||||
|
printf("加纳~\n");
|
||||||
|
return 0;//退出
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("输入的格式不对,请重新输入:\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
699
stu2024/软件2402吕亦杰.c
Normal file
699
stu2024/软件2402吕亦杰.c
Normal file
@ -0,0 +1,699 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<math.h>
|
||||||
|
|
||||||
|
#define ll long long
|
||||||
|
#define BUF 256//定义最大输入长度
|
||||||
|
|
||||||
|
//-----------------Press to continue函数--------------------------
|
||||||
|
int Press_to_continue()
|
||||||
|
{
|
||||||
|
printf("\n[按下任意健继续......]");
|
||||||
|
getch();//---------------等待按下按键
|
||||||
|
printf("\033c");
|
||||||
|
printf("\033[2J");
|
||||||
|
printf("\033[0m");//------------清屏函数
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//------将字符转换为数字的函数(写这个是因为直接(int)转换好像会出问题)
|
||||||
|
int number(char n)//选择穷举!!!
|
||||||
|
{
|
||||||
|
if(n=='0')
|
||||||
|
return 0;
|
||||||
|
else if(n=='1')
|
||||||
|
return 1;
|
||||||
|
else if(n=='2')
|
||||||
|
return 2;
|
||||||
|
else if(n=='3')
|
||||||
|
return 3;
|
||||||
|
else if(n=='4')
|
||||||
|
return 4;
|
||||||
|
else if(n=='5')
|
||||||
|
return 5;
|
||||||
|
else if(n=='6')
|
||||||
|
return 6;
|
||||||
|
else if(n=='7')
|
||||||
|
return 7;
|
||||||
|
else if(n=='8')
|
||||||
|
return 8;
|
||||||
|
else if(n=='9')
|
||||||
|
return 9;
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//------------------------输入判断函数--------------------------------
|
||||||
|
int input()
|
||||||
|
{
|
||||||
|
int flag=0;
|
||||||
|
int i=0;
|
||||||
|
char c[BUF];
|
||||||
|
ll int num=0;
|
||||||
|
do//------------判断输入是否合法(仅含数字为合法)
|
||||||
|
{
|
||||||
|
flag=0;
|
||||||
|
scanf("%s",c);
|
||||||
|
while(c[i]!='\0')
|
||||||
|
{
|
||||||
|
if(c[i]!='1' && c[i]!='2' && c[i]!='3' && c[i]!='4' && c[i]!='5' && c[i]!='6' && c[i]!='7' && c[i]!='8' && c[i]!='9' && c[i]!='0')
|
||||||
|
{
|
||||||
|
flag=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if(flag)
|
||||||
|
{
|
||||||
|
printf("\n[输入有误!请重新输入]:");
|
||||||
|
}
|
||||||
|
}while(flag);
|
||||||
|
// printf("%s",c);
|
||||||
|
// printf("\n%d",flag);
|
||||||
|
|
||||||
|
i=0;
|
||||||
|
while(c[i]!='\0')
|
||||||
|
{
|
||||||
|
num=num*10+number(c[i]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
// printf("%lld",num);//-----调试用代码
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//------------------------判断平年闰年函数--------------------------
|
||||||
|
int is_Ryear(ll int year)
|
||||||
|
{
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------检测日期是否合法--------------------------
|
||||||
|
int rule(ll int y,int m,int d)
|
||||||
|
{
|
||||||
|
if((y<0||m<0||d<0)||(m>12)||((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>31)||((m==4||m==6||m==9||m==11)&&d>30)||is_Ryear(y)&&(m==2)&&(d>29)||(y==1582&&m==10&&(d>=5&&d<=14)))
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------计算星期_返回星期几-----------------------
|
||||||
|
int week(ll int y,int m,int d)
|
||||||
|
{
|
||||||
|
int w=0,y2;
|
||||||
|
ll int c;
|
||||||
|
// ll int c=y%100;
|
||||||
|
if(m==1||m==2)
|
||||||
|
{
|
||||||
|
m+=12;
|
||||||
|
y-=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
y2=y%100;
|
||||||
|
c=y/100;
|
||||||
|
//网上查的公式......
|
||||||
|
if(y==1582&&m==10&&d<=4||y==1582&&m<=9||y<=1581)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// 儒略历计算公式:W = (5-C) + y + [y/4] + [13 * (M+1) / 5] + d - 1;
|
||||||
|
|
||||||
|
w=(y2+y2/4+c/4-2*c+(26*(m+1))/10+d-1+10)%7;
|
||||||
|
|
||||||
|
}
|
||||||
|
else//----1582年之后
|
||||||
|
{
|
||||||
|
// w=(d+1+2*m+3*(m+10)/5+y+y/4+7)%7;
|
||||||
|
// w=(y2+(y2/4)+(c/4)-2*c+(26*(m+1)/10)+d-1)%7;
|
||||||
|
//蔡勒公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
|
||||||
|
w=(y2+y2/4+c/4-2*c+(26*(m+1))/10+d-1)%7;
|
||||||
|
}
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------返回月份对应天数-------------------------
|
||||||
|
int month(ll int y,int m)
|
||||||
|
{
|
||||||
|
int d;
|
||||||
|
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
|
||||||
|
{
|
||||||
|
d=31;
|
||||||
|
}
|
||||||
|
else if(m==4||m==6||m==9||m==11)
|
||||||
|
{
|
||||||
|
d=30;
|
||||||
|
}
|
||||||
|
else if(m==2&&is_Ryear(y))
|
||||||
|
{
|
||||||
|
d=29;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d=28;
|
||||||
|
}
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------画日历函数__单列-----------------------------
|
||||||
|
int pic_s(ll int y,int m,int w,int d)
|
||||||
|
{
|
||||||
|
int k=0;
|
||||||
|
int f=0;
|
||||||
|
|
||||||
|
printf("\n|***************************************************|");
|
||||||
|
printf("\n|%lld年%d月|",y,m);
|
||||||
|
printf("\n 日\t 一\t 二\t 三\t 四\t 五\t 六\n ");
|
||||||
|
// printf(" ");
|
||||||
|
f=0;
|
||||||
|
for(int i=0;i<w;i++)
|
||||||
|
{
|
||||||
|
printf("\t");
|
||||||
|
f++;
|
||||||
|
}
|
||||||
|
if(f!=0)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
k=0;
|
||||||
|
// f=0;
|
||||||
|
while(k<d)
|
||||||
|
{
|
||||||
|
k++;
|
||||||
|
if(rule(y,m,k))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%2d",k);
|
||||||
|
f++;
|
||||||
|
// if((w+f)%7==0)//-----判断第二天是否为周日
|
||||||
|
if(f%7==0)
|
||||||
|
{
|
||||||
|
printf("\n ");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("\t ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/*旧版代码(与新版格式不统一)
|
||||||
|
int pic_s(ll int y,int m,int w,int d)
|
||||||
|
{
|
||||||
|
int k=0;
|
||||||
|
int f=0;
|
||||||
|
|
||||||
|
printf("\n|*****************************************|");
|
||||||
|
printf("\n|%lld年%d月|",y,m);
|
||||||
|
printf("\n 日 一 二 三 四 五 六 \n");
|
||||||
|
printf(" ");
|
||||||
|
f=0;
|
||||||
|
for(int i=0;i<w;i++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
f++;
|
||||||
|
}
|
||||||
|
|
||||||
|
k=0;
|
||||||
|
// f=0;
|
||||||
|
while(k<d)
|
||||||
|
{
|
||||||
|
k++;
|
||||||
|
if(rule(y,m,k))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%2d",k);
|
||||||
|
f++;
|
||||||
|
// if((w+f)%7==0)//-----判断第二天是否为周日
|
||||||
|
if(f%7==0)
|
||||||
|
{
|
||||||
|
printf("\n ");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------画日历函数__双列-----------------------------
|
||||||
|
int pic_d(ll int y,int m,int w_1,int d_1,int d_2)
|
||||||
|
{
|
||||||
|
int w_2;
|
||||||
|
if(y==1582&&m==9)
|
||||||
|
{
|
||||||
|
w_2=(w_1+d_1-10)%7;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
w_2=(w_1+d_1)%7;
|
||||||
|
}
|
||||||
|
int i = 0;
|
||||||
|
int j = 0;
|
||||||
|
int days[6][15] = {0};// 初始化一个6行15列,全为0的数组
|
||||||
|
//days 是所有需要打印的日期表,最极端情况,会有6周,前面7列为单数月份,中间一列间隔列,后面7列为 双数月份
|
||||||
|
//打印的时候,把0的位置用tab 制表符替换打印出来也就是(\t)
|
||||||
|
printf("\n");
|
||||||
|
//单数月处理
|
||||||
|
for(i = 0; i < d_1; i++)
|
||||||
|
{
|
||||||
|
int row = (w_1 + i) / 7;//行
|
||||||
|
int col = (w_1 + i) % 7;//列
|
||||||
|
days[row][col] = i + 1;//需要注意i从0开始,日期从1开始,所以要+1
|
||||||
|
}
|
||||||
|
//双数月处理
|
||||||
|
for(i = 0; i < d_2; i++)
|
||||||
|
{
|
||||||
|
int row = (w_2 + i) / 7;//行
|
||||||
|
int col = (w_2 + i) % 7 + 8 ;//列,计算出来的星期数需要向右移动8个位置
|
||||||
|
days[row][col] = i + 1;//需要注意i从0开始,日期从1开始,所以要+1
|
||||||
|
}
|
||||||
|
printf("\n|***************************************************|\t\t|***************************************************|");
|
||||||
|
printf("\n|%lld年%d月|\t\t\t\t\t\t\t|%lld年%d月|",y,m,y,m+1);
|
||||||
|
printf("\n日\t一\t二\t三\t四\t五\t六\t\t日\t一\t二\t三\t四\t五\t六\n");
|
||||||
|
for (i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
for (j = 0; j < 15; j++)
|
||||||
|
{
|
||||||
|
if(days[i][j] == 0 )
|
||||||
|
{
|
||||||
|
//0 的位置输出制表符
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//非0的位置打印数字,并将光标移到下一个制表符位置
|
||||||
|
printf("%2d \t", days[i][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*旧版代码(有bug)
|
||||||
|
int pic_d(ll int y,int m,int w_1,int d_1,int d_2)
|
||||||
|
{
|
||||||
|
int k=0;
|
||||||
|
int f=0;
|
||||||
|
int f_2=0;
|
||||||
|
int w_2;
|
||||||
|
|
||||||
|
if(y==1582&&m==9)
|
||||||
|
{
|
||||||
|
w_2=(w_1+d_1-10)%7;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
w_2=(w_1+d_1)%7;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
printf("\n|*****************************************| |*****************************************|");
|
||||||
|
printf("\n|%lld年%d月| |%lld年%d月|",y,m,y,m+1);
|
||||||
|
printf("\n 日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
|
||||||
|
printf(" ");
|
||||||
|
f=0;
|
||||||
|
f_2=0;
|
||||||
|
for(int i=0;i<w_1;i++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
f++;
|
||||||
|
}
|
||||||
|
|
||||||
|
k=0;
|
||||||
|
int k_2=0;//-----右列日期置0
|
||||||
|
// f=0;
|
||||||
|
while(k<=d_1)
|
||||||
|
{
|
||||||
|
k++;
|
||||||
|
if(rule(y,m,k))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printf("%2d",k);
|
||||||
|
f++;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// if((w+f)%7==0)//-----判断第二天是否为周日
|
||||||
|
if(f%7==0||(k-1>=d_1)&&(k_2<d_2))
|
||||||
|
{
|
||||||
|
if((k-1>=d_1)&&(k_2<d_2))
|
||||||
|
{
|
||||||
|
for(int q=0;q<(7-(f+w_1-1)%7)%7;q++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
printf(" ");
|
||||||
|
f_2=0;
|
||||||
|
for(int j=0;j<w_2;j++)
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
f_2++;
|
||||||
|
}
|
||||||
|
w_2=0;
|
||||||
|
|
||||||
|
// f=0;
|
||||||
|
while(k_2<d_2)
|
||||||
|
{
|
||||||
|
k_2++;
|
||||||
|
if(rule(y,m+1,k_2))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%2d",k_2);
|
||||||
|
f_2++;
|
||||||
|
// if((w+f)%7==0)//-----判断第二天是否为周日
|
||||||
|
if(f_2%7==0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printf("\n ");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//------------------------------功能一--------------------------------
|
||||||
|
int fun_1()
|
||||||
|
{
|
||||||
|
|
||||||
|
ll int y=1,m=1,d=1;
|
||||||
|
int flagf=1;
|
||||||
|
int w;//星期变量||0--周日||1--周一||2--周二||3--周三||4--周四||5--周五||6--周六||
|
||||||
|
//char X,Y;
|
||||||
|
|
||||||
|
while(flagf)
|
||||||
|
{
|
||||||
|
flagf=0;
|
||||||
|
printf("\n|****************星期查询*****************|");
|
||||||
|
// printf("\n请输入您要查询的日期\n[格式:YYYY MM DD]:");
|
||||||
|
printf("\n[请输入查询日期所在的年份]:");
|
||||||
|
y=input();
|
||||||
|
printf("\n[请输入查询日期所在的月份]:");
|
||||||
|
m=(int)input();
|
||||||
|
printf("\n[请输入查询日期所在日]:");
|
||||||
|
d=(int)input();
|
||||||
|
|
||||||
|
//-----------旧版输入,有BUG
|
||||||
|
// scanf("%lld%lld%lld",&y,&m,&d);//<-----------------年月日的输入
|
||||||
|
//输入的判断
|
||||||
|
if(rule(y,m,d))
|
||||||
|
{
|
||||||
|
printf("\n[输入有误!请重新输入!]");
|
||||||
|
flagf=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n|*****************************************|");
|
||||||
|
printf("\n您输入的是:%lld年%lld月%lld日",y,m,d);
|
||||||
|
if(is_Ryear(y)){
|
||||||
|
printf("\n 这一年是闰年,");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printf("\n 这一年是平年,");
|
||||||
|
}
|
||||||
|
|
||||||
|
w=week(y,m,d);
|
||||||
|
switch(w)
|
||||||
|
{
|
||||||
|
case 0: printf("这一天是星期日。");break;
|
||||||
|
|
||||||
|
case 1: printf("这一天是星期一。");break;
|
||||||
|
|
||||||
|
case 2: printf("这一天是星期二。");break;
|
||||||
|
|
||||||
|
case 3: printf("这一天是星期三。");break;
|
||||||
|
|
||||||
|
case 4: printf("这一天是星期四。");break;
|
||||||
|
|
||||||
|
case 5: printf("这一天是星期五。");break;
|
||||||
|
|
||||||
|
case 6: printf("这一天是星期六。");break;
|
||||||
|
}
|
||||||
|
printf("\n|*****************************************|");
|
||||||
|
Press_to_continue();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------功能二菜单--------------------------------
|
||||||
|
int fun_2_menu()
|
||||||
|
{
|
||||||
|
ll int y;
|
||||||
|
int w,flag;
|
||||||
|
printf("\n|****************星期查询*****************|");
|
||||||
|
printf("\n|*****************************************|");
|
||||||
|
printf("\n| 请选择功能: |");
|
||||||
|
printf("\n| 1.单列显示 |");
|
||||||
|
printf("\n| 2.双列显示 |");
|
||||||
|
printf("\n|*****************************************|");
|
||||||
|
printf("\n[请输入您要使用的功能]:");
|
||||||
|
flag=(int)input();
|
||||||
|
// scanf("%d",&flag);
|
||||||
|
// while(!(flag==1||flag==2))//--------------判断输入是否正确
|
||||||
|
// {
|
||||||
|
// printf("\n[输入有误!请重新输入!]");
|
||||||
|
// scanf("%d",&flag);
|
||||||
|
// }
|
||||||
|
printf("\n[请输入您要查询的年份]:");
|
||||||
|
// scanf("%lld",&y);
|
||||||
|
y=input();
|
||||||
|
w=week(y,1,1);
|
||||||
|
if(flag==1)
|
||||||
|
{
|
||||||
|
printf("\033c");//------------清屏函数
|
||||||
|
// printf("\033[2J");//------------清屏函数
|
||||||
|
// printf("\033[0m");//------------结束状态函数
|
||||||
|
fun2_s(y,w);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("\033c");//------------清屏函数
|
||||||
|
// printf("\033[2J");//------------清屏函数
|
||||||
|
// printf("\033[0m");//------------结束状态函数
|
||||||
|
fun2_d(y,w);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
//start_10k();
|
||||||
|
}
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------功能二__单列-----------------------------
|
||||||
|
int fun2_s(ll int y,int w)
|
||||||
|
{
|
||||||
|
int m,d,flag=0;
|
||||||
|
printf("\033c");
|
||||||
|
// printf("\033[2J");//-------清屏函数
|
||||||
|
// printf("\033[0m");//------结束指示符
|
||||||
|
// printf("\n|*****************************************|");
|
||||||
|
printf("\n----|*****公元%lld年历*****|----",y);
|
||||||
|
for(m=1;m<=12;m++)
|
||||||
|
{
|
||||||
|
d=month(y,m);
|
||||||
|
pic_s(y,m,w,d);
|
||||||
|
|
||||||
|
if(y==1582&&m==10)
|
||||||
|
{
|
||||||
|
w=(w+d-10)%7;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
w=(w+d)%7;
|
||||||
|
}
|
||||||
|
flag+=1;
|
||||||
|
if(flag>=4&&m!=12)
|
||||||
|
{
|
||||||
|
flag=0;
|
||||||
|
printf("\n[按下任意健继续......]");
|
||||||
|
getch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Press_to_continue();
|
||||||
|
}
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------功能二__双列-----------------------------
|
||||||
|
int fun2_d(ll int y,int w)
|
||||||
|
{
|
||||||
|
int m,d1,d2,flag=0,w_2;
|
||||||
|
printf("\033c");
|
||||||
|
printf("\033[2J");
|
||||||
|
printf("\033[0m");
|
||||||
|
printf("\n|*****************************************|");
|
||||||
|
printf("\n|*****公元%lld年历*****|",y);
|
||||||
|
for(m=1;m<=11;m+=2)
|
||||||
|
{
|
||||||
|
d1=month(y,m);
|
||||||
|
d2=month(y,m+1);
|
||||||
|
pic_d(y,m,w,d1,d2);
|
||||||
|
|
||||||
|
if(y==1582&&m==9)
|
||||||
|
{
|
||||||
|
w_2=(w+d1-10)%7;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
w_2=(w+d1)%7;
|
||||||
|
}
|
||||||
|
w=(w_2+d2)%7;
|
||||||
|
|
||||||
|
flag+=1;
|
||||||
|
if(flag>=4&&m!=12)
|
||||||
|
{
|
||||||
|
flag=0;
|
||||||
|
printf("\n[按下任意健继续......]");
|
||||||
|
getch();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Press_to_continue();
|
||||||
|
}
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------菜单函数---------------------------------
|
||||||
|
int start_10k()
|
||||||
|
{
|
||||||
|
// int flagm=1;
|
||||||
|
printf("\033c");//-------------清屏函数
|
||||||
|
// printf("\033[2J");//-------------清屏函数
|
||||||
|
// printf("\033[0m");//------------结束状态函数
|
||||||
|
|
||||||
|
// while(flagm==1)
|
||||||
|
// {
|
||||||
|
// flagm=1;
|
||||||
|
|
||||||
|
int p;
|
||||||
|
|
||||||
|
printf("\n|*************欢迎使用万年历**************|");
|
||||||
|
printf("\n|*****************************************|");
|
||||||
|
printf("\n| 请选择功能: |");
|
||||||
|
printf("\n| 1.星期查询 |");
|
||||||
|
printf("\n| 2.年历查询 |");
|
||||||
|
printf("\n| |");
|
||||||
|
printf("\n| 0.退出程序 |");
|
||||||
|
printf("\n|*****************************************|");
|
||||||
|
|
||||||
|
printf("\n[请输入您要使用的功能]:");
|
||||||
|
p=(int)input();
|
||||||
|
//------旧版输入,输入字母后会无限循环(有BUG)
|
||||||
|
// scanf("%d",&p);
|
||||||
|
// while(!(p==0||p==1||p==2))
|
||||||
|
// {
|
||||||
|
// printf("\n[输入有误!请重新输入]");
|
||||||
|
// printf("\n[请输入您要使用的功能]:");
|
||||||
|
// scanf("%d",&p);
|
||||||
|
// }
|
||||||
|
|
||||||
|
switch(p)
|
||||||
|
{
|
||||||
|
|
||||||
|
case 1: printf("\033c");
|
||||||
|
// printf("\033[2J");//------------清屏函数
|
||||||
|
// printf("\033[0m\n");//------------结束状态函数
|
||||||
|
fun_1();
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2: printf("\033c");
|
||||||
|
// printf("\033[2J");//------------清屏函数
|
||||||
|
// printf("\033[0m\n");//------------结束状态函数
|
||||||
|
fun_2_menu();
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0: return 0;
|
||||||
|
// flagm=0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// }
|
||||||
|
// printf("\n|***************感谢您的使用**************|\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------主函数-----------------------------------
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int flag;
|
||||||
|
printf("万年历\n 制作者:吕亦杰");
|
||||||
|
Press_to_continue();
|
||||||
|
do
|
||||||
|
{
|
||||||
|
flag=start_10k();
|
||||||
|
}while(flag);
|
||||||
|
printf("\n|***************感谢您的使用**************|\n");
|
||||||
|
}
|
342
stu2024/软件2402唐凯杰.cpp
Normal file
342
stu2024/软件2402唐凯杰.cpp
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
int main(){
|
||||||
|
int flag=0;
|
||||||
|
while(flag==0){
|
||||||
|
|
||||||
|
printf("menu \n");
|
||||||
|
printf("1:查询某年某月某日的日期是周几\n");
|
||||||
|
printf("2:该年是否为闰年\n");
|
||||||
|
printf("3:输出这一年的日历\n");
|
||||||
|
printf("4:退出\n");
|
||||||
|
|
||||||
|
|
||||||
|
char x[1];
|
||||||
|
scanf("%s",&x[1]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(x[1]!=49&&x[1]!=50&&x[1]!=51&&x[1]!=52)
|
||||||
|
printf("输入有误,请重新输入\n");
|
||||||
|
|
||||||
|
|
||||||
|
if(x[1]==49){
|
||||||
|
int w,d,m,y;
|
||||||
|
printf("请输入年 月 日\n");
|
||||||
|
scanf("%d%d%d",&y,&m,&d);
|
||||||
|
if(y<0||m<0||d<0||m>12||((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>31)||((m==2||m==4||m==9||m==11)&&d>30)||((y%4==0&&y%100!=0||y%400==0)&&m==2&&d>29)||(y==1582&&m==10&&(d==5||d==6||d==7||d==8||d==9||d==10||d==11||d==12||d==13||d==14))){
|
||||||
|
printf("日期不存在,请重新输入\n");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(y<=1582&&m<=10&&d<=4){
|
||||||
|
if(m==1||m==2){
|
||||||
|
y--;
|
||||||
|
m+=12;
|
||||||
|
}
|
||||||
|
w = (d+1+2*m+3*(m+1)/5+y+y/4+5) % 7;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
|
||||||
|
if(m==1||m==2){
|
||||||
|
y--;
|
||||||
|
m+=12;
|
||||||
|
}
|
||||||
|
|
||||||
|
w = (d + 1+ 2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;}
|
||||||
|
switch(w){
|
||||||
|
case 0:printf("星期日\n");break;
|
||||||
|
case 1:printf("星期一\n");break;
|
||||||
|
case 2:printf("星期二\n");break;
|
||||||
|
case 3:printf("星期三\n");break;
|
||||||
|
case 4:printf("星期四\n");break;
|
||||||
|
case 5:printf("星期五\n");break;
|
||||||
|
case 6:printf("星期六\n");break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(x[1]==50){
|
||||||
|
int n;
|
||||||
|
printf("请输入年份\n");
|
||||||
|
scanf("%d",&n);
|
||||||
|
if(n%4==0&&n%100!=0||n%400==0){
|
||||||
|
printf("%d年是闰年\n",n);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printf("%d年不是闰年\n",n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(x[1]==51){
|
||||||
|
int y;
|
||||||
|
printf("请输入年份\n");
|
||||||
|
scanf("%d",&y);
|
||||||
|
if(y<=0){
|
||||||
|
printf("输入有误,请重新输入\n");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printf("1:单列输出\n2:双列输出\n");
|
||||||
|
int n,m,w,j,d,s,m1,m2,w1,w2,s1,s2,d1,d2,j1,j2;
|
||||||
|
scanf("%d",&n);
|
||||||
|
if(n==1){
|
||||||
|
printf("%d年\n",y);
|
||||||
|
for(m=1;m<=12;m++){
|
||||||
|
printf("%d月\n",m);
|
||||||
|
if(y<=1582&&m<=10){
|
||||||
|
if(m==1||m==2){
|
||||||
|
y--;
|
||||||
|
m+=12;
|
||||||
|
}
|
||||||
|
w = (1+1+2*m+3*(m+1)/5+y+y/4+5) % 7;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
|
||||||
|
if(m==1||m==2){
|
||||||
|
y--;
|
||||||
|
m+=12;
|
||||||
|
}
|
||||||
|
|
||||||
|
w = (1 + 1+ 2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;}
|
||||||
|
if(m==13||m==14){
|
||||||
|
y++;
|
||||||
|
m-=12;
|
||||||
|
}
|
||||||
|
int month_days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if(y%4==0&&y%100!=0||y%400==0){
|
||||||
|
month_days[2]=29;
|
||||||
|
}
|
||||||
|
s=month_days[m];
|
||||||
|
printf(" sum mon tue wed thu fri sat\n");
|
||||||
|
for(j=0;j<w;j++){
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
for(d=1;d<=s;d++){
|
||||||
|
if(y==1582&&m==10&&d>=5&&d<=14)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printf("%4d",d);
|
||||||
|
|
||||||
|
|
||||||
|
if(y==1582&&m==10){
|
||||||
|
|
||||||
|
if(d==16||d==23||d==30){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
else if((d+w)%7==0){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if((s+w)%7!=0){
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(n==2){
|
||||||
|
printf("%d年\n",y);
|
||||||
|
for(m1=1,m2=2;m1<=11,m2<=12;m1+=2,m2+=2){
|
||||||
|
|
||||||
|
int aaa=1,cnt=1;
|
||||||
|
|
||||||
|
printf("%d月 %d月\n",m1,m2);
|
||||||
|
if(y<=1582&&m1<=10){
|
||||||
|
if(m1==1||m1==2){
|
||||||
|
y--;
|
||||||
|
m1+=12;
|
||||||
|
}
|
||||||
|
w1 = (1+1+2*m1+3*(m1+1)/5+y+y/4+5) % 7;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
|
||||||
|
if(m1==1||m1==2){
|
||||||
|
y--;
|
||||||
|
m1+=12;
|
||||||
|
}
|
||||||
|
|
||||||
|
w1 = (1 + 1+ 2*m1+3*(m1+1)/5+y+y/4-y/100+y/400)%7;}
|
||||||
|
if(m1==13||m1==14){
|
||||||
|
y++;
|
||||||
|
m1-=12;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(y<=1582&&m2<=10){
|
||||||
|
if(m2==1||m2==2){
|
||||||
|
y--;
|
||||||
|
m2+=12;
|
||||||
|
}
|
||||||
|
w2 = (1+1+2*m2+3*(m2+1)/5+y+y/4+5) % 7;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
|
||||||
|
if(m2==1||m2==2){
|
||||||
|
y--;
|
||||||
|
m2+=12;
|
||||||
|
}
|
||||||
|
|
||||||
|
w2 = (1 + 1+ 2*m2+3*(m2+1)/5+y+y/4-y/100+y/400)%7;}
|
||||||
|
if(m2==13||m2==14){
|
||||||
|
y++;
|
||||||
|
m2-=12;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int month_days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if(y%4==0&&y%100!=0||y%400==0){
|
||||||
|
month_days[2]=29;
|
||||||
|
}
|
||||||
|
s1=month_days[m1];
|
||||||
|
s2=month_days[m2];
|
||||||
|
printf(" sum mon tue wed thu fri sat sum mon tue wed thu fri sat\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for(j1=0;j1<w1;j1++){
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
for(d1=1;d1<=s1;d1++){
|
||||||
|
if(y==1582&&m1==10&&d1>=5&&d1<=14)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printf("%4d",d1);
|
||||||
|
|
||||||
|
|
||||||
|
if(y==1582&&m1==10){
|
||||||
|
|
||||||
|
if(d1==16||d1==23||d1==30){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
else if((d1+w1)%7==0){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
while(aaa){
|
||||||
|
|
||||||
|
for(j2=0;j2<w2;j2++){
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
aaa--;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(d2=cnt;d2<=s2;d2++){
|
||||||
|
if(y==1582&&m2==10&&d2>=5&&d2<=14)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printf("%4d",d2);
|
||||||
|
|
||||||
|
|
||||||
|
if(y==1582&&m2==10){
|
||||||
|
|
||||||
|
if(d2==16||d2==23||d2==30){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
else if((d2+w2)%7==0){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cnt=d2+1;
|
||||||
|
printf("\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
if(cnt!=d2){
|
||||||
|
|
||||||
|
printf("\n");}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
if((s1+w1)%7!=0){
|
||||||
|
|
||||||
|
|
||||||
|
for(j1=0;j1<7-(s1+w1)%7;j1++){
|
||||||
|
|
||||||
|
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
printf(" \n");
|
||||||
|
|
||||||
|
if((s2+w2)%7!=0){
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(x[1]==52){
|
||||||
|
flag++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
125
stu2024/软件2402田世涛.cpp
Normal file
125
stu2024/软件2402田世涛.cpp
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// 判断闰年
|
||||||
|
int isLeapYear(int year) {
|
||||||
|
return ((year % 4 == 0 && year % 100!= 0) || year % 400 == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算给定日期是周几(蔡氏公式)
|
||||||
|
int dayOfWeek(int year, int month, int day)
|
||||||
|
{
|
||||||
|
if (month < 3) {
|
||||||
|
year--;
|
||||||
|
month += 12;
|
||||||
|
}
|
||||||
|
int c = year / 100;
|
||||||
|
int y = year % 100;
|
||||||
|
int d = (day + (13 * (month + 1) / 5) + y + (y / 4) + (c / 4) + (5 * c)) % 7;
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出单列日历
|
||||||
|
void printSingleColumnCalendar(int year) {//printSingleColumnCalendar打印单个月日历空间
|
||||||
|
char *months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
|
||||||
|
int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//储存一年每月的天数
|
||||||
|
if (isLeapYear(year)) {
|
||||||
|
daysInMonth[1] = 29;//特殊年份
|
||||||
|
}
|
||||||
|
for (int m = 0; m < 12; m++) {//输出一年的月份
|
||||||
|
printf("%s %d\n", months[m], year);
|
||||||
|
printf("Sun Mon Tue Wed Thu Fri Sat\n");
|
||||||
|
int weekDay = dayOfWeek(year, m + 1, 1);
|
||||||
|
for (int i = 0; i < weekDay; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for (int d = 1; d <= daysInMonth[m]; d++) {
|
||||||
|
printf("%3d ", d);
|
||||||
|
if ((weekDay + d) % 7 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出双列日历
|
||||||
|
void printDoubleColumnCalendar(int year) {//printDoubleColumnCalendar打印并排月的日历
|
||||||
|
char *months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
|
||||||
|
int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if (isLeapYear(year)) {
|
||||||
|
daysInMonth[1] = 29;
|
||||||
|
}
|
||||||
|
for (int m = 0; m < 12; m++) {
|
||||||
|
printf("%s %d\t\t", months[m], year);
|
||||||
|
if (m % 2 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("Sun Mon Tue Wed Thu Fri Sat\t\tSun Mon Tue Wed Thu Fri Sat\n");
|
||||||
|
int weekDay = dayOfWeek(year, m + 1, 1);
|
||||||
|
for (int i = 0; i < weekDay; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for (int d = 1; d <= daysInMonth[m]; d++) {
|
||||||
|
printf("%3d ", d);
|
||||||
|
if ((weekDay + d) % 7 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 菜单显示
|
||||||
|
void menu() {
|
||||||
|
int choice, year,a;
|
||||||
|
printf("1.输出对应年份全年的日历:\n");
|
||||||
|
printf("2.判断输入年份是否为闰年:\n");
|
||||||
|
printf("3.对应日期为周几:\n");
|
||||||
|
printf("4.退出:\n");
|
||||||
|
scanf("%d",&a);
|
||||||
|
if(a==1)
|
||||||
|
{
|
||||||
|
printf("1. 输出单列日历\n2. 输出双列日历\n3. 退出\n: ");
|
||||||
|
scanf("%d", &choice);
|
||||||
|
if (choice == 1 || choice == 2) {
|
||||||
|
printf("请输入年份: ");
|
||||||
|
scanf("%d", &year);
|
||||||
|
if (year < 1900 || year > 2100) {//报错范围
|
||||||
|
printf("年份超出范围,请重新输入\n");
|
||||||
|
menu();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (choice == 1) {
|
||||||
|
printSingleColumnCalendar(year);//选择单列
|
||||||
|
} else {
|
||||||
|
printDoubleColumnCalendar(year);//选择双列
|
||||||
|
}
|
||||||
|
} else if (choice == 3) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
printf("无效选择,请重新选择\n");
|
||||||
|
menu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(a==2)
|
||||||
|
{
|
||||||
|
printf("请输入年份:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if((year % 4 == 0 && year % 100!= 0) || year % 400 == 0)
|
||||||
|
printf("闰年");
|
||||||
|
else
|
||||||
|
printf("平年");
|
||||||
|
}
|
||||||
|
else if(a==3)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
menu();
|
||||||
|
return 0;
|
||||||
|
}
|
171
stu2024/软件2403王琬琳.cpp
Normal file
171
stu2024/软件2403王琬琳.cpp
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
//台历(没有实现双列输出 和 1582年的少十天
|
||||||
|
void k( int x,int year,int month)
|
||||||
|
{ int i,day=0,j;
|
||||||
|
for(i=0;i<year;i++)
|
||||||
|
if(i%4==0&&i%100!=0||i%400==0)
|
||||||
|
day=day+366;
|
||||||
|
else
|
||||||
|
day=day+365;
|
||||||
|
|
||||||
|
for(i=1;i<month;i++)
|
||||||
|
{ switch(i)
|
||||||
|
{
|
||||||
|
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
|
||||||
|
day=day+31;
|
||||||
|
break;
|
||||||
|
case 4: case 6: case 9: case 11:
|
||||||
|
day=day+30;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
day=day+29;
|
||||||
|
else
|
||||||
|
day=day+28;
|
||||||
|
break;
|
||||||
|
}}
|
||||||
|
j=day%7+1;
|
||||||
|
if(j!=7)
|
||||||
|
{
|
||||||
|
for(i=1;i<=j;i++)
|
||||||
|
printf("\t");
|
||||||
|
}
|
||||||
|
for(i=1;i<=x;i++)
|
||||||
|
{
|
||||||
|
if(i==(7-j)||(i-(7-j))%7==0)
|
||||||
|
{
|
||||||
|
printf("%d\n\n",i);
|
||||||
|
continue;}
|
||||||
|
printf("%d\t",i);
|
||||||
|
}
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
void weed( int month,int year)
|
||||||
|
{ int i;
|
||||||
|
char a[7][19]={"日","一","二","三","四","五","六"};
|
||||||
|
printf("--------------------%d年 %d月--------------------\n\n",year,month);
|
||||||
|
for(i=0;i<7;i++)
|
||||||
|
printf("%s\t",a[i]);
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int num,year,month,day;
|
||||||
|
int a,week;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
printf(" 菜单 \n1.查询年份是否为闰年\n2.查询星期几\n3.展示日历\n0.退出\n");
|
||||||
|
printf("输入您想应用的功能对应的数字");
|
||||||
|
scanf("%d",&num);
|
||||||
|
switch(num)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
printf("感谢使用");
|
||||||
|
return 0;
|
||||||
|
case 1:
|
||||||
|
printf("输入年份");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if((year%4==0)&&(year%100!=0)||(year%400==0))
|
||||||
|
a=0;
|
||||||
|
else
|
||||||
|
a=1;
|
||||||
|
switch(a)
|
||||||
|
{
|
||||||
|
case 0:printf("该年为闰年\n");break;
|
||||||
|
case 1:printf("该年不是闰年\n");break;
|
||||||
|
}break;
|
||||||
|
case 2:
|
||||||
|
printf("输入年份");
|
||||||
|
scanf("%d",&year);
|
||||||
|
printf("输入月份");
|
||||||
|
scanf("%d",&month);
|
||||||
|
printf("请输入日期");
|
||||||
|
scanf("%d",&day);
|
||||||
|
if(month==1||month==2)
|
||||||
|
{ month=month+=12;
|
||||||
|
year--;
|
||||||
|
week=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(month==3||month==4||month==5||month==6||month==7||month==8||month==9||month==10||month==11||month==12)
|
||||||
|
week=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
|
||||||
|
switch(week)
|
||||||
|
{
|
||||||
|
case 0:printf("星期一\n");break;
|
||||||
|
case 1:printf("星期二\n");break;
|
||||||
|
case 2:printf("星期三\n");break;
|
||||||
|
case 3:printf("星期四\n");break;
|
||||||
|
case 4:printf("星期五\n");break;
|
||||||
|
case 5:printf("星期六\n");break;
|
||||||
|
case 6:printf("星期天\n");break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("1.只写了单列排列\n2.只写了单列排列\n");
|
||||||
|
int year,month=0;
|
||||||
|
int x;
|
||||||
|
printf("请输入要查询的年份:");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year==1582&&month==10&&day>=5&&day<=14)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
while(month++<=12)
|
||||||
|
{
|
||||||
|
switch(month)
|
||||||
|
{
|
||||||
|
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
|
||||||
|
x=31;
|
||||||
|
weed(month,year);
|
||||||
|
k(x,year,month);
|
||||||
|
break;
|
||||||
|
case 4: case 6: case 9: case 11:
|
||||||
|
x=30;
|
||||||
|
weed(month,year);
|
||||||
|
k(x,year,month);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
x=29;
|
||||||
|
else
|
||||||
|
x=28;
|
||||||
|
weed(month,year);
|
||||||
|
k(x,year,month);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("\n");
|
||||||
|
while(month++<=12)
|
||||||
|
{
|
||||||
|
switch(month)
|
||||||
|
{
|
||||||
|
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
|
||||||
|
x=31;
|
||||||
|
weed(month,year);
|
||||||
|
k(x,year,month);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 4: case 6: case 9: case 11:
|
||||||
|
x=30;
|
||||||
|
weed(month,year);
|
||||||
|
k(x,year,month);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
x=29;
|
||||||
|
else
|
||||||
|
x=28;
|
||||||
|
weed(month,year);
|
||||||
|
k(x,year,month);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
565
stu2024/软件2404李建瑞 第二次.cpp
Normal file
565
stu2024/软件2404李建瑞 第二次.cpp
Normal file
@ -0,0 +1,565 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
char *mmmm[13]={" ","January","February","March","April","May","June","July","August","September","October","November","December"};
|
||||||
|
int xingqi(int year,int month)
|
||||||
|
{
|
||||||
|
if (month==1||month==2)
|
||||||
|
{
|
||||||
|
month=month+12;
|
||||||
|
year=year-1;
|
||||||
|
}
|
||||||
|
int a=year%100;
|
||||||
|
int b=year/100;
|
||||||
|
int day=1;
|
||||||
|
int h=(day+13*(month+1)/5+a+a/4+b/4+5*b)%7;
|
||||||
|
int d=(h+6)%7;
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int xingqi2(int year,int month,int d)
|
||||||
|
{
|
||||||
|
if (month==1||month==2)
|
||||||
|
{
|
||||||
|
month=month+12;
|
||||||
|
year=year-1;
|
||||||
|
}
|
||||||
|
int c=year/100;
|
||||||
|
int y=year%100;
|
||||||
|
int a=(c/4-2*c+y+y/4+13*(month+1)/5+d-1)%7;
|
||||||
|
if(a==0)
|
||||||
|
a=7;
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int s;
|
||||||
|
do{
|
||||||
|
int qwe;
|
||||||
|
printf("*********************************************************\n");
|
||||||
|
printf("菜单:\n");
|
||||||
|
printf("功能1:查询对应年份的日历\n");
|
||||||
|
printf("功能2:查询对应日期的星期\n");
|
||||||
|
printf("功能3:查询对应年份是否为闰年\n");
|
||||||
|
printf("功能4:查询输入的月份用英语怎么表达\n");
|
||||||
|
printf("*********************************************************");
|
||||||
|
printf("\n\n");
|
||||||
|
|
||||||
|
|
||||||
|
while(2)
|
||||||
|
{
|
||||||
|
printf("你想进行的功能编号为:\n");
|
||||||
|
scanf("%d",&qwe);
|
||||||
|
if(qwe>0&&qwe<5)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("暂未开发到该功能 请重新输入\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(qwe==1)
|
||||||
|
{
|
||||||
|
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
int n[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};
|
||||||
|
int year,a,b,c;
|
||||||
|
while(2)
|
||||||
|
{
|
||||||
|
printf("请输入你想查询的年份:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year>0)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("输入错误 请重新输入\n");
|
||||||
|
}
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
m[2]=29;
|
||||||
|
if(year==1582)
|
||||||
|
m[10]=21;
|
||||||
|
a=year/100;
|
||||||
|
b=year%100;
|
||||||
|
int ds;
|
||||||
|
while(2)
|
||||||
|
{
|
||||||
|
printf("单行输出按1\n双行输出按2\n");
|
||||||
|
scanf("%d",&ds);
|
||||||
|
if(ds==1||ds==2)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("输错了 请重新输入\n");
|
||||||
|
}
|
||||||
|
if(year!=1582)
|
||||||
|
{
|
||||||
|
if(ds==2)
|
||||||
|
{
|
||||||
|
for(int nn=1;nn<13;nn=nn+2)
|
||||||
|
{
|
||||||
|
int day1=1,day2=1;
|
||||||
|
int ll;
|
||||||
|
int c,d,e,f,g;
|
||||||
|
c=xingqi(year,nn);
|
||||||
|
d=xingqi(year,nn+1);
|
||||||
|
f=(m[nn]+c-1)/7+1;
|
||||||
|
g=(m[nn+1]+d-1)/7+1;
|
||||||
|
if(f>g)
|
||||||
|
e=f;
|
||||||
|
else
|
||||||
|
e=g;
|
||||||
|
printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
|
||||||
|
printf("%d月 %d月\n",n[nn],n[nn+1]);
|
||||||
|
for(ll=0;ll<e;ll++)
|
||||||
|
{
|
||||||
|
for(int i=0;i<7;i++)
|
||||||
|
{
|
||||||
|
if(ll==0&&i<c)
|
||||||
|
printf(" ");
|
||||||
|
else if(day1<=m[nn])
|
||||||
|
printf("%2d ",day1++);
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0;i<7;i++)
|
||||||
|
{
|
||||||
|
if(ll==0&&i<d)
|
||||||
|
printf(" ");
|
||||||
|
else if(day2<=m[nn+1])
|
||||||
|
printf("%2d ",day2++);
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int nn=1;nn<13;nn++){
|
||||||
|
printf("日 一 二 三 四 五 六\n");
|
||||||
|
printf("%d月\n",n[nn]);
|
||||||
|
c=xingqi(year,nn);
|
||||||
|
for(int aa=0;aa<c;aa++)
|
||||||
|
printf(" ");
|
||||||
|
for(int day=1;day<=m[nn];day++)
|
||||||
|
{
|
||||||
|
printf("%2d ", day);
|
||||||
|
if ((c+day)%7==0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(ds==2)
|
||||||
|
{
|
||||||
|
for(int nn=1;nn<13;nn=nn+2)
|
||||||
|
{
|
||||||
|
int day1=1,day2=1;
|
||||||
|
int ll;
|
||||||
|
int c,d,e,f,g;
|
||||||
|
c=xingqi(year,nn);
|
||||||
|
d=xingqi(year,nn+1);
|
||||||
|
f=(m[nn]+c-1)/7+1;
|
||||||
|
g=(m[nn+1]+d-1)/7+1;
|
||||||
|
if(f>g)
|
||||||
|
e=f;
|
||||||
|
else
|
||||||
|
e=g;
|
||||||
|
printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
|
||||||
|
printf("%d月 %d月\n",n[nn],n[nn+1]);
|
||||||
|
if(nn!=11)
|
||||||
|
{
|
||||||
|
for(ll=0;ll<e;ll++)
|
||||||
|
{
|
||||||
|
for(int i=0;i<7;i++)
|
||||||
|
{
|
||||||
|
if(ll==0&&i<c)
|
||||||
|
printf(" ");
|
||||||
|
else if(day1<=m[nn])
|
||||||
|
printf("%2d ",day1++);
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0;i<7;i++)
|
||||||
|
{
|
||||||
|
if(nn!=9)
|
||||||
|
{
|
||||||
|
if(ll==0&&i<d)
|
||||||
|
printf(" ");
|
||||||
|
else if(day2<=m[nn+1])
|
||||||
|
printf("%2d ",day2++);
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(ll==0&&i<d)
|
||||||
|
printf(" ");
|
||||||
|
else if(day2<=4)
|
||||||
|
printf("%2d ",day2++);
|
||||||
|
else if(day2<=m[nn+1]&&day2>4)
|
||||||
|
{
|
||||||
|
printf("%2d ",day2+10);
|
||||||
|
day2++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(nn==11)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
f=(m[nn]+c+4-1)/7+1;
|
||||||
|
g=(m[nn+1]+d+4-1)/7+1;
|
||||||
|
if(f>g)
|
||||||
|
e=f;
|
||||||
|
else
|
||||||
|
e=g;
|
||||||
|
|
||||||
|
for(ll=0;ll<e;ll++)
|
||||||
|
{
|
||||||
|
for(int i=0;i<7;i++)
|
||||||
|
{
|
||||||
|
if(ll==0&&i<c+4)
|
||||||
|
printf(" ");
|
||||||
|
else if(day1<=m[nn])
|
||||||
|
printf("%2d ",day1++);
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0;i<7;i++)
|
||||||
|
{
|
||||||
|
if(nn!=9)
|
||||||
|
{
|
||||||
|
if(ll==0&&i<d-3)
|
||||||
|
printf(" ");
|
||||||
|
else if(day2<=m[nn+1])
|
||||||
|
printf("%2d ",day2++);
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(ll==0&&i<d+4)
|
||||||
|
printf(" ");
|
||||||
|
else if(day2<=4)
|
||||||
|
printf("%2d ",day2++);
|
||||||
|
else if(day2<=m[nn+1]&&day2>4)
|
||||||
|
{
|
||||||
|
printf("%2d ",day2+10);
|
||||||
|
day2++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(year!=1582)
|
||||||
|
{
|
||||||
|
for(int nn=1;nn<13;nn++){
|
||||||
|
printf("日 一 二 三 四 五 六\n");
|
||||||
|
printf("%d月\n",n[nn]);
|
||||||
|
c=xingqi(year,nn);
|
||||||
|
for(int aa=0;aa<c;aa++)
|
||||||
|
printf(" ");
|
||||||
|
for(int day=1;day<=m[nn];day++)
|
||||||
|
{
|
||||||
|
printf("%2d ", day);
|
||||||
|
if ((c+day)%7==0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int nn=1;nn<13;nn++){
|
||||||
|
if(nn!=11&&nn!=12){
|
||||||
|
printf("日 一 二 三 四 五 六\n");
|
||||||
|
printf("%d月\n",n[nn]);
|
||||||
|
c=xingqi(year,nn);
|
||||||
|
for(int aa=0;aa<c;aa++)
|
||||||
|
printf(" ");
|
||||||
|
for(int day=1;day<=m[nn];day++)
|
||||||
|
{
|
||||||
|
if(nn!=10){
|
||||||
|
printf("%2d ", day);
|
||||||
|
if ((c+day)%7==0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
else{
|
||||||
|
if(day<=4){
|
||||||
|
printf("%2d ", day);
|
||||||
|
if ((c+day)%7==0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
else{
|
||||||
|
printf("%2d ", day+10);
|
||||||
|
if ((c+day)%7==0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(nn==11){
|
||||||
|
printf("日 一 二 三 四 五 六\n");
|
||||||
|
printf("%d月\n",n[nn]);
|
||||||
|
c=xingqi(year,nn)+4;
|
||||||
|
for(int aa=0;aa<c;aa++)
|
||||||
|
printf(" ");
|
||||||
|
for(int day=1;day<=m[nn];day++)
|
||||||
|
{
|
||||||
|
printf("%2d ", day);
|
||||||
|
if ((c+day)%7==0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else{
|
||||||
|
printf("日 一 二 三 四 五 六\n");
|
||||||
|
printf("%d月\n",n[nn]);
|
||||||
|
c=xingqi(year,nn)-3;
|
||||||
|
for(int aa=0;aa<c;aa++)
|
||||||
|
printf(" ");
|
||||||
|
for(int day=1;day<=m[nn];day++)
|
||||||
|
{
|
||||||
|
printf("%2d ", day);
|
||||||
|
if ((c+day)%7==0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
else if(qwe==2)
|
||||||
|
{
|
||||||
|
int year;
|
||||||
|
while(2)
|
||||||
|
{
|
||||||
|
printf("你想查询的年份为:\n");
|
||||||
|
scanf("%4d",&year);
|
||||||
|
while(getchar()!='\n');
|
||||||
|
if(year>0)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入公元后年份\n\n");
|
||||||
|
}
|
||||||
|
int c;
|
||||||
|
while(2)
|
||||||
|
{
|
||||||
|
printf("你想查询的月份为:\n");
|
||||||
|
scanf("%2d",&c);
|
||||||
|
while(getchar()!='\n');
|
||||||
|
if(c>0&&c<13)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入正确月份\n\n");
|
||||||
|
}
|
||||||
|
int d;
|
||||||
|
while(2)
|
||||||
|
{
|
||||||
|
printf("你想查询的号数为:\n");
|
||||||
|
scanf("%2d",&d);
|
||||||
|
while(getchar()!='\n');
|
||||||
|
if(year!=1582)
|
||||||
|
{
|
||||||
|
if(c==2)
|
||||||
|
{
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
{
|
||||||
|
if(d>0&&d<30)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入正确号数\n\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(d>0&&d<29)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入正确号数\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(c==1||c==3||c==5||c==7||c==8||c==10||c==12)
|
||||||
|
{
|
||||||
|
if(d>0&&d<32)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入正确号数\n\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if(d>0&&d<31)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入正确号数\n\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(year==1582)
|
||||||
|
{
|
||||||
|
if(c==2)
|
||||||
|
{
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
{
|
||||||
|
if(d>0&&d<30)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入正确号数\n\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(d>0&&d<29)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入正确号数\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(c==1||c==3||c==5||c==7||c==8||c==12)
|
||||||
|
{
|
||||||
|
if(d>0&&d<32)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入正确号数\n\n");
|
||||||
|
}
|
||||||
|
else if(c==10)
|
||||||
|
{
|
||||||
|
if(d>0&&d<5||d>14&&d<32)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入正确号数\n\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if(d>0&&d<31)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入正确号数\n\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
int e;
|
||||||
|
e=xingqi2(year,c,d);
|
||||||
|
if(e==0)
|
||||||
|
e==7;
|
||||||
|
if(year!=1582){
|
||||||
|
printf("你查询的日期为星期%d\n",e);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(c!=10&&c!=11&&c!=12)
|
||||||
|
printf("你查询的日期为星期%d\n",e);
|
||||||
|
else if(c==10)
|
||||||
|
{
|
||||||
|
if(d<5)
|
||||||
|
printf("你查询的日期为星期%d\n",e);
|
||||||
|
else
|
||||||
|
printf("你查询的日期为星期%d\n",e-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(c==11)
|
||||||
|
{
|
||||||
|
int e;
|
||||||
|
e=xingqi2(year,c,d)+4;
|
||||||
|
if(e==0)
|
||||||
|
e=7;
|
||||||
|
if(e==8)
|
||||||
|
e=1;
|
||||||
|
if(e==9)
|
||||||
|
e=2;
|
||||||
|
if(e==10)
|
||||||
|
e=3;
|
||||||
|
if(e==11)
|
||||||
|
e=4;
|
||||||
|
printf("你查询的日期为星期%d\n",e);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int e;
|
||||||
|
e=xingqi2(year,c,d)-3;
|
||||||
|
if(e==-1)
|
||||||
|
e=6;
|
||||||
|
if(e==-2)
|
||||||
|
e=5;
|
||||||
|
if(e==0)
|
||||||
|
e=7;
|
||||||
|
printf("你查询的日期为星期%d\n",e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(qwe==3)
|
||||||
|
{
|
||||||
|
int year;
|
||||||
|
while(2)
|
||||||
|
{
|
||||||
|
printf("请输入想要查询的年份:\n");
|
||||||
|
scanf("%d",&year);
|
||||||
|
if(year>0)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
printf("请输入公元后年份\n\n");
|
||||||
|
}
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
printf("%d是闰年",year);
|
||||||
|
else
|
||||||
|
printf("%d不是闰年",year);
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int yuefen;
|
||||||
|
do{
|
||||||
|
printf("请输入想查询的月份,用阿拉伯数字:\n");
|
||||||
|
scanf("%d",&yuefen);
|
||||||
|
}while(yuefen<1||yuefen>12);
|
||||||
|
printf("%d用英语表示为 %s\n",yuefen,mmmm[yuefen]);
|
||||||
|
}
|
||||||
|
printf("是否继续程序?\n 继续程序请按1 结束程序请按除1外任意阿拉伯数字\n");
|
||||||
|
scanf("%d",&s);
|
||||||
|
}while(s==1);
|
||||||
|
return 0;
|
||||||
|
}
|
143
stu2024/软件2404潘仕博.cpp
Normal file
143
stu2024/软件2404潘仕博.cpp
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
// 判断是否为闰年
|
||||||
|
int runnian(int year) {
|
||||||
|
return ((year % 4 == 0 && year % 100!= 0) || (year % 400 == 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算某日期是周几(基姆拉尔森计算公式)
|
||||||
|
int howweek(int year, int month, int day) {
|
||||||
|
if (month < 3) {
|
||||||
|
month += 12;
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
int week = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
|
||||||
|
return week+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出单个月份日历(单列输出)
|
||||||
|
void dl(int year, int month) {
|
||||||
|
int dym;
|
||||||
|
if (month == 2) {
|
||||||
|
dym = runnian(year)? 29 : 28;
|
||||||
|
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
|
||||||
|
dym = 30;
|
||||||
|
} else {
|
||||||
|
dym = 31;
|
||||||
|
}
|
||||||
|
|
||||||
|
int weekDay = howweek(year, month, 1);
|
||||||
|
if(weekDay==7)
|
||||||
|
weekDay=0;
|
||||||
|
printf(" %d年%d月\n", year, month);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
|
||||||
|
for (int i = 0; i < weekDay; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for (int i = 1; i <= dym; i++) {
|
||||||
|
printf("%2d ", i);
|
||||||
|
if ((i + weekDay) % 7 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出整年日(单列输出)
|
||||||
|
void dl(int year) {
|
||||||
|
if(year<=10000&&year>0){
|
||||||
|
for (int month = 1; month <= 12; month++) {
|
||||||
|
dl(year, month);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("错误");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示菜单
|
||||||
|
void cd() {
|
||||||
|
printf("1. 查询日期是周几及是否闰年\n");
|
||||||
|
printf("2. 输出单年日历(单列)\n");
|
||||||
|
printf("3. 输出单年日历(双列)\n");
|
||||||
|
printf("4. 退出\n");
|
||||||
|
printf("请选择操作:");
|
||||||
|
}
|
||||||
|
int getValidIntInput() {
|
||||||
|
int input;
|
||||||
|
while (1) {
|
||||||
|
if (scanf("%d", &input) == 1) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
printf("输入错误,请重新输入整数:");
|
||||||
|
while (getchar()!= '\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int choice;
|
||||||
|
int year, month, day;
|
||||||
|
|
||||||
|
do {
|
||||||
|
cd();
|
||||||
|
choice = getValidIntInput();
|
||||||
|
|
||||||
|
switch (choice) {
|
||||||
|
case 1:
|
||||||
|
printf("请输入年份:");
|
||||||
|
year = getValidIntInput();
|
||||||
|
printf("请输入月份:");
|
||||||
|
month = getValidIntInput();
|
||||||
|
printf("请输入日期:");
|
||||||
|
day = getValidIntInput();
|
||||||
|
|
||||||
|
printf("%d年%d月%d日是星期", year, month, day);
|
||||||
|
switch (howweek(year, month, day)) {
|
||||||
|
case 0:
|
||||||
|
printf("日");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
printf("一");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("二");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("三");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("四");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("五");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("六");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
printf(",");
|
||||||
|
if (runnian(year)) {
|
||||||
|
printf("该年是闰年\n");
|
||||||
|
} else {
|
||||||
|
printf("该年不是闰年\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("请输入年份:");
|
||||||
|
year =getValidIntInput();
|
||||||
|
dl(year);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("退出程序\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("无效的选择,请重新选择\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (choice!= 4);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
382
stu2024/软件2404王莫涵(1).cpp
Normal file
382
stu2024/软件2404王莫涵(1).cpp
Normal file
@ -0,0 +1,382 @@
|
|||||||
|
#include<bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
bool run(int year) {
|
||||||
|
if (year >= 1582)
|
||||||
|
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
|
||||||
|
else
|
||||||
|
return (year % 4 == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Y(int year) {
|
||||||
|
if (year > 0 && year < 10000)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool M(int month) {
|
||||||
|
if (month > 0 && month < 13)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool D(int year, int month, int day) {
|
||||||
|
int m[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if (run(year))
|
||||||
|
m[2] = 29;
|
||||||
|
if (year == 1582 && month == 10 && day >= 5 && day < 15)
|
||||||
|
return false;
|
||||||
|
if (!(day > 0 && day <= m[month]))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int shu(char a[100]) {
|
||||||
|
int c, t = strlen(a);
|
||||||
|
for (int i = 0; i < t; i++) {
|
||||||
|
if (a[i] >= '0' && a[i] <= '9') {
|
||||||
|
c++;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (c == t)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int zhou(int year, int month, int day) {
|
||||||
|
int a, b = 0;
|
||||||
|
int m[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
a = ((year - 1) * 365 + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1) % 7;
|
||||||
|
if (year <= 1582) {
|
||||||
|
a = ((year - 1) * 365 + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 11) % 7;
|
||||||
|
}
|
||||||
|
if (run(year))
|
||||||
|
m[2] = 29;
|
||||||
|
if (year == 1582) {
|
||||||
|
m[10] = 21;
|
||||||
|
}
|
||||||
|
for (int i = 1; i < month; i++) {
|
||||||
|
|
||||||
|
a = (a + m[i]) % 7;
|
||||||
|
}
|
||||||
|
if (year == 1582 && month == 10 && day >= 15) {
|
||||||
|
b = (day - 10) % 7;
|
||||||
|
} else
|
||||||
|
b = (a + day - 1) % 7;
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void one(int year, int month) {
|
||||||
|
printf("%6d年%6d月\n", year, month);
|
||||||
|
cout << "日 一 二 三 四 五 六\n";
|
||||||
|
|
||||||
|
int m[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if (run(year))
|
||||||
|
m[2] = 29;
|
||||||
|
|
||||||
|
int d1 = zhou(year, month, 1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int day = 1;
|
||||||
|
for (int i = 1; i <= d1; i++) {
|
||||||
|
cout << " ";
|
||||||
|
}
|
||||||
|
while (day <= m[month]) {
|
||||||
|
if (year == 1582 && month == 10 && day == 5) {
|
||||||
|
day += 10;
|
||||||
|
d1 += 11;
|
||||||
|
}
|
||||||
|
cout << setw(2) << day << " ";
|
||||||
|
|
||||||
|
|
||||||
|
if ((day + d1 ) % 7 == 0 && day != m[month]) {
|
||||||
|
|
||||||
|
|
||||||
|
cout << "\n";
|
||||||
|
}
|
||||||
|
day++;
|
||||||
|
}
|
||||||
|
cout << "\n";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//双列
|
||||||
|
void two2(int year, int month, int *n) {
|
||||||
|
int m[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if (run(year))
|
||||||
|
m[2] = 29;
|
||||||
|
int i;
|
||||||
|
if (*n == 1) {
|
||||||
|
int z = zhou(year, month, 1);
|
||||||
|
//if(z==0)z=7;
|
||||||
|
for (i = 1; i <= z ; i++) {
|
||||||
|
cout << " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = *n ; i <= m[month]; i++) {
|
||||||
|
printf ("%3d ", i);
|
||||||
|
|
||||||
|
|
||||||
|
if ((i + zhou(year, month, 1) ) % 7 == 0 || i == m[month] ) {
|
||||||
|
|
||||||
|
|
||||||
|
cout << "\n";
|
||||||
|
*n = i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void two(int year, int month) {
|
||||||
|
int i, n = 1;
|
||||||
|
int m[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if (run(year))
|
||||||
|
m[2] = 29;
|
||||||
|
|
||||||
|
printf("%9d年%6d月", year, month);
|
||||||
|
printf("%35d年%6d月\n", year, month + 1);
|
||||||
|
printf(" 日 一 二 三 四 五 六 日 一 二 三 四 五 六 \n");
|
||||||
|
int z = zhou(year, month, 1);
|
||||||
|
//if (z == 0)z = 7;
|
||||||
|
for (i = 1; i <= z; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for (i = 1; i <= m[month]; i++) {
|
||||||
|
printf("%3d ", i);
|
||||||
|
|
||||||
|
|
||||||
|
if ((i + zhou(year, month, 1) ) % 7 == 0 || i == m[month]) {
|
||||||
|
|
||||||
|
|
||||||
|
if (i == m[month]) {
|
||||||
|
int w;
|
||||||
|
w = 7 - ( (i + zhou(year, month, 1) ) % 7 );
|
||||||
|
if (w != 7) {
|
||||||
|
for (int i = 1; i <= w; i++)
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << " ";
|
||||||
|
two2(year, month + 1, &n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf(" ");
|
||||||
|
two2(year, month + 1, &n);
|
||||||
|
}
|
||||||
|
|
||||||
|
//菜单
|
||||||
|
int screen() {
|
||||||
|
char a[10000];
|
||||||
|
int b = 9;
|
||||||
|
|
||||||
|
cout << "万年历菜单:\n";
|
||||||
|
cout << "1.查询某年某月某日的日期是周几,该年是否为闰年\n";
|
||||||
|
cout << "2.输入年份,单列输出这一年的日历\n";
|
||||||
|
cout << "3.输入年份,双列输出这一年的日历\n";
|
||||||
|
cout << "4.输入 0 以结束程序\n";
|
||||||
|
cout << "请输入你的选择:";
|
||||||
|
cin >> a;
|
||||||
|
|
||||||
|
if (strlen(a) > 1) {
|
||||||
|
return b;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (a[0] <= '9' && a[0] >= '0') {
|
||||||
|
system("cls");
|
||||||
|
b = a[0] - '0';
|
||||||
|
return b;
|
||||||
|
} else {
|
||||||
|
system("cls");
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int c;
|
||||||
|
char y[100] = {0}, m[100] = {0}, d[100] = {0};
|
||||||
|
do {
|
||||||
|
c = screen();
|
||||||
|
switch (c) {
|
||||||
|
case 1: {
|
||||||
|
int year, month, day;
|
||||||
|
cout << "请输入年份:";
|
||||||
|
cin >> y;
|
||||||
|
if (strlen(y) > 4) {
|
||||||
|
cout << "年份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (shu(y));
|
||||||
|
else {
|
||||||
|
cout << "年份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (strlen(y) == 4)
|
||||||
|
year = 1000 * (y[0] - '0') + 100 * (y[1] - '0') + 10 * (y[2] - '0') + (y[3] - '0');
|
||||||
|
if (strlen(y) == 3)
|
||||||
|
year = 100 * (y[0] - '0') + 10 * (y[1] - '0') + 1 * (y[2] - '0');
|
||||||
|
if (strlen(y) == 2)
|
||||||
|
year = 10 * (y[0] - '0') + (y[1] - '0');
|
||||||
|
if (strlen(y) == 1)
|
||||||
|
year = 1 * (y[0] - '0');
|
||||||
|
if (!Y(year)) {
|
||||||
|
cout << "年份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cout << "请输入月份:";
|
||||||
|
cin >> m;
|
||||||
|
if (strlen(m) > 2) {
|
||||||
|
cout << "月份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (shu(m));
|
||||||
|
else {
|
||||||
|
cout << "月份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (strlen(m) == 2)
|
||||||
|
month = (10 * (m[0] - '0') + (m[1] - '0'));
|
||||||
|
if (strlen(m) == 1)
|
||||||
|
month = (m[0] - '0');
|
||||||
|
|
||||||
|
|
||||||
|
if (!M(month)) {
|
||||||
|
cout << "月份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cout << "请输入日期:";
|
||||||
|
cin >> d;
|
||||||
|
if (strlen(d) > 2) {
|
||||||
|
cout << "日期输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (shu(d));
|
||||||
|
else {
|
||||||
|
cout << "日期输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (strlen(d) == 2)
|
||||||
|
day = (10 * (d[0] - '0') + (d[1] - '0'));
|
||||||
|
if (strlen(d) == 1)
|
||||||
|
day = (d[0] - '0');
|
||||||
|
|
||||||
|
|
||||||
|
if (!D(year, month, day)) {
|
||||||
|
cout << "日期输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int z = zhou(year, month, day);
|
||||||
|
if (zhou(year, month, day) == 0)
|
||||||
|
z = 7;
|
||||||
|
cout << year << "年" << month << "月" << day << "日是星期"
|
||||||
|
<< z << "。\n";
|
||||||
|
|
||||||
|
if (run(year)) {
|
||||||
|
cout << year << "年是闰年。\n";
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
cout << year << "年不是闰年。\n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
case 2: {
|
||||||
|
int year;
|
||||||
|
|
||||||
|
cout << "请输入年份:";
|
||||||
|
cin >> y;
|
||||||
|
if (strlen(y) > 4) {
|
||||||
|
cout << "年份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (shu(y));
|
||||||
|
else {
|
||||||
|
cout << "年份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (strlen(y) == 4)
|
||||||
|
year = 1000 * (y[0] - '0') + 100 * (y[1] - '0') + 10 * (y[2] - '0') + (y[3] - '0');
|
||||||
|
if (strlen(y) == 3)
|
||||||
|
year = 100 * (y[0] - '0') + 10 * (y[1] - '0') + 1 * (y[2] - '0');
|
||||||
|
if (strlen(y) == 2)
|
||||||
|
year = 10 * (y[0] - '0') + (y[1] - '0');
|
||||||
|
if (strlen(y) == 1)
|
||||||
|
year = 1 * (y[0] - '0');
|
||||||
|
if (!Y(year)) {
|
||||||
|
cout << "年份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int month = 1; month <= 12; month++) {
|
||||||
|
one(year, month);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 3: {
|
||||||
|
int year;
|
||||||
|
|
||||||
|
cout << "请输入年份:";
|
||||||
|
cin >> y;
|
||||||
|
if (strlen(y) > 4) {
|
||||||
|
cout << "年份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (shu(y));
|
||||||
|
else {
|
||||||
|
cout << "年份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (strlen(y) == 4)
|
||||||
|
year = 1000 * (y[0] - '0') + 100 * (y[1] - '0') + 10 * (y[2] - '0') + (y[3] - '0');
|
||||||
|
if (strlen(y) == 3)
|
||||||
|
year = 100 * (y[0] - '0') + 10 * (y[1] - '0') + 1 * (y[2] - '0');
|
||||||
|
if (strlen(y) == 2)
|
||||||
|
year = 10 * (y[0] - '0') + (y[1] - '0');
|
||||||
|
if (strlen(y) == 1)
|
||||||
|
year = 1 * (y[0] - '0');
|
||||||
|
if (!Y(year)) {
|
||||||
|
cout << "年份输入错误,请重新输入。\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (int month = 1; month <= 12; month += 2) {
|
||||||
|
if (year == 1582 && month == 9) {
|
||||||
|
month = 11;
|
||||||
|
cout << " 1582年 9月 1582年 10月\n 日 一 二 三 四 五 六 日 一 二 三 四 五 六 \n";
|
||||||
|
cout << " 1 1 2 3 4 15 16\n";
|
||||||
|
cout << " 2 3 4 5 6 7 8 17 18 19 20 21 22 23\n";
|
||||||
|
cout << " 9 10 11 12 13 14 15 24 25 26 27 28 29 30\n";
|
||||||
|
cout << " 16 17 18 19 20 21 22 31\n";
|
||||||
|
cout << " 23 24 25 26 27 28 29\n 30\n";
|
||||||
|
}
|
||||||
|
two(year, month);
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0: {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
cout << "请重新输入。\n";
|
||||||
|
}
|
||||||
|
} while (true);
|
||||||
|
}
|
157
stu2024/软件2404班钟浩峻.cpp
Normal file
157
stu2024/软件2404班钟浩峻.cpp
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
//判断闰年还是平年
|
||||||
|
int isleapyear(int year){
|
||||||
|
if(year%400==0&&year%4==0&&year%100!=0)
|
||||||
|
return 0;//闰年
|
||||||
|
else
|
||||||
|
return 1;//平年
|
||||||
|
}
|
||||||
|
//表示指定日期对应的星期几,蔡乐公式
|
||||||
|
int getDayOfweek(int year,int month,int day){
|
||||||
|
if(month<3){
|
||||||
|
year--;
|
||||||
|
month+=12;}
|
||||||
|
int k = year % 100;
|
||||||
|
int j = year / 100;
|
||||||
|
int h = (j/ 4 - 2 * j + k + k / 4 + 13 * (month + 1) / 5 + day - 1);
|
||||||
|
h= h % 7;
|
||||||
|
if (h < 0)
|
||||||
|
h += 7;
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
//单列输出
|
||||||
|
//表示输出指定年的日历
|
||||||
|
void sureyearcarlender(int year,int isdoubleline){
|
||||||
|
int monthday[]={31,31,28+isleapyear(year),31,30,31,30,31,30,31,30,31,30};
|
||||||
|
printf("这是%d年的日历\n",year);
|
||||||
|
for(int month=1;month<=12;month++){
|
||||||
|
|
||||||
|
printf("\n%d月\n",month);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
//判断月的1号是周几
|
||||||
|
int empty,dateweek=getDayOfweek(year,month,1);
|
||||||
|
|
||||||
|
//1号以前的空格输出
|
||||||
|
for(empty=0;empty<dateweek;empty++){
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
}// 对后面日期的输出
|
||||||
|
|
||||||
|
for(int datenum=1;datenum<=monthday[month];datenum++){
|
||||||
|
printf("%3d",datenum);
|
||||||
|
if((datenum+dateweek)%7==0)//考虑换行时机
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
void onedoublelineture(int year){
|
||||||
|
int monthday[]={31,31,28+isleapyear(year),31,30,31,30,31,30,31,30,31,30};
|
||||||
|
for(int month=1;month<=12;month+=2){
|
||||||
|
|
||||||
|
printf("\n%d月\n",month);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
//判断月的1号是周几
|
||||||
|
int empty,dateweek=getDayOfweek(year,month,1);
|
||||||
|
|
||||||
|
//1号以前的空格输出
|
||||||
|
for(empty=0;empty<dateweek;empty++){
|
||||||
|
printf(" ");
|
||||||
|
}// 对后面日期的输出
|
||||||
|
|
||||||
|
for(int datenum=1;datenum<=monthday[month];datenum++){
|
||||||
|
printf("%3d",datenum);
|
||||||
|
if((datenum+dateweek)%7==0)//考虑换行时机
|
||||||
|
printf("\n");}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void twodoublelineture(int year)
|
||||||
|
{
|
||||||
|
int monthday[]={31,31,28+isleapyear(year),31,30,31,30,31,30,31,30,31,30};
|
||||||
|
for(int month=2;month<=12;month+=2){
|
||||||
|
|
||||||
|
printf("\n%d月\n",month);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
//判断月的1号是周几
|
||||||
|
int empty,dateweek=getDayOfweek(year,month,1);
|
||||||
|
|
||||||
|
//1号以前的空格输出
|
||||||
|
for(empty=0;empty<dateweek;empty++){
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
}// 对后面日期的输出
|
||||||
|
if(month%2==0);
|
||||||
|
for(int datenum=1;datenum<=monthday[month];datenum++){
|
||||||
|
printf("%3d",datenum);
|
||||||
|
if((datenum+dateweek)%7==0)//考虑换行时机
|
||||||
|
printf("\n");}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void definewhatyearanddate(int year,int month,int day)
|
||||||
|
{
|
||||||
|
int c=getDayOfweek(year,month,day);
|
||||||
|
if(isleapyear(year))
|
||||||
|
{printf("\n%d年%d月%d日为闰年\n",year,month,day);}
|
||||||
|
else
|
||||||
|
{printf("\n%d年%d月%d日为平年\n",year,month,day);}
|
||||||
|
printf("%d年%d月%d日为周%d\n",year,month,day,c);
|
||||||
|
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
int s,year,month,day,m;
|
||||||
|
printf("\n1.查询某月某日时周几(空隔)\n");
|
||||||
|
printf("\n2.查询某一年的日历(单列输出)\n");
|
||||||
|
printf("\n3.查询某一年的日历(双列输出)\n");
|
||||||
|
printf("\n4.退出\n");
|
||||||
|
scanf("%d",&s);
|
||||||
|
if(s!=1&&s!=2&&s!=3&&s!=4)
|
||||||
|
{
|
||||||
|
printf("\n选项错误,请重新输入\n");
|
||||||
|
return m=main();}
|
||||||
|
//根据s进行菜单选择
|
||||||
|
int c;
|
||||||
|
if(s==1)
|
||||||
|
{
|
||||||
|
c=scanf("%d %d %d",&year,&month,&day);
|
||||||
|
if(!day)
|
||||||
|
;
|
||||||
|
{
|
||||||
|
printf("\n输入错误,请重新输入\n");
|
||||||
|
return c;}
|
||||||
|
definewhatyearanddate(year,month,day);
|
||||||
|
|
||||||
|
}
|
||||||
|
if(s==2)
|
||||||
|
{
|
||||||
|
scanf("%d",&year);
|
||||||
|
sureyearcarlender(year,1);//单列
|
||||||
|
|
||||||
|
}
|
||||||
|
if(s==3)
|
||||||
|
{
|
||||||
|
scanf("%d",&year);
|
||||||
|
onedoublelineture(year);
|
||||||
|
printf(" \n");
|
||||||
|
twodoublelineture(year);
|
||||||
|
//双列
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(s==4)
|
||||||
|
|
||||||
|
{
|
||||||
|
printf("\n已退出\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
218
stu2024/软件2404纪新峰.cpp.cpp
Normal file
218
stu2024/软件2404纪新峰.cpp.cpp
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
void caidan(void)
|
||||||
|
{
|
||||||
|
printf("1.查询对应年份的日历\n");
|
||||||
|
printf("2.查询对应日期的星期\n");
|
||||||
|
printf("3.查询对应年份是否为闰年\n");
|
||||||
|
printf("4.退出\n\n");
|
||||||
|
}
|
||||||
|
int fang()
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
while(scanf("%d",&t)!=1)
|
||||||
|
{
|
||||||
|
printf("请重新输入\n");
|
||||||
|
while(getchar()!='\n');
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
void riqi()
|
||||||
|
{
|
||||||
|
int y,m,d,q,xingqi;
|
||||||
|
printf("请输入日期:");
|
||||||
|
scanf("%d",&y);
|
||||||
|
scanf("%d",&m);
|
||||||
|
scanf("%d",&d);
|
||||||
|
if(y<1||y>10000||m<1||m>12||d<1||((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>31)||((m==4||m==6||m==9||m==11)&&d>30)||(m==2&&d>29))
|
||||||
|
{
|
||||||
|
printf("请重新输入\n");
|
||||||
|
while(scanf("%d",&y)!=1||scanf("%d",&m)!=1||scanf("%d",&d)!=1)
|
||||||
|
{
|
||||||
|
printf("请重新输入\n");
|
||||||
|
while(getchar()!='\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xingqi=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
|
||||||
|
xingqi++;
|
||||||
|
switch(xingqi)
|
||||||
|
{
|
||||||
|
case 1:printf("星期一");break;
|
||||||
|
case 2:printf("星期二");break;
|
||||||
|
case 3:printf("星期三");break;
|
||||||
|
case 4:printf("星期四");break;
|
||||||
|
case 5:printf("星期五");break;
|
||||||
|
case 6:printf("星期六");break;
|
||||||
|
case 7:printf("星期日");break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int runnian()
|
||||||
|
{
|
||||||
|
int year;
|
||||||
|
printf("请输入查询的年份:");
|
||||||
|
year=fang();
|
||||||
|
if(year<0||year>100)
|
||||||
|
{
|
||||||
|
printf("请重新输入\n");
|
||||||
|
year=fang();
|
||||||
|
}
|
||||||
|
if((year%4==0&&year%100!=0)||year%400==0)
|
||||||
|
printf("%d年是闰年",year);
|
||||||
|
else
|
||||||
|
printf("%d年不是闰年",year);
|
||||||
|
return year;
|
||||||
|
}
|
||||||
|
int yihao(int year,int month)
|
||||||
|
{
|
||||||
|
if(month<3)
|
||||||
|
{
|
||||||
|
year--;
|
||||||
|
month+=12;
|
||||||
|
}
|
||||||
|
int d=(1+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
|
||||||
|
d++;
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
int danrili(int year)
|
||||||
|
{
|
||||||
|
int month;
|
||||||
|
int x,n,s;
|
||||||
|
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if((year%100!=0&&year%4==0)||year%400==0)
|
||||||
|
{
|
||||||
|
a[2]=29;
|
||||||
|
}
|
||||||
|
for(month=1;month<=12;month++)
|
||||||
|
{
|
||||||
|
printf("%2d月\n",month);
|
||||||
|
printf(" 日 一 二 三 四 五 六\n");
|
||||||
|
x=yihao(year,month);
|
||||||
|
if(year==1582&&month==10)
|
||||||
|
x=1;
|
||||||
|
for(int i=0;i<x;i++)
|
||||||
|
{
|
||||||
|
if(x!=7)
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for(int j=1;j<=a[month];j++)
|
||||||
|
{
|
||||||
|
printf("%3d",j);
|
||||||
|
if(year==1582)
|
||||||
|
{
|
||||||
|
if(month==10)
|
||||||
|
{
|
||||||
|
if(j==4)
|
||||||
|
j+=10;
|
||||||
|
if(j==16||j==23||j==30||j==a[month])
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if((j+x)%7==0||j==a[month])
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if((j+x)%7==0||j==a[month])
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int shuangrili(int year)
|
||||||
|
{
|
||||||
|
int month;
|
||||||
|
int z,x,c,v,b,k,j;
|
||||||
|
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if((year%100!=0&&year%4==0)||year%400==0)
|
||||||
|
{
|
||||||
|
a[2]=29;
|
||||||
|
}
|
||||||
|
for(month=1;month<=12;month+=2)
|
||||||
|
{
|
||||||
|
int y1=1,y2=1;
|
||||||
|
z=yihao(year,month);
|
||||||
|
x=yihao(year,month+1);
|
||||||
|
c=(a[month]+z-1)/7+1;
|
||||||
|
v=(a[month+1]+x-1)/7+1;
|
||||||
|
if(z==7)
|
||||||
|
z=0;
|
||||||
|
if(x==7)
|
||||||
|
x=0;
|
||||||
|
if(c>v)
|
||||||
|
b=c;
|
||||||
|
else
|
||||||
|
b=v;
|
||||||
|
printf(" %2d月 %2d月\n",month,month+1);
|
||||||
|
printf(" 日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
|
||||||
|
for(j=0;j<b;j++)
|
||||||
|
{
|
||||||
|
for(int i=0;i<7;i++)
|
||||||
|
{
|
||||||
|
if(j==0&&i<z)
|
||||||
|
printf(" ");
|
||||||
|
else if(y1<=a[month])
|
||||||
|
printf("%3d",y1++);
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
printf(" ");
|
||||||
|
for(int i=0;i<7;i++)
|
||||||
|
{
|
||||||
|
if(j==0&&i<x)
|
||||||
|
printf(" ");
|
||||||
|
else if(y2<=a[month+1])
|
||||||
|
printf("%3d",y2++);
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
int rili()
|
||||||
|
{
|
||||||
|
int p,o;
|
||||||
|
printf("请输入年份:");
|
||||||
|
while(scanf("%d",&p)!=1||p<0||p>10000)
|
||||||
|
{
|
||||||
|
printf("请重新输入\n");
|
||||||
|
while(getchar()!='\n');
|
||||||
|
}
|
||||||
|
printf("单列输出1\n双列输出2\n");
|
||||||
|
while(scanf("%d",&o)!=1||o<1||o>2)
|
||||||
|
{
|
||||||
|
printf("请重新输入\n");
|
||||||
|
while(getchar()!='\n');
|
||||||
|
}
|
||||||
|
switch(o)
|
||||||
|
{
|
||||||
|
case 1:danrili(p);break;
|
||||||
|
case 2:shuangrili(p);break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n,year,month,day;
|
||||||
|
caidan();
|
||||||
|
while(scanf("%d",&n)!=1||n<1||n>4)
|
||||||
|
{
|
||||||
|
printf("请重新输入\n");
|
||||||
|
while(getchar()!='\n');
|
||||||
|
}
|
||||||
|
switch(n)
|
||||||
|
{
|
||||||
|
case 1:rili();break;
|
||||||
|
case 2:riqi();break;
|
||||||
|
case 3:runnian();break;
|
||||||
|
case 4:break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
106
stu2024/软件工程2403张灿冉(1).cpp
Normal file
106
stu2024/软件工程2403张灿冉(1).cpp
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
int year1(int y)
|
||||||
|
{
|
||||||
|
if((y%4==0)&&(y%100!=0)||y%400==0)
|
||||||
|
return 366;
|
||||||
|
else
|
||||||
|
return 365;
|
||||||
|
}
|
||||||
|
int main(void){
|
||||||
|
int command;
|
||||||
|
printf("|-----------欢迎使用------------|\n");
|
||||||
|
printf("|1.查询对应的星期 |\n");
|
||||||
|
printf("|2.判断是否为闰年 |\n");
|
||||||
|
printf("|3.查询对应的日历 |\n");
|
||||||
|
printf("|4.退出 |\n");
|
||||||
|
printf("|-------------------------------|\n");
|
||||||
|
do{
|
||||||
|
printf("请输入您选择的功能:");
|
||||||
|
scanf("%d",&command);
|
||||||
|
switch(command)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
int year,month,day,week;
|
||||||
|
printf("请输入年月日(中间用空格分隔开):");
|
||||||
|
scanf("%d%d%d",&year,&month,&day);
|
||||||
|
if(month==1||month==2){
|
||||||
|
month+=12;
|
||||||
|
year--;}
|
||||||
|
week=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
|
||||||
|
switch(week){
|
||||||
|
case 0:
|
||||||
|
printf("星期一\n");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
printf("星期二\n");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("星期三\n");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("星期四\n");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("星期五\n");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("星期六\n");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("星期日\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
int x;
|
||||||
|
printf("请输入年份");
|
||||||
|
scanf("%d",&x);
|
||||||
|
if(x%4==0&&x%100!=0||x%400==0)
|
||||||
|
printf("闰年\n");
|
||||||
|
else
|
||||||
|
printf("不是闰年\n");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
int y,i,j,sum=0,z;
|
||||||
|
int begin,week;
|
||||||
|
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
printf("请输入年份:");
|
||||||
|
scanf("%d",&y);
|
||||||
|
printf("1.单列输出 2.双列输出\n");
|
||||||
|
printf("请输入:",z);
|
||||||
|
scanf("%d",&z) ;
|
||||||
|
if(z==1)
|
||||||
|
for(i=1;i<y;i++)
|
||||||
|
sum+=year1(i);
|
||||||
|
week=(sum+1)%7;
|
||||||
|
if(year1(y)==366)
|
||||||
|
days[1]=29;
|
||||||
|
printf("\n%d年日历如下:\n\n",y);
|
||||||
|
for(i=0;i<12;i++)
|
||||||
|
{
|
||||||
|
printf(" %d月 \n",i+1);
|
||||||
|
printf("周日 周一 周二 周三 周四 周五 周六\n");
|
||||||
|
printf("==================================\n");
|
||||||
|
begin=1;
|
||||||
|
for(j=0;j<week;j++)
|
||||||
|
printf("");
|
||||||
|
while(begin<=days[i])
|
||||||
|
{
|
||||||
|
printf("%5d",begin);
|
||||||
|
begin++;
|
||||||
|
week=(week+1)%7;
|
||||||
|
if(week%7==0)
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("\n\n");}
|
||||||
|
break;}
|
||||||
|
case 4:
|
||||||
|
printf("感谢您的使用,再见");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("无此功能,请再次输入\n");}
|
||||||
|
}
|
||||||
|
while(command!=4);
|
||||||
|
return 0;
|
||||||
|
}
|
303
yyw.cpp
Normal file
303
yyw.cpp
Normal file
@ -0,0 +1,303 @@
|
|||||||
|
//designed by yyw
|
||||||
|
//
|
||||||
|
#include <iostream>
|
||||||
|
#include<iomanip>
|
||||||
|
//setfill() 填充
|
||||||
|
//setw() 宽
|
||||||
|
//setprecision()显示数字位数
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class calendar
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Menu_present()
|
||||||
|
{
|
||||||
|
cout<<"This is a calendar"<<endl;
|
||||||
|
cout<<endl;
|
||||||
|
cout<<" Menu"<<endl;
|
||||||
|
cout<<"1.Search the date is which day of the week"<<endl;
|
||||||
|
cout<<"2.Check the calendar for a certain year"<<endl;
|
||||||
|
cout<<endl;
|
||||||
|
cout<<"Exit: input 88 with \"ENTER\""<<endl;
|
||||||
|
}// 菜单显示
|
||||||
|
|
||||||
|
void open_calendar()// 主菜单
|
||||||
|
{
|
||||||
|
// Menu_present();
|
||||||
|
int menu_number=0;
|
||||||
|
while(menu_number!=88)
|
||||||
|
{
|
||||||
|
Menu_present();
|
||||||
|
cout<<"Please input the number before the option "<<endl;
|
||||||
|
while(1) {
|
||||||
|
cin >> menu_number;
|
||||||
|
if (!cin.fail())break;
|
||||||
|
if (cin.fail()) {
|
||||||
|
cin.clear();
|
||||||
|
cin.sync();
|
||||||
|
cout << "Your input is illegal" << endl;
|
||||||
|
cout << "please input the number correctly" << endl;
|
||||||
|
cout << "other char is not allowed" << endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch(menu_number)
|
||||||
|
{
|
||||||
|
case 1: M_Search();
|
||||||
|
break;
|
||||||
|
case 2: Check();
|
||||||
|
break;
|
||||||
|
// case 3:
|
||||||
|
// break;
|
||||||
|
case 88:
|
||||||
|
cout<<"Good bye,have a good day!"<<endl;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cout<<"Invalid input"<<endl;
|
||||||
|
cout<<"please input the number correctly,and input it again"<<endl;
|
||||||
|
}// case 2
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
void M_Search()
|
||||||
|
{
|
||||||
|
int i=1,j=1,k=1;
|
||||||
|
int year;
|
||||||
|
int month;
|
||||||
|
int day;
|
||||||
|
cout<<"Please input the year "<<endl;
|
||||||
|
while(1) {
|
||||||
|
cin >> year;
|
||||||
|
// if(year<0){
|
||||||
|
// //cin.clear();
|
||||||
|
// cin.sync();
|
||||||
|
// cout<<"year wrong"<<endl;
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
if(!cin.fail()){
|
||||||
|
if(year<0){
|
||||||
|
cin.clear();
|
||||||
|
cin.sync();
|
||||||
|
cout<<"year wrong"<<endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (cin.fail()) {
|
||||||
|
cin.clear();
|
||||||
|
cin.sync();
|
||||||
|
cout << "Your input is illegal" << endl;
|
||||||
|
cout << "please input the number correctly" << endl;
|
||||||
|
cout << "other char is not allowed" << endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//if(year<1){cin.clear();cin.sync();cout<<"year wrong"<<endl;continue;}
|
||||||
|
}
|
||||||
|
cout<<"Please input the month "<<endl;
|
||||||
|
while(1) {
|
||||||
|
cin >> month;
|
||||||
|
if(!cin.fail()){
|
||||||
|
if(month<1||month>12){
|
||||||
|
cin.clear();
|
||||||
|
cin.sync();
|
||||||
|
cout<<"month wrong"<<endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (cin.fail()) {
|
||||||
|
cin.clear();
|
||||||
|
cin.sync();
|
||||||
|
cout << "Your input is illegal" << endl;
|
||||||
|
cout << "please input the number correctly" << endl;
|
||||||
|
cout << "other char is not allowed" << endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<"Please input the day "<<endl;
|
||||||
|
while(1) {
|
||||||
|
cin >> day;
|
||||||
|
// if(day<1||day> month_judge(year,month)){cin.clear();cin.sync();cout<<"day wrong"<<endl;continue;}
|
||||||
|
if(!cin.fail()){
|
||||||
|
if(day<1||day> month_judge(year,month)){cin.clear();cin.sync();cout<<"day wrong"<<endl;continue;}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (cin.fail()) {
|
||||||
|
cin.clear();
|
||||||
|
cin.sync();
|
||||||
|
cout << "Your input is illegal" << endl;
|
||||||
|
cout << "please input the number correctly" << endl;
|
||||||
|
cout << "other char is not allowed" << endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(year==1582&&month==10&&(day>4&&day<15))cout<<"This is none day"<<endl;
|
||||||
|
else cout<<day_of_week (year,month,day)<<endl;
|
||||||
|
if(year_judge(year))cout<<"This year is Leap year"<<endl;
|
||||||
|
else cout<<"This year is Non-leap year"<<endl;
|
||||||
|
|
||||||
|
}// 查某一天是星期几 写完了
|
||||||
|
void Check()
|
||||||
|
{
|
||||||
|
int i=1,j=1;
|
||||||
|
int year;
|
||||||
|
cout<<"Please input the year "<<endl;
|
||||||
|
while(1) {
|
||||||
|
cin >> year;
|
||||||
|
if(!cin.fail()){
|
||||||
|
if(year<0){
|
||||||
|
cin.clear();
|
||||||
|
cin.sync();
|
||||||
|
cout<<"year wrong"<<endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (cin.fail()) {
|
||||||
|
cin.clear();
|
||||||
|
cin.sync();
|
||||||
|
cout << "Your input is illegal" << endl;
|
||||||
|
cout << "please input the number correctly" << endl;
|
||||||
|
cout << "other char is not allowed" << endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}//cin year
|
||||||
|
int c;
|
||||||
|
aaa:
|
||||||
|
cout<<"Please select the way you want view"<<endl;
|
||||||
|
cout<<"1.send out every month with 1*12"<<endl;
|
||||||
|
cout<<"2.send out every month with 2*6"<<endl;
|
||||||
|
cout<<"Input the number before the option"<<endl;
|
||||||
|
while(1) {
|
||||||
|
cin >> c;
|
||||||
|
if(!cin.fail())break;
|
||||||
|
if (cin.fail()) {
|
||||||
|
cin.clear();
|
||||||
|
cin.sync();
|
||||||
|
cout << "Your input is illegal" << endl;
|
||||||
|
cout << "please input the number correctly" << endl;
|
||||||
|
cout << "other char is not allowed" << endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}//cin 选择
|
||||||
|
switch(c)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
send1_12(year);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
send2_6(year);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cout<<"Invalid input"<<endl;
|
||||||
|
cout<<"Please Input the number before the option correctly"<<endl;
|
||||||
|
goto aaa;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}// 输出那一年的日期
|
||||||
|
private:
|
||||||
|
int year_judge(int year)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(year%4==0&&year%100!=0||year%400==0)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}// 1润 0平
|
||||||
|
int month_judge(int year,int month){
|
||||||
|
if(!(year==1582&&month==10)) {
|
||||||
|
if (month == 2) {
|
||||||
|
if (year_judge(year) == 1) {
|
||||||
|
return 29;
|
||||||
|
} else return 28;
|
||||||
|
}
|
||||||
|
if (month == 4 || month == 6 || month == 9 || month == 11) {
|
||||||
|
return 30;
|
||||||
|
} else {
|
||||||
|
return 31;
|
||||||
|
}
|
||||||
|
}else{return 31;}
|
||||||
|
}// 返回多少天
|
||||||
|
int day_of_week(int year,int month,int day){
|
||||||
|
if(month<3)month+=12,year-=1;
|
||||||
|
int f;
|
||||||
|
if(year>1582||((year==1582&&month>10)||(year==1582&&month==10&&day>4)))//geli
|
||||||
|
{
|
||||||
|
f=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+1)%7;
|
||||||
|
if(f==0)f=7;
|
||||||
|
return f;
|
||||||
|
}else//ruli
|
||||||
|
{
|
||||||
|
f=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+4)%7;
|
||||||
|
if(f==0)f=7;
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
}// 返回星期几
|
||||||
|
void send1_12(int year){
|
||||||
|
|
||||||
|
for(int i=1;i<=12;i++)// 12个月
|
||||||
|
{
|
||||||
|
|
||||||
|
cout<<setw(20)<<"month "<<i<<endl;
|
||||||
|
cout<<"Sun Mon Tue Wed Thu Fri Sat "<<endl;
|
||||||
|
int k1=1-day_of_week(year,i,1);
|
||||||
|
for(int r=1;r<=6;r++){
|
||||||
|
for(int j=1;j<=7;j++,k1++){
|
||||||
|
if(k1<=0){
|
||||||
|
cout<<" ";
|
||||||
|
}else{
|
||||||
|
if(k1<= month_judge(year,i)) {
|
||||||
|
if(year==1582&&i==10&&k1==5)k1+=10;
|
||||||
|
cout << setw(3) << k1 << " ";
|
||||||
|
}else{
|
||||||
|
cout<<" ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};//完成
|
||||||
|
void send2_6(int year){
|
||||||
|
cout<<setw(33)<<"Happy "<<year<<'!'<<endl;
|
||||||
|
for (int i = 1; i <= 12; i += 2)// 12个月
|
||||||
|
{
|
||||||
|
|
||||||
|
cout << setw(20) << "month " << i << setw(35) << "month" << i + 1 << endl;
|
||||||
|
cout << "Sun Mon Tue Wed Thu Fri Sat " << "Sun Mon Tue Wed Thu Fri Sat " << endl;
|
||||||
|
|
||||||
|
int k1 = 1 - day_of_week(year, i, 1), k2 = 1 - day_of_week(year, i + 1, 1);
|
||||||
|
|
||||||
|
for (int j = 1; j <= 6; j++) {
|
||||||
|
for (int r = 1; r <= 7; r++, k1++) {
|
||||||
|
if (k1 <= 0)cout << " ";
|
||||||
|
else {
|
||||||
|
if (k1 <= month_judge(year, i)) {
|
||||||
|
cout << setw(3) << k1 << " ";
|
||||||
|
} else cout << " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<" ";
|
||||||
|
|
||||||
|
for (int r = 1; r <= 7; r++, k2++) {
|
||||||
|
if (k2 <= 0)cout << " ";
|
||||||
|
else {
|
||||||
|
if (k2 <= month_judge(year, i + 1)) {
|
||||||
|
if(year==1582&&(i+1)==10&&k2==5)k2+=10;
|
||||||
|
cout << setw(3) << k2 << " ";
|
||||||
|
} else cout << " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};// 完成
|
||||||
|
};
|
||||||
|
int main() {
|
||||||
|
class calendar r;
|
||||||
|
r.open_calendar();
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user