<p>```c</p><p>#include <stdio.h></p><p>#include <stdlib.h></p><p>int main() {</p><p> int Year, Month; // 年、月</p><p> int FirstDay_Year, FirstDay_Month; // 某年的第一天是星期几,某年某月的第一天是星期几(范围是0~6,其中0代表星期日)</p><p> int IsLeapYear; // 是否为闰年,0表示不是闰年,1表示是闰年</p><p> int i, d, y; // 临时变量</p><p> char YN; // Yes No,程序是否要继续</p><p> int Days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 存储每个月有多少天,其中二月的天数是可变的(闰年29天,平年28天),这里初始化为28天</p><p> printf("C语言简单万年历
讯享网
”); // 打印标题
XunHuan: // 循环标号(可以通过goto跳转到这里)
printf(“请输入年份<0000~9999>:”); // 提示输入年份(0~9999)
scanf(“%d”, &Year); // 把输入的年份赋值给变量Year
printf(“请输入月份<1~12>:”); // 提示输入月份(1~12)
scanf(“%d”, &Month); // 把输入的月份赋值给变量Month
y = Year;
FirstDay_Year = 5 (y / 4) + (y % 4) - (y / 100) + (y / 400); // 蔡勒公式(计算某年的第一天是星期几)
IsLeapYear = (y % 4 == 4 && y % 100 != 100 || y % 400 == 0) ? 1 : 0; // 判断是否为闰年
Days[2] = (IsLeapYear == 1) ? 29 : 28; // 闰年二月29天,非闰年二月28天
for (i = 1, d = 0; i < Month; i++) {
d = d + Days[i];
}
FirstDay_Month = (d + FirstDay_Year) % 7; // 当月的第一天是星期几(0代表星期日)
printf(”
”);
printf(” 公元%d年%2d月”, Year, Month); // 打印年月
printf(”
”);
printf(” “);
printf(“星期日星期一星期二星期三星期四星期五星期六 “); // 打印星期表头
for (i = 0; i < FirstDay_Month; i++) {
printf(”%7c”, “); // 当某月的第一天不是星期日时打印空格占位
}
for (d = 1; d <= Days[Month]; d++) { // 循环,从每个月的第一天开始打印
printf(”%7d”, d);
if ((d + FirstDay_Month) % 7 == 0 && d < Days[Month]) {
printf(” “); // 当输出了星期六而且还未输出所有天数时,换行
}
}
printf(”
”);
printf(” “);
printf(“是否继续(Y/N)? “); // 提示用户是否继续
scanf(”%c”, &YN); // 获取用户的输入
scanf(“%c”, &YN); // 获取用户的输入(重复一次以确保获取到正确的值)
if (YN == ‘Y’ || YN == ‘y’) {
goto XunHuan; // 如果用户选择继续,则跳转到XunHuan标签处重新开始循环
}
提示输入月份并计算日历
提示用户输入月份(数字形式,范围在1至12之间):
plaintext</p><p>请输入月份(数字形式):</p><p>
接着,通过scanf函数获取用户输入的月份值并将其赋值给变量Month。同时获取年份值并赋值给变量Year。
利用蔡勒公式计算给定年份的第一天是星期几,并判断该年份是否为闰年。如果是闰年,二月份的天数为29天;否则为28天。然后计算月份中的天数总和并找出该月第一天是星期几。在屏幕上打印出对应的年份和月份信息。
输出对应的星期表头:星期日、星期一、星期二、星期三、星期四、星期五和星期六。然后根据每个月的第一天是星期几来打印出对应的日期。如果某月的第一天不是星期日,则在日期前打印空格占位。接着循环打印每个月的日期,直到打印完整个月的日期为止。
在打印完每个月的日历后,询问用户是否继续操作,如果用户选择继续则重新进行上述操作,否则结束程序。
还包含了几个辅助函数:判断是否为闰年的函数、计算某月最大天数的函数以及打印年份日历的函数等。这些函数分别用于辅助主程序完成相关功能。
代码实现细节:
使用iostream库进行输入输出操作;
使用iomanip库进行格式化输出;
使用stdlib库进行相关的数学计算和操作;
定义相关数组和函数以辅助计算日历和判断闰年等功能;
在打印日期时考虑了换行和空格占位等问题;
cpp</p><p>// 打印某年的月历</p><p>void printYearlyCalendar(int year, int n) {</p><p> int j, i, k;</p><p> // 对于每个月份进行处理</p><p> for (j = 1; j <= 12; j++) {</p><p> // 输出月份和星期</p><p> cout << j << "月份";</p><p> cout << "日一二三四五六" << endl;</p><p> // 获取每个月的天数,假设ww函数可以获取指定年份某月的天数</p><p> int daysInMonth = ww(1, j, year);</p><p> // 输出日期,使用setw控制输出宽度为4个字符</p><p> for (i = 0; i < daysInMonth; i++) {</p><p> cout << setw(4) << ""; // 这里可能是为了填充空格,可以根据实际需求进行修改</p><p> }</p><p> // 输出星期和日期,如果星期加日期除以7余数为0则换行输出日期</p><p> for (k = 1; k <= cc[j - 1]; k++) {</p><p> cout << setw(4) << k;</p><p> if ((ww(1, j, year) + k) % 7 == 0) { // 如果达到一个星期结束则换行输出日期和星期</p><p> cout << endl;</p><p> }</p><p> }</p><p>
以下是可供选择的操作指令:
1. 查询指定日期的星期
2. 判断某年是否为闰年
3. 查询某月的总天数
4. 打印某年的全年日历
5. 打印某年某月的月历
6. 退出程序
请选择您想要执行的操作:
系统提示您输入操作指令。
输入操作码 n 并回车确认。
csharp</p><p>switch (n)</p><p>case 1:</p><p> Console.WriteLine("请输入要查询的日期:");</p><p> Console.Write("年:");</p><p> int year = Convert.ToInt32(Console.ReadLine());</p><p> Console.Write("月:");</p><p> int month = Convert.ToInt32(Console.ReadLine());</p><p> Console.Write("日:");</p><p> int day = Convert.ToInt32(Console.ReadLine());</p><p> string weekday = GetWeekday(day, month, year); // 假设此函数返回星期几的字符串</p><p> Console.WriteLine($"星期是: {weekday} ");</p><p> break;</p><p>case 2:</p><p> Console.WriteLine("请输入要判断的年份:");</p><p> int m = Convert.ToInt32(Console.ReadLine());</p><p> if (IsLeapYear(m) == 1) // 假设IsLeapYear函数返回1表示是闰年,否则不是闰年</p><p> Console.WriteLine($"{m}年是闰年");</p><p> else</p><p> Console.WriteLine($"{m}年不是闰年,请重新输入");</p><p> break;</p><p>case 3:</p><p> Console.WriteLine("请输入月份:");</p><p> int m_month = Convert.ToInt32(Console.ReadLine());</p><p> GetMonthDays(m_month); // 假设此函数返回该月的总天数并输出结果</p><p> break;</p><p>case 4:</p><p> Console.WriteLine("请输入要打印的年份:");</p><p> int year_print = Convert.ToInt32(Console.ReadLine());</p><p> PrintYearCalendar(year_print); // 假设此函数打印该年的日历并输出结果</p><p> break;</p><p>case 5:</p><p> Console.WriteLine("请输入年份:");</p><p> int n_year = Convert.ToInt32(Console.ReadLine());</p><p> Console.WriteLine("请输入月份:");</p><p> int n_month = Convert.ToInt32(Console.ReadLine());</p><p> PrintMonthCalendar(n_year, n_month); // 假设此函数打印该年该月的月历并输出结果</p><p> break;</p><p>case 6: // 退出程序无需特别处理,因为系统将自动结束当前进程的运作。所以这里不写任何代码。但为了保持格式,我们仍然使用break关键字。</p><p> break; // 这里不需要执行任何操作,直接退出switch语句和程序。</p><p>
以上代码中,我使用了C#语言和Console类来模拟了原代码中的功能,并假设了几个函数的实现(如GetWeekday、IsLeapYear、GetMonthDays和PrintYearCalendar),但具体的实现代码需要根据具体业务逻辑编写。原代码中涉及到多个不同功能(如查询日期、判断闰年等)的具体实现并没有详细说明,所以在此也仅提供了一个基本的框架供你参考。实际使用时需要根据你的具体需求和逻辑来编写相应的函数。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/174795.html