C语言实现万年历(附代码) 小白完成的第一个C语言程序,希望大家多多关注,点赞

article/2025/10/21 13:54:34

C语言实现万年历
前言:本文章向大家介绍如何使用C语言代码实现万年历使用实例,讲解编写万年历的方法,教你轻松学会写出万年历。这个小程序算是我自己写的第一个比较完整的小程序,算是对大一上学期学习的C语言程序设计基础的一个总结

万年历正文内容

  • 知识强调
  • 特别说明
  • 各函数说明
    • 1.打印星号函数
    • 2.打印日历抬头函数
    • 3.判断闰年平年函数
    • 4.计算总天数函数
    • 5.打印日历函数
    • 6.main函数(主函数)
  • 完整代码
  • 总结

知识强调

特别说明

各函数说明

1.打印星号函数

2.打印日历抬头函数

3.判断闰年平年函数

4.计算总天数函数

5.打印日历函数

6.main函数(主函数)

完整代码

总结

知识强调
1.由于教皇格里戈八世在1582年2月24日颁布法令,永远抹去了1582年10月5日到1582年10月14日。所以导致历史上永远不存在这10天。1582年2月24日是星期四,它的第二天是1582年10月5日,这天是星期五。
因此考虑到这十天的影响,所以本篇文章使用1900年1月1日进行计算,这天正好是星期一,便于我们的程序计算。
2.判断闰年与平年的方法
闰年:年份数是4的倍数但不是100的倍数,或者年份数是400的倍数。
平年:除去闰年的年份就都是平年。
3.闰年有366天,平年有365天。闰年的二月有29天,平年的二月有28天。

特别说明
1.本文所写的日历的第一天是从星期一开始的,与某些纸质日历从星期日开始的不同。
2.本篇文章所写的日历是某一年某一个月的日历,不是完整的年日历。
如下图所示万年历
各函数说明
1.打印星号函数

void printStar()
{printf("*****************************************************\n");	
} 

目的是为了在修饰输出后的万年历,使其更加美观,好看。

2.打印日历抬头函数

char weekday[7][10]={"一","二","三","四","五","六","日"};
void printBegin()
{printf("\t\t\t万年历\t\t\t\n");printStar();for(int i=0;i<7;i++){printf("%s\t",weekday[i]);	}printf("\n"); 
} 

将日历的抬头与封装在一起,方便输出周一至周日。

3.判断闰年平年函数

int leap(int year)
{if(year%4==0&&year%100!=0||year%400==0){return 1;}else{return 0;}/*int four,hundred,fourhundred;four=year%4;hundred=year%100;fourhundred=year%400;if(four==0&&hundred==0&&fourhundred==0){return 1;}else if(four==0&&hundred!=0&&fourhundred!=0){return 1;}return 0;*/
}

将判断闰年与平年的函数封装成一个函数,更见方便调用。在这里,计算平年与闰年有两种方法,第二种方法理解起来有点麻烦。更加希望选择第一种。

4.计算总天数函数

//1900年1月1日是星期一,比较方便后面的计算 
//我们需要算我们输入的年份离1900年有多少天
int  daySum(int year,int month)
{//1900 1 1 是星期一int i,sum=0;for(i=1900;i<year;i++)	{//判断当前年份是闰年还是平年{	if(leap(i)){sum+=366;}else{sum+=365;	} } }for(i=0;i<month-1;i++)//i<month-1是因为我们不能将我们输入的月份计算在内 {if(leap(year)==1){sum+=runnian[i];	} else{sum+=pingnian[i];}}return sum;
} 

这个函数是计算我们输入的月份离1900年1月1日有多少天,方便我们下面计算。

5.打印日历函数

//打印日历 
void printResult(int sum,int year,int month)
{int result,temp,i;//result为余数,temp为中间变量,i为循环变量result=sum%7;//日历上前面空余的天数,就是总天数除以7的余数//把当前月份空余的天数用空格表示for(i=0;i<result;i++){printf("\t");	} temp=7-result;//从第几格开始打印一号if(leap(year)==1) {//数组下标从0开始//月份只能从1开始 for(i=1;i<=runnian[month-1];i++){printf("%d\t",i);if(i==temp||(i-temp)%7==0)	{printf("\n");}}printf("\n");	} else {for(i=1;i<=pingnian[month-1];i++){printf("%d\t",i);if(i==temp||(i-temp)%7==0)	{printf("\n");}}	} printf("\n");
} 

