| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 533 人关注过本帖
标题:请教,C程序设计教程的一道例题,求指教
只看楼主 加入收藏
p_sunday
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-12-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
请教,C程序设计教程的一道例题,求指教
算法分析:

     算法可以表示如下:

     S1:1→sign

     S2:1→sum

     S3:2→deno

     S4:(-1)×sign→sign

     S5:sign×(1/deno)→term

     S6:sum+term→sum

     S7:deno+1→deno

     S8:若deno≤100返回S4;否则算法结束。

此算法对应的源程序如下:

main(){
     float sign=1,deno=2,sum=1,term;
     while(deno<=100){
      sign*=-1;
      term=sign*(1/deno);
      sum+=term;
      deno++;
     }
     printf("1-1/2+1/3-1/4+…+1/99-1/100=%f\n",sum);
}

     本例中用有含义的单词作变量名,以使算法更易于理解。sum表示累加和,deno是英文字母(denominator)缩写,sign代表数值的符号,term代表某一项。在步骤S1中先预设sign(代表级数中各项的符号,它的值为1或-1)。在步骤S2中使sum等于1,相当于已将级数中的第一项放到了sum中。在步骤S3中使分母的值为2。在步骤S4中使sign的值变为-1。在步骤S5中求出级数中第2项的值(-1/2)。在步骤S6中将刚才求出的第二项的值(-1/2)累加到sum中。至此,sum的值是(-1/2)。在步骤S7中使分母deno的值加1(变成3)。执行S8步骤,由于deno≤100,故返回S4步骤,sign的值改为1,在S5中求出term的值为1/3,在S6中将1/3累加到sum中。然后S7再使分母变为4。按此规律反复执行S4到S8步骤,直到分母大于100为止。一共执行了99次循环,向sum累加入了99个分数。sum最后的值就是级数的值。


执行S8步骤,由于deno≤100,故返回S4步骤,sign的值改为1

不懂的地方就是这里,为什么,返回S4之后 sign变成1?好像只是说明了sign是1,并没有指定条件下sign是-1啊?

书刚到,自学,第二天,看这里卡住了,麻烦理解这题的说一下,感谢。
搜索更多相关主题的帖子: 程序设计 例题 教程 指教 
2009-12-21 11:49
sidooh
Rank: 4
等 级:业余侠客
帖 子:121
专家分:265
注 册:2009-6-26
收藏
得分:20 
第一次到S4,sign的值为1*(-1)=-1,第二次到S4(你说的这次),sign的值为(-1)*(-1)=1
2009-12-21 11:56
p_sunday
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-12-19
收藏
得分:0 
先谢谢了。
不是。我就是这里没明白,为什么这次到S4,(-1)*sign 这里的sign就变成-1了?
2009-12-21 12:09
sidooh
Rank: 4
等 级:业余侠客
帖 子:121
专家分:265
注 册:2009-6-26
收藏
得分:0 
因为上次(就是第一次)的S4,sign的值已经变成-1了
2009-12-21 12:22
p_sunday
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-12-19
收藏
得分:0 
。。明白了。是继续上次的计算的。。谢谢了。。
十分感谢
2009-12-21 12:28
快速回复:请教,C程序设计教程的一道例题,求指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028034 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved