鱼C论坛

 找回密码
 立即注册
查看: 1516|回复: 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 编辑

        只要把代码稍作修改便可看出原因
#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,可是循环却还是终止了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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,可是循环却还是终止了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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(退出循环条件成立)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 17:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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