我是一个学生,刚学C,师兄推荐来这里可以找到很多人帮助!我来试试

SongYuH 2007-04-03 10:32:01
现在只学了几种循环语句,要求用for循环编写一个简单的历书,1994-1999年的
老师叫我们用150行的代码写出来
现在不知道用什么方式简单地排出每个月
下面是我编的1994第一个月的代码
太复杂了
#include"stdio.h"
int main()
{
int Year, Month, Days;
printf( "Enter The Year:(A=1994,B=1995,C=1996,D=1997,E=1998,F=1999)\n" );
switch( Year = getchar() )
{case 'A':
case 'a':
int January=31, February=28, March=31, April=30, May=31, June=30,
July=31, August=31, September=30, October=31, November=30, December=31;
for( Month = 1; Month <= 12; Month++)
{printf( "The %d Month\n", Month );
printf("%8s%8s%8s%8s%8s%8s%8s\n","Sun","Mon","Tue","Wed","Thu","Fri","Sat");
for( Days = 1; Days <= 1; Days++)
{
printf("%56d", Days);
}
printf("\n");
for( Days = 2; Days <= 8; Days++)
{
printf("%8d", Days);
}
printf("\n");
for( Days = 9; Days <= 15; Days++)
{
printf("%8d", Days);
}
printf("\n");
for( Days = 16; Days <= 22; Days++)
{
printf("%8d", Days);
}
printf("\n");
for( Days = 23; Days <= 29; Days++)
{
printf("%8d", Days);
}
printf("\n");
for( Days = 30; Days <= 31; Days++)
{
printf("%8d", Days);
}
printf("\n\n");
}
}
return 0;
}
...全文
291 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
0黄瓜0 2007-04-04
  • 打赏
  • 举报
回复
其他年份的代码基本相同.
考虑润年只需要修改eachmonth[1]=28或29就行了.
0黄瓜0 2007-04-04
  • 打赏
  • 举报
回复
根据楼主的代码修改:

int main()
{
int Year, Month, Days;
printf( "Enter The Year:(A=1994,B=1995,C=1996,D=1997,E=1998,F=1999)\n" );
int eachmonth[]={ 31,28, 31, 30, 31,30,31, 31, 30, 31, 30, 31};
enum{week1994=6};//1994.01.01是星期六
int firstweek;//每个月的第一天是星期几
switch( Year = getchar() )
{
case 'A':
case 'a'://
firstweek=week1994;
for( Month = 1; Month <= 12; Month++)
{
printf( "\nThe %d Month\n", Month );
printf("%8s%8s%8s%8s%8s%8s%8s\n","Sun","Mon","Tue","Wed","Thu","Fri","Sat");
for(int space=0;space<firstweek;++space)
printf("%*s",8," ");
for(Days=1;Days<=eachmonth[Month-1];++Days)
{
printf("%*d",8,Days);
int x=(Days+firstweek)%7;
if( x==0)
printf("\n");
}
firstweek=(eachmonth[Month-1]+firstweek)%7;
/*for( Days = 1; Days <= 1; Days++)
**{
** printf("%56d", Days);
**}
**printf("\n");
**for( Days = 2; Days <= 8; Days++)
**{
** printf("%8d", Days);
**}
**printf("\n");
**for( Days = 9; Days <= 15; Days++)
**{
** printf("%8d", Days);
**}
**printf("\n");
**for( Days = 16; Days <= 22; Days++)
**{
// printf("%8d", Days);
//}
//printf("\n");
//for( Days = 23; Days <= 29; Days++)
//{
// printf("%8d", Days);
//}
//printf("\n");
//for( Days = 30; Days <= 31; Days++)
//{
// printf("%8d", Days);
//}
//printf("\n\n"); */
}
}
return 0;
}


codecopier 2007-04-04
  • 打赏
  • 举报
回复
用 boost datetime 库,只需要15行
www.boost.org
SongYuH 2007-04-04
  • 打赏
  • 举报
回复
非常感谢各位的支持
我只想说一句话:相信我找到家了!
0黄瓜0 2007-04-04
  • 打赏
  • 举报
