iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言打印某一年的日历
  • 267
分享到

C语言打印某一年的日历

2024-04-02 19:04:59 267人浏览 独家记忆
摘要

本文通过实例为大家分享了C语言打印某一年日历的具体代码,供大家参考,具体内容如下 输入一个年份(1970以后的),以 2*6 的格式打印当年的日历。 主要思路:遍历日期,根据日期标记

本文通过实例为大家分享了C语言打印某一年日历的具体代码,供大家参考,具体内容如下

输入一个年份(1970以后的),以 2*6 的格式打印当年的日历。

主要思路:遍历日期,根据日期标记每一行应该打印的内容,存放到一个数组中,然后遍历数组,根据数组的内容逐行打印。代码如下:


// 打印日历
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

char month[12][10] = { "January", "February", "March", "April", "May", "June",
 "July", "August", "September", "October", "November", "December" };


//计算某日期是当年的第几天
int day_in_year(int y, int m, int d) {
 int r_day = 0;
 int m_days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//每个月的天数
 m_days[1] += y % 400 == 0 || y % 4 == 0 && y % 100 != 0;
 for (int i = 0; i < m - 1; ++i) {
  r_day += m_days[i];
 }
 r_day += d;
 return r_day;
}

//计算某日是星期几
int getWeek(int y, int m, int d) {
 //先计算出来距离1970年1月1日周四有多少天
 int days = 0; //当日距离1970.1.1的天数
 int res;   //存放结果,周几

 if (y == 1970) {
  days = day_in_year(y, m, d);
 }
 else {
  for (int i = 1970; i < y; ++i) {
   days = days + 365 + (i % 400 == 0 || i % 4 == 0 && i % 100 != 0);
  }
  days += (day_in_year(y, m, d) - 1);//因为算的是距离多少天,所以需要减一
 }

 //然后计算当日是周几
 res = (days + 4) % 7;
 return res;
}

//打印日历
void displayCalendar(int y) {
 int m_days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//每个月的天数
 m_days[1] = 28 + (y % 400 == 0 || y % 4 == 0 && y % 100 != 0);
 int week_l;//左边月份的第一天是周几
 int week_r;//右边月份的第一天是周几
 for (int m = 0; m < 6; ++m) {//m控制月份,比实际月份小1
  //打印日历的表头
  printf("%-12s                    %-12s\n", month[m], month[m + 6]);
  printf("---------------------------     --------------------------- \n");
  printf("Sun Mon Tue Wed Thu Fri Sat     Sun Mon Tue Wed Thu Fri Sat \n");
  week_l = getWeek(y, m + 1, 1);//求出左边月份的第一天是星期几
  week_r = getWeek(y, m + 7, 1);//求出右边列月份的第一天是星期几
  int date_l = 1;
  int date_r = 1;
  while (date_l <= week_l + m_days[m] || date_r <= week_r + m_days[m + 6]) {
   //在范围内,打印
   int tag[15] = { 0 };//用来标记应该打印什么,整数表示打印日期,-1表示打印空格
   tag[7] = -1;//左右界线
   for (int p = 0; p < 7; ++p, ++date_l, ++date_r) {//p为tag的指针
    //根据指针p给tag赋值
    if (date_l <= week_l + m_days[m]) {
     if (date_l < week_l) {
      //指针还没有到左边月份的第一天,应该打印空格
      tag[p] = -1;
     }
     else {
      //记录应该打印的日期
      tag[p] = date_l - week_l;
     }
    }
    else {//该打印的日期标记完了,其他的用空格补上
     tag[p] = -1;
    }
    //标记右边的情况,逻辑与左边的一样
    if (date_r <= week_r + m_days[m + 6]) {
     if (date_r < week_r) {
      tag[p + 8] = -1;
     }
     else {
      tag[p + 8] = date_r - week_r;
     }
    }
    else {
     tag[p + 8] = -1;
    }
   }
   //一行一行打印
   for (int i = 0; i < 15; ++i) {
    if (tag[i] == -1||tag[i] == 0) {
     //没有日期要打印,打印四个空格
     printf("    ");
    }
    else {
     //有日期打印,打印日期
     printf("%-4d", tag[i]);
    }
   }
   printf("\n");
  }
  printf("\n");
 }
}

int main() {

 int year;//输入年份,打印该年的日历
 scanf("%d", &year);
 displayCalendar(year);
 return 0;
}

运行效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言打印某一年的日历

