You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现三位数数学性质判断的C程序执行if语句后崩溃,求排查解决

问题分析与修复

你的程序崩溃的核心原因是除零错误:当计算得到的suma = x² + y² - z²等于0时,执行n % suma就会触发除以0的非法操作,这在C语言中属于未定义行为,直接导致程序崩溃,且编译器无法提前预判这种运行时数值问题,所以不会给出警告。

修复方案

在执行取模操作前,先判断suma是否不等于0,只有满足这个前提时,再进行n % suma == 0的判断。

修改后的代码如下:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, i;

    printf("n: ");
    scanf("%d", &n);

    for (i = 100; i <= 999; i++) {
        int x = i / 100;
        int y = i / 10 % 10;
        int z = i % 10;
        
        int suma = x * x + y * y - z * z;

        // 先排除除零情况,再执行取模判断
        if (suma != 0 && n % suma == 0)
            printf("%d %d %d %d\n", i, x, y, z);
    }

    return 0;
}

额外优化提示

可以给输入环节增加合法性检查,避免用户输入非整数导致的后续逻辑异常:

if (scanf("%d", &n) != 1) {
    printf("输入无效,请输入整数\n");
    return 1;
}

内容的提问来源于stack exchange,提问作者Pocsi Nandor-Szilveszter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:55:21