zhangyupeng 发表于 2019-6-25 13:14:19

C语言作业设计万年历求帮助非常感谢


一、设计项目
万年历。编写程序实现当用户输入年份(>2000)后,屏幕上输出该年1月的日历,按回车输出下月的日历。直到输出12月的日历结束。
二、设计提交方式
1、 在计算机上给出运行的结果;
2、 程序设计综合训练设计报告。
三、内容要求
1、用C语言实现程序设计
2、显示万年历。

人造人 发表于 2019-6-25 14:12:33

在这里索要作业的完整源代码的人,只有不到10%的人成功了,也就是说你有90%以上的概率不会得到答案
那么你还在等什么?自己动手写呀
把你在写代码的过程中遇到的问题贴出来,有90%以上的概率你能得到答案
对于你这个问题,我说有98%以上的概率你相信吗?
所以,自己动手写

zhangyupeng 发表于 2019-6-25 16:22:40

人造人 发表于 2019-6-25 14:12
在这里索要作业的完整源代码的人,只有不到10%的人成功了,也就是说你有90%以上的概率不会得到答案
那么你 ...

就是完全没有头绪嘛,无从下手,我怎么写

zhangyupeng 发表于 2019-6-25 17:44:47

求你了,网上搜的看 不懂

人造人 发表于 2019-6-25 19:15:29

先做这样的界面

zhangyupeng 发表于 2019-6-25 20:34:39

人造人 发表于 2019-6-25 19:15
先做这样的界面

#include<stdio.h>
int main()
{
int years,mounth,start=0,days,i,shu,j,count=0;
printf("请输入年份\n");
scanf("%d",&years);
days=(years-1)*365+(years-1)/4-(years-1)/100+(years-1)/400+1;
start=days%7;

for(mounth=1;mounth<13;mounth++)
{
printf("%d月份\n",mounth);
if(mounth%2!=0||mounth==8) shu=31;//判断月份天数
else
{
if(mounth==2)
   {
   if(years%4==0&&years%100!=0) shu=29;
   else shu=28;
   }
else shu=30;
}
printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");

for(i=0;i<start;i++)//输出月份前几天的空格
   {
   printf("\t");
   count++;
   }
for(i=1;i<=shu;i++)//输出每个月的天数
{
printf("%d\t",i);
count++;
if(count%7==0) printf("\n");
}
start=count%7;//判断除了一月份的其他月份的月前空格数
count=0;
printf("\n");
}
return 0;
}

不达到题目要求,一次回车就打应下一个月的

zhangyupeng 发表于 2019-6-25 20:39:17

能不能发一下你的,你这么厉害

人造人 发表于 2019-6-25 22:44:33

算了,我帮你写了
你写不出来,说明你这部分没学好,如果你喜欢编程,那有的是时间学,如果不喜欢那也就算了
这个程序真的不难

#include <stdio.h>
#include <stdbool.h>

// 判断是否为闰年
bool is_leap_year(size_t year)
{
        if((year % 4 == 0 && year % 100 != 0 ) || ( year % 400 == 0))
                return true;
        return false;
}

// 给定年月日,返回星期几
size_t get_week(size_t year, size_t month, size_t day)
{
        day += 1;
        month += 1;
        return (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
}

void print_month(size_t year, size_t month)
{
        // 平年每个月的天数
        size_t days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        const char *year_name = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
        if(is_leap_year(year))
                days = 29;

        printf("            %lu      %s             \n", year, year_name);
        printf("--------------------------------------\n");
        printf("   SunMonTueWedThuFriSat\n");
        printf("--------------------------------------\n");
        size_t start = get_week(year, month, 0);
        for(size_t i = 0; i < start; ++i)
                printf("   ");
        for(size_t i = 0; i < days; ++i)
        {
                if((i + start) != 0 && (i + start) % 7 == 0)
                        printf("\n");
                printf("%5lu", i + 1);
        }
        printf("\n");
}

int main(void)
{
        size_t year;
        printf("请输入年份: ");
        scanf("%lu", &year); getchar();
        for(size_t i = 0; i < 12; ++i)
        {
                print_month(year, i);
                getchar();
        }
        return 0;
}
页: [1]
查看完整版本: C语言作业设计万年历求帮助非常感谢