永发信息网

C语言谁帮我改这道题

答案:7  悬赏:80  手机版
解决时间 2021-04-28 04:56

我这个程序哪里错了呀??

#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的内容就对,全部运行的话就不对了,紧急呀!谁能帮我!

最佳答案

#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、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);

}

这个问题很简单啊!你看你的几个if语句都是顺序执行的,因此,你上面执行后的m和days的数值会被下面的语句执行后的值覆盖,所以,只执行前面2个if时:你输入的数值是55就恰好是31到60之间不信的话你输入一个小于31的数照样出错,所以,强烈建议你改用switch语句,不要用if了,否则一定要记得加上else的互斥限制。
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; }

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就应该可以了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
智力数学趣味题
素描怎样画才好看?
最近有什么新的动画
湖北省内那里好玩
T8成都/北京西火车硬座靠窗的位置是那些?
六年级语文美文赏析,小学语文一篇文章的一个
朵家下庄这个地址在什么地方,我要处理点事
泰坦之旅不朽王座中文版不能显示中文
为什么我家的DNF进不去,而网吧就可以进
我养了一些发财树,本来是水养的,前天我换了
天龙八部怎么缥缈峰
吃什么东西容易产气
论文指导老师中期评语,毕业论文指导教师评语
怎样能提高口算速度????
历史上有哪些很厉害的骗局
推荐资讯
连江县福州沃尔玛(万星广场店)地址在哪里啊
可以正常上网但为什么显示网络出错?
求助?如何在qq空间加免费背景音乐播放器?O(
陆羽茗茶地址在哪,我要去那里办事
蓝拳的瞬拳怎么收回来啊?
什么是双线接入
王者荣耀钟馗的3技能是什么 王者荣耀每日
有什么方法可以恢复信心
ni女朋友对你死心了怎么做要天心活过来
高峰浴室在哪里啊,我有事要去这个地方
世友地板至尊鉴赏馆在什么地方啊,我要过去处
用友OA 办公软件 显示“XML解析器无法加载,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?