C语言在控制台输出当月日历

C语言在控制台输出当月日历

  • C语言在控制台输出当月日历
    • 一、概述
    • 二、提前知识准备
      • (1)、tm结构体
      • (2)、一些用到的库变量类型
      • (3)、asctime函数
      • (4)、localtime函数
      • (3)、time函数
    • 三、运行界面
    • 四、代码

一、概述

在学完C语言的大致语法后,是否感觉有力无处施展呢?这个输出日历的小程序可以帮助大家获得一点成就感!

二、提前知识准备

由于本程序使用到了C语言标准库的time.h这个头文件,建议提前了解一下:

注: 以下介绍多引用自这两个网站,侵删!

菜鸟教程time.h

cppreference上的介绍

(1)、tm结构体

struct tm {int tm_sec;         /* 秒,范围从 0 到 59        */int tm_min;         /* 分,范围从 0 到 59        */int tm_hour;        /* 小时,范围从 0 到 23        */int tm_mday;        /* 一月中的第几天,范围从 1 到 31    */int tm_mon;         /* 月,范围从 0 到 11        */int tm_year;        /* 自 1900 年起的年数        */int tm_wday;        /* 一周中的第几天,范围从 0 到 6    */int tm_yday;        /* 一年中的第几天,范围从 0 到 365    */int tm_isdst;       /* 夏令时                */
};

(2)、一些用到的库变量类型

类型 介绍 说人话
time_t 能够代表时间的算术类型。虽然没有定义,这几乎总是一个整体值持有秒数(不包括闰秒)自00:00,1970年1月1日UTC,对应POSIX时间 一个长整形存储着从前一个表格里说的那天到现在的秒数
struct tm 保留日历日期和时间的结构细分为其组件 这是一个用来保存时间和日期的结构。

(3)、asctime函数

char *asctime(const struct tm *timeptr)

返回一个指向字符串的指针,它代表了结构 timeptr 的日期和时间。

(4)、localtime函数

struct tm *localtime(const time_t *timer)

timer 的值被分解为 tm 结构,并用本地时区表示。

(3)、time函数

C 库函数 time_t time(time_t *seconds) 返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位。如果 seconds 不为空,则返回值也存储在变量 seconds 中。

三、运行界面

运行起来就像下面这个样子的啦!!!在控制台的话界面是不是还不错呢?

四、代码

好了呢,废话就不多说了,直接上代码!

#include <stdio.h>
#include <time.h>const char head[] = " Mon Tue Wed Thu Fri Sat Sun";
int getEndDay(int year, int month);
int getWeekOfFirstDay(int nowDay, int nowWeek);int main (void)
{time_t rawtime;struct tm * now;time(&rawtime);now = localtime(&rawtime);printf("\n  %s\n", asctime(now));int endDay = getEndDay(now->tm_year, now->tm_mon);int weekOfFirstDay = getWeekOfFirstDay(now->tm_mday, now->tm_wday);int today = now->tm_mday;printf("%s\n", head);    // 输出表头// 输出第一行占位空格if (weekOfFirstDay == 0)printf("                        ");for (int i = 1; i < weekOfFirstDay; i++)printf("    ");// 从一号开始输出到月末for (int i = 1; i <= endDay; i++){if (i == today)printf("%3d*", i);elseprintf("%4d", i);// 周末输出结束后输出换行if ((i + weekOfFirstDay - 1) % 7 == 0)puts("");}puts("");return 0;
}// 得到当前所在月份的天数
int getEndDay(int year, int month)
{const int days[15] = {31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (month == 1){if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))return 29;elsereturn 28;}elsereturn days[month];
}// 推算这月第一天是礼拜几
// 返回值:[0, 6] (礼拜日, 礼拜一 ~ 礼拜六)
int getWeekOfFirstDay(int nowDay, int nowWeek)
{int mod = (nowDay - 1) % 7;int ans = nowWeek - mod;if (ans >= 0)return ans;elsereturn 7 - ans;
}

