#include <stdio.h>int main(){ int year, month, day, daysInMonth, weekDay = 0; printf("请输入年份: "); scanf("%d", &year); printf("请输入月份: "); scanf("%d", &month); // 计算这个月有多少天 if (month == 2) { if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) daysInMonth = 29; else daysInMonth = 28; } else if (month == 4 || month == 6 || month == 9 || month == 11) daysInMonth = 30; else daysInMonth = 31; // 计算这个月第一天是星期几 weekDay = 1 + ((year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400); for (int i = 1; i < month; i++) { if (i == 2) { if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) weekDay += 29; else weekDay += 28; } else if (i == 4 || i == 6 || i == 9 || i == 11) weekDay += 30; else weekDay += 31; } weekDay = weekDay % 7; // 输出日历头部 printf("\n日 一 二 三 四 五 六\n"); // 输出日历主体 for (int i = 0; i < weekDay; i++) printf(" "); for (int i = 1; i <= daysInMonth; i++) { printf("%2d ", i); if ((i + weekDay) % 7 == 0) printf("\n"); } return 0;}

时间: 2024-04-28 21:26:09 浏览: 11
这段代码是一个 C 语言程序,它实现了一个简单的万年历。程序首先会要求用户输入年份和月份,然后根据输入的年份和月份计算出这个月有多少天,以及这个月的第一天是星期几。最后,程序会输出一个日历表格,表格中包含了这个月的所有日期,以及对应的星期几。 具体来说,这个程序的实现包含了以下几个步骤: 1. 首先,程序会使用 scanf() 函数从标准输入流中读取用户输入的年份和月份,存储到对应的变量中。 2. 然后,程序会根据输入的年份和月份计算出这个月有多少天。具体来说,如果这个月是 2 月,程序会判断这一年是否是闰年,如果是闰年则这个月有 29 天,否则这个月有 28 天;如果这个月是 4、6、9 或 11 月,则这个月有 30 天;否则这个月有 31 天。 3. 接下来,程序会计算这个月的第一天是星期几。具体来说,程序会先计算出这一年的第一天是星期几,然后根据这个月之前的所有天数,计算出这个月的第一天是星期几。 4. 最后,程序会输出一个日历表格。表格的第一行是星期几的标识,接下来的每一行都包含了一个星期的日期,如果这一行的日期已经到达了这个月的最后一天,则换行输出下一个星期的日期。 需要注意的是,这个程序没有对用户输入的年份和月份进行错误检查。如果用户输入了无效的年份或月份,程序可能会产生意料之外的结果。
相关问题

用c语言写一个万年历

好的,我可以为您提供一个简单的万年历程序,用C语言编写。 ```c #include <stdio.h> int main() { int year, month, day, daysInMonth, weekDay = 0; printf("请输入年份: "); scanf("%d", &year); printf("请输入月份: "); scanf("%d", &month); printf("\n"); printf(" 日 一 二 三 四 五 六\n"); if (month == 2) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { daysInMonth = 29; } else { daysInMonth = 28; } } else if (month == 4 || month == 6 || month == 9 || month == 11) { daysInMonth = 30; } else { daysInMonth = 31; } for (int i = 1; i <= daysInMonth; i++) { printf("%4d", i); weekDay++; if (weekDay == 7) { printf("\n"); weekDay = 0; } } printf("\n"); return 0; } ``` 这个程序会要求您输入年份和月份,然后输出该月份的日历。其中,如果是闰年的话,2月份的天数会加1。如果您需要查看其他月份的日历,只需修改 `month` 的值即可。 希望这个程序能够满足您的需求,有任何问题请随时向我提问。

用c语言编写(9)编写程序,先输入-一个需要组合的整数,再输入3个用来组合的整数,若可以组合(每个数字至少使用1次),则输出所有组合的可能;若不存在组合,则输出无组合(10) 修改第9题的程序,对于有组合的搭配,只输出第1个组合(11)编写程序,假设30个学生的成绩都是50~100分,成绩随机生成,要求每行输出6个学生的成绩,并最后统计输出最高分、最低分和平均分(保留2位小数)(12)编写万年历程序,输入年、月,输出该月的日历表。输入年,输出该年的日历表。已知1900年1月1日是星期一

