编写程序,提示用户输入年份和该年第一天的星期,在控制台上显示该年的日历表。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写程序,提示用户输入年份和该年第一天的星期,在控制台上显示该年的日历表。相关的知识,希望对你有一定的参考价值。

跪求java代码........可加悬赏
。例如,用户输入2010年,第一天是星期5,则显示如下的日历:

参考技术A 你参考下,我以前写的一段程序。
不用输入第一天是星期几的,把我这个程序改一下,不用输入月份,直接循环一下,从1-12就出来了,自己动手改下吧,不难的。

package com.test;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class test
public static void main( String[] args )
String[] wd= "日", "一", "二", "三", "四", "五", "六" ;
/*
Scanner s = new Scanner(System.in);
P("请输入要查询的年份:");
int y = s.nextInt();
P("请输入月份:");
int m = s.nextInt();
if(y < 2000 || y > 2030)
P("不在查询范围之内!");
return;

*/
int y=2012;
int m=3;
GregorianCalendar g = new GregorianCalendar( y, m-1, 1 );

P( "\n星期\t" );
for ( int j = 0; j < wd.length; ++j ) P( wd[j] + "\t" );
P();
for ( int j = 0; j < g.get( Calendar.DAY_OF_WEEK ); ++j ) P( "\t" );
int thisMonth = g.get( Calendar.MONTH );
for ( int j = 1; j <= 31; ++j )
int d = g.get( Calendar.DAY_OF_MONTH );
P( d + "\t" );
if ( g.get( Calendar.DAY_OF_WEEK ) == 7 )
P("\n\t");

g.add( Calendar.DAY_OF_YEAR, 1 );
if ( g.get( Calendar.MONDAY ) != thisMonth )
P("\n\n");
break;




static void P( String s )

System.out.print( s );

static void P()

System.out.println();

参考技术B 哥哥这个貌似没人懂把,如果没有答案跪求给个佳,嘿嘿谢谢

C语言 编程

输入年份 再屏幕上输出该年的 年历 已知1900年第一天也是星期一。

呵呵,竟然用了40分钟,大多时间花费在了控制显示方面。
思路是:计算输入年份的1.1日距离1900年1.1过去了多少天。
然后计算过去这个天数是星期几,然后依次控制显示出去。
显示的时候,显示一二三四五六日,知道1.1是周几,那么再过去1天,2天...都知道了。
跑下程序你会发现,没有问题~~
#include<stdio.h>
#include<time.h>
int main(int argc,char** argv)

int year = 0;
int leap_year_num = 0;//经历过多少个闰年
int leap =0;//输入年是否为闰年
long days = 0 ;//1900.1.1到输入年1月1日过去的天数
int curdays = 0;//当前月的天数
int i = 0;
int j = 0;
int k = 0;
int weak = 0;//每月的第一日是周几
printf("pls input year(xxxx):\n");
scanf("%d",&year);

if(((year%4==0) && (year%100 != 0))||(year%400 == 0))//判断闰年

leap =1 ;


for(i =year;i>1900-1; i--)//判读1900年至year有多少个瑞年

if(((i%4==0) && (i%100 != 0))||(i%400 == 0))

leap_year_num++;



days = 366*leap_year_num + 365*(year - 1900);

//printf("day:(%ld)\n",days);

printf("\t%d\n",year);

for(i =1;i<13;i++)
printf("\n\t%d Month\n",i);
printf("Mon Tue Wed Tur Fri Sat Sun\n");
if(i==2)

if(leap == 0)

curdays=28;

else

curdays=29;


else if((i==1)||(i==3)||(i==5)||(i==7)||(i==8)||(i==10)|| (i==12))

curdays=31;

else

curdays=30;


if(i>1)//每过一个月,要把过去的日子+到总过去天数上。

days +=curdays;


weak = (days+1) % 7 ;//计算过去这么多天后是周几
if( weak == 1)//控制显示格式,如果是1则换行,如果是其他星期则对应位置输出空格

printf("\n");

else

for( j=1;j<weak;j++)

printf(" ");



for(k=1;k<=curdays;k++)

printf("%4d",k);
j++;
if(j==7)

j=0;
printf("\n");//每7天一个换行




printf("\n");//月之间的换行

以上,对你有帮助的话,请给分哦,谢谢!
另外,看到你另一个年月的程序的问题,也搞了~~
参考技术A 给你一个思路吧
首先判断年份是否被4整除。如果是,1年用366天,2月用29天;如果不是1年用365天,2月用28天。
编译一个函数,传递进来的参数是月份,当月天数和当月第一天的星期数,传递出去的是当月最后一天的星期数,并且在函数体中直接打印当月的月份,所有天数和对应的星期数。你每个月调用这个函数即可(有输出了)类似i=daypri(1,31,1)。
这个程序不难,希望你能自己做,自己的,才是学到手的知识!
参考技术B #include <stdio.h>
#include <stdlib.h>

