C语言 万年历 三种版本

article/2025/10/21 13:25:37

C语言 万年历

万年历

一、第1版:

制作一个万年历(阳历版)。程序从键盘读入年份和月份,然后输出该年该月的月历。
【实现提示】:
本问题的关键是确定所求月份的第一天是星期几。如我们想确定2009年12月1日是星期几,我们可以采用下面的方法:
(1) 求出2009年12月1日是当年的第几天,存在c里面。
(2) s=year-1+(year-1)/4-(year-1)/100+(year-1)/400 + c;
(3) num=s%7; 则num表示该天星期几,0表示星期天,1表示星期一,……

在这里插入图片描述

另外:本问题另一个关键是如何按照上面的格式来输出。输出的时候先输出第一行,再输出第二行,……。这里的问题是如何在输出的时候进行对齐。

二、第2版:

要求:将第1版的万年历程序进行改写,定义如下函数:

  1. 判断某一年是否为闰年:int isLeapYear (int year)
  2. 求某个月有多少天:int monthDays (int year, int month)
  3. 求某一天是该年的第几天:int dayNumber (int year, int month, int day)
  4. 求某一天是星期几:int week(int year, int month, int day)

三、第3版:

要求:将之前的万年历程序v2版进行改写,对如下函数进行调整:

  1. 判断某一年是否为闰年(不变)
  2. 求某个月有多少天(去掉,用数组实现)
  3. 求某一天是该年的第几天(改写,用数组实现)
  4. 求某一天是星期几(不变)

在这里插入图片描述

第一版参考程序

#include <stdio.h>int main()
{int year, month, days, c=0, s, num, i, j;while(scanf("%d%d", &year, &month)){switch(month)  //累加前month-1个月{case 1: c = 0; days = 31; break;case 2: c = 31; days = 28; break; case 3: c = 31+28; days = 31; break;case 4: c = 31+28+31; days = 30; break;case 5: c = 31+28+31+30; days = 31; break;case 6: c = 31+28+31+30+31; days = 30; break;case 7: c = 31+28+31+30+31+30; days = 31; break;case 8: c = 31+28+31+30+31+30+31; days = 31; break;case 9: c = 31+28+31+30+31+30+31+31; days = 30; break;case 10: c = 31+28+31+30+31+30+31+31+30; days = 31; break;case 11: c = 31+28+31+30+31+30+31+31+30+31; days = 30; break;case 12: c = 31+28+31+30+31+30+31+31+30+31+30; days = 31; break;}c++;  //加上该月的1号if( (year%4 == 0 && year%100 != 0) || (year%400 == 0) ) //闰年{if(month >= 3){c++;}if(month == 2){days = 29;}}s=year-1+(year-1)/4-(year-1)/100+(year-1)/400 + c;num=s%7;printf("\n日\t一\t二\t三\t四\t五\t六\n");for (i=1; i<=num; i++)  //跳过1号前面num个空位置{printf("\t");}for (j=1; j<=days; j++) //打印1号到days号{printf("%d\t", j);if ((j+num)%7 == 0){printf("\n");}}printf("\n");}return 0;
}

第二版参考程序

#include <stdio.h>int isLeapYear (int year); //判断某一年是否为闰年
int monthDays(int year, int month); //求某个月有多少天
int dayNumber(int year, int month, int day); //求某一天是该年的第几天
int week(int year, int month, int day); //求某一天是星期几int main()
{int year, month, num, i, j, day;while(scanf("%d%d", &year, &month)){num = week(year, month, 1);printf("\n日\t一\t二\t三\t四\t五\t六\n");for (i=1; i<=num; i++)  //跳过1号前面num个空位置{printf("\t");}day = monthDays(year, month);for (j=1; j<=day; j++) //打印1号到day号{printf("%d\t", j);if ((j+num)%7 == 0){printf("\n");}}printf("\n");}return 0;
}//判断某一年是否为闰年
int isLeapYear (int year) 
{if( (year%4 == 0 && year%100 != 0) || (year%400 == 0) ){return 1;}else{return 0;}
}//求某个月有多少天
int monthDays(int year, int month)
{int day;switch(month)  {case 1: day = 31; break;case 2: day = 28; break;case 3: day = 31; break;case 4: day = 30; break;case 5: day = 31; break;case 6: day = 30; break;case 7: day = 31; break;case 8: day = 31; break;case 9: day = 30; break;case 10: day = 31; break;case 11: day = 30; break;case 12: day = 31; break;}if(isLeapYear (year) && month ==2){day = 29;}return day;
}//求某一天是该年的第几天
int dayNumber(int year, int month, int day)
{int c;switch(month)  //累加前month-1个月{case 1: c = 0; break;case 2: c = 31; break; case 3: c = 31+28; break;case 4: c = 31+28+31; break;case 5: c = 31+28+31+30; break;case 6: c = 31+28+31+30+31; break;case 7: c = 31+28+31+30+31+30; break;case 8: c = 31+28+31+30+31+30+31; break;case 9: c = 31+28+31+30+31+30+31+31; break;case 10: c = 31+28+31+30+31+30+31+31+30; break;case 11: c = 31+28+31+30+31+30+31+31+30+31; break;case 12: c = 31+28+31+30+31+30+31+31+30+31+30; break;}c += day;  if( isLeapYear (year) && month > 3) //闰年{c++;}return c;
}//求某一天是星期几
int week(int year, int month, int day)
{int c = dayNumber(year, month, day);int s=year-1+(year-1)/4-(year-1)/100+(year-1)/400 + c;int num=s%7;return num;
}

第三版参考程序

#include <stdio.h>int isLeapYear(int year); //判断某一年是否为闰年
int dayNumber(int year, int month, int day); //求某一天是该年的第几天
int week(int year, int month, int day); //求某一天是星期几int main()
{int year, month, num, i, j;int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};while(scanf("%d%d", &year, &month)){if(isLeapYear(year))  //修正2月份的天数{days[2]=29;}else{days[2]=28;}num = week(year, month, 1);printf("\n日\t一\t二\t三\t四\t五\t六\n");for (i=1; i<=num; i++)  //跳过1号前面num个空位置{printf("\t");}for (j=1; j<=days[month]; j++) //打印1号到day号{printf("%d\t", j);if ((j+num)%7 == 0){printf("\n");}}printf("\n");}return 0;
}//判断某一年是否为闰年
int isLeapYear(int year) 
{if( (year%4 == 0 && year%100 != 0) || (year%400 == 0) ){return 1;}else{return 0;}
}//求某一天是该年的第几天
int dayNumber(int year, int month, int day)
{int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};int c=0, i;for(i=1; i<month; i++){c += days[i];}c += day;  if( isLeapYear(year) && month > 3) //闰年{c++;}return c;
}//求某一天是星期几
int week(int year, int month, int day)
{int c = dayNumber(year, month, day);int s=year-1+(year-1)/4-(year-1)/100+(year-1)/400 + c;int num=s%7;return num;
}

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

相关文章

编制万年历的历程

初入编程之道的学子大都试编过万年历。万年历有二种&#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…

基于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…