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

这篇具有很好参考价值的文章主要介绍了C语言实现万年历(附代码) 小白完成的第一个C语言程序,希望大家多多关注,点赞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

知识强调

特别说明

各函数说明

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.本篇文章所写的日历是某一年某一个月的日历,不是完整的年日历。
如下图所示万年历c语言编程代码,c语言,开发语言
各函数说明
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是日历上面空余的天数万年历c语言编程代码,c语言,开发语言

得到的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时,看我们所写的程序运行结果是不是能和电脑上的日历一样。
这是我们运行出来的结果:
万年历c语言编程代码,c语言,开发语言
这是电脑日历:万年历c语言编程代码,c语言,开发语言
我们可以从这两个图片观察出,我们代码运行出来的结果与电脑日历上是差不多的。

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

到了这里,关于C语言实现万年历(附代码) 小白完成的第一个C语言程序,希望大家多多关注,点赞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机实训项目之“万年历”代码原理详解

    读者若需要工程源码,可以私信我,收到后会第一时间回复。这是仿真效果  51单片机万年历程序设计(附源码+仿真分享)_哔哩哔哩_bilibili STC89C52 DS18B20(温度传感器) DS1302(时钟芯片) LCD1602液晶显示 独立按键 杜邦线 (一).子程序 EEPROM.h LCD1602.h DS1302时钟模块的三个引脚:

    2024年02月08日
    浏览(47)
  • 基于ego1开发板的万年历自动数字日历设计verilog代码

    名称:基于ego1开发板的万年历自动数字日历设计verilog代码 软件:VIVADO 语言:Verilog 代码功能: 自动数字日历设计  设计自动数字日历,用七段数字显示器显示年(后2位)、月、日和星期数,在计日脉冲的作用下,自动完成1-12月的月、日及星期的计数和显示。 FPGA代码Verilog/VHDL代码

    2024年02月03日
    浏览(40)
  • STM32制作万年历

        STM32万年历制作指南 一、概述 STM32是一种常用的微控制器,具有强大的处理能力和低功耗特性,非常适合用于制作各种电子设备。本文将介绍如何使用STM32制作一款简易的万年历,帮助您轻松查看日期、时间和农历等信息。 二、所需材料 1. STM32微控制器(建议使用STM32F

    2024年02月03日
    浏览(38)
  • 6-6 万年历显示函数

    题主为武理的学生 网上没有对应答案 仅以学习用途上传 设计一个万年历,当用户输入年份和月份时,显示这个月的日历表。程序重点是这个月的第一天是星期几和这个月有几天,有了这两个值,只需通过排列,就可以显示这个日历。程序要求用户输入的年份是从1900年开始,

    2024年01月18日
    浏览(39)
  • 基于Java的万年历(课设)

    资源链接:基于Java的万年历(课设) 摘 要 Java编程语言自诞生十几年来,已经成功地运用在网络计算及移动等各个领域。对于开发者来说,它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。此次我们用JAVA来设计一个万年历程序,该程序以网页形

    2024年02月11日
    浏览(42)
  • 万年历【小游戏】(Java课设)

    Java实现的小游戏 适合作为Java课设!!! jdk1.8+Idea或eclipse 本系统源码地址:https://download.csdn.net/download/qq_50954361/87801830 更多Java课设系统源码地址:更多Java课设系统源码地址 更多Java小游戏运行效果展示:更多Java小游戏运行效果展示 Java课设部署教程:Java课设部署教程 注意事

    2024年02月15日
    浏览(45)
  • 基于FPGA的电子万年历设计

    quartusii12.1 系统的整个结构框图:  然后,设置控制输入有5个脚,分析功能如下所示: i_Function_Controller=0 ;显示年月日 i_sel:选择需要调整的某位数字。 i_set:计数器,调整需要调整的位置的数字。 具体调整的时候,首先选择i_sel,按键按一下,需要调整的位置会移动一次,

    2024年02月03日
    浏览(83)
  • PTA6-6 万年历显示函数

    设计一个万年历,当用户输入年份和月份时,显示这个月的日历表。程序重点是这个月的第一天是星期几和这个月有几天,有了这两个值,只需通过排列,就可以显示这个日历。程序要求用户输入的年份是从1900年开始,已知1900年1月1日是星期一。 日历中每个具体的日期占5个

    2024年01月16日
    浏览(39)
  • 基于51单片机的万年历设计

    目  录 前言....................................................................... 1 1 绪论..................................................................... 3 1.1 课题研究的背景..................................................... 3 1.2课题的研究目的与意义................................................ 3 1.3课题解决的主要内

    2024年02月02日
    浏览(44)
  • FPGA项目(12)——基于FPGA的万年历设计

            首先称述一下所实现的功能:可以显示年、月、日、时、分、秒,有闹钟设置功能,闹钟时间到时,蜂鸣器响,报警。用6位数码管进行显示,分三个显示页面,第一个页面显示年月日,第二个界面显示时分秒,第三个页面显示闹钟时间。可以用按键进行翻页,按键进

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包