万年历-原来这么简单呀

一:学了C语言,相信大家都可以做出来。我们要实现的就是用户输入年,月,日。然后打印出来。
二:需要用到的知识点
1,for循环。2,if判断。3,函数的调用
如果您们学了图形库的话,可以贴图上去,效果更加好看。我没有素材,所以,直接用C语言来完成。
三:运行结果
在这里插入图片描述
四:我们用C语言代码实现

/************************************************************************
*                项目名称:万年历
*                项目描述:算法,判断
*                项目环境:VS2013
*                生成日期:2020-3-8
*                作者所属:追梦
*************************************************************************/
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int year, month, day;
int run[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//闰年
int ping[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\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 if (year % 4 == 0 && year % 100 != 0 && year % 400 == 0)//闰年
		return 1;
	else
		return 0;//平年
}
//计算year离1900年有多少天
int daySum(int year,int month,int day,int run[],int ping[])
{
	//参照物1900-1-1-星期一(百度)
	int i, sum = 0;
	//计算年份天数,闰年+366,平年+365
	for( i = 1900; i < year;i++)
	{
		if (leap(i) == 1)
			sum += 366;
		else
			sum += 365;
	}
	
	for (i = 0; i < month-1; i++)//计算月份的天数
	{
		if (leap(year) == 1)
			sum += run[i];
		else
			sum += ping[i];
	}
	return sum;
}
//打印日历
void printData(int sum, int year, int month)
{
	int result, temp, i; //result空格
	result = sum % 7;//前面的空格就是余数---->0-6
	//当前月份空余的天数,空格表示
	for ( i = 0; i < result; i++)
	{
		printf("\t");
	}
	temp = 7 - result;//开始打印1号
	if (leap(year) == 1)
	{
		//数组下标是从0开始,月份从一号开始i=1
		for (i = 1; i <= run[month - 1]; i++)
		{
			printf("%d\t", i);
			if (i == temp || (i - temp) % 7 == 0)//换行
				printf("\n");
		}
		printf("\n");
	}
	else
	{
		for (i = 1; i <= ping[month - 1]; i++)
		{
			printf("%d\t", i);
			if (i == temp || (i - temp) % 7 == 0)//换行
				printf("\n");
		}
		printf("\n");
	}
}
int main()
{
	system("color 2f");//改变黑窗口的颜色
	printf("请输入年 月 日:");
	scanf("%d%d%d", &year, &month, &day);
	int sum = daySum(year, month, day, run, ping);
	printBegin();
	printData(sum, year, month);
	
	system("pause");
	return 0;
}

谢谢观看

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘客-追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值