【C语言应用实例】输出当月日历相关推荐

  1. C语言编程实例—输出指定图形

    用C语言打印指定图形时,主要就是根据i(行号)  来确定每一行输出的数据 输入一个数字  就可以根据这个数字输出指定的图形,此算法也可以针对其他情况,比如输出星型. 本案例分两部分:接下来找规律 第一 ...

  2. java 输出当月日历_java 实现打印当前月份的日历

    实现当前日历的打印,当前日期用*来表示. 关键得出这个月的第一天是星期几. 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示 ...

  3. python实现输出日历_python实例9:输出时间日期和当月日历

    问题:暂停一秒输出,并获取当前时间和当月日历. #载入所用模块 import time import calendar import datetime print(time.strftime('%Y- ...

  4. C语言经典实例:1-10例:三角求和、显示所占字节数、自增自减运算while语句输出最小值、计算快递费用、学生成绩统计

    文章目录 C语言经典实例:1-10例:三角求和.显示所占字节数.自增自减运算while语句输出最小值.计算快递费用.学生成绩统计等 1.程序的编写工具 2.项目的创建 3.C语言经典实例1-10编写的 ...

  5. C语言程序实例100个

    [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件的排列.  ...

  6. 视频教程-Swift5语言入门实例教程-Swift

    Swift5语言入门实例教程 15年以上IT行业工作经验.8年以上IT行业教学经验.丰富的项目经验和授课经验,授课形式不拘一格.熟悉iOS开发,网页开发.Java开发.平面设计等技术,是一名经验丰富的 ...

  7. c语言220程序,《C语言程序实例大全》原代码220例

    <C语言程序实例大全>,一共220个. 找了很多地方都不全,最后在CSDN上用积分下载了这个,C语言初学者可以参考. 下载地址: http://doc.xuehai.net/tp09770 ...

  8. 回文日期 php,c语言程序实例大全,220个详细程序源代码

    c语言 程序设计 实例 大全 目录: 第一部分 基础篇 001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 ...

  9. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

    介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...

最新文章

  1. 计算机应用人才培养策略,新形势下的高校计算机应用人才培养策略
  2. ImageView及其子类
  3. java 递归_两篇文章带你了解java基础算法之递归和折半查找
  4. oracle怎么设置脚本,ORACLE安装预设置脚本
  5. 统计学习导论_统计学习导论 | 读书笔记15 | 广义可加模型
  6. C++list容器实现按照年龄升序排列,年龄相同按照身高降序排列,年龄身高相同对体重升序排列
  7. matlab遗传算法选址(多约束条件)
  8. 音视频开发入门基础及视频会议即时通讯开源技术选择
  9. Print Screen sysRa PrtSc
  10. 端口号从8080变成8081,cmd关闭8080端口
  11. oracle上机题库_Oracle笔试题库附参考答案
  12. 使用Python搭建Gitee图床
  13. 新iPhone 12泄漏
  14. iframe嵌套百度地图
  15. 2014年注电考试心得
  16. 2021年两次系统集成项目管理工程师真题各章节占分比对比
  17. 明星大侦探数据分析-第一季~第五季
  18. 本地数据仓库项目(一) —— 本地数仓搭建详细流程
  19. 什么是蓝筹股| 一线蓝筹股|二线蓝筹
  20. Makefile depend规则

热门文章

  1. 大智慧数据文件python_Python 自动化测试(四):数据驱动
  2. html代码格式化vscode,vscode 代码格式化
  3. 「高并发秒杀」mysql数据库引擎区别
  4. 【深度学习】面向医学图像的病灶分割调研(三)
  5. 【PAT (Advanced Level) Practice】1099 Build A Binary Search Tree (30 分)
  6. php 数组接在数组后面,PHP array_splice()接合数组用法的简单介绍
  7. 驱动人生(离线网卡版)_驱动人生8.0版正式发布,最新功能速看
  8. c++用一级运算比较大小_阿里百度腾讯 C/C++ 面试题总结,我全都告诉你!
  9. java 流程控制_《Java基础知识》Java流程控制
  10. linux java开发配置_Linux-Java开发环境配置