2007-6-19 23:16
hyi_020102
高手帮我看看这个程序~
[i]#include <stdio.h>
int main()
{
puts("welcome to use a perpetual calendar ");
puts("====================================");
puts("| Please select key: |");
puts("| 1. calculating the date |");/*算某年的任何一天是星期几*/
puts("| 2. print the months |");/*打印某年任意一个月的月份*/
puts("| 3. print the years |");/*打印某年的年历*/
puts("| 4. Return or exit |");/*退出或者返回*/
puts("====================================");
SelectKey = getch();
}
while( SelectKey!='1' && SelectKey!='2' && SelectKey!='3' && SelectKey!='4' );
switch(SelectKey)
{
case '1':
clrscr();
int day,mn,yr,i,days=0,s,k;
int mont[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char wek[][9]={ {'S','u','n','d','a','y'},
{'M','o','n','d','a','y'},
{'T','u','e','s','d','a','y'},
{'W','e','d','n','s','d','a','y'},
{'T','h','u','r','s','d','a','y'},
{'F','r','i','d','a','y'},
{'S','a','t','u','r','d','a','y'}
};
printf("Inpute the date (year-month-day):");
scanf("%d-%d-%d",&yr,&mn,&day);
if (yr%4==0||yr%100==0||yr%400==0)
mont[2]=29;
else
mont[2]=28;
for (i=0;i<mn;i++)
days+=mont[i];
days+=day;
s=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+days;
k=s%7;
printf("%d-%d-%d is %s.",yr,mn,day,wek[k]);
}
getch();
break;
case '2':
clrscr();
int JgYr(int yr)
{
if (yr%4==0&&yr%100!=0||yr%100==0&&yr%400==0)
return 1;
else
return 0;
}[/i]
[i]int CalWkd(int yr,int mth)
{
int ds=0,i,rst,wkd;
int mthd[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if (JgYr(yr))
mthd[2]=29;
for (i=1;i<mth;i++)
ds+=mthd[i];
ds+=1;
rst=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+ds;
wkd=rst%7;
return wkd;
}[/i]
[i]showcld(int wkd,int mtd)
{
int dt=1,i,j=0;
printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
for (i=0;i<wkd;i++)
{
printf("\t");
j++;
}
while (j!=7)
{
printf("%d",dt);
if (j<6)
printf("\t");
else
printf("\n");
dt++;
j++;
}
while (1)
{
for (j=0;j<7;j++)
{
printf("%d",dt);
if (j!=6)
printf("\t");
else
printf("\n");
if (dt!=mtd)
dt++;
else
return 0;
}
}
}[/i]
[i]int main()
{
int yr,mth,mtd,wkd,mthd[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("Input the Year and Month(Year-Month):");
scanf("%d-%d",&yr,&mth);
if (yr<0||mth<1||mth>12)
return 0;
if (JgYr(yr))
mthd[2]=29;
mtd=mthd[mth];
wkd=CalWkd(yr,mth);
showcld(wkd,mtd);
return 0;
}[/i]
[i] case '3':
clrscr();
#include "stdio.h"
#include "string.h"
int main()
{
int i,s,w,year,month,day,days=0;
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char *wek[7]={"sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"};
printf("input the date (year-month-day):\n ");
scanf("%d %d %d",&year,&month,&day);
if ((year%4==0)&&(year%100!=0)||(year%400==0))
mon[2]=29;
for (i=0;i<month;i++)
days=days+mon[i];
days=days+day;
w=year-1+(int)((year-1)/4)-(int)((year-1)/100)+(int)((year-1)/400)+days;
s=w%7;
printf("%d-%d-%d is %s\n",year,month,day,wek[s]);
return 0;
}
#include<conio.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}};
void main()
{int sw,leap,i,j,k,wd,day,year;
char title[]=" SUN MON TUE WED THU FRI SAT";
printf("You want to know the year:");
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");
printf("\n=================================%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("Please put any key");
getch();
}
case '4':
clrscr();
puts("================================");
puts("| Thank you for your using! |");
puts("| Good bye! |");
puts("================================");
getch();
return;
}
}
}
[/i][i][i][i][i][i][i][i][i][i]
[color=blue]
这个是我用TC编的万年历。可是有很多错误。老师的要求是:
内容:设计一个查询并打印万年历的程序。
[/color]要求:
1. 查询某年某月某日是星期几
2. 打印某年的某月的全月日历
3. 打印某年的全年日历
4. 退出
2. 在主菜单中输入1后,显示:
“请输入年月日(XXXX,XX,XX)”
运行后输出:XXXX年XX月XX日是星期X,是否继续查询(Y/N)?
如果输入Y,则重新显示 “请输入年月日(XXXX,XX,XX)”,否则回到主菜单。
3. 在主菜单中输入2后,显示:
“请输入要打印的月份(XXXX)”
运行后输出X月的日历,格式为:
X
4. 在主菜单中输入3后,显示:
“请输入要打印的年份(XXXX)”
运行后输出XXXX年的日历,
XXXX
X(月数)
0 1 2 3 4 5 6
S M T W T F S
x x x x x x x
x x x xx xx xx xx
xx xx xx xx xx xx xx
xx xx xx xx xx xx xx
xx xx xx
X(月数)
0 1 2 3 4 5 6
S M T W T F S
x x x x
x x x xx xx xx xx
xx xx xx xx xx xx xx
xx xx xx xx xx xx xx
xx xx xx xx xx
.
运行完后显示:“是否继续打印(Y/N)?”
如果输入Y,则重新显示,“请输入要打印的年份(XXXX)”,否则回到主菜单。
5. 在主菜单中输入4后,显示:“是否要真的退出(Y/N)?”
如果输入Y,结束程序运行,否则重新显示主菜单。
[color=red]不知道出错在哪里?哪位帮忙修改下~~万分感谢~[/color][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
[color=red][i]下面这个[/i]附件是万年历的三个子程序,我想把他结合在一起,可是出错了~[/color]
[[i] 本帖最后由 hyi_020102 于 2007-6-19 23:24 编辑 [/i]]
2007-6-20 03:04
oraix
终于憋出来不少代码了,呵呵,恭喜!
编程是需要思想和耐心的, debug是最锻炼你的时候, 这是一种修炼.
当初我学编程的时候,没有电脑所有东西都要人工去静态模拟执行, 上机的时间基本就是修改输入错误和编译执行. 但这反而养成了一种良好的做事风格.
计算星期的公式已经弄到了,其实已经成功了一半. 剩下的就是计算如何输出, 可以生成一个矩阵/数组把所有的日子都排好, 或者用一个专用格式化输出函数,每次计算一个日期就马上输出到指定位置.
另外一年52个星期左右, 而字符下缺省屏幕是80*25的,估计你打不下, 除非重新设置屏幕显示模式,至少TC下面你需要这么做.
另外LZ的编程还需要养成好的习惯. 该有注释的地方没注释, 写注释的地方反而是没有必要做注释的(因为语句本身已经很明了了)
缩进需要更规范一些, 变量的命名也需要更有意义一些,更规范些.
C语言基础也应该补补,至少一个程序里面不会有两个main()
把这些都修炼好了,你就能开始体会创造一个东西的快乐了.
有点好为人师了, 呵呵, 不中听的地方, 就当没看到.
good luck
2007-6-20 17:41
hyi_020102
恩。谢谢LZ 哦,我会继续努力的~
2007-6-20 18:46
hyi_020102
#include <stdio.h>
#include <string.h>
#include<conio.h>
void main()
{ int num;
puts("welcome to use a perpetual calendar ");
puts("====================================");
puts("| Please select key: |");
puts("| 1. calculating the date |");/*算某年的任何一天是星期几*/
puts("| 2. print the months |");/*打印某年任意一个月的月份*/
puts("| 3. print the years |");/*打印某年的年历*/
puts("| 4. Return or exit |");/*退出或者返回*/
puts("====================================");
scanf("%d",&num);
clrscr();
switch(num)
{
case 1:{ int day,mn,yr,i,days=0,s,k;
int mont[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char wek[][9]={ {'S','u','n','d','a','y'},
{'M','o','n','d','a','y'},
{'T','u','e','s','d','a','y'},
{'W','e','d','n','s','d','a','y'},
{'T','h','u','r','s','d','a','y'},
{'F','r','i','d','a','y'},
{'S','a','t','u','r','d','a','y'}
};
printf("Inpute the date (year-month-day):");
scanf("%d-%d-%d",&yr,&mn,&day);
if (yr%4==0||yr%100==0||yr%400==0)
mont[2]=29;
else
mont[2]=28;
for (i=0;i<mn;i++)
days+=mont[i];
days+=day;
s=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+days;
k=s%7;
printf("%d-%d-%d is %s.",yr,mn,day,wek[k]);
break;
}
case 2:{
int months()
{
int yr,mth,mtd,wkd,mthd[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("Input the Year and Month(Year-Month):");
scanf("%d-%d",&yr,&mth);
if (yr<0||mth<1||mth>12)
return 0;
if (JgYr(yr))
mthd[2]=29;
mtd=mthd[mth];
wkd=CalWkd(yr,mth);
showcld(wkd,mtd);
return 0;
};
int JgYr(int yr)
{
if (yr%4==0&&yr%100!=0||yr%100==0&&yr%400==0)
return 1;
else
return 0;
}
int CalWkd(int yr,int mth)
{
int ds=0,k,rst,wkd;
int mthd[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if (JgYr(yr))
mthd[2]=29;
for (j=1;k<mth;k++)
ds+=mthd[i];
ds+=1;
rst=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+ds;
wkd=rst%7;
return wkd;
}
showcld(int wkd,int mtd)
{
int dt=1,k,j=0;
printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
for (i=0;i<wkd;k++)
{
printf("\t");
j++;
}
while (j!=7)
{
printf("%d",dt);
if (j<6)
printf("\t");
else
printf("\n");
dt++;
j++;
}
while (1)
{
for (j=0;j<7;j++)
{
printf("%d",dt);
if (j!=6)
printf("\t");
else
printf("\n");
if (dt!=mtd)
dt++;
else
return 0;
}
}
}
}
case 3:{
int b,s,w,year,month,day,days=0;
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char *wek[7]={"sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"};
printf("input the date (year-month-day):\n ");
scanf("%d %d %d",&year,&month,&day);
if ((year%4==0)&&(year%100!=0)||(year%400==0))
mon[2]=29;
for (b=0;b<month;b++)
days=days+mon[f];
days=days+day;
w=year-1+(int)((year-1)/4)-(int)((year-1)/100)+(int)((year-1)/400)+days;
s=w%7;
printf("%d-%d-%d is %s\n",year,month,day,wek[s]);
return 0;
}
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 years()
{int sw,leap,e,w,q,wd,day,year;
char title[]=" SUN MON TUE WED THU FRI SAT";
printf("You want to know the year:");
scanf("%d%*c",&year);
sw=w(year,1,1);
leap=year%4==0&&year%100!=0||year%400==0;
for(e=0;e<12;e++)
for(w=0;w<6;w++)
for(q=0;q<7;q++)
date[e][w][q]=0;
for(e=0;e<12;e++)
for(wd=0,day=1;day<=day_tbl[leap][e];day++)
{date[e][wd][sw]=day;
sw=++sw%7;
if(sw==0)wd++;
}
printf("============================================================\n");
printf("\n=================================%d=========================\n",year);
for(e=0;e<6;e++)
{for(wd=0,q=0;q<7;q++)
wd+=date[i][5][k]+date[e+6][5][q];
wd=wd?6:5;
printf("%2d %s %2d %s \n",e+1,title,e+7,title);
for(w=0;w<wd;w++)
{printf(" ");
for(q=0;q<7;q++)
if(date[e][w][q])
printf("%4d",date[e][w][q]);
else printf(" ");
printf(" ");
for(q=0;q<7;q++)
if(date[e+6][w][q])
printf("%4d",date[e+6][w][q]);
else printf(" ");
printf("\n");
}
}
puts("================================================================");
puts("Please put any key");
getch();
}
case 4:{
clrscr();
puts("================================");
puts("| Thank you for your using! |");
puts("| Good bye! |");
puts("================================");
return;
}
}
}
我重新编译下,还是有点错误,尤其是CASE2和case3这两个。我觉得应该没有错的,真不知道错在哪里啊?
2007-7-14 15:22
ardi
格式太乱,根本不想别人帮你解决问题
页:
[1]
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.