先来看效果图

功能就是输入一个年月日 输出当月的日历

基本思路

1.打印一个日历的模板出来

2.判断平年还是闰年

3.设置一个时间的初始点 计算距离这一天的天数

首先打印模板

/***********************************************************************头文件*****************************************************/
#include<stdio.h>
/***********************************************************************函数声明***************************************************/
void muban();
void printstar();
/***********************************************************************自定义函数*************************************************/
void muban()
{int i;      printf("                             万年历\n");printstar();char week[7][10]={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};for(i = 0;i<7;i++)printf("%10s",week[i]);
}void printstar()
{printf("***********************************************************\n");
}/***********************************************************************主函数*****************************************************/
int main()
{muban();return 0;
}

大家可以自己用空格调整字的位置

判断闰年和平年具体看这篇文章https://blog.csdn.net/viafcccy/article/details/83628920

我们只需要知道我们输入的日期的月份距离1900年的01月有多少天即可

因为百度上的万年历也是将19000101作为基准点

所以我们也用这一天

因为日历实际上可以看成这样

也就是紧密相连的 所以我们只需要算出当前月份和190001距离天数与7的余数即可知道这个月剩下的日期是多少

所以来计数

 int qiuhe(int year,int month,int day,int run[],int ping[]){int i,sum=0;for(i=2001;i<year;i++){int m;//用来标签是闰年还是平年  m==1,就是闰年m=leap(i);//函数的调用,函数的嵌套调用if(m==1){sum=sum+366;}else{sum=sum+365;}}//加月份的天数for(i=0;i<month-1;i++){if(leap(year)==1)sum=sum+run[i];elsesum=sum+ping[i];}return sum;}

实际上是加到你输入月份的前一个月

例如 求20181127

实际上算的是20181031到19000101的天数

然后按日历的规律遍历打印出来

 void shibiePrint(int sum,int year,int month){int yushu,temp,i;yushu=sum%7;//得到多余的天数,然后在后一个月份用空格表示出来for(i=0;i<yushu;i++)printf("          ");//输出空格temp=7-yushu;if(leap(year)==1){for(i=1;i<=run[month-1];i++)//打印31天{printf("%10d",i);if(i==temp||(i-temp)%7==0)printf("\n");}printf("\n");}else{for(i=1;i<=ping[month-1];i++)//打印30天{printf("%10d",i);if(i==temp||(i-temp)%7==0)printf("\n");}printf("\n");}}int main(){scanf("%4d%2d%2d",&year,&month,&day);he=qiuhe(year,month,day,run,ping);//调用函数求和muban();//调用模板函数,输出模板shibiePrint(he,year,month);//进行相应的识别,并输出printStar();//打印最后一行的星号return 0;}

最后组合优化后所有的代码如下

/***************************************************************头文件***************************************************/#include<stdio.h>
/***************************************************************函数声明*************************************************/void printStar();void muban();int leap(int year);int qiuhe(int year,int month,int day,int run[],int ping[]);void shibiePrint(int sum,int year,int month);
/***************************************************************全局变量**************************************************/int year,month,day,he;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};
/***************************************************************自定义函数*************************************************/void printStar(){printf("*************************************************************************************\n");}void muban(){char weekday[7][10]={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};int i;printf("                                        万年历                                        \n");printStar();for(i=0;i<7;i++)printf("%10s",weekday[i]);printf("\n");}//判断闰年和平年int leap(int year){     int four , hundred , fourhundred;scanf("%d",&year);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;else return 0;}//这点到基本点的求和int qiuhe(int year,int month,int day,int run[],int ping[]){//19000101 星期一int i,sum=0;for(i=1900;i<year;i++){int m;//用来标签是闰年还是平年  m==1,就是闰年m=leap(i);if(m==1){sum=sum+366;}else{sum=sum+365;}}//加月份的天数for(i=0;i<month-1;i++){if(leap(year)==1)sum=sum+run[i];elsesum=sum+ping[i];}return sum;}void shibiePrint(int sum,int year,int month){int yushu,temp,i;yushu=sum%7;//得到多余的天数,然后在后一个月份用空格表示出来for(i=0;i<yushu;i++)printf("          ");//输出空格temp=7-yushu;if(leap(year)==1){for(i=1;i<=run[month-1];i++)//打印31天{printf("%10d",i);if(i==temp||(i-temp)%7==0)printf("\n");}printf("\n");}else{for(i=1;i<=ping[month-1];i++)//打印30天{printf("%10d",i);if(i==temp||(i-temp)%7==0)printf("\n");}printf("\n");}}/**********************************************************主函数***************************************************/int main(){scanf("%4d%2d%2d",&year,&month,&day);he=qiuhe(year,month,day,run,ping);//调用函数求和muban();//调用模板函数,输出模板shibiePrint(he,year,month);//进行相应的识别,并输出printStar();//打印最后一行的星号return 0;}

c语言实现万年历教程相关推荐

  1. 万年历定时关机c语言代码,C语言程序设计能力教程电子万年历设计.doc

    C语言程序设计能力教程电子万年历设计.doc 电子科技大学成都学院课程设计报告电子科技大学成都学院电子工程系课程设计报告课 程 名 称 C语言程序设计能力教程 设 计 题 目 万 年 历 指 导 教师 ...

  2. c语言编写万年历课程设计,用C语言编写万年历 C课程设计.pdf

    用C语言编写万年历 C课程设计 用用 C++语言编写万年历语言编写万年历 用用 语言编写万年历语言编写万年历 学生姓名:学生姓名: 指导老师:指导老师: 学生姓名学生姓名:: 指导老师指导老师:: 摘 ...

  3. 用C语言编写万年历6,C语言编写万年历

    <C语言编写万年历>由会员分享,可在线阅读,更多相关<C语言编写万年历(8页珍藏版)>请在人人文库网上搜索. 1.C语言编写万年历 [要求]:1 程序运行后,首先在屏幕上显示主 ...

  4. oracle数据库sql培训,Oracle数据库SQL语言实战培训教程(全面、详细、案例、精讲)套餐...

    风哥oracle数据库SQL语言实战培训教程(案例.精讲)套餐,DBA必备技能. 套餐介绍: 风哥Oracle数据库SQL语言实战培训教程(案例.精讲)套餐,DBA必备技能. 内容: SQL语言基础入 ...

  5. 只能输入字母的c语言程序设计教程课后答案,c语言程序设计基础教程_习题答案20120319...

    <c语言程序设计基础教程_习题答案20120319>由会员分享,可在线阅读,更多相关<c语言程序设计基础教程_习题答案20120319(54页珍藏版)>请在技术文库上搜索. 1 ...

  6. c语言教程的辅导书,清华大学出版社-图书详情-《C语言程序设计案例教程学习辅导》...

    01C语言是国内广泛使用的计算机语言,是很多高等学校计算机及相关专业的核心课程,以及其他理工科专业的计算机通识基础课程.于延.周国辉主编的<C语言程序设计案例教程>(清华大学出版社出版)采 ...

  7. mixin network_基于Mixin Network的Go语言比特币开发教程 : 用 Mixin Messenger 机器人接受和发送比特币...

    基于Mixin Network的Go语言比特币开发教程 : 用 Mixin Messenger 机器人接受和发送比特币 在 上一篇教程中, 我们创建了自动回复消息的机器人,当用户发送消息"H ...

  8. java程序设计p75_java语言程序设计实用教程第四讲控制结构.ppt

    java语言程序设计实用教程第四讲控制结构.ppt 还剩 29页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: ...

  9. c语言实验5上机刘若慧2017年,《《 C语言程序设计案例教程》》.ppt

    << C语言程序设计案例教程>>.ppt 课堂练习: 7.求三个整数之和: 1 只用main函数 2 用求两个整数之和的函数实现 main int a, b, c, sum; ...

最新文章

  1. gpio引脚介绍 树莓派3b_如何让LabVIEW程序运行在树莓派3B(此处有坑)
  2. 12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理
  3. Git账号以及TortoiseGit配置
  4. python清洗文本数据_02.数据预处理之清洗文本信息
  5. golismero web扫描器
  6. DB2 删除某用户下的所有表
  7. Worktile 移动团队如何使用 C++ 完成 Worktile Pro 跨平台应用开发2
  8. java 下面的while语句退出时_java 下面的while语句退出时
  9. 杭电1754I Hate It 线段树与非线段树
  10. 在spring boot中3分钟上手RPC框架Dubbo
  11. 基于深度强化学习的离散自动生产线智能调度
  12. qam映射c程序_DVB-C系统中QAM调制与解调仿真
  13. 【时间序列】python与时间序列-基本案例教程1(1.47万字,19个图,阅读需要37分钟)...
  14. div+css网页html成品学生作业包含10个html页面——动漫主题海贼王
  15. 阿里总参谋长曾鸣:区块链中没有绝对的“去中心化”
  16. 小P的故事——神奇的换零钱 背包
  17. 动态规划算法之断句问题
  18. pycharm中import导入包呈现灰色问题
  19. 小练习 用python实现最简单的人工智能
  20. 一站式在线医疗解决方案,即构音视频技术助建互联网医疗

热门文章

  1. 父母脾气暴躁对孩子有哪些影响
  2. 8、ARM嵌入式系统:UART初始化
  3. php程序员就业方向,php程序员发展方向_php程序员有前途吗
  4. 抖音 触摸精灵_抖音上超火的iPhone图标滑动技巧!还不知道怎么设置就out啦
  5. Web前端开发技术课程大作业_ 关于美食的HTML网页设计——HTML+CSS+JavaScript在线美食订餐网站html模板源码30个页面_
  6. ajax三种错误ie,ie下jquery ajax 80020101错误的解决方法
  7. matlab光学几何光学模拟,matlab在几何光学仿真 实验中的应用.doc
  8. 《视觉SLAM十四讲》读书笔记(二)
  9. 【服务器数据恢复】某银行服务器磁盘阵列多块硬盘掉线的数据恢复案例
  10. 单线程-多线程-高并发