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

C语言多项式求导程序结果异常修正与单次执行终止实现咨询

解决多项式导数程序的两个问题

首先,我们来看原程序的核心功能:它接收多项式的「系数-幂次」对,输出其导数对应的「系数-幂次」对。针对你提到的两个问题,我会在尽量保留原代码结构的基础上给出针对性修改方案。

修改后的完整代码

#include<stdio.h> 
/*input: 3 4 -5 2 6 1 -2 0 output:12 3 -10 1 6 0*/
/*input: 6 0 output:0 0*/
/*input: 0 0 output:0 0*/
int main(){
    int a,b;
    int flag=0;
    char line[1024];
    // 读取一行输入,按下回车即停止执行
    if (fgets(line, sizeof(line), stdin) == NULL) {
        printf("0 0");
        return 0;
    }
    int pos = 0;
    int read_len;
    // 解析当前行内的所有系数-幂次对
    while (sscanf(line + pos, "%d %d%n", &a, &b, &read_len) == 2) {
        pos += read_len;
        // 仅处理导数项系数非零的情况,避免无效的0项输出
        if (b != 0 && a * b != 0) {
            if(flag==0)printf("%d",a*b);
            else printf(" %d",a*b);
            printf(" %d",b-1);
            flag=1;
        }
    }
    // 若没有任何有效导数项,输出标准的0多项式表示
    if(flag==0)printf("0 0");
    return 0;
}

关键改动说明

1. 实现「按下一次回车后停止执行」

原程序用while(scanf(...) != EOF)会持续等待输入直到遇到系统结束符(比如Ctrl+D或Ctrl+Z),我们通过以下逻辑修改:

  • 用fgets读取整行输入,用户按下回车后就会停止读取操作;
  • 搭配sscanf的%n格式符,记录每次读取的字符长度,通过pos += read_len移动解析位置,逐对处理行内的所有数字对,确保一次输入完成后程序就停止。

2. 修复「输入‘6 0’或‘0 0’时无法输出预期‘0 0’」的问题

原程序的潜在问题是会输出无效的0系数项(比如输入0 5时会输出0 4,数学上这类0项没有意义),我们新增了a*b != 0的判断:

  • 对于6 0:b=0不进入处理分支,flag保持为0,最终触发if(flag==0)输出0 0;
  • 对于0 0:同样不会进入处理分支,最终也输出0 0,完全符合预期;
  • 对于包含有效项的输入(比如3 4 -5 2),只会输出非零的导数项,避免冗余内容。

如果你的需求是:即使原输入包含常数项,导数结果也要额外输出0 0(比如输入3 4 6 0时要输出12 3 0 0),可以去掉b != 0的判断,改为在处理常数项时手动输出0 0,但通常多项式表示中会省略这类多余的0项。

内容的提问来源于stack exchange,提问作者ansley77777723

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:29:11