qq_74814517 2023-10-09 18:45 采纳率: 100%
浏览 6
已结题

哥德巴赫猜想c程序找错

  • 写回答

2条回答 默认 最新

  • CodeXTreme工作室 2023-10-09 18:55
    关注

    以下是我对代码的修改和解释:

    void main()应该被替换为int main(),因为标准的C语言中的主函数应该返回一个整数值。
    你在代码中使用了未定义的变量p和q,你需要在使用这些变量之前声明它们。
    flagp-1和flagq可能应该是其他值初始化,例如0。
    你的大数循环终止条件似乎是错误的,你需要明确你的循环终止条件。
    你的判断素数的逻辑似乎有问题,你需要更仔细地检查它。
    你的printf语句的位置可能使你的输出出现在不适当的地方。
    以下是我对代码的大致修改:

    #include<stdio.h>
    #include<math.h>
    
    int main()
    {
        int n, p, q;
        int flagp = -1, flagq = 1; // flag needs to be initialized
        printf("请输入一个大于2的偶数:");
        scanf("%d", &n); 
        for (p = 2; p < n; p++) {
            // test for prime number
            for (int i = 2; i <= sqrt(p); i++) {
                if (p % i == 0) {
                    flagp = 0;
                    break;
                }
            }
            if (flagp == 0) {
                continue;
            } else {
                break; // if p is prime, no need to test q
            }
        }
        for (int i = 2; i <= sqrt(n - p); i++) {
            // test for prime number
            if (n - p % i == 0) {
                flagq = 0;
                break;
            }
        }
        if (flagp == 1 && flagq == 1) {
            printf("%d\n", p);
        } else {
            printf("没有找到两个都是质数的数\n");
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 已采纳回答 10月9日
  • 创建了问题 10月9日