写一个函数days:计算该日在本年中是第几天?由主函数将年月日传递给函数,计算后将日子输出传回主函数输出

luckyyulin 2010-11-01 01:40:10
下面的程序是我写的,但是有错误,就是void days(int judge.year,int judge.month,int judge.day)/*这句有错误,结构体成员作形参怎样初始化啊?*/
大家帮我看看还有什么地方错了,谢谢。

struct student{int year,month,day;}judge;
/*计算日期位于该年的第几天*/
void days(int judge.year,int judge.month,int judge.day)
{
int i,num=0;
int monthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(judge.year%4==0)
{
for(i=1;i<judge.month;i++)
{
if(judge.month>2)
{
num++;
}
num+=monthday[i];
}
num+=judge.day;
}
else
{
for(i=1;i<judge.month;i++)
num+=monthday[i];
num+=judge.day;
}
printf("NO:%d",num);
}

main()
{
int a,b,c;
printf("请输入日期:");
scanf("%d %d %d",&a,&b,&c);
days(a,b,c);
}
...全文
2004 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lilu2010 2011-12-14
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

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

int isLeapyear(Date d)
{
if((d.year%400==0) || (d.year%100!=0) && (d.year%4==0))
return 1;
else
return 0;
}

int monthDay(Date d)
{
switch(d.month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: return 31;
case 2:
if(isLeapyear(d))
return 29;
else
return 28;
case 4:
case 6:
case 9:
case 11: return 30;
default: return 0;
}
}

int timeDay(Date d)
{
int td = 0;
Date temp = d;
for(int i = 1; i < d.month; i++)
{
temp.month = i;
td += monthDay(temp);
}
td += temp.day;
return td;
}

void main()
{
Date date;
cout << "请输入年:";
cin >> date.year;
cout << "请输入月:";
cin >> date.month;
cout << "请输入日:";
cin >> date.day;
cout << "该日在本年中是第" << timeDay(date) << "天" << endl;
}
某位唐先生 2011-05-20
  • 打赏
  • 举报
回复
6楼在c++输出无结果啊
chinesebear 2010-11-01
  • 打赏
  • 举报
回复
#include<stdio.h>
int days(int,int,int);

main()
{
int year=0 ,month,day;
int d;
printf("输入年月日并用空格隔开:");
scanf("%d%d%d" ,&year ,&month, &day);
printf("此日期是当年的第%d天\n" , days(year,month,day));
return 0;
}

int days(int y,int m,int d)
{
//printf("%d%d%d", y,m,d);
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
int day_num=0,day_m = 0;/*记住一定要给累加的变量初始化,否则出现很大的数*/
/*按平年计算天数*/
for(i=0;i < m; i++)
day_m += month[i];
day_num = day_m + d;
/*判断是否是闰年*/
if((y%4==0 && y%100 !=0) || y%400==0)
day_num += 1;
return day_num;
}

程序楼组慢慢看!
sinba6628j 2010-11-01
  • 打赏
  • 举报
回复

判断润年
int LeapYear(int y)
{
if(y%100){
// y%100 != 0
if(y%4)return 0; //y%4 !=0 normal year
return 1; //leapyear
}else{
if(y%400)return 0; //y%400 !=0 normal year
if(y<172800)return 1; //leapyear
if(y%3200)return 0;// y%3200 !=0 normal year
if(y%172800)return 0; //y%172800 normal year
return 1; //leapyear
}
}

sinba6628j 2010-11-01
  • 打赏
  • 举报
回复
你可以这样改

int days(struct judge Judg)/*
{

...
int leap= !((Judg.year % 400) && ((Judg.year%4) || !(Judg.year%100))); 不超过3199年
if(leap){
...

}else{
...
}
}
無_1024 2010-11-01
  • 打赏
  • 举报
回复

#include <stdio.h>

struct student{int year,month,day;}judge;
/*计算日期位于该年的第几天*/
void days(int year,int month,int day)
{
int i,num=0;
int monthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
{
for(i=1;i<month;i++)
{
if(i == 2)
{
num++;
}
num+=monthday[i];
}
num+=day;
}
else
{
for(i=1;i<month;i++)
num+=monthday[i];
num+=day;
}
printf("NO:%d\n",num);
}

int main()
{
printf("请输入日期:");
scanf("%d %d %d",&judge.year,&judge.month,&judge.day);
days(judge.year,judge.month,judge.day);
return 0;
}


有点变化啊
walkersfaint 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hnuqinhuan 的回复:]
闰年的偶判断都有错啊
[/Quote]
+1,确实有错
walkersfaint 2010-11-01
  • 打赏
  • 举报
回复
void days(int judge.year,int judge.month,int judge.day)
这个直接定义为
void days(int year,int month,int day)
就可以了,你下面传参数就成了.
無_1024 2010-11-01
  • 打赏
  • 举报
回复
闰年的偶判断都有错啊
漫步者、 2010-11-01
  • 打赏
  • 举报
回复

void days(int judge.year,int judge.month,int judge.day)
//首先不说别的,你这参数不是已经在结构体中定义了类型么,你这样做是啥子意思,你干嘛舍不得利用其它的变量,再将变量的值赋值给结构体的参数,这样做多好。
有时候一种方法行不通,你可以换个思维,这样解决问题就很快!
赵4老师 2010-11-01
  • 打赏
  • 举报
回复
COleDateTime
COleDateTimeSpan

69,382

社区成员

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

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