C语言项目大作业万历年,C语言练手项目--C 语言编写万年历

C语言编写万年历一、需求二、实现1、思路2、代码3、运行结果三、参考链接

一、需求

C语言实现日历

二、实现

1、思路

(1)日历规则

重点一:2月的天数,对应是四年一闰,百年不闰,四百年再润

重点二:日期与周几的关系,依据是1900年1月1日是周一,之后根据天数差别计算就行

2、代码

#include

#include

typedef enum {

false, true

} bool;

int leap(int);

int dayCount(char *);

void layout(char *, char *);

int main(int argc, char **argv)

{

if (argc != 3) {

printf("Please input %s year month like \n", *argv, *argv);

return 0;

}

layout(argv[1], argv[2]);

return 0;

}

/* 判断闰年平年 */

int leap(int year)

{

if (year % 400 == 0) {

return 1;

}

if (year % 100 != 0 && year % 4 == 0) {

return 1;

}

return 0;

}

/* 统计之前年份的所有天数 */

int dayCount(char *str)

{

/* day count of the previous year */

int tmp = atoi(str);

int count = 365 * (tmp - 1900);

for (int i = 1900; i < tmp; i++) {

if (leap(i) == 1) {

count++;

}

}

return count;

}

/* 输出对应月份日历 */

void layout(char *str1, char *str2)

{

int mouth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

/* 统计输入年月前的所有天数 */

int tmp = atoi(str1);

int daySum = dayCount(str1);

int mouthNum = atoi(str2);

if (mouthNum == 2) {

daySum += 31;

}

if (mouthNum > 2) {

if (leap(tmp) == 1) {

daySum++;

}

for (int i = 0; i < (mouthNum - 1); i++) {

daySum += mouth[i];

}

}

printf("日 一 二 三 四 五 六\n");

bool flag = false;/* 区别weekday用空格或者日期表示的标志 */

int space = 0;

int number = 1;

daySum++;/* 先显示周日,故加上1 */

for (int i = 0; i < mouth[mouthNum - 1] + (daySum % 7); i++) {

if ((daySum % 7) == space) {

flag = true;

}

if (!flag) {

printf(" ");

} else {

printf("%d", number);

if (number < 10) printf(" ");

number++;

}

printf(" ");

space++;

if (space % 7 == 0) {

printf("\n");

}

}

printf("\n");

}

3、运行结果

bb9af144aaa48e1e9515846c8aa78a93.png

三、参考链接

1、万年历——C语言版本

2、算法系列之十七:日历生成算法-中国公历(格里历)(上)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值