| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1429 人关注过本帖
标题:关于天数的程序,有一个问题,请大家帮忙看一下
只看楼主 加入收藏
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
 问题点数:0 回复次数:9 
关于天数的程序,有一个问题,请大家帮忙看一下

这是我做的求天数的一个程序,有一问题就是如果是润年的话,输入2月29的话,此程序也会认为是错误的日期,请大家帮忙改一下,谢谢.

#include <stdio.h> int num[12]={31,30,28,30,31,30,31,31,30,31,30,31}; struct date { int year,month,day; }; int sum(int year,int month,int day); void main() { int i; struct date stu; do { printf("请输入日期(年,月,日):\n"); scanf("%d,%d,%d",&stu.year,&stu.month,&stu.day); if(stu.day>num[stu.month-1]||stu.month>12) printf("无效日期,请重新输入!\n");

}while(stu.day>num[stu.month-1]||stu.month>12);

printf("今天是第%d天!",sum(stu.year,stu.month,stu.day)); }

int sum(int year,int month,int day) { static int i,total; for(i=0;i<month-1;i++) total+=num[i]; total+=day;

if((year%400==0||(year%100&&year%4==0))&&month>2) total++;

return total; }

搜索更多相关主题的帖子: stu 天数 int month 
2004-07-13 19:06
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 
没有人愿意帮忙看一下吗?

学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2004-07-16 20:15
mingyue
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2004-5-13
收藏
得分:0 

你在主函数的do{}里加上 if(year%400==0||(year%100&&year%4==0)) {......} else {......} 把润年和平年分开来处理


2004-07-17 16:40
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 
那不是润年又要定义一个数组为每月存放月份的天数啊.具体一点把代码写在下面行吗?

学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2004-07-17 20:26
mingyue
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2004-5-13
收藏
得分:0 

#include <stdio.h> int num[12]={31,28,301,30,31,30,31,31,30,31,30,31}; /*注意月份的天数*/ struct date { int year,month,day; }; int sum(int month,int day); void main() { int i; struct date stu;

do { printf("请输入日期(年,月,日):\n"); scanf("%d,%d,%d",&stu.year,&stu.month,&stu.day);

if(stu.year%400==0||(stu.year%100&&stu.year%4==0)) /*润年和平年分开来处理*/ num[1]=29; else num[1]=28;

if(stu.day>num[stu.month-1]||stu.month>12) printf("无效日期,请重新输入!\n");

}while(stu.day>num[stu.month-1]||stu.month>12);

printf("今天是第%d天!",sum(stu.month,stu.day)); getch(); }

int sum(int month,int day) /*上面已判断了润年,这里可以不要 int year这个参数*/ { static int i,total; for(i=0;i<month-1;i++) total+=num[i]; total+=day;

return total; }


2004-07-18 00:09
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

你也许误会他的意思了,他是说让程序判断输入的年份是否闰年,是,则2月的天数变为29天;否则2月变为28天。为了直观的表达3楼的意思,我采用函数的方法。以下是我帮你修改的代码

#include <stdio.h> int check(int year) { int sing; if((year%4==0 && year%100!=0) || (year%400==0)) sing=1; else sing=0; return(sing); } int num[12]={31,28,31,30,31,30,31,31,30,31,30,31}; struct date { int year,month,day; }; int sum(int year,int month,int day); void main() { int i; struct date stu;

do { printf("请输入:年,月,日:\n"); scanf("%d,%d,%d",&stu.year,&stu.month,&stu.day); if(check(stu.year)==1) num[1]=29; else num[1]=28; if((stu.day>num[stu.month-1])||(stu.month>12)||(stu.month<=0)||(stu.day<=0)) printf("错误的日期,请重新输入!\n");

}while((stu.day>num[stu.month-1])||(stu.month>12)||(stu.month<=0)||(stu.day<=0));

printf("Today is the %d day!",sum(stu.year,stu.month,stu.day)); }

int sum(int year,int month,int day) { static int i,total;

for(i=0;i<month-1;i++) total+=num[i]; total+=day;

if((year%400==0||(year%100&&year%4==0))&&month>2) total++;

return total; }



注解:check()函数正是我为了检测是否闰年而加入的,虽然我看到你后面的代码也具备有检测闰年的功能,但是为了简洁,我还是自己写吧~ 工作原理:当输入的年份为闰年:NUM[1]=29 否则NUM[2]=28这样就结了~

注意:①首先要更正你一点的是你的手误: 2月份最多只有29天,不会有30天,所以 int num[12]={31,30,28,30,31,30,31,31,30,31,30,31}; 更正为 int num[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 但是这个数据更正不更正对这个程序来说根本就没关系,如果你喜欢也可以把他该为999,我只是想告诉你个常识性的问题而已。 ②然后是你的检查输入天数的错误,你限制了输入月份、天数的最大值,这个很好,但是你也要注意下最小值的设置呀!-_-! 我帮你改过来了。

[此贴子已经被作者于2004-07-19 23:36:50编辑过]


淘宝杜琨
2004-07-18 00:14
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
5楼的,比我早5分钟呵

淘宝杜琨
2004-07-18 00:16
我想要飞
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2004-6-15
收藏
得分:0 

main()

{int year,month,day,x;

static int a[2][13]={0,31,29,31,30,31,30,31,31,30,31,30,31,

0,31,28,31,30,31,30,31,31,30,31,30,31};

clrscr();

scanf("%d %d %d",&year,&month,&day);

whlie(month>13||day>31)

{prnitf("错误,请重新输入",);

scanf("%d %d %d",&year,&month,&day);}

x=add(year,month,day,a);

printf("%d",x);

}

int add(y,m,d,b)

int y,m,d,b[2][13];

{int i,j;

if((y%4==0&&&&y%100!=0)||y%400==0)

{for(i=1;i<2;i++)

for(j=0;j<m;j++)

d+=b[i][j];

}

else

{for(i=0;i<1;i++)

for(j=0;j<m;j++)

d+=b[i][j];

}

return(d);

}

这是输出天数的,


个人宣言;黑暗的腹地,我睁开双眼, 世界哑口无言。。。
2004-07-19 23:17
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

static int a[2][13]={0,31,29,31,30,31,30,31,31,30,31,30,31,

0,31,28,31,30,31,30,31,31,30,31,30,31};

占内存!


淘宝杜琨
2004-07-19 23:46
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 
呵呵,楼上这么一点,我全明白了,不过相信楼上也受到了一点启发吧.大家一起努力,我的C学的不好,老师讲的太快,现在都讲VB了,晕,连C的算法都不讲给我们听,信他的邪!

学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2004-07-22 21:34
快速回复:关于天数的程序,有一个问题,请大家帮忙看一下
数据加载中...
 
   



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

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