用c语言编程,接收年月日,判别是不是为合法日期。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用c语言编程,接收年月日,判别是不是为合法日期。相关的知识,希望对你有一定的参考价值。

参考技术A #include "stdio.h"
int main()

int year,month,day;
int sign=0,dayvalid;
printf("请输入年月日:\n");
scanf("%d,%d,%d",&year,&month,&day);
if ((year%4==0&&year%100!=0)||year%400==0)

sign =1;

if (month>=1&&month<=12)

switch (month)

case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dayvalid = 31;
break;
case 4:
case 6:
case 9:
case 11:
dayvalid = 30;
break;
case 2:
if (sign ==1)
dayvalid = 29;
else
dayvalid = 28;
break;
default:
break;

if (!(day >0&&day <=dayvalid))

printf("日期格式错误\n");
return 2;


else

printf("月份格式错误:\n");
return 1;


printf("日期格式正确\n");
return 0;

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

要考虑输入日期的有效性,如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语言中用数组编程

怎样用c语言编写以年月日的格式输入一个人的生日和当前日期,来计算这个人的年龄

c语言怎么将一个年月日转换成秒数

C语言题目:设计一个程序输入年月日 输出下一天的年月日 要C语言,不要C++

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