C语言程序设计基础02 ------ 计算分数不等式2

【题目描述】                                                                                       

求m的取值范围。

【求解思路】                                                                                        

  · 1、 式子中出现减运算,导致等式的解可能分段
  · 2、 设置循环条件,每三项一起求和,得一个解区间,然后回过来一项一项求和得个别离散解。

【求解代码】                                                                                        

 1 /*============================================================================*\
 2 * 计算d < 1 + 1/2 - 1/3 + 1/4 + 1/5 - 1/6+ ···  ±1/m 
 3 * 分母能被3整除的时候为"-"号
 4 * @date 3/13/2013
 5 * @CocoonFan
 6 * VC++ 6.0
 7 \*============================================================================*/
 8 
 9 #include <stdio.h>
10 
11 int main()
12 {
13     long d, m, k;
14     double s;
15 
16     printf("请输入d:");
17 
18     scanf("%d",&d);
19 
20     printf("%d < 1 + 1/2 - 1/3 + 1/4 + 1/5 - 1/6+ ···  ±1/m 的解为:",d);
21 
22     m = 1;
23     s = 0;
24 
25     while(1){                                        /* 得一个解区间 */
26 
27         s += 1.0/m + 1.0/(m+1) - 1.0/(m+2);
28 
29         if(s > d)
30             break;
31 
32         m += 3;
33 
34     }
35 
36     printf("\nm ≥ %ld\n",m);
37 
38     k = 1; s = 0;
39 
40     while(k < m){                                    /* 得一个离散解 */
41         
42             if(k%3 > 0){
43 
44             s += 1.0/k;
45 
46         } else {
47 
48             s -= 1.0/k;
49 
50         }
51 
52         if(s > d)
53             printf("m = %ld\n",k);
54 
55         ++k;
56     }
57 
58     return 0;
59 }


【测试结果】                                                                                         

posted @ 2013-03-13 02:08  Cocoon  阅读(409)  评论(0编辑  收藏  举报