c语言作业 日期减少一天,C语言 日期计算加一天 源代码

C语言 日期计算加一天 源代码

答案:4  信息版本:手机版

解决时间 2019-10-06 05:17

已解决

2019-10-05 10:24

#include void main ()

{

float a,b,c;

scanf ("%fa %fb %fc",&a,&b,&c);

if (a!=(int)a||b!=(int)b||c!=(int)c||b<1||b>12||c<1||c>31)

printf("error input");

else

{

if (b==1||b==3||b==5||b==7||b==8||b==10|| b==12 &&c<31 ) c++ ;

else if (b==12&&c==31)

{

c=1;

b=1;

a++;

printf("%d %d %d",a,b,c);

}

else if (b==1||b==3||b==5||b==7||b==8||b==10 && c==31 )

{

c=1;

b++;

a=a;

printf("%d %d %d",a,b,c);

}

else if (b==4||b==6||b==9||b==11 &&c<30 ) c++ ;

else if ( b==4||b==6||b==9||b==11 &&c==30)

{

c=1;

b++;

a=a;

printf("%d %d %d",a,b,c);

}

else if (b==2)

{if (((int)a%4==0&&(int)a%100!=0)||((int)a%400==0) &&(c<=28) ) c++;

else if (c==29)

{

c=1;

b++;

a=a;

printf("%d %d %d",a,b,c);

}

else if (c>29||c<1) printf("error input");

else

{

if (c<=27) c++;

else if (c==28)

{c=1; b++; a=a; printf("%d %d %d",a,b,c);}

else printf("error input");

}

}

}

}

运行后事没有错误的,但是我输入1 1 1 竟然输出的也是 error input"); ,然后我把第一个条件里德||b<1||b>12||c<1||c>31,才没有不会error input,可明明是 符合要求的么,去掉后,我再输入1 1 1,依然是没有输出1 1 2 ,什么都没有输出了 什么情况!!!!!急

环境是windows visual c ++6.0

最佳答案

2019-10-05 11:58

#include

#include

main ()

{

int a,b,c;

scanf ("%d,%d,%d",&a,&b,&c);

printf("%4d%4d%4d\n",a,b,c);

if (b<1||b>12||c<1||c>31)

printf("error input\n");

else

{

if (b==1||b==3||b==5||b==7||b==8||b==10|| b==12)

{

if(b==12&&c==31) {c=1;b=1;a++;}

else if(b!=12&&c==31) {b++;c=1;}

else if(c<31) c++;

else printf("error inpu\n");

}

else if ((b==1||b==3||b==5||b==7||b==8||b==10))

{

if(c==30) {b++;c=1;}

else if(c<31) c++;

else printf("error input\n");

}

else if (b==2)

{if (((int)a%4==0&&(int)a%100!=0)||(int)a%400==0) //判断的是闰年

{

if(c<=28) c++;

else if(c==29)

{c=1;b++;}

else {printf("error input\n");exit;}

}

else {

if(c==28) {b++;c=1;}

else if(c<28) c++;

else {printf("error input\n");exit;}

}

}

}

printf("%4d%4d%4d",a,b,c);

system("pause");

}

结构太乱,重新整理了一下

全部回答

1楼

2019-10-05 14:48

#include

int isprim(int n)

{

int i;

if(n<2)

return 0;

for(i=2;i*i

{

if(n%i==0)

return 0;

}

return 1;

}

int main(void)

{

int a, b;

int i, c=0;

printf("输入第一个人的生日:");

scanf("%d", &a);

printf("输入第二个人的生日:");

scanf("%d", &b);

for(i=a+1;i

{

if(isprim(i))

c++;

}

if(isprim(c))

printf("缘分绝佳!\n");

else

printf("缘分一般。\n");

return 0;

}大体意思是这样,日期的合法性判断比较繁琐,不在这里详说了。

2楼

2019-10-05 14:20

scanf ("%fa %fb %fc",&a,&b,&c);貌似"%fa %fb %fc"有点问题

最好定义abc为int类型,sacnf("%d %d %d",&a,&b,&c);

还有就是你的没输出,你可以把

if (b==1||b==3||b==5||b==7||b==8||b==10|| b==12 &&c<31 ) c++ ;

改为

if (b==1||b==3||b==5||b==7||b==8||b==10|| b==12 &&c<31 )

{

c++ ;

printf("%d %d %d",a,b,c);

}

就行了,没按你说的功能来做,只是实现你的那个例子

3楼

2019-10-05 13:29

#include

void main ()

{

// float a,b,c;

int a, b, c;

// scanf ("%fa %fb %fc",&a,&b,&c);

scanf("%4d%2d%2d", &a, &b, &c);

do

{

if (a!=(int)a||b!=(int)b||c!=(int)c||b<1||b>12||c<1||c>31)

printf("error input");

else

{

if ((b==1||b==3||b==5||b==7||b==8||b==10|| b==12) && c<31)

c++ ;

else if (b==12&&c==31)

{

c=1;

b=1;

a++;

printf("%04d-%02d-%02d", a, b, c);

break;

}

else if ((b==1||b==3||b==5||b==7||b==8||b==10) && c==31 )

{

c=1;

b++;

// a=a;

printf("%04d-%02d-%02d", a, b, c);

break;

}

else if ((b==4||b==6||b==9||b==11) && c==30)

{

c=1;

b++;

// a=a;

printf("%04d-%02d-%02d", a, b, c);

break;

}

else if ((b==4||b==6||b==9||b==11) && c<30 )

c++ ;

else if (b==2)

{

if (((int)a%4==0 && (int)a%100!=0) || ((int)a%400==0) && (c<=28) )

c++;

else if (c==29)

{

c=1;

b++;

a=a;

printf("%d %d %d",a,b,c);

}

else if (c>29||c<1)

printf("error input");

else

{

if (c<=27)

c++;

else if(c==28)

{

c=1; b++; a=a;

printf("%d %d %d",a,b,c);

}

else printf("error input");

}

}

}

} while (0);

printf("%04d-%02d-%02d", a, b, c);

}

另:后面2月份的考虑的还不够充分,你再检查看看。

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值