关于for循环(新手)

weixin_44906053 2019-04-11 07:05:18
#include<stdio.h>
int main()
{int a,b,c,i;
c=1;
scanf("%d %d",&a,&b);
if(a==0||b==0||a==b)
{
printf("1");
}
if(a>0&&b>0&&a>b)
{int d,e,f;
d=1;
e=1;
f=1;

for(i=1;i<=a;i++)
{
d=d*c;
c=c+1;
}

for(i=1;i<=(a-b);i++)
{
e=e*c;
c=c+1;
}
for(i=1;i<=b;i++)
{
f=f*c;
c=c+1;
}
printf("%d",d/(e+f));





}

}
如何把for循环中的d e f变量取出
...全文
75 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44906053 2019-04-11
  • 打赏
  • 举报
回复
哦我看错了谢谢怪不得
weixin_44906053 2019-04-11
  • 打赏
  • 举报
回复
我重新解释下题目就是为什么d e f在最后的d/(e*f)里得出的答案永远是0 也就是循环中d e f无法参与到最后的式子中导致最后的式子永远是0/(0*0)还是其他哪里出了问题导致答案永远为0
拥抱Linux 2019-04-11
  • 打赏
  • 举报
回复
引用 2 楼 weixin_44906053 的回复:
那帮我看看为什么答案永远等于0


根据你的程序,输入两个0的时候,肯定不等于0啊,肯定是输出1啊,哈哈!(好吧,开个玩笑)

言归正传,在你的程序的最后把输出语句修改了一下,把d 、e 、f 的值也一并输出,这样就看得明白了。

printf("d = %d, e = %d, f = %d\n", d, e, f);
printf("d / (e + f) = %d\n", d / (e + f));

比如,输入两个数,3 、2,结果是

d = 6, e = 4, f = 30
d / (e + f) = 0

你看,为什么 d / (e + f) 是 0 呢? 因为 / 是取商运算符,整数对整数取商的话,分子比分母小,结果就是0了呀!
再试一组数,15、2,结果是

d = 2004310016, e = 1999716352, f = 870
d / (e + f) = 1

这下应该明白了吧?
拥抱Linux 2019-04-11
  • 打赏
  • 举报
回复
问题究竟是什么意思呢?
引用
如何把for循环中的d e f变量取出?

变量 d 、e 、f 的定义位置本来就是在 3 个 for 循环之外,而且 for 循环内部也没有同名局部变量覆盖它们3个的作用域, 所以 这3个变量一直都在for循环里面起作用,也在 for 循环外面起作用啊 !

所以,问题的意思是想把 d 、 e 、f 提取到哪里呢?
假如是想在这个 if 代码块外面也能使用的话,何不跟变量 a 、b 、c 等一样定义在 if 的上面呢? 作用域扩大就好了。
weixin_44906053 2019-04-11
  • 打赏
  • 举报
回复
那帮我看看为什么答案永远等于0
636f6c696e 2019-04-11
  • 打赏
  • 举报
回复
本来就获取的到

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