C语言
(1) 输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。(2) 输入年月,输出该月的日历。
(3) 输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
求大佬帮帮忙 本帖最后由 zhangjinxuan 于 2022-9-11 21:44 编辑
楼主!我写好了!求给最佳!!!{:10_254:}
注:请用C99
#include <stdio.h>
#include <time.h>
const int _months = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
#define run_year(year) (year % 400 == 0 || (year % 4 == 0 && year % 100))
int get_month_day(int year, int month) {
if ((month == 2) && run_year(year))
return 29;
else if (month == 2)
return 28;
return _months;
}
void _show_month(int year, int month) {
printf("%d年%d月:\n", year, month);
printf("一\t二\t三\t四\t五\t六\t日\n");
int offset = 0;
for (int y = 1940; y < year; ++y)
offset = (offset + 365 + run_year(y)) % 7;
for (int m = 1; m < month; ++m)
offset = (offset + get_month_day(year, m)) % 7;
for (int i = 1; i <= offset; ++i)
printf("\t");
int days = get_month_day(year, month);
for (int i = 1; i <= days; ++i) {
printf("%d", i);
if (i == days || (offset + i) % 7 == 0)
printf("\n");
else
printf("\t");
}
}
void show_month() {
int year, month;
printf("输入年月:");
scanf("%d%d", &year, &month);
_show_month(year, month);
puts("");
puts("");
}
void show_year() {
int year;
printf("输入年份:");
scanf("%d", &year);
for (int i = 1; i <= 12; ++i)
_show_month(year, i);
}
void get_day(int year, int month, int day) {
#define days(y,m) (m==2?(run_year(y)?29:28):_months)
#define addone(y,m,d) {if (d==days(y,m)){d=1;++m;}else{++d;}if(m==13){m=1;++y;}}
int cnt = 0, y = year, m = month, d = day;
struct tm *local;
time_t t = time(NULL);
local = localtime(&t);
int eyear = local->tm_year + 1900;
int emonth = local->tm_mon + 1;
int eday = local->tm_mday;
#define checkin(y,m,d) (y>eyear?0:y<eyear?1:m>emonth?0:m<emonth?1:d<=eday)
if (!checkin(y, m, d)) {
printf("输入日期晚于今日日期,无法求值!\n");
return;
}
while (checkin(y, m ,d)) {
++cnt;
addone(y, m ,d);
}
printf("距离今天是:%d天\n", cnt - 1);
#undef checkin
#undef addone
#undef days
}
char* _chday(int day) {
switch (day) {
case 1:return "一";
case 2:return "二";
case 3:return "三";
case 4:return "四";
case 5:return "五";
case 6:return "六";
}
}
void get_week() {
int year, month, day;
printf("输入年、月、日:");
scanf("%d%d%d", &year, &month, &day);
int offset = 0;
for (int y = 1940; y < year; ++y)
offset = (offset + 365 + run_year(y)) % 7;
for (int m = 1; m < month; ++m)
offset = (offset + get_month_day(year, m)) % 7;
if ((offset + day) % 7 == 0)
printf("那一天是 星期日\n");
else
printf("那一天是 星期%s\n", _chday((offset + day) % 7));
get_day(year, month, day);
}
int main(void) {
int opt;
while (1) {
printf("输入操作:(输入0结束程序)");
scanf("%d", &opt);
switch (opt) {
case 1:
show_year();
break;
case 2:
show_month();
break;
case 3:
get_week();
break;
default:
printf("感谢您的使用!");
return 0;
}
}
return 0;
} 如此庞大的程序,10鱼币显然太少了 本帖最后由 顶级太阳 于 2022-5-22 14:12 编辑
这要是python的话,还凑合,想办法给你找一个万年历的库调用一下也就解决了。抱歉,我刚开始学C,看了题目只是有点思路。提醒一下,你的要求太笼统了。第一步,显示该年的日历,这都要显示什么?日期、星期几、。。。。
第二步,你要显示一个月的日历,都显示什么内容?
第三步,要显示公历节日,这一条就比较麻烦,都包含那些?这就够做一个近百条的数组了。 顶级太阳 发表于 2022-5-22 14:10
这要是python的话,还凑合,想办法给你找一个万年历的库调用一下也就解决了。抱歉,我刚开始学C,看了题目 ...
况且只给10鱼币,谁高兴做啊哈哈哈{:10_243:} 豆嘉木 发表于 2022-5-22 16:29
况且只给10鱼币,谁高兴做啊哈哈哈
还有一个人悬赏了60鱼币,那个都是很简单的数组操作。我还没学到数组呢,稍微有点困难,有时间过去看看。思路我有,就是写出来的细节有点吃力。等于白给的。 顶级太阳 发表于 2022-5-22 21:01
还有一个人悬赏了60鱼币,那个都是很简单的数组操作。我还没学到数组呢,稍微有点困难,有时间过去看看。 ...
不,那个特别难,我看过,绝对不是你所想的那样 这个周末,我会挑战一下 本帖最后由 桃花飞舞 于 2022-9-10 11:18 编辑
(3) 输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
输入年月日,输出距离今天还有多少天,今天的日期也是要输入的吧?就是计算天数差 这题目超简单的 是否是公历节日,星期几,今天星期几,然后用天数差%7 再加上今天星期几 只要判断月日应该就可以了。
除了星期几我没判断过以外。
这题并不是不能做。我太懒不太想做,我又没有现成的代码给你。
实在不会做你可以看下C程序设计语言95页5.7多维数组,就是计算天数的例程
公历节日不知道是啥意思,不会是看这天是不是端午节,中秋节之类的吧{:10_245:} 本帖最后由 zhangjinxuan 于 2022-9-10 17:44 编辑
楼主!我做出来了!请收下代码 豆嘉木 发表于 2022-5-22 16:29
况且只给10鱼币,谁高兴做啊哈哈哈
我高兴做 zhangjinxuan 发表于 2022-9-10 11:42
楼主!我写好了!求给最佳!!!
注:请用C99
反正好牛逼,我还看不懂 zhangjinxuan 发表于 2022-9-10 12:12
我高兴做
楼主早就不在了,你看一下他的最后访问时间 2022-6-14 22:20
人造人 发表于 2022-9-11 21:39
楼主早就不在了,你看一下他的最后访问时间 2022-6-14 22:20
啊!!!!!!!!!!
不————!!!!!
雪花~啊啊飘~飘,北风啸~啸~ 本帖最后由 zhangjinxuan 于 2022-9-11 21:46 编辑
{:10_266:}
呜呜,我花了1个小时算来算去,写来写去,最后居然...
白做了啊!
雪~花~飘~飘~ zhangjinxuan 发表于 2022-9-11 21:43
啊!!!!!!!!!!
不————!!!!!
所以,现在还高兴做吗?
给别人写程序之前,先去他的空间看一看,看一看他是不是真心的提问
看一看他发了多少贴子,选了多少最佳,然后再考虑要不要帮他写
本帖最后由 zhangjinxuan 于 2022-9-11 21:55 编辑
人造人 发表于 2022-9-11 21:47
所以,现在还高兴做吗?
给别人写程序之前,先去他的空间看一看,看一看他是不是真心的提问
看一看他发 ...
不错,吃一堑,长一智
不过,也锻炼了自己,之前也为这个问题发愁呢
举报早就想点了 人造人 发表于 2022-9-11 21:47
所以,现在还高兴做吗?
给别人写程序之前,先去他的空间看一看,看一看他是不是真心的提问
看一看他发 ...
现实给这位善良的朋友心理上造成巨大的打击 const int _months = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
这个办法,确实我没有想到.赞.
很棒的思路啊.
我也想做一个.
页:
[1]
2