(9)代码如下: ```c #include <stdio.h> #include <stdbool.h> void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); } void combination(int arr[], int n, int m, int result[], int pos) { if (m == 0) { printArray(result, pos); return; } for (int i = n - 1; i >= m - 1; i--) { result[m - 1] = arr[i]; combination(arr, i, m - 1, result, pos + 1); } } int main() { int n, m; printf("请输入需要组合的整数:"); scanf("%d", &n); printf("请输入用来组合的三个整数:"); int arr[3]; for (int i = 0; i < 3; i++) { scanf("%d", &arr[i]); } int result[3]; for (int i = 1; i <= 3; i++) { combination(arr, 3, i, result, 0); } bool found = false; for (int i = 0; i < 3; i++) { if (n == arr[i]) { found = true; break; } } if (found) { printf("%d ", n); } for (int i = 1; i <= 3; i++) { combination(arr, 3, i, result, 0); for (int j = 0; j < i; j++) { if (n == arr[j]) { found = true; break; } } if (found) { printArray(result, i); break; } } if (!found) { printf("无组合\n"); } return 0; } ``` (10)修改后的代码如下: ```c #include <stdio.h> #include <stdbool.h> void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); } void combination(int arr[], int n, int m, int result[], int pos, bool *found) { if (m == 0) { if (*found) { return; } printArray(result, pos); *found = true; return; } for (int i = n - 1; i >= m - 1; i--) { result[m - 1] = arr[i]; combination(arr, i, m - 1, result, pos + 1, found); } } int main() { int n, m; printf("请输入需要组合的整数:"); scanf("%d", &n); printf("请输入用来组合的三个整数:"); int arr[3]; for (int i = 0; i < 3; i++) { scanf("%d", &arr[i]); } int result[3]; bool found = false; for (int i = 0; i < 3; i++) { if (n == arr[i]) { found = true; printf("%d\n", n); break; } } for (int i = 1; i <= 3; i++) { combination(arr, 3, i, result, 0, &found); if (found) { break; } } if (!found) { printf("无组合\n"); } return 0; } ``` (11)代码如下: ```c #include <stdio.h> #include <stdbool.h> void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); } void combination(int arr[], int n, int m, int result[], int pos, bool *found) { if (m == 0) { if (*found) { return; } printArray(result, pos); *found = true; return; } for (int i = n - 1; i >= m - 1; i--) { result[m - 1] = arr[i]; combination(arr, i, m - 1, result, pos + 1, found); } } int main() { int n, m; printf("请输入需要组合的整数:"); scanf("%d", &n); printf("请输入用来组合的三个整数:"); int arr[3]; for (int i = 0; i < 3; i++) { scanf("%d", &arr[i]); } int result[3]; bool found = false; for (int i = 0; i < 3; i++) { if (n == arr[i]) { found = true; printf("%d\n", n); break; } } for (int i = 1; i <= 3; i++) { combination(arr, 3, i, result, 0, &found); if (found) { break; } } if (!found) { printf("无组合\n"); } return 0; } ``` (12)代码如下: ```c #include <stdio.h> #include <stdbool.h> bool isLeapYear(int year) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { return true; } else { return false; } } int daysInMonth(int year, int month) { int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (month == 2 && isLeapYear(year)) { return 29; } else { return days[month - 1]; } } int daysInYear(int year) { if (isLeapYear(year)) { return 366; } else { return 365; } } int daysFrom1900(int year, int month, int day) { int days = 0; for (int i = 1900; i < year; i++) { days += daysInYear(i); } for (int i = 1; i < month; i++) { days += daysInMonth(year, i); } days += day - 1; return days; } int main() { int year, month; printf("请输入年份:"); scanf("%d", &year); printf("请输入月份:"); scanf("%d", &month); int days = daysFrom1900(year, month, 1); int weekDay = (days + 1) % 7; printf("日 一 二 三 四 五 六\n"); for (int i = 0; i < weekDay; i++) { printf(" "); } int daysOfMonth = daysInMonth(year, month); for (int i = 1; i <= daysOfMonth; i++) { printf("%2d ", i); if ((weekDay + i) % 7 == 0) { printf("\n"); } } if ((weekDay + daysOfMonth) % 7 != 0) { printf("\n"); } return 0; } ```

相关推荐

最新推荐

recommend-type

2024华为OD机试D卷 - 最多购买宝石数目 - 免费看解析和代码.html

私信博主免费获取真题解析以及代码
recommend-type

华为OD机试D卷 - 小朋友来自多少小区 - 免费看解析和代码.html

私信博主免费获取真题解析以及代码
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这
recommend-type

已知n个人(以编号0,1,2,3...n-1分别表示)围坐在一张圆桌周围。从编号为0的人开始报数1,数到m的那个人出列;他的下一个人又从1开始报数,数到m+1的那个人又出列(每次报数值加1);依此规律重复下去,直到圆桌周围的人全部出列。用递归方法解决

这个问题可以使用递归方法解决。下面是一个思路: 1. 定义一个函数,接收三个参数:n、m、i,表示还剩下n个人,每次数到m时出列,当前报数的人是i; 2. 如果n=1,返回i,即最后留下的那个人的编号; 3. 否则,计算出下一个出列的人的编号j,通过递归调用函数解决n-1个人的问题,其结果为k; 4. 如果k < j,即当前i之后出列的人的编号为k,需要将k转换为在i之前出列的编号,返回值为 k+(n-1); 5. 如果k>=j,即当前i之后出列的人的编号为k,返回值为 k-(j-1); 下面是对应的Python代码: ```python def josephus(n, m, i):