急!急!急!!!!c语言:定义一个表示日期(年,月,日)的结构,输入一个日期,计算并输出该日是本年的第几天!

CM110119 2010-03-10 07:28:20
大家帮帮忙,学c半年了,怎么一点感觉思路都没有,根本不知道从那里下手!给个程序,把注释也写最好!有经验的让俺分享一下你的成果!没有那多分。只能给这些了!谢谢
...全文
6307 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyoubaidu 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 keiy 的回复:]
ansi的C标准中就有时间的结构
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
在time.h中,且有一套标准函数:
char * asctime(const……
[/Quote]
up
abc881858 2010-04-01
  • 打赏
  • 举报
回复

//题: 定义一个Date结构体数据类型(年、月、日),计算该日在本年中是第几天
#include <iostream.h>
struct Date
{
int yy,mm,dd;
};

void input(Date *p)
{
cout<<"请输入年、月、日:\n";
cin>>p->yy>>p->mm>>p->dd;
}

int countday(Date &s)
{
int t=0,month[]={1,31,28,31,30,31,30,31,31,30,31,30,31};

for (int i=!(s.yy%400==0
|| (s.yy%100!=0 && s.yy%4==0) && s.mm>2); i<s.mm; ++i)
t+=month[i];
return t+s.dd;
}

void main()
{
Date d;
int dayth;
input(&d);
dayth=countday(d);
cout<<"本年中的第"<<dayth<<"天!"<<endl;
}
bobo364 2010-03-11
  • 打赏
  • 举报
回复
#include <stdio.h>

struct date
{
int year;
int month;
int day;
};

int leap_year(int a);
int cal_day(struct date a);

/*判断闰年*/
int leap_year(int a)
{
if(a%400==0||(a%4==0&&a%100!=0))
{
return 1;
}
else
{
return 0;
}

// if(a%400==0)
// return 1;
// else if(a%100==0)
// return 0;
// else if(a%4==0)
// return 1;
// else
// return 0;
}

/*计算一年中的第几天*/
int cal_day(struct date a)
{
int i;
int sum=0;
int b[]={31,28,31,30,31,30,31,31,30,31,30,31} ;
for(i=0;i<a.month-1;i++)
{
sum+=b[i];
}
if(a.month>2)
{
sum=sum+a.day+leap_year(a.year);
}
else
{
sum=sum+a.day;
}

return sum;
}

int main()
{
struct date a;
int n;
printf("\n请输入日期(年 月 日)\n");
scanf("%d%d%d",&a.year,&a.month,&a.day);
n=cal_day(a);
printf("该日在本年中是第%d天\n",n);
return 0;
}


好了,经过c free编译通过的代码?结果也是正常的
huanmie_09 2010-03-11
  • 打赏
  • 举报
回复
引用 12 楼 cm110119 的回复:
可能我太笨了,我就9楼的,看的有些思路!不过还是谢谢大家!分数少,大家见谅!

struct tm是c语言头文件time.h中定义的一个结构体,楼主可以在网上搜索一下,
http://www.blogjava.net/lantin/articles/177127.html
bobo364 2010-03-11
  • 打赏
  • 举报
回复
#include <stdio.h>

struct date
{
int year;
int month;
int day;
};

int leap_year(int a);
int cal_day(struct date a);

/*判断闰年*/
int leap_year(int a)
{
if(a%400==0||(a%4==0&&a%100!=0))
return 1;
else
return 0;

// if(a%400==0)
// return 1;
// else if(a%100==0)
// return 0;
// else if(a%4==0)
// return 1;
// else
// return 0;
}

/*计算一年中的第几天*/
int cal_day(struct date a)
{
int sum=0,b[]={31,28,31,30,31,30,31,31,30,31,30,31} ;
for(int i=0;i<a.month-1;i++)
sum+=b[i];
if(a.month>2)
sum=sum+a.day+leap_year(a.year);
else
sum=sum+a.day;
return sum;
}

void main()
{
struct date a;
int n;
printf("\n请输入日期(年 月 日)\n");
scanf("%d%d%d",&a.year,&a.month,&a.day);
n=cal_day(a);
printf("该日在本年中是第%d天\n",n);
}


应该可以,也是从别的博客上转的
xiangweixing 2010-03-11
  • 打赏
  • 举报
回复
最后少一句
days += date;
xiangweixing 2010-03-11
  • 打赏
  • 举报
回复
default里面加个break
xiangweixing 2010-03-11
  • 打赏
  • 举报
回复

int year;/*年*/
int month;/*月*/
int date;/*日*/
int days = 0;/*该年的第几天*/
switch (month)
{
case 12:
days += 30;
case 11:
days += 31;
case 10:
days += 30;
case 9:
days += 31;
case 8:
days += 31;
case 7:
days += 30;
case 6:
days += 31;
case 5:
days += 30;
case 4:
days += 31;
case 3:
{
if (0 == year % 4)
{
days += 29;
}
else
{
days += 28;
}
}
case 2:
days += 31;
default:
days += 0;
}
CM110119 2010-03-11
  • 打赏
  • 举报
回复
可能我太笨了,我就9楼的,看的有些思路!不过还是谢谢大家!分数少,大家见谅!
某某9 2010-03-11
  • 打赏
  • 举报
回复

//[Quote=引用 9 楼 huanmie_09 的回复:]
#include<stdio.h>struct date {int year;int month;int day;
};int is_leap_year(int year)
{return year%4==0&& year%100!=0|| year%400==0;
}int day_of_year(struct date*d)
{staticint data[2][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 i, j;int result= d->day;
j= is_leap_year(d->year);for (i=0; i< d->month-1;++i) {
result+= data[j][i];


}return result;
}int main()
{struct date d;
d.year=2010;
d.month=3;
d.day=10;
printf("%d年%d月%d日是该年中的第%d天.\n", d.year, d.month, d.day, day_of_year(&d));return0;
}

帮顶
cq_gongyoulong 2010-03-11
  • 打赏
  • 举报
回复
引用 9 楼 huanmie_09 的回复:
C/C++ code
#include<stdio.h>struct date {int year;int month;int day;
};int is_leap_year(int year)
{return year%4==0&& year%100!=0|| year%400==0;
}int day_of_year(struct date*d)
{staticint data[2][12]=?-



LS太牛了~
CM110119 2010-03-11
  • 打赏
  • 举报
回复
25 ,26 ,谢谢你们 呵呵 类我还没有学过 我会看看的
heguo2chao3 2010-03-11
  • 打赏
  • 举报
回复

typedef struct Time
{
int year,month,day;
}Time;

//计算某年是否为闰年
bool IsLeapYear(int year)
{
return year%(year%100?400:4)?1:0;
}
int ComputePassHour(const Time & t1, const Time & t2)
{
int tdays1 = 0;//记录从t1那年的1月1号到t1时刻经过的天数
int i = 1;

int table[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
for(i =1; i<t1.month;i++)
{
tdays1+= table[i];
if(i == 2 && IsLeapYear(t1.year))
tdays1++;
}

tdays1+=t1.day-1;

int tdays2 = 0;//记录从t1那年的1月1号到t2时刻经过的天数

for(i = t1.year; i<t2.year;i++)
{
if(IsLeapYear(i))
tdays2 += 366;
else
tdays2 += 365;
}
for(i = 1; i<t2.month;i++)
{
tdays2+= table[i];
if(i == 2 && IsLeapYear(t2.year))
tdays2++;
}
tdays2 += t2.day-1;

return tdays2-tdays1;//返回t1到t2经过的天数
}


}


这是我最近自己写的一个类中的一部分内容,希望对你有用!
huanmie_09 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 cm110119 的回复:]
回帖21楼,呵呵,我正努力写!可是总有错误!
[/Quote]
加油!
天赋是一方面,更关键的还是要努力一点。
CM110119 2010-03-11
  • 打赏
  • 举报
回复
回帖21楼,呵呵,我正努力写!可是总有错误!
tan870426 2010-03-11
  • 打赏
  • 举报
回复
飞雪的方法就很不错!
CM110119 2010-03-11
  • 打赏
  • 举报
回复
谢谢,谢谢大家的热心帮助。17楼的谢谢你的解释th!说真的没有想到这多的人回帖,呵呵,大家对我的帮助万分感谢!
vanchristin 2010-03-11
  • 打赏
  • 举报
回复
这个不太难吧,楼主自己试着写写先
赵4老师 2010-03-11
  • 打赏
  • 举报
回复
yyyy年mm月dd日对应本年第几(1~365或闰年时366)天=
mm为1时:dd
mm大于1时:从1到mm-1月的总天数+dd,注意平年2月28天,闰年2月29天
赵4老师 2010-03-11
  • 打赏
  • 举报
回复
bc++3.1 帮助里面对每个函数都有一小段能拷贝出来运行看效果的例子程序。非常适合初学C语言。相比较而言MSDN就没有。
加载更多回复(9)

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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