标题:一个关于年月的程序
取消只看楼主
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
 问题点数:0 回复次数:9 
一个关于年月的程序

新学C,遇到困难
我编的一个关于年月的问题,可是每次随便输入一对数字输出的都是润年,并且马上WINDOWS会出现出错,找了半天也没找出错误,还请大侠们能帮帮忙
#include <stdio.h>
void main()
{
int year,month,days;
char season,leap;
char spring,summer,autumn,winter; //是不是定义这些字符串的时候出错?
char runnian,pingnian;
printf("input the year(year>0) and month(1<=month<=12):");
scanf("%d%d",&year,&month);
if(year>0)
{if("year/4==0&&y/100!=0||year/400==0")
leap=runnian;
else
leap=pingnian;
}
else
printf("error year input! please reset!");

if(month>=1&&month<=12)
{
if(month>=3&&month<=5)
season=spring;
if(month>=6&&month<=8)
season=summer;
if(month>=9&&month<=11)
season=autumn;
else
season=winter;
}
else
printf("error month input! please reset!"); // 出错
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
case 4:
case 6:
case 9:
case 11:
days=30;
case 2:
if(leap=runnian)
days=29;
else
days=28;
}

if(leap==runnian)
printf("该年是润年\n");
else
printf("该年是平年\n");
printf("季度是:%s\n",season);
printf("这个月的天数是:%d",days);
}

[此贴子已经被作者于2006-10-15 16:41:27编辑过]

搜索更多相关主题的帖子: spring void include autumn summer 
2006-10-15 16:39
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用C语言学习者在2006-10-15 16:43:57的发言:
有没有写错程序

应该没错吧,但是就是运行到一半就出错,不知道什么原因


2006-10-15 16:47
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用卧龙孔明在2006-10-15 16:50:06的发言:
好多错误呀!
其中char spring,summer,autumn,winter;

改为 char *spring="spring",*summer="summer",*autumn="autumn",*winter="winter";

其中char season
改为 char *season;

..还有许多,我就写2个,你好好看看书

呵呵,见笑了啊,刚学了没几天,好多东西都不熟,还请大侠能多指教,让小弟能有进步
这个程序在那些定义的时候我也觉得不对,但不知道怎么改。看看你改的用指针,的确有道理。
如果这个程序还有除了指针方面什么错误的话,还请帮我指出来,谢谢了


2006-10-15 17:05
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用卧龙孔明在2006-10-15 17:09:33的发言:
好,等一下,我发出正确的程序

期待中。。。
先谢谢了!


2006-10-15 17:11
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用卧龙孔明在2006-10-15 17:33:12的发言:

#include <stdio.h>
int main() /*不应该用void,具体请看其它资料*/
{
int year,month,days;
int leap=0; /*1.闰年 0.平年 默认为平年*/
char *season;
printf("input the year(year>0) and month(1<=month<=12):");
scanf("%d%d",&year,&month);
if(year>0)
{if(year/4==0 && year/100!=0 || year/400==0) /*表达式不要放在""内*/
leap=1;
}
else
{ printf("error year input! please reset!"); return; }

if(month>=1 && month<=12)
{
if(month>=3 && month<=5)
season="spring"; /*直接用字符串附值*/
else {if(month>=6 && month<=8)
season="summer"; /*直接用字符串附值*/
else {if(month>=9 && month<=11)
season="autumn"; /*直接用字符串附值*/
else
season="winter"; /*直接用字符串附值*/
} } }
else
{ printf("error month input! please reset!"); return; }
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31; break; /*一定要写break*/
case 4:
case 6:
case 9:
case 11:
days=30; break;
case 2:
if(leap) {
days=29; break;
}
else
days=28;
}

if(leap)
printf("该年是润年\n");
else
printf("该年是平年\n");
printf("季度是:%s\n",season);
printf("这个月的天数是:%d",days);
getch();
return; /*最好加上*/

}


哦,一看不知道,看了吓一跳,谢谢你的指点,还有unicorn 的代码
今天受益匪浅啊!呵呵,我会仔细看的!


