鱼C论坛

 找回密码
 立即注册
查看: 1271|回复: 2

[已解决]求解,程序为什么到一半就停止了?

[复制链接]
发表于 2021-10-22 23:18:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么程序进行到一半就停止了,还没一个数到400万,不应该还可以继续吗?
#include<stdio.h>
int main()
{
    int a, b, c, sum;
    a = 1, b = 2, c = 0, sum = 1;
       while ((c < a || c < b)&&b<4000000)
        {
            if(c!=0)
            printf("c=%d\n", c);
            c = a + b;
            if(c%2==0)
            sum = sum + c;
            if ((a < b || a < c)&&c<4000000)
            {
                printf("a=%d\n", a);
                a = b + c;
                if(a%2==0)
                sum = sum + a;
                if ((b < a || b < c)&&a<4000000)
                {
                    printf("b=%d\n", b);
                    b = a + c;
                    if(b%2==0)
                    sum = sum + b;
                    
                }
            }
        }
    printf("sum=%d", sum);
    return 0;
}
最佳答案
2021-10-22 23:54:47
本帖最后由 jackz007 于 2021-10-23 00:12 编辑

        只要把代码稍作修改便可看出原因
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         int a = 1 , b = 2 , c = 0 , sum = 1                     ;
  5.         while((c < a || c < b) && b < 4000000) {
  6.                 c = a + b                                       ;
  7.                 if(c % 2 == 0) sum += c                         ;
  8.                 if((a < b || a < c) && c < 4000000) {
  9.                         a = b + c                               ;
  10.                         if(a % 2 == 0) sum += a                 ;
  11.                         if((b < a || b < c) && a < 4000000) {
  12.                                 b = a + c                       ;
  13.                                 if(b % 2 == 0) sum += b         ;
  14.                         }
  15.                 }
  16.                 printf("a = %8d        b = %8d        c = %8d\n" , a , b , c) ;
  17.         }
  18.         printf("sum = %d\n" , sum)                              ;
  19. }
复制代码

        编译、运行实况:
  1. D:\00.Excise\C>g++ -o x x.c

  2. D:\00.Excise\C>x
  3. a =        5    b =        8    c =        3
  4. a =       21    b =       34    c =       13
  5. a =       89    b =      144    c =       55
  6. a =      377    b =      610    c =      233
  7. a =     1597    b =     2584    c =      987
  8. a =     6765    b =    10946    c =     4181
  9. a =    28657    b =    46368    c =    17711
  10. a =   121393    b =   196418    c =    75025
  11. a =   514229    b =   832040    c =   317811
  12. a =  2178309    b =  3524578    c =  1346269
  13. a =  2178309    b =  3524578    c =  5702887
  14. sum = 4613731

  15. D:\00.Excise\C>
复制代码

       请关注程序输出的倒数第2行:
  1. a =  2178309    b =  3524578    c =  5702887
复制代码

        再看看循环条件
  1.         while((c < a || c < b) && b < 4000000) {
复制代码

        是的,就是因为  (c < a || c < b)  的条件已经不成立了,所以,尽管 b = 5702887 远远不到 4000000,可是循环却还是终止了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 23:54:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-10-23 00:12 编辑

        只要把代码稍作修改便可看出原因
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         int a = 1 , b = 2 , c = 0 , sum = 1                     ;
  5.         while((c < a || c < b) && b < 4000000) {
  6.                 c = a + b                                       ;
  7.                 if(c % 2 == 0) sum += c                         ;
  8.                 if((a < b || a < c) && c < 4000000) {
  9.                         a = b + c                               ;
  10.                         if(a % 2 == 0) sum += a                 ;
  11.                         if((b < a || b < c) && a < 4000000) {
  12.                                 b = a + c                       ;
  13.                                 if(b % 2 == 0) sum += b         ;
  14.                         }
  15.                 }
  16.                 printf("a = %8d        b = %8d        c = %8d\n" , a , b , c) ;
  17.         }
  18.         printf("sum = %d\n" , sum)                              ;
  19. }
复制代码

        编译、运行实况:
  1. D:\00.Excise\C>g++ -o x x.c

  2. D:\00.Excise\C>x
  3. a =        5    b =        8    c =        3
  4. a =       21    b =       34    c =       13
  5. a =       89    b =      144    c =       55
  6. a =      377    b =      610    c =      233
  7. a =     1597    b =     2584    c =      987
  8. a =     6765    b =    10946    c =     4181
  9. a =    28657    b =    46368    c =    17711
  10. a =   121393    b =   196418    c =    75025
  11. a =   514229    b =   832040    c =   317811
  12. a =  2178309    b =  3524578    c =  1346269
  13. a =  2178309    b =  3524578    c =  5702887
  14. sum = 4613731

  15. D:\00.Excise\C>
复制代码

       请关注程序输出的倒数第2行:
  1. a =  2178309    b =  3524578    c =  5702887
复制代码

        再看看循环条件
  1.         while((c < a || c < b) && b < 4000000) {
复制代码

        是的,就是因为  (c < a || c < b)  的条件已经不成立了,所以,尽管 b = 5702887 远远不到 4000000,可是循环却还是终止了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-23 07:57:16 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-10-23 08:06 编辑
  1. #include<stdio.h>

  2. int main()
  3. {
  4.     int a, b, c, sum;
  5.     a = 1, b = 2, c = 0, sum = 1;
  6.     while ((c < a || c < b) && b < 4000000) // 你这里有两个条件语句
  7.     {
  8.         if (c != 0) printf("c = %-8d\n", c);
  9.         c = a + b;
  10.         if (c % 2 == 0) sum = sum + c;
  11.         if ((a < b || a < c) && c < 4000000)
  12.         {
  13.             printf("a = %-8d ", a);
  14.             a = b + c;
  15.             if (a % 2 == 0) sum = sum + a;
  16.             if ((b < a || b < c) && a < 4000000)
  17.             {
  18.                 printf("b = %-8d ", b);
  19.                 b = a + c;
  20.                 if (b % 2 == 0)
  21.                     sum = sum + b;
  22.             }
  23.         }
  24.     }
  25.     printf("sum = %d", sum);
  26.     return 0;
  27. }
复制代码
  1. a = 1        b = 2        c = 3
  2. a = 5        b = 8        c = 13
  3. a = 21       b = 34       c = 55
  4. a = 89       b = 144      c = 233
  5. a = 377      b = 610      c = 987
  6. a = 1597     b = 2584     c = 4181
  7. a = 6765     b = 10946    c = 17711
  8. a = 28657    b = 46368    c = 75025
  9. a = 121393   b = 196418   c = 317811
  10. a = 514229   b = 832040   c = 1346269
  11. sum = 4613731
复制代码
最后一行可以看出:1346269 > 832040 > 514229,也就是 c > a && c > b(退出循环条件成立)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 03:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表