用C语言写一个函数,给出年月日,计算该日是该年的第几天

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言写一个函数,给出年月日,计算该日是该年的第几天相关的知识,希望对你有一定的参考价值。

#include <stdio.h>

int main()

int year,month,day;//年月日
int judge,i;
int sum=0;//标记天数
int date[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;//储存闰年和非闰年每一月的天数
printf("输入年月日:");
scanf("%d %d %d",&year,&month,&day);

judge=(year%4==0)||(year%400==0 && year%100!=0);
//判断年份是不是闰年 是闰年judge就是1;否则就是0

for(i=0;i<month-1;i++)//加month之前的所有天数
sum+=date[judge][i];
sum+=day;//加当天月份的天数day

printf("它是%d年中的第%d天\n",year,sum);
return 0;
参考技术A //说明:你的程序存在几个语法错误,1、find(x,y,z)应改成find(int x,int y,int z)函数的定义语法;2、//int find(x,y,z);此处声明多余了,因为函数是在前面定义的,就无需再声明了,而且声明语法不对,应为find(int x,int y,int z);要加分号。3、格式控制符号用错了,应该是没有“,”的scanf("%d%d%d",&year,&month,&date);即在%d%d之间没有逗号;//另外我也编了一个仅供参考,编译成功的,在后面。
//此为我对你的代码的改正,都做了注释说明。
#include
int x,y,z;
int find(int x,int y,int z)//find(x,y,z)应改成find(int x,int y,int z)
int i,t,s,days=0;
if(x%4==0)t=1;
else t=0;
for(i=1;i<y;i++)
if(i==2)s=2-t;
else s=0;
days=days+30+i%2-s;

days=days+z;
return(days);


void main()
//int find(x,y,z);此处声明多余了,因为函数是在前面定义的,就无需再声明了
int year,month,date,day;
scanf("%d%d%d",&year,&month,&date);//格式控制符号用错了,应该是没有“,”的
day=find(year,month,date);
printf("THE DATE IS THE %dth DAYS\n",day);

//另外我也编了一个仅供参考,编译成功的
#include
void main()

int year,month,day,sum;
scanf("%d%d%d",&year,&month,&day);
int p(int year);
int monday(int m);
int find(int y,int m,int d);
sum=find(year,month,day);
printf("THE DATE IS THE %dth DAYS\n",sum);


int p(int year)//判断是否为闰年
int leap;
if((year%4==0&&year%100!=0)||(year%400==0)) leap=1;
else leap=0;
return leap;

int mon_day(int y,int m)//判断月份的日子总数
int num;
switch (m)
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:num=31;break;
case 4:
case 6:
case 9:
case 11:num=30;break;
case 2:if (y&&(m=2)) num=29;
else num=28;
break;

return num;


int find(int y,int m,int d)//计算日子,用遍历的方法,因为每个月份的天数是不同的,闰年时2月天数也不同
int sum=d;
while (m>1)
m=m-1;
sum=sum+mon_day(y,m);
return sum;
参考技术B #include <stdio.h>
#include <stdlib.h>
#include <math.h>
int date(int year,int month,int day)

int i,sum=day;
int a[13]=0,31,28,31,30,31,30,31,31,30,31,30,31;
for(i=0;i<month;i++)
sum=sum+a[i];
if(month>2&&((year%4==0&&year%100!=0)||year%400==0))
sum=sum+1;
return(sum);

int main()

int year,month,day,n;
scanf("%d %d %d",&year,&month,&day);
n=date(year,month,day);
printf("%d",n);
return 0;
参考技术C 请出门左转c语言吧(个人见解,可以先判断该年是否闰月,再计算第几天)

编程:要求输入某一年月日,判断其为该年的第几天?

要考虑输入日期的有效性,如2月31日显然不对...

参考技术A 晕!~C到C++,轻微改一下不就得了,C++的补在C的后下面了
很简单,用C写的,可以用
数组
,我没用,
代码
也可以更简单,不过这样便于你理解,我没有调试,你看一下有没有错误
main
()
int
year,moon=13,week=0,day=32,c=0,
m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12;
while(moon>12
||
moon<1
||
day>31
||
day<1)

printf("请输入年,月,日:");
scanf("%d,%d,%d",&year,&moon,&day);

/*
检验输入数据的合法性
*/
printf("\n*
%d
\\
%d
\\
%d\n",year,moon,day);
if
(year%4==0
&&
year%100!=0
||
year%400==0)
/*
检验输入年份是否为闰年
*/
m2=29;
else
m2=28;
m1=m3=m5=m7=m8=m10=m12=31;
m4=m6=m9=m11=30;
switch(moon)

case
1:
c=0;
break;
case
2:
c=m1;
break;
case
3:
c=m1+m2;
break;
case
4:
c=m1+m2+m3;
break;
case
5:
c=m1+m2+m3+m4;
break;
case
6:
c=m1+m2+m3+m4+m5;
break;
case
7:
c=m1+m2+m3+m4+m5+m6;
break;
case
8:
c=m1+m2+m3+m4+m5+m6+m7;
break;
case
9:
c=m1+m2+m3+m4+m5+m6+m7+m8;
break;
case
10:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9;
break;
case
11:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10;
break;
case
12:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10+m11;
break;
default:
printf("Error");
break;

printf("这日为该年的第
%d
天",c+day);

==================================
C++的
#include
<iostream>
using
namespace
std;
void
main
()
int
year,moon=13,week=0,day=32,c=0,
m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12;
while(moon>12
||
moon<1
||
day>31
||
day<1)

cout<<"请输入年,月,日:";
cin
>>
year
>>
moon
>>
day;

//
检验输入数据的合法性
if
(year%4==0
&&
year%100!=0
||
year%400==0)
//
检验输入年份是否为闰年
m2=29;
else
m2=28;
m1=m3=m5=m7=m8=m10=m12=31;
m4=m6=m9=m11=30;
switch(moon)

case
1:
c=0;
break;
case
2:
c=m1;
break;
case
3:
c=m1+m2;
break;
case
4:
c=m1+m2+m3;
break;
case
5:
c=m1+m2+m3+m4;
break;
case
6:
c=m1+m2+m3+m4+m5;
break;
case
7:
c=m1+m2+m3+m4+m5+m6;
break;
case
8:
c=m1+m2+m3+m4+m5+m6+m7;
break;
case
9:
c=m1+m2+m3+m4+m5+m6+m7+m8;
break;
case
10:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9;
break;
case
11:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10;
break;
case
12:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10+m11;
break;
default:
cout<<"Error";
break;

cout<<"是这一年的第"<<c+day<<"天"<<endl;
参考技术B 晕!~C到C++,轻微改一下不就得了,C++的补在C的后下面了
很简单,用C写的,可以用数组,我没用,代码也可以更简单,不过这样便于你理解,我没有调试,你看一下有没有错误
main
()
int
year,moon=13,week=0,day=32,c=0,
m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12;
while(moon>12
||
moon<1
||
day>31
||
day<1)

printf("请输入年,月,日:");
scanf("%d,%d,%d",&year,&moon,&day);

/*
检验输入数据的合法性
*/
printf("\n*
%d
\\
%d
\\
%d\n",year,moon,day);
if
(year%4==0
&&
year%100!=0
||
year%400==0)
/*
检验输入年份是否为闰年
*/
m2=29;
else
m2=28;
m1=m3=m5=m7=m8=m10=m12=31;
m4=m6=m9=m11=30;
switch(moon)

case
1:
c=0;
break;
case
2:
c=m1;
break;
case
3:
c=m1+m2;
break;
case
4:
c=m1+m2+m3;
break;
case
5:
c=m1+m2+m3+m4;
break;
case
6:
c=m1+m2+m3+m4+m5;
break;
case
7:
c=m1+m2+m3+m4+m5+m6;
break;
case
8:
c=m1+m2+m3+m4+m5+m6+m7;
break;
case
9:
c=m1+m2+m3+m4+m5+m6+m7+m8;
break;
case
10:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9;
break;
case
11:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10;
break;
case
12:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10+m11;
break;
default:
printf("Error");
break;

printf("这日为该年的第
%d
天",c+day);

==================================
C++的
#include
<iostream>
using
namespace
std;
void
main
()
int
year,moon=13,week=0,day=32,c=0,
m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12;
while(moon>12
||
moon<1
||
day>31
||
day<1)

cout<<"请输入年,月,日:";
cin
>>
year
>>
moon
>>
day;

//
检验输入数据的合法性
if
(year%4==0
&&
year%100!=0
||
year%400==0)
//
检验输入年份是否为闰年
m2=29;
else
m2=28;
m1=m3=m5=m7=m8=m10=m12=31;
m4=m6=m9=m11=30;
switch(moon)

case
1:
c=0;
break;
case
2:
c=m1;
break;
case
3:
c=m1+m2;
break;
case
4:
c=m1+m2+m3;
break;
case
5:
c=m1+m2+m3+m4;
break;
case
6:
c=m1+m2+m3+m4+m5;
break;
case
7:
c=m1+m2+m3+m4+m5+m6;
break;
case
8:
c=m1+m2+m3+m4+m5+m6+m7;
break;
case
9:
c=m1+m2+m3+m4+m5+m6+m7+m8;
break;
case
10:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9;
break;
case
11:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10;
break;
case
12:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10+m11;
break;
default:
cout<<"Error";
break;

cout<<"是这一年的第"<<c+day<<"天"<<endl;
参考技术C '我用VB写的程序
'新建一个窗体,画一个命令按钮(Command1)
'然后粘贴下列代码

Private Sub Command1_Click()
Dim A As String '定义字符串A,整个程序通过判断A的各个部分来确定输出结果
Dim Ye(1 To 12)'定义一个数组,用来放每个月的天数
For i = 1 To 12
If i = 1 Or i = 3 Or i = 5 Or i = 7 Or i = 8 Or i = 10 Or i = 12 Then '定义每个月的天数
Ye(i) = 31
Else
Ye(i) = 30
End If
Next i
A = InputBox("输入年月日,用空格隔开." & vbCrLf & "月份和天数要用双位数输入" & vbCrLf & "比如2005年1月1日,输入 2005 01 01"): If A = "" Then Exit Sub
If Len(A) > 10 Then
MsgBox "输入有误,请从新输入"
Exit Sub
ElseIf Val(Mid(A, 6, 2)) > 12 Then '校对月份输入
MsgBox "月份输入有误"
Exit Sub
ElseIf Val(Mid(A, 9, 2)) > 31 Then '校对日期输入
MsgBox "日期输入有误"
Exit Sub
Else
If Val(Mid(A, 1, 4)) Mod 400 = 0 Or (Val(Mid(A, 1, 4)) Mod 4 = 0 And Val(Mid(A, 1, 4)) Mod 100 > 0) Then '判断是否是闰年
Ye(2) = 29
Else
Ye(2) = 28 '定义二月的天数
End If

If Ye(2) = 28 And Mid(A, 6, 2) = 02 And Val(Mid(A, 9, 2)) > 28 Then
MsgBox "日期输入有误"
Exit Sub
ElseIf Ye(2) = 29 And Mid(A, 6, 2) = 02 And Val(Mid(A, 9, 2)) > 29 Then '校对二月天数
MsgBox "日期输入有误"
Exit Sub
End If

If Val(Mid(A, 1, 4)) = 0 Or Val(Mid(A, 6, 2)) = 0 Or Val(Mid(A, 9, 2)) = 0 Then '检查输入是否有0
MsgBox "输入有误,请重新输入"
Exit Sub
End If

'从这里真正开始计算天数,前面的都是判断过程
For H = 1 To Val(Mid(A, 6, 2)) - 1
Moon = Moon + Ye(H)
Next H

Days = Moon + Mid(A, 9, 2)
End If
'计算结束

Print Days '最终输出结果
End Sub

'***********************************
'其实整个程序就是对字符串A的操作,通过A里的前4位数判断是否是闰年,判断第六、七位确定月份,判断九、十位确定日期。
'这段程序在WinXp、VB6下调试通过 (嘻嘻嘻 好多软件都有这句话)

以上是关于用C语言写一个函数,给出年月日,计算该日是该年的第几天的主要内容,如果未能解决你的问题,请参考以下文章

c语言编程:输入某年某月某日,计算出这一天是该年的第几天?该怎么解答啊

C语言练习之计算某年日是该年的第几天

编程:要求输入某一年月日,判断其为该年的第几天?

求输出此日期是该年的第几天

用SQL语句计算出给定日期是星期几?

杭电oj 2005