C编程语言分配中的日历

时间:2016-03-15 07:56:17

标签: function calendar printf scanf

已经在这个任务工作了20多个小时,我理解人们出于某种原因从不想帮助完成家庭作业,但我确实没有得到任何地方,并且认为我至少会尝试并寻求帮助,因为我已经尝试过多个论坛无济于事。我的代码如下......

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int getdaycode(int month,  int year);
void printheader(int month, int year);
int getndim(int month, int year);

int main()
{
	int  day, month, year, nummonths;
	{
		printf("Enter Month, Year, and Number of Months");
		scanf("%d %d %d", &month, &year, &nummonths);
		
		for (nummonths; nummonths < 13; nummonths++)
			if (nummonths > 13)
				year = year + 1;

		printheader(month, year);
		int numdays = getndim(month, year);
		int daycode = getdaycode(month,  year);
		
		for (day = 1; day <= 1 + daycode * 4; day++)
			printf(" ");
		
		for (day = 1; day <= numdays; day++) 
		
		{
			printf("%2d", day);
			if ((day + daycode) % 7 > 0)

				printf("   ");
			else
				printf("\n");
		}
		daycode = (daycode + numdays) % 7;
	}
}


int getdaycode(int month, int year)
{
	int numdays;
	{
		numdays = ((year - 1) * 365 + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400)); // how many days including exceptions

		if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))		//check if leapyear
		{
			if (month == 1)							// January 
				numdays = numdays;
			if (month == 2)							// February 
				numdays = numdays + 31;
			if (month == 3)							// March 
				numdays = numdays + 28 + 31 + 1;
			if (month == 4)							// April 
				numdays = numdays + 31 + 28 + 31 + 1;
			if (month == 5)							// May 
				numdays = numdays + 30 + 31 + 28 + 31 + 1;
			if (month == 6)							// June 
				numdays = numdays + 31 + 30 + 31 + 28 + 31 + 1;
			if (month == 7)							// July 
				numdays = numdays + 30 + 31 + 30 + 31 + 28 + 31 + 1;
			if (month == 8)							// August 
				numdays = numdays + 31 + 30 + 31 + 30 + 31 + 28 + 31 + 1;
			if (month == 9)							// September 
				numdays = numdays + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31 + 1;
			if (month == 10)							// October						
				numdays = numdays + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31 + 1;
			if (month == 11)							// November
				numdays = numdays + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31 + 1;
			if (month == 12)							// December
				numdays = numdays + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31 + 1;
		}
		else
		{
			if (month == 1)							// January 
				numdays = numdays;
			if (month == 2)							// February 
				numdays = numdays + 31;
			if (month == 3)							// March 
				numdays = numdays + 28 + 31;
			if (month == 4)							// April 
				numdays = numdays + 31 + 28 + 31;
			if (month == 5)							// May 
				numdays = numdays + 30 + 31 + 28 + 31;
			if (month == 6)							// June 
				numdays = numdays + 31 + 30 + 31 + 28 + 31;
			if (month == 7)							// July 
				numdays = numdays + 30 + 31 + 30 + 31 + 28 + 31;
			if (month == 8)							// August 
				numdays = numdays + 31 + 30 + 31 + 30 + 31 + 28 + 31;
			if (month == 9)							// September 
				numdays = numdays + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31;
			if (month == 10)							// October						
				numdays = numdays + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31;
			if (month == 11)							// November
				numdays = numdays + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31;
			if (month == 12)							// December
				numdays = numdays + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31;
		}

		int daycode = numdays % 7;
		switch (daycode)
		{
		case 0:
			printf("Sunday\n");
			break;

		case 1:
			printf("Monday\n");
			break;

		case 2:
			printf("Tuesday\n");
			break;

		case 3:
			printf("Wednesday\n");
			break;

		case 4:
			printf("Thursday\n");
			break;

		case 5:
			printf("Friday\n");
			break;

		case 6:
			printf("Saturday\n");
			break;

		default: printf("unexpected error (daycode case) daycode = %d", daycode);
			break;
		}
		return daycode;
	}
}

