c语言程序 编写日历,求用C语言编写一个万年历,要求输入年月,输出相应月份的日历~...

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

gxzu7165

2014.12.21

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:42%    等级:8

已帮助:412人

// aa.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #include #include #include void tiangan(int x) {char a[][10]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"}; int i=x-1864; i=i%10; if(i>=0) printf("\t\t%s",a[i]); else {while(i<0) i=i+10; printf("\t\t%s",a[i]); } } void dizhi(int x) {char a[][10]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}; int i=x-1864; i=i%12; if(i>=0) printf("%s年",a[i]); else {while(i<0) i=i+12; printf("%s年",a[i]);} } void shengxiao(int x) {char a[][10]={"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"}; int i=(x-1900)%12; if(i>=0) printf("(%s年)\n",a[i]); else {while(i<0) i=i+12; printf("(%s年)\n",a[i]);} } int yue() {int i,y,x,day,j,s=0,sum=365,m,month,c,d; printf("请输入年份:"); scanf("%d",&x); printf("请输入月份:"); scanf("%d",&month); while(1) {tiangan(x); dizhi(x); shengxiao(x); int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; day=(x+(x-1)/4-(x-1)/100+(x-1)/400)%7; if(x%100==0) {if(x%400==0) {a[1]++;sum++;} } else if(x%4==0) {a[1]++;sum++;} if(day==0) day=7; sum=sum+day; for(i=0;i<12;i++) {if(i==month-1) {printf("%d年%d月:\n\n",x,month); printf(" 周日 周一 周二 周三 周四 周五 周六\n");} {for(j=1;j<=a[i];j++) {if(j==1) for(m=0;m12) {month=1;x++;}} else break; }} int main() { yue(); return 0; } 追问: 对于初学者来说,这个貌似太难了……能不能把 天干地支 去掉,头文件换简单些 回答: #include #include #include int yue() {int i,y,x,day,j,s=0,sum=365,m,month,c,d; printf("请输入年份:"); scanf("%d",&x); printf("请输入月份:"); scanf("%d",&month); while(1) { int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; day=(x+(x-1)/4-(x-1)/100+(x-1)/400)%7; if(x%100==0) {if(x%400==0) {a[1]++;sum++;} } else if(x%4==0) {a[1]++;sum++;} if(day==0) day=7; sum=sum+day; for(i=0;i<12;i++) {if(i==month-1) {printf("%d年%d月:\n\n",x,month); printf(" 周日 周一 周二 周三 周四 周五 周六\n");} {for(j=1;j<=a[i];j++) {if(j==1) for(m=0;m12) {month=1;x++;}} else break; }} int main() { yue(); return 0;

11分享举报

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是实现上述要求的 C 语言代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> // 判断是否为闰年 int isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } // 获取某年某月的天数 int getDaysOfMonth(int year, int month) { int days[] = {31, 28 + isLeapYear(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; return days[month - 1]; } // 获取某年某月1号是星期几 int getWeekday(int year, int month) { struct tm t = {0}; t.tm_year = year - 1900; t.tm_mon = month - 1; t.tm_mday = 1; mktime(&t); return t.tm_wday; } // 打印日历表头 void printCalendarHeader() { printf("日\t一\t二\t三\t四\t五\t六\n"); } // 打印某月的日历 void printCalendarOfMonth(int year, int month) { printf("%d年%d月\n", year, month); printCalendarHeader(); int days = getDaysOfMonth(year, month); int weekday = getWeekday(year, month); // 打印第一行(1号前面的空格) for (int i = 0; i < weekday; i++) { printf("\t"); } for (int i = 1; i <= 7 - weekday; i++) { printf("%d\t", i); } printf("\n"); // 打印中间若干行 int count = 7 - weekday + 1; while (count <= days) { for (int i = count; i <= count + 6 && i <= days; i++) { printf("%d\t", i); } printf("\n"); count += 7; } } // 打印某年的所有日历 void printCalendarOfYear(int year) { printf("%d年\n", year); for (int i = 1; i <= 12; i++) { printCalendarOfMonth(year, i); printf("\n"); } } // 获取日期是星期几 int getWeekdayOfDate(int year, int month, int day) { struct tm t = {0}; t.tm_year = year - 1900; t.tm_mon = month - 1; t.tm_mday = day; mktime(&t); return t.tm_wday; } int main() { int choice; do { printf("\n请选择功能:\n"); printf("1. 输入年月日,计算相应日期是星期几。\n"); printf("2. 输入年月输出相应月份日历。\n"); printf("3. 输入年份,输出该年所有日历。\n"); printf("4. 退出。\n"); scanf("%d", &choice); switch (choice) { case 1: { int year, month, day; printf("请输入年份:"); scanf("%d", &year); printf("请输入月份:"); scanf("%d", &month); printf("请输入日期:"); scanf("%d", &day); int weekday = getWeekdayOfDate(year, month, day); printf("%d年%d月%d日是星期%d。\n", year, month, day, weekday); break; } case 2: { int year, month; printf("请输入年份:"); scanf("%d", &year); printf("请输入月份:"); scanf("%d", &month); printCalendarOfMonth(year, month); break; } case 3: { int year; printf("请输入年份:"); scanf("%d", &year); printCalendarOfYear(year); break; } case 4: { printf("退出程序。\n"); break; } default: { printf("无效的选择,请重新输入。\n"); break; } } } while (choice != 4); return 0; } ``` 这段代码实现了一个带菜单的万年历程序,可以根据用户选择执行不同的功能。可以输入年月日,计算相应日期是星期几;输入年月输出相应月份日历输入年份,输出该年所有日历;具有退出功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值