吴贤炬 发表于 2021-10-22 23:18:34

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

为什么程序进行到一半就停止了,还没一个数到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;
}

jackz007 发表于 2021-10-22 23:54:47

本帖最后由 jackz007 于 2021-10-23 00:12 编辑

      只要把代码稍作修改便可看出原因
#include <stdio.h>
int main(void)
{
      int a = 1 , b = 2 , c = 0 , sum = 1                     ;
      while((c < a || c < b) && b < 4000000) {
                c = a + b                                       ;
                if(c % 2 == 0) sum += c                         ;
                if((a < b || a < c) && c < 4000000) {
                        a = b + c                               ;
                        if(a % 2 == 0) sum += a               ;
                        if((b < a || b < c) && a < 4000000) {
                              b = a + c                     ;
                              if(b % 2 == 0) sum += b         ;
                        }
                }
                printf("a = %8d        b = %8d        c = %8d\n" , a , b , c) ;
      }
      printf("sum = %d\n" , sum)                              ;
}
      编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

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

D:\00.Excise\C>
       请关注程序输出的倒数第2行:
a =2178309    b =3524578    c =5702887
      再看看循环条件
      while((c < a || c < b) && b < 4000000) {
      是的,就是因为(c < a || c < b)的条件已经不成立了,所以,尽管 b = 5702887 远远不到 4000000,可是循环却还是终止了。

傻眼貓咪 发表于 2021-10-23 07:57:16

本帖最后由 傻眼貓咪 于 2021-10-23 08:06 编辑

#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 = %-8d\n", c);
      c = a + b;
      if (c % 2 == 0) sum = sum + c;
      if ((a < b || a < c) && c < 4000000)
      {
            printf("a = %-8d ", a);
            a = b + c;
            if (a % 2 == 0) sum = sum + a;
            if ((b < a || b < c) && a < 4000000)
            {
                printf("b = %-8d ", b);
                b = a + c;
                if (b % 2 == 0)
                  sum = sum + b;
            }
      }
    }
    printf("sum = %d", sum);
    return 0;
}a = 1      b = 2      c = 3
a = 5      b = 8      c = 13
a = 21       b = 34       c = 55
a = 89       b = 144      c = 233
a = 377      b = 610      c = 987
a = 1597   b = 2584   c = 4181
a = 6765   b = 10946    c = 17711
a = 28657    b = 46368    c = 75025
a = 121393   b = 196418   c = 317811
a = 514229   b = 832040   c = 1346269
sum = 4613731最后一行可以看出:1346269 > 832040 > 514229,也就是 c > a && c > b(退出循环条件成立)
页: [1]
查看完整版本: 求解,程序为什么到一半就停止了?