void printheader(int month, int year)
	{
			printf("%14d %1d\n", month, year);
			printf("Sun ");
			printf("Mon ");
			printf("Tue ");
			printf("Wed ");
			printf("Thu ");
			printf("Fri ");
			printf("Sat\n");
		}

int getndim(int month, int year)
{
	int numdays;
	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))		//check if leapyear
	{
		if (month == 1)							// January 
			numdays = 31;
		if (month == 2)							// February 
			numdays = 29;
		if (month == 3)							// March 
			numdays = 31;
		if (month == 4)							// April 
			numdays = 30;
		if (month == 5)							// May 
			numdays = 31;
		if (month == 6)							// June 
			numdays = 30;
		if (month == 7)							// July 
			numdays = 31;
		if (month == 8)							// August 
			numdays = 31;
		if (month == 9)							// September 
			numdays = 30;
		if (month == 10)							// October						
			numdays = 31;
		if (month == 11)							// November
			numdays = 30;
		if (month == 12)							// December
			numdays = 31;
	}
	else
	{
		if (month == 1)							// January 
			numdays = 31;
		if (month == 2)							// February 
			numdays = 28;
		if (month == 3)							// March 
			numdays = 31;
		if (month == 4)							// April 
			numdays = 30;
		if (month == 5)							// May 
			numdays = 31;
		if (month == 6)							// June 
			numdays = 30;
		if (month == 7)							// July 
			numdays = 31;
		if (month == 8)							// August 
			numdays = 31;
		if (month == 9)							// September 
			numdays = 30;
		if (month == 10)							// October						
			numdays = 31;
		if (month == 11)							// November
			numdays = 30;
		if (month == 12)							// December
			numdays = 31;
	}
	return numdays;
}

enter image description here

我想知道的是如何将我的getdaycode函数正确地调用到我的main函数中。此外,当这不是问题时,这一天一直显示在我的标题下方,并且它与乱七八糟的日历的排序混乱。这是我目前最大的两个问题,我真的很乐意与某人一起工作......真的很困惑......在你说回顾你的材料之前......我是一个全新的编程,没有背景,以及本课程没有任何来源,如书籍或网站可供参考。 (这使得它非常困难)。任何帮助都非常赞赏!

3 个答案:

答案 0 :(得分:1)

int getndim(int month, int year)
{
int numdays;            
        //---whatever your code is
    if(check condition)     
    {
        if (month == 2)                         
            numdays = 29;   
    }
    return numdays;
}

答案 1 :(得分:0)

它可能对您有所帮助。

int main()
{
int  day, month, year, nummonths;
    printf("Enter Month, Year, and Number of Months");
    scanf("%d %d %d", &month, &year, &nummonths);
    if (nummonths > 12)
        year = year + nummonths%12;

    printheader(month, year);
    int numdays = getndim(month, year);
    int daycode = getdaycode(month, day, year);

   for (day = 1; day <= numdays; day++) 
    {   printf("%4d", day);
        if (day % 7 > 0)
            printf("\t");
        else
            printf("\n");
    }
}

但除了形成该特定问题的解决方案之外,您还需要处理一些可以帮助您的技能。

请选择一些图书和在线资源,并完成其中任何一项

1&GT;书: - 让我们c,通过: - balaguruswami

2 - ;教程http://www.w3schools.in/c/intro/

3&GT;教程http://www.tutorialspoint.com/cprogramming/

答案 2 :(得分:0)

int getdaycode(int month, int day, int year)
{
    int numdays;
    numdays = (whatever it is); // how many days including exceptions
            if (month == 1)                         
                numdays = numdays;
            if (month == 2)                         
                numdays = numdays + 31;
            if (month == 3)                         
                numdays = numdays + 28 + 31;
            .
            .
            .
            .
            .
        if (check condition )       //check if leapyear
        {
            if (month == 1 || month == 2)                           // January 
                numdays = numdays;
            else 
                numdays = numdays +1;
        }       
        int daycode = numdays % 7;
        return daycode; 
}

void printheader(int month, int year)
{
        printf("\n\tSun ");
        printf("\tMon ");
        printf("\tTue ");
}