神武109宠物属性:程序中的一部分;为什么是那样?

来源:百度文库 编辑:高校问答 时间:2024/04/27 20:14:49
main()
{
enum weekday{sunday,monday,tuesday,wednesday,thursday,friday,saturday}today
,firstday;
int i,j,m,day,t;
static int days[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
firstday=(enum weekday)4;
do
{
j=0;
printf("输入日期(月,日):");
scanf("%d%d",&m,&day);
if((m<1)||(m>12)||(day<1)||(day>31)||(m==2)&&(day>29)||((m==4)||(m==6)||
(m==9)||(m==11))&&(day>30))
{
printf("输入错误,请重新输入:\n");
j=1;
}
}
while(j==1);
t=0;
for(i=1;i<m;i++)
t=t+days[i];
t=t+day;
t=(t+(int)firstday-1)%7;
today=(enum weekday)t;
printf("2004年%d月%d日是",m,day);
switch(today)
{
case sunday:printf("星期日\n");break;
case monday:printf("星期一\n");break;
case tuesday:printf("星期二\n");break;
case wednesday:printf("星期三\n");break;
case thursday:printf("星期四\n");break;
case friday:printf("星期五\n");break;
case saturday:printf("星期六\n");break;
}
}

其中这部分 while(j==1);
t=0;
for(i=1;i<m;i++)
t=t+days[i];
t=t+day;
t=(t+(int)firstday-1)%7;
today=(enum weekday)t;
printf("2004年%d月%d日是",m,day);
为什么是这样的;和
do
{
j=0;
printf("输入日期(月,日):");
j为什么是j=0和后面的j=1呢

是这样的。这个程序写得有点格式不好,没有按缩进格式写。while(j==1)产前边的循环条件,目的是未输入满足条件的日期时不能通过。
for(i=1;i<m;i++)
t=t+days[i];
算到本月前一月止的天数。t=t+day; 再加上今天日期,这就是从新年开始到这一天的总天数。
t=(t+(int)firstday-1)%7; 加是年初那天的修正,2004年元旦那天是星期四。并算出到今天是星期几(即余几天)
today=(enum weekday)t;强制转换为枚举型星期。如
然后用switch语句来判断是输出哪些汉字。
j=0,是控制循环的,如果没有后面的错误,就不会有j==1,就会退出循环,

太复杂了....我刚准备学c++ 到时候看能不能帮到你吧.. 通常你是怎样练习自己逻辑思维的呢?

初始值