这个函数的作用就是打印日历,result是日历上面空余的天数图片1

得到的result就是为了将这些空白部分输出,把当前月份空余天数输出。

5.main函数(主函数)

int main(void)
{//用户输入年 月 printf("请输入年-月:"); scanf("%d-%d",&year,&month);printBegin();int sum=daySum(year,month);printResult(sum,year,month);printStar();system("pause");//防止闪屏 return 0;	
}

将其他函数在主函数中调用,就能做出一个完整的万年历。

完整代码

/*1.用户输入年,月2.打印一个日历 
*/
#define _CRT_SECURE_NO_WARNINGS//使用宏定义是让编译器进行操作,让编译器忽略内库存的问题 
#include<stdio.h>
#include<stdlib.h>
int year,month;
//闰年和平年   2月份天数不一样
int  runnian[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int  pingnian[12]={31,28,31,30,31,30,31,31,30,31,30,31};
char weekday[7][10]={"一","二","三","四","五","六","日"}; 
//打印星号
void printStar()
{printf("*****************************************************\n");	
} 
//打印日历的抬头
void printBegin()
{printf("\t\t\t万年历\t\t\t\n");printStar();for(int i=0;i<7;i++){printf("%s\t",weekday[i]);	}printf("\n"); 
} 
//判断当前年份是闰年还是平年 
int leap(int year)
{if(year%4==0&&year%100!=0||year%400==0){return 1;}else{return 0;}/*int four,hundred,fourhundred;four=year%4;hundred=year%100;fourhundred=year%400;if(four==0&&hundred==0&&fourhundred==0){return 1;}else if(four==0&&hundred!=0&&fourhundred!=0){return 1;}return 0;*/
}
//1900年1月1日是星期一,比较方便后面的计算 
//我们需要算我们输入的年份离1900年有多少天
int  daySum(int year,int month)
{//1900 1 1 是星期一int i,sum=0;for(i=1900;i<year;i++)	{//判断当前年份是闰年还是平年{	if(leap(i)){sum+=366;}else{sum+=365;	} } }for(i=0;i<month-1;i++)//i<month-1是因为我们不能将我们输入的月份计算在内 {if(leap(year)==1){sum+=runnian[i];	} else{sum+=pingnian[i];}}return sum;
} 
//打印日历 
void printResult(int sum,int year,int month)
{int result,temp,i;//result为余数,temp为中间变量,i为循环变量result=sum%7;//日历上前面空余的天数	,就是总天数除以7的余数//把当前月份空余的天数用空格表示for(i=0;i<result;i++){printf("\t");	} temp=7-result;//从第几格开始打印一号if(leap(year)==1) {//数组下标从0开始//月份只能从1开始 for(i=1;i<=runnian[month-1];i++){printf("%d\t",i);if(i==temp||(i-temp)%7==0)	{printf("\n");}}printf("\n");	} else {for(i=1;i<=pingnian[month-1];i++){printf("%d\t",i);if(i==temp||(i-temp)%7==0)	{printf("\n");}}	} printf("\n");
} 
int main(void)
{//用户输入年 月 printf("请输入年-月:"); scanf("%d-%d",&year,&month);printBegin();int sum=daySum(year,month);printResult(sum,year,month);printStar();system("pause");//防止闪屏 return 0;	
}

这里我们进行一个测试,当我们输入2022-12时,看我们所写的程序运行结果是不是能和电脑上的日历一样。
这是我们运行出来的结果:
2002-12
这是电脑日历:2002-12-
我们可以从这两个图片观察出,我们代码运行出来的结果与电脑日历上是差不多的。

总结
以上便是根据年月的输入,输出所在的当月日历。在这个基础上,我们还能够编写通过输入年份,输出这一年十二个月的日历,如果感兴趣的小伙伴们,可以自行尝试写一下。
这是我第一次写的完整的一个程序,如果有错误的地方或者有疑问的地方,请大家在评论区中指出。希望大家能给我这个新人点个关注,点点赞!


http://chatgpt.dhexx.cn/article/kWKXZy3f.shtml

相关文章

万年日历(C语言)

C Language 万年历程序----&#xff08;1840~2110&#xff09;年 ##声明&#xff1a;此程序并非本人全原创&#xff0c;已修改其中少数内容&#xff0c;仅供小白参考&#xff0c;大佬者若言论&#xff0c;来吧&#xff0c;用点力——后续本人将更新此万年历添加更有丰富的内容…

C语言万年历程序

刚复习了C语言&#xff0c;写一个万年历程序&#xff0c;比较初级&#xff0c;见笑了。 /*Name : calendar.cAuthor : 飞翔de猪油Version : v1.0Description : 万年历程序*/#include <stdio.h> #include <stdlib.h> #include <string.h> #in…

面向对象程序设计实训——万年历

设计内容&#xff1a; 1.运用程序设计基础基本知识&#xff0c;使用C、Java或Python等面向对象程序设计语言&#xff0c;按以下要求编程实现万年历的功能&#xff1a; (1)输入任一年&#xff0c;判断该年是否为闰年&#xff1b; (2)输入年月日计算该日为星期几&#xff0c;…

Qt项目简单贪吃蛇代码

目录 第一个界面 第二个界面 第一个界面 在.pro文件里添加sql QT core gui sql 点击.ui文件添加组件 类和对象如图所示&#xff0c;右键MianWindow->改变样式表&#xff0c;在编辑样式表里添加代码改变按钮样式 QPushButton{border:2px solid #7b7b7b; //按钮…

贪吃蛇php代码下载,C语言贪吃蛇代码

C语言编写贪吃蛇源代码&#xff0c;简单易懂&#xff0c;文件为VC源代码&#xff0c;附txt代码和源代码程序。 相关软件软件大小版本说明下载地址 c语言编写贪吃蛇源代码&#xff0c;简单易懂&#xff0c;文件为VC源代码。如果你正在学习c语言&#xff0c;就来下载吧。很经典的…

Html/Javascript snake game 贪吃蛇游戏(附全部代码)

以前用pyhton 做了贪吃蛇游戏&#xff0c; 这里发表的是html/javascript 版本。难度差不多&#xff0c; 区别是python 主要用class, 而javascript 主要用function &#xff0c; 他们的功能很相似&#xff0c; 写法稍微有些不同。内容大致是&#xff1a; 1. 蛇由蛇头&#xff0…

实验二.贪吃蛇的设计

目录 一.实验内容&#xff1a; 二.贪吃蛇的代码实现 &#xff08;1&#xff09;类的声明 &#xff08;2&#xff09;初始化界面 &#xff08;3&#xff09;游戏界面 &#xff08;4&#xff09;蛇的位置 &#xff08;5&#xff09;键盘监听 &#xff08;6&#xff09;更…

Python贪吃蛇 (完整代码+详细注释+粘贴即食)

文章目录 代码运行截图笔记补充参考博客&#xff08;阿里嘎多&#xff01;&#xff09; 代码 #!/usr/bin/env python # -*- coding: utf-8 -*- # author&#xff1a;Wangdali time:2021年1月20日16:08:44 #python实现&#xff1a;贪吃蛇游戏玩法&#xff1a;回车开始游戏&am…

k-means聚类算法及matlab实现(简单实现)

k-means简介 k-means算法也称k均值算法&#xff0c;是一种常用的聚类算法。聚类算法是研究最多、应用最广的一种无监督学习算法。   聚类试图将数据集中的样本划分为若干个通常是不相交的子集&#xff0c;每个子集称为一个“簇”。通过这样的划分&#xff0c;每个簇里的样本可…

matlab 层次聚类

MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法&#xff1a; 1.层次聚类 hierarchical clustering 2.k-means聚类 这里用最简单的实例说明以下层次聚类原理和应用发法。 层次聚类是基于距离的聚类方法&#xff0c;MATLAB中通过pdist、linkage、dendrogram、…

K-means聚类算法及其MATLAB实现

参考&#xff1a; http://www.csdn.net/article/2012-07-03/2807073-k-means http://www.cnblogs.com/zhzhang/p/5437778.html http://blog.csdn.net/qll125596718/article/details/8243404/ K-means属于无监督学习方法 K表示类别数&#xff0c;Means表示均值&#xff0c;K…

基于MATLAB的K-means聚类算法

实验数据说明 Iris也称鸢尾花卉数据集&#xff0c;是一类多重变量分析的数据集。通过花萼长度&#xff0c;花萼宽度&#xff0c;花瓣长度&#xff0c;花瓣宽度4个属性预测鸢尾花卉属于&#xff08;Setosa(山鸢尾)&#xff0c;Versicolour(杂色鸢尾)&#xff0c;Virginica(维吉尼…

k-means聚类算法(matlab实现)

k-means聚类算法 文章目录 k-means聚类算法前言一、k-means聚类算法简介二、k-means聚类算法步骤三、代码实现总结 前言 k-means聚类算法是硬聚类算法的一种&#xff0c;即在n纬欧几里得空间把n个样本数据分为k类。首先根据用户要确定聚类的数目k,随机性的选取k个样本&#xf…

Kmeans聚类算法——Matlab

聚类算法 原理步骤代码绘图选取四个迭代步骤进行可视化&#xff08;散点图&#xff0c;条形图&#xff09;聚类结果可视化&#xff08;散点图&#xff09; 原理 聚类算法的基本思想是&#xff1a;以空间中k个点为中心进行聚类&#xff0c;对距离他们最近的对象进行归类。通过迭…

matlab实现聚类算法

simulate2020625数据集 clear;clc load simulate2020625;kmax(subcluster(:,3));%设置聚类数目 data subcluster(:,1:2); cata subcluster; [m,n]size(data); c1subcluster(:,3); c1c1;%% 实际聚类图 figure(1); plot(cata(cata(:,3)1,1),cata(cata(:,3)1,2),r*) hold on pl…

K-means++聚类算法(matlab实现)

K-means聚类算法 文章目录 K-means聚类算法前言一、算法简介二、K-means算法步骤三、K-means算法matlab实现总结 前言 K-means算法&#xff1a;K-means算法是K-means算法的改进版&#xff0c;其在选择初始质心时采用了一种更加聪明的方法&#xff0c;能够有效地避免局部最优解…

MATLAB聚类分析(Cluster Analysis)

使用环境&#xff1a;MATLAB2016a、MATLAB2010a 聚类分析是一种无监督式学习&#xff0c;不像回归分析等需要Inputs 和 Targets &#xff0c;聚类分析是只通过提供一组数据实现分类的算法。下面给出本人在学习聚类分析的MATLAB程序 x15*[randn(500,1)5,randn(500,1)5]; x25*[…

matlab统计与机器学习工具箱中的7种聚类算法

1. matlab中自带聚类算法概述 本文简要概述了matlab统计和机器学习工具箱中可用的聚类方法&#xff0c;并给出了其聚类函数。在使用过程中&#xff0c;直接调用该函数即可&#xff0c;十分方便&#xff0c;不得不感慨matlab的强大。 聚类分析&#xff0c;又称分割分析或分类分…

K-mean(多维度)聚类算法(matlab代码)

申明: 仅个人小记。 Email: officeforcsdn163.com 目录 效果演示二维度三维度 k-mean 算法思想简要说明代码分析二维度k-mean代码三维度k-mean代码多维度k-mean代码功能使用示范后期函数接口改造 (借助matlab中cell结构实现)新的函数接口使用范例 小结 效果演示 二维度 (1) K…

k-Means——经典聚类算法实验(Matlab实现)

聚类算法—k-Means实验 k-平均&#xff08;k-Means&#xff09;&#xff0c;也被称为k-均值&#xff0c;是一种得到最广泛使用的聚类算法[1]. k-Means算法以k为参数&#xff0c;把n个对象分为k个簇&#xff0c;使得簇内具有较高的相似度。 实验目的 了解常用聚类算法及其优缺…