C语言实现简单的日历功能

开篇

本篇文章的题目来源于《编程珠玑》第三章课后习题的第四个问题,也是我会手动实现的本章的最后一个功能。

问题概要

给定月和年,使用字符数组生成该月的日历(含有周几的日历)。

思路分析

为了生成给定年份中某个月的日历,我们需要知道该月有多少天(注意要正确处理二月份)以及该月的第一天是周几。
下面的代码相对来说比较简单,我不过多描述,不过有些细节需要说一下:
printf(" 一 二 三 四 五 六 日\n"); 在这行代码中,每个字前面是两个空格,因为每个大写的数字占据两个空格,加起来共计4个空格,和下面printf(“%4d”, day);对应;
printf(" “);这一句代码中每次打印的是四个空格,同时也和printf(”%4d", day);对应。

代码实现

#include <stdio.h>// 判断是否是闰年
int isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}// 获取某年某月的天数
int getDaysOfMonth(int year, int month) {if (month == 2) {return isLeapYear(year) ? 29 : 28;}else if (month == 4 || month == 6 || month == 9 || month == 11){return 30;}else {return 31;}
}// 获取某年某月的第一天是周几(0代表周日)
int getFirstDayOfWeek(int year, int month) {// Zeller公式if (month < 3) {month += 12;year--;}int h = (1 + (13 * (month + 1)) / 5 + year + year / 4 - year / 100 + year / 400) % 7;return (h + 5) % 7; // 转换成以星期一为起始的表示方式return h;
}// 打印日历
void printCalendar(int year, int month) {int daysOfMonth = getDaysOfMonth(year, month);int firstDaysOfWeek = getFirstDayOfWeek(year, month);printf("  一  二  三  四  五  六  日\n");for (int i = 0; i < firstDaysOfWeek; i++) {printf("    ");}// 打印日历for (int day = 1; day <= daysOfMonth; day++) {printf("%4d", day);// 换行if ((firstDaysOfWeek + day) % 7 == 0 || day == daysOfMonth) {printf("\n");}}
}int main() {int year, month;printf("请输入年份: ");scanf_s("%d", &year);printf("请输入月份: ");scanf_s("%d", &month);printf("\n%d年%d月日历: \n", year, month);printCalendar(year, month);return 0;
}

效果展示

代码结果展示
真实日历展示

这段代码相对来说较为简单,也就Zeller公式的应用方面需要稍微注意一下。
希望本文对您有所帮助。
感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1421444.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Axure PR 10 制作顶部下拉三级菜单和侧边三级菜单教程和源码

在线预览地址&#xff1a;Untitled Document 2.侧边三级下拉菜单 在线预览地址&#xff1a;Untitled Document 文件包和教程下载地址&#xff1a;https://pan.quark.cn/s/77e55945bfa4 程序员必备资源网站&#xff1a;天梦星服务平台 (tmxkj.top)

java日期格式化

概括 在Java中&#xff0c;对于日期格式转换&#xff0c;最常用的方法通常是使用java.time包中的DateTimeFormatter类&#xff08;适用于Java 8及以上版本&#xff09;&#xff0c;或者java.text.SimpleDateFormat类&#xff08;适用于旧版Java&#xff09;。然而&#xff0c;…

Java二叉树征服手册:从新手村到数据结构王者

前情提要&#xff1a;Java二叉树秘技&#xff1a;从零构建至优化大师&#xff0c;玩转算法王国 文章目录 七. 代码示例与分析1. 插入操作的代码示例2. 前序遍历的代码示例3. 删除操作的代码示例 八. 性能优化与注意事项内存管理优化内存使用内存分配 时间复杂度分析常见问题与避…

轮播变化背景图也一样替换不同的背景色

<template><!-- 全局轮播子组件 --><view class"banner-box"><!-- 背景色 --><view class"banner-bg" :style"{background-image: url(${bannerBackgroundImage}), linear-gradient(${bannerBackground || #345DC2} 50%,#…

拥抱智能物联新场景,畅享4G智能插座的领先优势!

在智能化浪潮席卷全球的今天&#xff0c;智能插座作为智能家居、智能办公、智能工业、智能校园、智能实验室等领域的核心设备&#xff0c;正逐渐受到人们的关注和青睐。近期&#xff0c;一款全新的4G智能插座正式上市&#xff0c;凭借其独特的优势和创新功能&#xff0c;已经迅…

手机恢复出厂设置后怎么还原数据?2个实用技巧推荐!

随着科技的进步&#xff0c;智能手机已成为我们日常生活中不可或缺的一部分。然而&#xff0c;有时候我们可能会因为各种原因选择恢复手机的出厂设置&#xff0c;这会导致我们的一些重要数据丢失。手机恢复出厂设置后怎么还原数据呢&#xff1f;本文将为您介绍2个实用技巧&…

Windows/Mailing

Mailing Enumeration nmap 使用 nmap 扫描系统&#xff0c;发现对外开放了如下端口 ┌──(kali㉿kali)-[~/vegetable/HTB] └─$ nmap -sC -sV -oA nmap 10.10.11.14 Starting Nmap 7.93 ( https://nmap.org ) at 2024-05-08 01:46 EDT Nmap scan report for 10.10.11.14 H…

【全开源】废品回收微信小程序基于FastAdmin+ThinkPHP+UniApp

介绍 一款基于FastAdminThinkPHPUniApp开发的废品回收系统&#xff0c;适用废品回收站、再生资源回收公司上门回收使用的小程序 功能特性 1、会员注册 支持小程序授权注册和手机号注册 2、回收品类 可设置回收品类&#xff0c;废纸、废金属、废玻璃、旧衣服等 3、今日指导价…

