Problem 1 : (20 marks)
Expo 2010 Shanghai China will be a great event after Beijing Olympic. The duration of the EXPO will be
Between May1st - Oct.31, 2010. Your task is to print a Calendar for the EXPO duration. Hint: Use GregorianCalendar class from Java API.
要完整的程序 谢谢
用JAVA API写的,没有。不过,我可以给你个更详细的,“授之以鱼,不如授之以渔”吗!接招吧----->
***************************************************************************************************************************************
万年历【C语言版本】
设你程序实现多规格输出万年历,要求按以下输出规格,每一横排x个月,x可选取1,2,3,4,6。
1.算法设计
设置两个数组:一维m数组存放月份的天数,如m(8)=31,即8月份为31天。二维d数组存放日号,如d(3,24)=11,即3月份第2个星期的星期四为11号。
输入年号y,m数组数据通过赋值完成。根据历法规定,平年二月为28天;若年号能被4整除且不被100整除,或能被400整除,该年为闰年,二月份为29天,则必须把m(2)改为29。
同时,根据历法,设y年元旦时星期w(取值为0~6,其中0为星期日),整数w可根据下式求出:
w为s除以7的余数,公式中符号[ ]为取整。元旦以后,每增加一天,w增加1,当w=7时改为w=0即可。
设置三重循环,i,j,k为d数组的d(i,j*10+k)赋值。i:1~12,表月份号;j:1~6,表每个月约定最多6个星期。k:0~6,表星期k。从元旦的a=1开始,每赋一个元素,a增加1,同时w=k+1。当w=7时,w=0(为星期日)。当a>c(i)时,终止第i月的赋值操作。
输入格式参数x(1,2,3,4,6),设置四重循环控制规格输出:
n循环,n:1~12/x,控制输出12/x段(每一段x个月)。
j循环,j:1~6,控制输出每月的6个星期(6行)。
i循环,i:t~t+x-1,控制输出每行x个月(从第t个月至t+x-1月,t=x(n-1)+1)。
k循环,k:0~6,控制输出每个星期的7天。
2、万年历C程序设计
#include<stdio.h>
void main()
{
int a,i,j,n,k,t,w,x,y,z,d[13][78];
int m[14] = {0,31,28,31,30,31,30,31,31,30,31};
char wst[] = "Sun Mon Tue Wed Thu Fri Sat";
printf("Please enter the year:");
scanf("%d",&y);
if(y%4==0&&y%100 != 0 || y%400 == 0)
{
a=1;
w=(y+(y-1)/4-(y-1)/100+(y-1)/400%7);
for(i=1;<=12;i++)
{
a=1;
for(j=1;j<=6;j++)
{
while(k<w)
k=k+1;
d[i][j*10+k] = a;
a=a+1;
w=k+1;
if(w==7)
w=0;
if(a>m[i])
break;
}
if(a>m[i])
break;
}
}
printf("input x(1,2,3,4,6):");
scanf("%d",&x);
for(k=1;k<=16*x-3;k++)
printf(" ");
printf("=====%d=====\n",y);
for(n=1;n<=12/x;n++)
{
t=x*(n-1)+1;
printf("\n ");
for(z=1;z<=x;z++)
{
for(k=1;k<=15;k++)
printf(" ");
printf("%2d",t+z-1);
for(k=1;k<=14;k++)
printf(" ");
}
printf("\n ");
for(z=1;z<=x;z++)
printf("%s",wst);
for(j=1;j<=6;j++)
{
printf("\n ");
for(i=t;i<=t+x-1;i++)
{
printf(" ");
for(k=0;k<=6;k++)
if(d[i][j*10+k]==0)
printf(" ");
else
printf("%4d",d[i][j*10+k]);
}
}
}
}
*************************************************************************************************************************************
好了,就是这些了,提醒你朋友:别老是期望别人给你最正确的答案,只有你自己悟出的才是最正确的!!!我这里给你提供个思路,希望你能从中找到从“面向对象角度”解决这一问题的方法(我提供的这个是从“面向过程角度”写的)!!!
import java.util.*;
public class test {
public static void main( String[] args ) {
String[] wd= { "日", "一", "二", "三", "四", "五", "六" };
GregorianCalendar g = new GregorianCalendar( 2010, Calendar.MAY, 1 );
for ( int i = 5; i <= 10; ++i ) {
P( "星期\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 );
int c = 2;
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");
if ( c == 2 )
P( i+"" );
else if ( c == 1 )
P( "月" );
--c;
P( "\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 PN( String s )
{
System.out.println( s );
}
static void P()
{
System.out.println();
}
}