#define true 1
#define false 0
const int BASEYEAR = 1990;
const int DAYSOFONEYEAR = 365;

typedef unsigned short boolean;
const int MONTHS[12] = 31, 28, 31,
30, 31, 30,
31, 31, 30,
31, 30, 31;

/*判断是否是闰年*/
boolean isLeepYear(int year);
void prompt(int *year);
int crossLeepYears(int year);
int crossDays(int year, int month);
int startWith(int year, int month);
void printMonth(int year, int month);
void printMonths(int month);
void printBlack();
void printTitle(int month);

int main(int argc, char *argv[])

int year = 0;
prompt(&year);
printMonths(year);
return 0;


int crossLeepYears(int year)

int i = -1;
int count = 0;
for (i = BASEYEAR; i < year; ++i)

if (isLeepYear(i))

++count;


return count;


int crossDays(int year, int month)

int days = 0;
int i = 0;
days = (year - BASEYEAR)*DAYSOFONEYEAR + crossLeepYears(year);
if (month > 2 && isLeepYear(year))

++days;

for (i = 0; i < month-1; ++i)

days += MONTHS[i];

return days;


int startWith(int year, int month)


return ((crossDays(year, month)+1))%7;


void prompt(int *year)

printf("Please inpu the year: ");
scanf("%d", year);


boolean isLeepYear(int year)

if ( (year%4==0)&&(year%100 != 0) || year%400==0)

return true;

return false;


void printMonths(int year)

int i = 0;
for (i = 0; i < 12; ++i)

printMonth(year, i+1);



void printMonth(int year, int month)

int i = 0;
int day = 1;
int startDay = startWith(year, month);
int daysOfMonth = MONTHS[month-1]+startWith(year, month);
if (isLeepYear(year))

++daysOfMonth;

printTitle(month);
for (i = 0; i < daysOfMonth; ++i)

if (i<startDay)

printf(" ");
continue;

printf ("%2d", day++);
printBlack();
if ((i+1)%7==0)

putchar('\n');


putchar('\n');


void printBlack()

printf(" ");


void printTitle(int month)

printf("\n\t");
switch (month)

case 1:
puts("一月");
break;
case 2:
puts("二月");
break;
case 3:
puts("三月");
break;
case 4:
puts("四月");
break;
case 5:
puts("五月");
break;
case 6:
puts("六月");
break;
case 7:
puts("七月");
break;
case 8:
puts("八月");
break;
case 9:
puts("九");
break;
case 10:
puts("十月");
break;
case 11:
puts("十一月");
break;
case 12:
puts("十二月");
break;
default:
break;

puts("日 一 二 三 四 五 六");


没时间写注释,gcc,vc6均成功编译。
参考技术C # include <stdio.h>
# include <math.h>
void printmonth(int m);
void printhead(int m);
int daysofmonth(int m);
int firstday(int y);
int year,weekday;

void main()

int i;
printf("请输入年份:");
scanf("%d",& year);
weekday=firstday(year);
printf("\n\n");
printf(" %d年\n",year);
for(i=1;i<=12;i++)

printmonth(i);
printf("\n");

printf("\n\n");

void printmonth(int m) //打印每月日历

int i,days;
printhead(m);
days=daysofmonth(m);
for(i=1;i<=days;i++)

printf("%5d",i);
weekday=(weekday+1)%7;
if (weekday==0) printf("\n ");


void printhead(int m) //打印每月的日历头(判定起始位置)

int i;
printf("\n%d月 日 一 二 三 四 五 六\n",m);
printf(" ");
for(i=0;i<weekday;i++)
printf(" ");

int daysofmonth(int m) //每月的天数

switch (m)

case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:return 31;
case 4:
case 6:
case 9:
case 11:return 30;
case 2:if (((year%4==0 && year%100!=0)||year%400==0))
return 29;
else
return 28;
default: return 0;


int firstday(int y) //判断某年元旦是星期几

double s ;
s=floor(year-1+(year-1)/4.0-(year-1)/100.0+(year-1)/400.0+1);
return (int)s%7;
参考技术D 这个网上很多
再就是1900年第一天应该不是星期一
从公元一年一月一日是星期一开始,400年一循环,2000年一月一日是星期一
第5个回答  2011-11-11 不懂你把完整的拢上来嘛

以上是关于编写程序,提示用户输入年份和该年第一天的星期,在控制台上显示该年的日历表。的主要内容,如果未能解决你的问题,请参考以下文章

练习四:日期计算(输入某年某月某日计算出这一天是该年第几天的方法)

C语言 编程

输入年份输出属相c语言,编写程序,输入一个年份,判断该年属相.(提示s

2016年第13计划

从 Aginity 工作台中的周数和年份获取一周的最后一天

查找给定月份和年份中最后一天的名称