使用Android数据恢复恢复已删除的文件[Windows]

智能手机或平板电脑等 Android 设备为用户提供了发送、接收、处理和存储各种数据的能力。它提供了传统手机无法实现的多功能性和简化功能。即便如此&#xff0c;您管理存储在安卓设备中的数据的方式完全取决于您。如果您的手机出现问题&#xff0c;例如系统崩溃或操作系统更新失…

把3D模型加载到网页上需要什么技术?

要将3D模型加载到网页上并实现交互展示需求&#xff08;比如点击模型弹出一个窗口或控制模型的材质等&#xff09;&#xff0c;可以使用以下几种技术&#xff1a; 1、Three.js&#xff1a;这是一个非常流行的JavaScript库&#xff0c;用于在网页上渲染和显示3D图形。它支持多种…

【软件安装】vmware虚拟机安装完整教程(15.5版本)

安装包-百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1zwYeRVdp1TM75JIctkWqVA?pwd6666 提取码&#xff1a;6666 1、去BIOS里修改设置开启虚拟化设备支持&#xff08;这一步必须要进行&#xff09; 网址&#xff1a;https://jingyan.baidu.com/article…

‌‍‬⁣⁡​⁤⁢​⁢⁡⁣‬‍‌​​‬ ​‍⁤‬ ‬⁡⁡⁡‍‌‬⁡⁡⁢‬⁤⁢⁢⁤​‍‌​​‬ ​⁣‌绘唐3一键追爆款反推软件哪家好

‌‍‬⁣⁡​⁤⁢​⁢⁡⁣‬‍‌​​‬ ​‍⁤‬ ‬⁡⁡⁡‍‌‬⁡⁡⁢‬⁤⁢⁢⁤​‍‌​​‬ ​⁣‌绘唐3一键追爆款反推软件哪家好 支持单镜精绘&#xff0c;可以根据故事情节进行单镜头绘图调整&#xff0c;并支持对SD各类模型的自定义调整。 支持一键完成图文视频合成&am…

9. SVG中的text元素

SVG (Scalable Vector Graphics) 提供了强大的文本渲染能力&#xff0c;其中<text>元素是常用 的文本操作的元素。本文将详细介绍<text>标签的基本使用方法&#xff0c;并展示如何通过<tspan>和<textPath>增强文本的表现力。 <text>标签基础 &…

吴恩达机器学习笔记:第 10 周-17大规模机器学习(Large Scale Machine Learning)17.1-17.2

目录 第 10 周 17、 大规模机器学习(Large Scale Machine Learning)17.1 大型数据集的学习17.2 随机梯度下降法 第 10 周 17、 大规模机器学习(Large Scale Machine Learning) 17.1 大型数据集的学习 如果我们有一个低方差的模型&#xff0c;增加数据集的规模可以帮助你获得更…

计算机辅助考试

加我zkhengyang可申请加入数字音频系统研究开发交流答疑群(课题组)&#xff0c;考神训练营&#xff0c;&#xff0c; 为了通过某项考试&#xff0c;可借助计算机(个人电脑)来辅助备考。本人通过电脑辅助学习&#xff0c;成功通过了驾照科目一&#xff0c;全国计算机二级C语言考…

GT2712-STBD 三菱触摸屏12.1寸型

GT2712-STBD 三菱触摸屏12.1寸型 GT2712-STBD参数说明&#xff1a;12.1型, SVGA, TFT彩色液晶屏 65536色, 黑色边框, 电源DC24V。 一、三菱触摸屏GT2712-STBD性能规格&#xff1a; [显示部*1*2] . 显示软元件:TFT彩色液晶屏 . GT2712-STBD画面尺寸:12.1寸 . GT2712-STBD…

java+B/S架构医院绩效考核管理系统maven+Visual Studio Code+avue医院绩效管理系统4大特点

javaB/S架构医院绩效考核管理系统源码mavenVisual Studio Codeavue医院绩效管理系统4大特点 医院绩效考核管理系统&#xff0c;采用多维度综合绩效考核的形式&#xff0c;针对院内实际情况分别对工作量、KPI指标、科研、教学、管理等进行全面考核。医院可结合实际需求&#xff…

ROS2安装

实习上班就是摸鱼&#xff01;学习一下ROS2吧 由于ROS存在较多的不足&#xff0c;所以转战ROS2了&#xff0c;最主要的区别在于在ROS2中&#xff0c;将ROS中的主节点给去掉了 http://fishros.com/d2lros2/#/humble/chapt1/get_started/2.ROS%E4%B8%8EROS2%E5%AF%B9%E6%AF%94…

数据恢复软件哪个好用免费?盘点六款数据恢复软件,总有一款适合你

数据恢复软件哪个好用免费&#xff1f;无论是由于误删、格式化、病毒攻击还是其他原因。为了应对这种情况&#xff0c;许多免费的数据恢复软件应运而生。本文将介绍一些受欢迎的、性能好的免费数据恢复软件&#xff0c;以帮助在需要时选择适合自己的工具。 1、嗨格式数据恢复大…

【Linux】-Linux用户和权限与权限的修改[3]

目录 一、认知root用户 1、root用户&#xff08;超级管理员&#xff09; 2、su和exit命令 3、sudo命令 二、用户、用户组管理 1、用户管理 2、getent 三、查看权限控制 1、认知权限信息 四、修改权限控制 - chmod 五、修改权限控制 - chown 一、认知root用户 1、root…