2006-10-15 17:40
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用卧龙孔明在2006-10-15 17:42:29的发言:
en,以后要努力呀,祝你早日成功!

一定!谢谢


2006-10-15 17:52
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用编程新贵在2006-10-15 21:34:32的发言:

我编的年月日,楼主参考下,判断星期几的,和你那个差不多

#include<stdio.h>
void main()
{
int y,m,d1,d;
int a[12]={0,3,3,6,1,4,6,2,5,0,3,5};
int b[12]={0,3,4,0,2,5,0,3,6,1,4,6};
printf("请输入年");
scanf("%d",&y);
printf("请输入月");
scanf("%d",&m);
printf("请输入日");
scanf("%d",&d1);

d=y+y/4-y/100+y/400-1;
if((y%4==0)&&(y%100!=0)&&(y%400==0))
d+=b[m-1];
else
d+=a[m-1];

d+=d1;
if(d%7==0)
printf("星期天");
else
printf("星期%d",d%7);
}

恩,不错!比我编的好多了。不过我想问一下 int a[12]={0,3,3,6,1,4,6,2,5,0,3,5};
int b[12]={0,3,4,0,2,5,0,3,6,1,4,6};
是怎么推出来的?我知道上面一个是平年的,下面一个是润年的
这里面是不是用到什么更深的东西?


2006-10-15 21:48
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用编程新贵在2006-10-15 22:00:13的发言:
int a[12]={0,3,3,6,1,4,6,2,5,0,3,5};
int b[12]={0,3,4,0,2,5,0,3,6,1,4,6};

1月的天数31%7=3
2月的天数(28+3)=3
3月的天数(31+3)%7=6
4月的天数(30+6)%7=1
以此类推,闰年和不是闰年的区别就在于2月的天数,这样省略了大断的代码

还有这个算法啊,以前还没听过呢,太经典了!
容我再问一个白痴的问题0是代表什么?是12月吗?我算出来12月应该为1啊
还有算哪天是星期几,是不是要个基础日期,以他为基础算出其他的(通过某天的情况推算其他的),或者这里面还有什么规律,还请赐教!
我刚才也编了个关于星期几的,就是输入今天是星期几,然后再输入一个天数(可为负),推出那天是星期几,这个就用了“今天”这个基础日期

#include "stdio.h"
int main()
{
int n,m;
printf("今天是星期?{0,6}");
scanf("%d",&m);
if(m>=0&&m<=6)
printf("today is xingqi%d\n",m);//输入今天是星期几,以计算N天过后是星期几
else
{printf("error input\n");
return 0;} //当输入超出范围时返回
printf("input the day:\n");
scanf("%d",&n);
if(n>=0)
n=n%7;
else{ //当输入是负数是,则表示几天前
n=-n;
n=n%7;
n=7-n;}
n=n+m;
n=n%7;
switch(n)
{
case 1:
printf("Monday\n");break;
case 2:
printf("Tuesday\n");break;
case 3:
printf("Wednesday\n");break;
case 4:
printf("Thursday\n");break;
case 5:
printf("Friday\n");break;
case 6:
printf("Saturday\n");break;
case 0:
printf("Sunday\n");break;
}
}


2006-10-15 22:15
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用编程新贵在2006-10-15 22:26:25的发言:

如果你输入的是1月,那就不需要加前个月的天数了,所以为0
其实a[12]和b[12]里面的每个元素代表的是 该月应该加上的天数,

哦,这个懂了,谢谢啊!
还有那个基点日期的问题,你是怎么理解的?能告诉我吗?或者还有什么其他规律?


2006-10-15 22:35
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用编程新贵在2006-10-15 22:40:34的发言:
d=y+y/4-y/100+y/400-1
我是从年开始累加的天数,然后是月的天数,最后是日的天数,最后总的天数%7就可以知道星期几了
不需要基点日期

呵呵,知道了啊,我在网上查到了几个这方面的算法,好几个呢
http://www.chinageren.com/jc/HTML/125066.html
非常感谢你的赐教啊,今天收获真是不小,全亏你们呢
呵呵!我要睡觉了,快停电了,以后有机会在一起讨论!


2006-10-15 22:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-96515-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049543 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved