#include
#include
int main() {
int Year, Month; // 年、月
int FirstDay_Year, FirstDay_Month; // 某年的第一天是星期几,某年某月的第一天是星期几(范围是0~6,其中0代表星期日)
int IsLeapYear; // 是否为闰年,0表示不是闰年,1表示是闰年
int i, d, y; // 临时变量
char YN; // Yes No,程序是否要继续
int Days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 存储每个月有多少天,其中二月的天数是可变的(闰年29天,平年28天),这里初始化为28天
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之间):
请输入月份(数字形式):
接着,通过scanf函数获取用户输入的月份值并将其赋值给变量Month。同时获取年份值并赋值给变量Year。
利用蔡勒公式计算给定年份的第一天是星期几,并判断该年份是否为闰年。如果是闰年,二月份的天数为29天;否则为28天。然后计算月份中的天数总和并找出该月第一天是星期几。在屏幕上打印出对应的年份和月份信息。
输出对应的星期表头:星期日、星期一、星期二、星期三、星期四、星期五和星期六。然后根据每个月的第一天是星期几来打印出对应的日期。如果某月的第一天不是星期日,则在日期前打印空格占位。接着循环打印每个月的日期,直到打印完整个月的日期为止。
在打印完每个月的日历后,询问用户是否继续操作,如果用户选择继续则重新进行上述操作,否则结束程序。
还包含了几个辅助函数:判断是否为闰年的函数、计算某月最大天数的函数以及打印年份日历的函数等。这些函数分别用于辅助主程序完成相关功能。
代码实现细节:
使用iostream库进行输入输出操作;
使用iomanip库进行格式化输出;
使用stdlib库进行相关的数学计算和操作;
定义相关数组和函数以辅助计算日历和判断闰年等功能;
在打印日期时考虑了换行和空格占位等问题;
// 打印某年的月历
void printYearlyCalendar(int year, int n) {
int j, i, k;
// 对于每个月份进行处理
for (j = 1; j <= 12; j++) {
// 输出月份和星期
cout << j << "月份";
cout << "日一二三四五六" << endl;
// 获取每个月的天数,假设ww函数可以获取指定年份某月的天数
int daysInMonth = ww(1, j, year);
// 输出日期,使用setw控制输出宽度为4个字符
for (i = 0; i < daysInMonth; i++) {
cout << setw(4) << ""; // 这里可能是为了填充空格,可以根据实际需求进行修改
}
// 输出星期和日期,如果星期加日期除以7余数为0则换行输出日期
for (k = 1; k <= cc[j - 1]; k++) {
cout << setw(4) << k;
if ((ww(1, j, year) + k) % 7 == 0) { // 如果达到一个星期结束则换行输出日期和星期
cout << endl;
}
}
以下是可供选择的操作指令:
1. 查询指定日期的星期
2. 判断某年是否为闰年
3. 查询某月的总天数
4. 打印某年的全年日历
5. 打印某年某月的月历
6. 退出程序
请选择您想要执行的操作:
系统提示您输入操作指令。
输入操作码 n 并回车确认。
switch (n)
case 1:
Console.WriteLine("请输入要查询的日期:");
Console.Write("年:");
int year = Convert.ToInt32(Console.ReadLine());
Console.Write("月:");
int month = Convert.ToInt32(Console.ReadLine());
Console.Write("日:");
int day = Convert.ToInt32(Console.ReadLine());
string weekday = GetWeekday(day, month, year); // 假设此函数返回星期几的字符串
Console.WriteLine($"星期是: {weekday} ");
break;
case 2:
Console.WriteLine("请输入要判断的年份:");
int m = Convert.ToInt32(Console.ReadLine());
if (IsLeapYear(m) == 1) // 假设IsLeapYear函数返回1表示是闰年,否则不是闰年
Console.WriteLine($"{m}年是闰年");
else
Console.WriteLine($"{m}年不是闰年,请重新输入");
break;
case 3:
Console.WriteLine("请输入月份:");
int m_month = Convert.ToInt32(Console.ReadLine());
GetMonthDays(m_month); // 假设此函数返回该月的总天数并输出结果
break;
case 4:
Console.WriteLine("请输入要打印的年份:");
int year_print = Convert.ToInt32(Console.ReadLine());
PrintYearCalendar(year_print); // 假设此函数打印该年的日历并输出结果
break;
case 5:
Console.WriteLine("请输入年份:");
int n_year = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入月份:");
int n_month = Convert.ToInt32(Console.ReadLine());
PrintMonthCalendar(n_year, n_month); // 假设此函数打印该年该月的月历并输出结果
break;
case 6: // 退出程序无需特别处理,因为系统将自动结束当前进程的运作。所以这里不写任何代码。但为了保持格式,我们仍然使用break关键字。
break; // 这里不需要执行任何操作,直接退出switch语句和程序。
以上代码中,我使用了C#语言和`Console`类来模拟了原代码中的功能,并假设了几个函数的实现(如`GetWeekday`、`IsLeapYear`、`GetMonthDays`和`PrintYearCalendar`),但具体的实现代码需要根据具体业务逻辑编写。原代码中涉及到多个不同功能(如查询日期、判断闰年等)的具体实现并没有详细说明,所以在此也仅提供了一个基本的框架供你参考。实际使用时需要根据你的具体需求和逻辑来编写相应的函数。
到此这篇时钟代码c语言(电子时钟c语言)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/goyykf/40908.html