#include <stdio.h>
#include <math.h>
int year(int year);
int month(int month,int year);
void main()
{
int y,m,d,sum,i;
printf("请输入年月日\n");
scanf("%d%d%d",&y,&m,&d);
y=year(y);
sum=0;
for(i=1;i<m;i++)
{m=month(m,y);
sum=sum+m;}
sum=sum+d;
printf("是第%d天",sum);
}
int year(int year)
{
if( (year%4==0 && year%100!=0) || (year%400==0) )
return (366);
else return (365);
}
int month(int month,int year)
{
switch(month)
{ case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: return (31);break;
case 2:
{if (year==366) return(29);
else return(28);break;}
default: return(30);break;}
}
你的这段代码有问题,for(i=1;i<m;i++)
{m=month(m,y);
sum=sum+m;}你这样写,就是将月份重复的加了,如果是三月份,你将会发现你加了好多次,自然就会出现800多天了,下面我将代码改进,答案也是对的。
#include <stdio.h>
#include <math.h>
int year(int year);
int month(int month,int year);
void main()
{
int y,m,d,sum,i,n;
printf("请输入年月日\n");
scanf("%d%d%d",&y,&m,&d);
y=year(y);
sum=0;
n=0;//定义一个n,用于每个月份天数相加
for(i=1;i<m;i++)
{
n=month(m,y);//将你的m替换为n,结果就对了
sum=sum+n;
}
sum=sum+d;
printf("是第%d天",sum);
}
int year(int year)
{
if( (year%4==0 && year%100!=0) || (year%400==0) )
return (366);
else return (365);
}
int month(int month,int year)
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return (31);
break;
case 2:
{
if (year==366)
return(29);
else return(28);
break;
}
default: return(30);
break;
}
}
如上。这个for循环中i值和m值都不能改变,且你传给month函数的参数不对。
我们是才开始学C,请问汇编是指什么?
追答你们?我也才学,加练习方式吧154015579!我刚刚回来用电脑看了一下,改为如下:
#include <stdio.h>因为c语言是用的stdcall,所以计算方式是从右向左的,你定义的int month,会先执行year的判断,所以把year定义在左边,结果ok!
至于汇编,计算机语言有 机器语言,汇编语言,c、c++等汇编是处于机器语言和c++中间的,一般要学好c++,汇编是必须会的。百度都有这些的介绍,我就不复制了。
答案还是不对。我输入2013 2 1,显示的是800多天,这明显不对呀