C语言编写小程序——万年历

article/2025/10/21 13:26:13

一、杂谈

         大一学了C之后一直困惑,C到底怎么用?它不像HTML那么直观,也没有SQL那么常用,更没有Java那么功能强大,那他为何还存在,并依然火热呢?

         答案很简单:编程语言是一家,C语言结构简单,但所蕴含的逻辑思维和其他语言大致相同,适合初学者。

         编程不是一蹴而就,能力需要日积月累,推荐想我一样的初学者,大家自己动手玩玩简单的C程序!

二、万年历

像这样一个简单的全年日历,仔细观察不难发现由每个月的日历组成,每个月有最多6行,占6周,每周7天;

 

程序如下:

设定日历大小:

int date[12][6][7];   //12个月,每月最多6行,每行7天
int calendar[ ][12]={{31,28,31,30,31,30,31,31,30,31,30,31}, //平年{31,29,31,30,31,30,31,31,30,31,30,31}};   //闰年
int year;
char title[]="SUN MON TUE WED THU FRI SAT";    //周几
int sw,leap,i,j,k,wd,day;                    //变量
// sw  周几,leap 0平年 1闰年,i,j,k辅助变量,wd 第几周,day 日

提示用户输入想要查询的年份:(回车换行)

printf("Please input the year whose calendar you want to know: ");
scanf("%d%*c",&year);

 再计算该年1月1 日是起于周几:

(由于公元1月1日设为星期六,故3月1日为星期三。为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。

每 4年(3个平年+1个闰年)共208周+5天 =208*7+5=1461
每百年共100*(208周+5天)-1天=5217周+5天 (整百年暂设为平年)
每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天
即400年一轮回!)

 

long int getyear(int year,int month){if(month<3) return year-1;                 //以元年3月为基石else return year;
}
long int getmonth(int month){if(month<3) return month+13;              //将月份调至下个月else return month+1;
}
long int getday(int year,int month,int day){return 1461L*getyear(year,month)/4+153L*getmonth(month)/5+day;   //计算距离元年3月1日天数//计算方法:每四年一周期1461天(相当于计算平均每年多少天) //         每五个月一周期153天(相当于计算平均每月多少天)    
}
int getweekday(int year,int month,int day){return(int)((getday(year,month,day)%7-2+7)%7);                //得该日期的星期数//         得到的天数除以7天取余,减去3月1日周三,其他均为保证正数1-7的附加计算
}

判断是否为闰年:

leap= year%4==0 && year%100||year%400==0 ;

将日历置为空:

for(i=0;i<12;i++)for(j=0;j<6;j++)for(k=0;k<7;k++)date[i][j][k]=0;

填充该年日期:

sw=getweekday(year,1,1);
for(i=0;i<12;i++)for(wd=0,day=1; day <= calendar[leap][i]; day++){date[i][wd][sw]=day;sw = ++sw%7;if(sw==0)wd++;}

格式化输出:

printf("\n|==================The Calendar of Year %d =====================|\n|",year);for(i=0;i<6;i++){for(wd=0,k=0;k<7;k++)wd+=date[i][5][k]+date[i+6][5][k];wd=wd?6:5;printf("%2d  %s  %2d  %s |\n|",i+1,title,i+7,title);for(j=0;j<wd;j++){printf("   ");for(k=0;k<7;k++)if(date[i][j][k])printf("%4d",date[i][j][k]);else printf("    ");printf("     ");for(k=0;k<7;k++)if(date[i+6][j][k])printf("%4d",date[i+6][j][k]);else printf("    ");printf(" |\n|");}scanf("%*c");}	puts("=================================================================|");puts("\n Press any key to quit...");

结果为

完整代码: 

#include "stdio.h"
long int getyear(int year,int month){if(month<3) return year-1;else return year;
}long int getmonth(int month){if(month<3) return month+13;else return month+1;
}long int getday(int year,int month,int day){return 1461L*f(year,month)/4+153L*g(month)/5+day;
}int getweekday(int year,int month,int day){return(int)((n(year,month,day)%7-2+7)%7);
}int date[12][6][7];
int calender[ ][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
main()
{int sw,leap,i,j,k,wd,day;int year;char title[]="SUN MON TUE WED THU FRI SAT";
printf("Please input the year whose calendar you want to know: ");
scanf("%d%*c",&year);
sw=w(year,1,1);
leap=year%4==0&&year%100||year%400==0;
for(i=0;i<12;i++)for(j=0;j<6;j++)for(k=0;k<7;k++)date[i][j][k]=0;
for(i=0;i<12;i++)for(wd=0,day=1;day<=day_tbl[leap][i];day++){date[i][wd][sw]=day;sw=++sw%7;if(sw==0) wd++;}printf("\n|==================The Calendar of Year %d =====================|\n|",year);
for(i=0;i<6;i++){for(wd=0,k=0;k<7;k++)wd+=date[i][5][k]+date[i+6][5][k];wd=wd?6:5;printf("%2d  %s  %2d  %s |\n|",i+1,title,i+7,title);for(j=0;j<wd;j++){printf("   ");for(k=0;k<7;k++)if(date[i][j][k])printf("%4d",date[i][j][k]);else printf("    ");printf("     ");for(k=0;k<7;k++)if(date[i+6][j][k])printf("%4d",date[i+6][j][k]);else printf("    ");printf(" |\n|");}scanf("%*c"); 
}
puts("=================================================================|");
puts("\n Press any key to quit...");
}

 


http://chatgpt.dhexx.cn/article/0BWhMs7O.shtml

相关文章

前端:运用js制作一个万年历程序

前端&#xff1a;运用js制作一个万年历程序 1.HTML代码 首先&#xff0c;依旧是一个套路&#xff0c;先写HTML代码&#xff0c;就好比如建一座楼先建地基和楼的结构一样。 外部这个class属性值为time的div标签是为了让整个内容处于居中地位。 class属性值为head1的div标签是…

用Java写一个万年历程序

从控制台输入指定年份&#xff08;在1900年至2099年之内&#xff09;和月份&#xff0c;输出当月的日历。要求效果如下图所示 思路分析如下&#xff1a; 假设输出2020年5月份的日历。那么要求得1900年1月1日到2020年5月1日前一天的天数总和 再求总天数余7的值&#xff0c;结果…

C++编写万年历,公元后日历程序,考虑了1582年前后以及该年的特殊情况。

目录 一&#xff0c;万年历的基本要求前言&#xff1a;万年历的创建思路1.公元天数与日期1.日期输入问题2.闰年与平年的数目 3.日历的输出问题1.日数转化为星期2.日历月份开头 二&#xff0c;万年历正确性的额外补丁1.1582年闰年定义的变更解决2.1582年消失的十天 三&#xff0…

C语言 万年历 三种版本

C语言 万年历 万年历 一、第1版&#xff1a; 制作一个万年历&#xff08;阳历版&#xff09;。程序从键盘读入年份和月份&#xff0c;然后输出该年该月的月历。 【实现提示】&#xff1a; 本问题的关键是确定所求月份的第一天是星期几。如我们想确定2009年12月1日是星期几&a…

编制万年历的历程

初入编程之道的学子大都试编过万年历。万年历有二种&#xff1a;一为只有西历的月历&#xff0c;另一为有农历对照的月历或日历。编写万年历程序可以练练手&#xff0c;加深对编程语言的理解。记得我初入此道是在1994年&#xff0c;我那时刚买了486电脑&#xff0c;也刚开始有视…

显示万年历的程序(汇编语言实现,附源代码)

运行环境&#xff1a;Masm for Windows 集成实验环境 2015 一、课题内容和要求 课题内容&#xff1a; 用汇编语言编写一个有简单界面显示的日历&#xff0c;要求输入年月日后&#xff0c;将该月的完整日历显示出来&#xff0c;包括星期几&#xff0c;且每月的星期六&#xff…

c语言编写万年历程序

这个程序最核心的地方在于计算当前日期是周几&#xff0c;然后才好显示万年历&#xff0c;因为输入只知道月&#xff0c;所以默认是1号。 通过这个日期我们就可以计算总天数&#xff0c;通过总天数进行%7运算&#xff0c;就能得到周几。 通过这个周几&#xff0c;在结合这个月有…

C语言实现万年历程序

C语言实现万年历程序 #include <stdio.h>int year(int y) {if ((y%40) && (y%100!0) || y%4000)return 366;elsereturn 365; }int main() {int y;int i,j,sum0; int begin,week;int days[12]{31,28,31,30,31,30,31,31,30,31,30,31};scanf("%d",&y)…

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

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

万年日历(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…