C语言谁帮我改这道题
解决时间 2021-04-28 04:56
- 提问者网友:温柔港
- 2021-04-27 06:37
我这个程序哪里错了呀??
#include<stdio.h>
int main()
{
int opselect,d,m,y,days;
printf("Enter the year: ");
scanf("%d",&y);
printf("Enter the days: ");
scanf("%d",&days);
if(y%4==0)
{
if(days<=31)
m=1;d=days;
if(days<=60)
m=2;d=days-31;
if(days<=91)
m=3;d=days-60;
if(days<=121)
m=4;d=days-91;
if(days<=152)
m=5;d=days-121;
}
printf("The month is %d\nThe day is %d\n",m,d);
return 0;
}
这是我程序的一部份,为什么上面的程序只运行前两个if的内容就对,全部运行的话就不对了,紧急呀!谁能帮我!
最佳答案
- 五星知识达人网友:街头电车
- 2021-04-27 06:47
#include<stdio.h>
int main()
{
int opselect,d,m,y,days;
printf("Enter the year: ");
scanf("%d",&y);
printf("Enter the days: ");
scanf("%d",&days);
if(y%4==0)
{
if(days<=31)
{
m=1;
d=days;
}
else
{
if(days<=60)
{
m=2;
d=days-31;
}
else
{
if(days<=91)
{
m=3;
d=days-60;
}
else
{
if(days<=121)
{
m=4;
d=days-91;
}
else
{
if(days<=152)
{
m=5;
d=days-121;
}
}
}
}
}
}
printf("The month is %d\nThe day is %d\n",m,d);
return 0;
}
这种写法和上面的类似,用条件语句完成的。
但是这种写法造成编译的代码两增大,效果并不好。
用三元运算符效果更好,效率高,且程序简洁。
#include<stdio.h>
int main()
{
int opselect,d,m,y,days;
printf("Enter the year: ");
scanf("%d",&y);
printf("Enter the days: ");
scanf("%d",&days);
if(y%4==0)
{
int a=10;
days<=31?(m=1,d=days):(((days>31)&&(days<=60))?(m=2,d=days-31):(((days>61)&&(days<=91))?(m=3,d=days-60):(((days>91)&&(days<=121))?(m=4,d=days-91):(((days>121)&&(days<=152))?(m=5,d=days-121):(((days>152)&&(days<=182))?(m=6,d=days-152):(a=10))))));
}
printf("The month is %d\nThe day is %d\n",m,d);
return 0;
}
有时候也可以用switch语句代替繁琐的多重条件语句。
全部回答
- 1楼网友:底特律间谍
- 2021-04-27 10:04
应该是这样吧:
1、if后面的多语句块要{}
2、if里面的条件有错
#include<stdio.h>
int main()
{
int opselect,d,m,y,days;
printf("Enter the year: ");
scanf("%d",&y);
printf("Enter the days: ");
scanf("%d",&days);
if(y%4==0)
{
if(days<=31)
{
m=1;
d=days;
}
if(days>=60&&days<91)
{
m=2;
d=days-31;
}
if(days>=91&&days<121)
{
m=3;d=days-60;
}
if(days>=121&&days<152)
{
m=4;d=days-91;
}
if(days>=152&&days<182)
{
m=5;d=days-121;
}
}
printf("The month is %d\nThe day is %d\n",m,d);
}
- 2楼网友:你哪知我潦倒为你
- 2021-04-27 09:42
这个问题很简单啊!你看你的几个if语句都是顺序执行的,因此,你上面执行后的m和days的数值会被下面的语句执行后的值覆盖,所以,只执行前面2个if时:你输入的数值是55就恰好是31到60之间不信的话你输入一个小于31的数照样出错,所以,强烈建议你改用switch语句,不要用if了,否则一定要记得加上else的互斥限制。
- 3楼网友:第四晚心情
- 2021-04-27 08:42
days=55 这个数对于你所有的if条件语句都适合呀,d=55-31,d=55-60,d=55-91,d=55-121=-66, 最终输出d为-66
#include<stdio.h>
int main()
{
int opselect,d,m,y,days;
printf("Enter the year: ");
scanf("%d",&y);
printf("Enter the days: ");
scanf("%d",&days);
if(y%4==0)
{
if(days<=31)
{m=1;d=days;}
else if(days<=60)
{m=2;d=days-31;}
else if(days<=91)
{m=3;d=days-60;}
else if(days<=121)
{m=4;d=days-91;}
ielse f(days<=152)
{m=5;d=days-121;}
}
printf("The month is %d\nThe day is %d\n",m,d);
return 0;
}
- 5楼网友:一袍清酒付
- 2021-04-27 07:41
if的语句改为else if
如55满足days<=60
同时满足最后一个days<=152
那执行最后一个if语句,d=days-121=55-121=-66
所以输出如图
这是因为,程序会从上到下一直运行下去,比如55.它<=60,同时也符合<=121,<=152啊,最后执行d=days-121=55-121=-66,你可以把从第二个if都换成else if就应该可以了
我要举报
大家都在看
推荐资讯