本文链接: https://www.lsjlt.com/news/128168.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言打印某一年的日历
    本文通过实例为大家分享了C语言打印某一年日历的具体代码,供大家参考,具体内容如下 输入一个年份(1970以后的),以 2*6 的格式打印当年的日历。 主要思路:遍历日期,根据日期标记...
    99+
    2024-04-02
  • C语言打印某一年中某月的日历
    在做学校作业发现的一道不错的练手题目,记录下来方便复习 大致思路: ① 判断输入的年份是否闰年; ② 计算输入月份的第一天是该年的第几天; ③ 计算输入月份...
    99+
    2024-04-02
  • 怎么用C语言打印某一年中某月的日历
    这篇文章主要介绍“怎么用C语言打印某一年中某月的日历”,在日常操作中,相信很多人在怎么用C语言打印某一年中某月的日历问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用C语言打印某一年中某月的日历”的疑惑有所...
    99+
    2023-06-21
  • C语言怎么打印输出某一年的日历
    本篇内容主要讲解“C语言怎么打印输出某一年的日历”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么打印输出某一年的日历”吧!输入一个年份(1970以后的),以 2*6 的格式打印当年的日历...
    99+
    2023-06-08
  • 使用C语言打印月历
    打印日历应该是程序员入门时候的一个基础练习。打印一年的日历有许多不同的实现,我这里提一个可以实现的方法。首先需要确定该年是闰年还是平年,闰年的二月是29天,全年是366天;平年二月是...
    99+
    2024-04-02
  • 怎么在shell中打印指定日期的日历
    怎么在shell中打印指定日期的日历?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。打印本月的日期#! /bin/bash#设置字体颜色tiffcolor="...
    99+
    2023-06-09
  • 用C语言如何打印一个等腰三角形
    目录C语言打印一个等腰三角形C语言打印倒等腰三角形C语言打印一个等腰三角形 想要打印一个等腰三角形,首先试着打印一个实心的直角三角形。这里统一使用“*”符号打...
    99+
    2022-11-16
    C语言打印三角形 C语言打印等腰三角形 C语言等腰三角形
  • 怎么用C语言打印一个等腰三角形
    这篇文章主要介绍“怎么用C语言打印一个等腰三角形”,在日常操作中,相信很多人在怎么用C语言打印一个等腰三角形问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用C语言打印一个等腰三角形”的疑惑有所帮助!接下来...
    99+
    2023-07-04
  • C语言如何删除打印的字符
    要删除已经打印的字符,需要使用特定的方法,因为C语言的标准输入输出流是按照顺序进行操作的,无法直接删除已经打印的字符。一种可行的方法...
    99+
    2023-09-15
    c语言
  • Log4j如何屏蔽某个类的日志打印
    目录Log4j屏蔽某个类的日志打印Log4j屏蔽指定日志Log4j屏蔽某个类的日志打印 项目中使用的是log4j.properties的方式配置,在项目启动后有一个任务每隔半小时会运...
    99+
    2024-04-02
  • C语言怎么打印星号图案
    本文小编为大家详细介绍“C语言怎么打印星号图案”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么打印星号图案”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。C语言 打印星号图案打印一个上半部分为等腰三角形,...
    99+
    2023-07-04
  • C语言如何打印各种图案
    这篇文章主要介绍C语言如何打印各种图案,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!线段图案#include<stdio.h>int main(){    ...
    99+
    2023-06-22
  • C语言实现打印星号图案
    目录C语言 打印星号图案C语言 循环打印星号图形*用两层循环C语言 打印星号图案 打印一个上半部分为等腰三角形,下半部分为倒等腰三角形星号图案:思想为创建一层大的循环表示行数,然后里...
    99+
    2022-11-16
    C语言打印图案 打印星号图案 C打印星号图案
  • C语言如何输出教学日历表
    本篇内容主要讲解“C语言如何输出教学日历表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何输出教学日历表”吧!按照格式分别输入学期,开学时间,总周数即可得到课程表,以回车结束。eg.学期...
    99+
    2023-06-30
  • c语言每日一练(4)
    五道选择题 有以下代码,程序的输出结果是( ) #include int main(){int a = 0, b = 0;for (a = 1, b = 1; a = 20) break;//1if (b % 3 == 1)//2{b = ...
    99+
    2023-08-31
    c语言 算法 c++
  • C语言如何打印杨辉三角形
    小编给大家分享一下C语言如何打印杨辉三角形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 题目描述杨辉三角形解题之前,我们先来了解一下杨辉三角形到底是什么?杨...
    99+
    2023-06-29
  • C语言打印正方形实例代码
    目录题目描述输入输出样例输入样例输出题目描述 由火柴棍组成的一个n×n的正方形,按从上到下,从左到右的顺序给火柴棍编号,从1开始,比如下图中,一共有24根火柴棍。 问去掉若干个火柴棍...
    99+
    2024-04-02
  • C语言实现打印数字金字塔
    目录C语言打印数字金字塔C语言金字塔问题代码讲解运行实例C语言打印数字金字塔 题目:打印如下图所示的数字金字塔(注意观察数字分布的规律)。 思路:运用循环的嵌套控制输入行以及每一行...
    99+
    2022-11-13
    C语言打印 打印数字金字塔 C打印数字金字塔
  • C语言实现用 * 打印X形图案
    目录C语言 用 * 打印X形图案C语言 输出X图形C语言 用 * 打印X形图案 多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜...
    99+
    2022-11-16
    C语言打印图案 用*打印X形图案 C用*打印X形图案
  • C语言每日一练------Day(6)
    本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字:整数转换 异或 💓博主csdn个人主页:小小unic...
    99+
    2023-08-30
    c语言 C语言每日一题
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作