新手写的程序,大神帮忙简化!!
这个程序在你输入某年某月某天之后,他会计算出 是今年的第几天!我感觉好长,求大神帮忙简化他!!
#include <stdio.h>
int main()
{
int n,y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,r;
int y;
int snm,day;
printf("请输入年份:");//这里输入年月日!!
scanf("%d",&n);
printf("请输入月份:");
scanf("%d",&y);
printf("请输入几号:");
scanf("%d",&r);
y1=31;//此处定义每个月的天数
y2=28;
y3=31;
y4=30;
y5=31;
y6=30;
y7=31;
y8=31;
y9=30;
y10=31;
y11=30;
y12=31;
if((n%4==0&&n%100!=0)||n%400==0)//这里判断是闰年还是平年 ?
{
if(y==1)//判断为几月? 判断出来后依次想加!
{
snm=r;
}
else if(y==2)
{
snm=r+y1;
}
else if(y==3)
{
snm=r+y1+y2+1;/*这里是闰年二月份是29天,
因为上面我定义二月份是28天所有这里要加一!*/
}
else if(y==4)
{
snm=r+y1+y2+y3+1;
}
else if(y==5)
{
snm=r+y1+y2+y3+y4+1;
}
else if(y==6)
{
snm=r+y1+y2+y3+y4+y5+1;
}
else if(y==7)
{
snm=r+y1+y2+y3+y4+y5+y6+1;
}
else if(y==8)
{
snm=r+y1+y2+y3+y4+y5+y6+y7+1;
}
else if(y==9)
{
snm=r+y1+y2+y3+y4+y5+y6+y7+y8+1;
}
else if(y==10)
{
snm=r+y1+y2+y3+y4+y5+y6+y7+y8+y9+1;
}
else if(y==11)
{
snm=r+y1+y2+y3+y4+y5+y6+y7+y8+y9+y10+1;
}
else if(y==12)
{
snm=r+y1+y2+y3+y4+y5+y6+y7+y8+y9+y10+y11+1;
}
}
else//此处为平年的算法 ,跟闰年的算法一样,只是二月以后不加一
{
if(y==1)
{
snm=r;
}
else if(y==2)
{
snm=r+y1;
}
else if(y==3)
{
snm=r+y1+y2;
}
else if(y==4)
{
snm=r+y1+y2+y3;
}
else if(y==5)
{
snm=r+y1+y2+y3+y4;
}
else if(y==6)
{
snm=r+y1+y2+y3+y4+y5;
}
else if(y==7)
{
snm=r+y1+y2+y3+y4+y5+y6;
}
else if(y==8)
{
snm=r+y1+y2+y3+y4+y5+y6+y7;
}
else if(y==9)
{
snm=r+y1+y2+y3+y4+y5+y6+y7+y8;
}
else if(y==10)
{
snm=r+y1+y2+y3+y4+y5+y6+y7+y8+y9;
}
else if(y==11)
{
snm=r+y1+y2+y3+y4+y5+y6+y7+y8+y9+y10;
}
else if(y==12)
{
snm=r+y1+y2+y3+y4+y5+y6+y7+y8+y9+y10+y11;
}
}
printf("%d的第%d天!\n",n,snm); //这里输出结果!!
return 0;
} 直接用time.h里面的就好了干嘛这么费劲
本帖最后由 joewin 于 2016-7-24 01:59 编辑
#include <stdio.h>
int main()
{
int d,m,i,s=0,y;
int month={31,28,31,30,31,30,31,31,30,31,30,31};
if (y%100!=0){
if(y%4==0)
month=29;
}
else if (y%400==0)
{
month=29;
}
printf("输入年月日,以空格隔开\n");
scanf("%d %d %d",&y,&m,&d);
for (i=0; i<=m; i++) {
s=s+month;
}
printf("%d年%d月%d日是%d年的第%d天 \n",y,m,d,y,s);
} joewin 发表于 2016-7-24 01:50
#include
int main()
有一个错误,运行不出来 rolandomachini 发表于 2016-7-24 01:38
直接用time.h里面的就好了干嘛这么费劲
不会啊!要是会的话就不用费劲了! 弧矢七 发表于 2016-7-24 09:22
有一个错误,运行不出来
楼上的答案
for (i=0; i<=m; i++) {
s=s+month;//这里错了
}
小剑剑 发表于 2016-7-24 09:46
楼上的答案
错了 结果要比正确答案多40天
弧矢七 发表于 2016-7-24 10:03
错了 结果要比正确答案多40天
for (i=0; i<m-1; i++) {
s=s+month;//这里错了
}
自己琢磨一下 本帖最后由 锅巴灯神 于 2016-7-24 21:32 编辑
#include <stdio.h>
void main()
{
int d,m,i,s=0,y,temp=0;//用temp代表本月之前的所有月份的天数总和
int month={31,28,31,30,31,30,31,31,30,31,30,31};
printf("输入年月日,以空格隔开\n");
scanf("%d %d %d",&y,&m,&d);
if (y%100!=0)
{
if(y%4==0)
month=29;
}
else if (y%400==0)
{
month=29;
}
printf("m=%d\n",month);
for (i=0;i<m-1;i++)//当m=2月时,若是i<m,将会再运行一次,会导致再加上本月的总天数
{
if(m!=1)//当月份为1月时,不能再加本月的天数31天
{
temp=temp+month; //用temp代表本月之前的所有月份的天数总和
}
else
break;
}
s=temp+d;//主要解决本月是一月的情况。故不放在for循环语句内。
printf("%d年%d月%d日是%d年的第%d天 \n",y,m,d,y,s);
} 针对以上程序,再加以说明:对于这样的程序,从检测错误上看,分别用平年和闰年的1月份,2月份和3月份前几天进行测试,可测出正确性。。。。。
页:
[1]