回复
bool is_leap_year(int year)
{
if((year%4==0 && year%100 !=0 )||(year%400==0))
return true;
else
return false;
}
void print_calendar(int year , int firstweek)
{
int month, days;
int eachmonth[]={ 31,0, 31, 30, 31,30,31, 31, 30, 31, 30, 31};
if(is_leap_year(year))
eachmonth[1]=29;
else
eachmonth[1]=28;

printf("\t\t========%d年日历========\n\n",year);
for( month = 0; month < 12; ++month)
{
printf( "\nThe %d Month\n", month +1);
printf("%8s%8s%8s%8s%8s%8s%8s\n","Sun","Mon","Tue","Wed","Thu","Fri","Sat");
for(int space=0;space<firstweek;++space)
printf("%*s",8," ");
for(days=1;days<=eachmonth[month];++days)
{
printf("%*d",8,days);
int x=(days+firstweek)%7;
if( x==0)
printf("\n");
}
firstweek=(eachmonth[month]+firstweek)%7;
}
}

int main()
{
print_calendar(1996,1);//做成函数后,只需要给出年份和1月1日是星期几,几可以打出全看的日历了
return 0;
}


WizardLucien 2007-04-03
  • 打赏
  • 举报
回复
#include"stdio.h"

int main(void)
{
int year;
int month;
int week;
int day;
int maxdays; /* 每月的最大天数 */
int tmp;

printf("Enter The Year:\n");
scanf("%d",&year); /* 读入年份 */
printf("The %d Year\n",year);
week = (year + (year-1)/4 - (year-1)/100 + (year-1)/400 )%7; /* 计算每年第一天是星期几 */
for( month = 1; month <= 12; month++ )
{
printf("The %d Month\n",month);
printf("%8s%8s%8s%8s%8s%8s%8s\n","Sun","Mon","Tue","Wed","Thu","Fri","Sat");
for( tmp = 0; tmp < week; tmp++ )printf(" "); /* 打印每月开始的空格天数,对齐月历表 */
/* 计算每月的最大天数 */
if( month == 2 )
{
if( year%400==0 || (year%4==0 && year%100!= 0) )maxdays = 29; /* 闰2月 */
else maxdays = 28; /* 2月 */
}
else if( month <= 7 )maxdays = 30 + month%2; /* 上半年 */
else maxdays = 31 - month%2; /* 下半年 */
/* 打印每月月历 */
for( day = 1; day <= maxdays; day++ )
{
printf("%8d",day);
if( week < 6 )week++;
else
{
/* 是星期日了,换行 :) */
week = 0;
printf("\n");
}
}
printf("\n"); /* 换个行 :) */
}
return 0;
}


lrh76543210 2007-04-03
  • 打赏
  • 举报
回复
/* Note:Your choice is C IDE */
#include "stdio.h"
long int f(int year,int month)
{
if(month<3)return year-1;
else
return year;
}
long int g(int month)
{
if(month<3)return month+13;
else
return month+1;
}
long int n(int year,int month,int day)
{
return 1461L*f(year,month)/4+153L*g(month)/5+day;
}
int w(int year,int month,int day)
{
return (int)((n(year,month,day)%7-621049L%7+7)%7);
}
int date[12][6][7];
int day_tbl[][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};

int main()
{
int sw,leap,i,j,k,wd,day;
int year;
char title[]="SUM MON TUE WED THU FRI SAT";

printf("Please input the year whose calendar you want to know: ");
scanf("%d%*c",&year);
sw=w(year,1,1);
leap=year%4==0&&year%100==0||year%400==0;
for(i=0;i<12;i++)
for(j=0;j<6;j++)
for(k=0;k<7;k++)
date[i][j][k]=0;
for(i=0;i<12;i++)
for(wd=0,day=1;day<=day_tbl[leap][i];day++)
{
date[i][wd][sw]=day;
sw=++sw%7;
if(sw==0)
wd++;
}
printf("\n|====================The Calendar of Year %d ======================|\n|",year);
for(i=0;i<6;i++)
{
for(wd=0,k=0;k<7;k++)
wd+=date[i][5][k]+date[i+6][5][k];
wd=wd?6:5;
printf("%2d %s %2d %s |\n|",i+1,title,i+7,title);
for(j=0;j<wd;j++)
{
printf(" ");
for(k=0;k<7;k++)
if(date[i][j][k])
printf("%4d",date[i][j][k]);
else printf(" ");
printf(" ");
for(k=0;k<7;k++)
if(date[i+6][j][k])
printf("%4d",date[i+6][j][k]);
else printf(" ");
printf(" |\n|");
}
}
puts("====================================================================|");
puts("\n Press any key to quit...");
printf("\n");
return 1;
}

大概是这样的
ljbjnh 2007-04-03
  • 打赏
  • 举报
回复
路过 好像很难啊 感觉思路不清晰

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