liveflyyyyyy 2024-11-24 00:31 采纳率: 0%
浏览 3

问一下PTA给定精确度的简单错位列和,第一种有森么不对吗?第二种是对的

PTA上显示我第一种是错误的,我感觉这样表达没错啊试了好几次

img

img

img

  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据你提供的代码片段和图,我可以看到几个问题。我会根据这些代码和题目描述逐一分析并提供修正建议。

    问题一:代码的格式和拼写错误 你的代码中存在许多格式和拼写错误。例如,“#incLude”应该为“#include”,并且在定义变量类型的时候有些混乱和不准确,例如"int.sign.=.1;" 应该为 "int sign = 1;" 等。这些都是语法错误,编译器会因为这些错误而报错。请确保使用正确的语法和拼写。

    问题二:变量定义和赋值问题 在代码中,有些变量定义和赋值的方式存在问题。例如,"double·m·=·1;" 这样的写法是不正确的,应该使用正确的赋值符号和空格。另外,有些变量在使用前没有初始化,这可能会导致不可预测的结果。请确保每个变量在使用前都进行了正确的初始化。

    问题三:逻辑错误 在计算交错序列部分和的过程中,逻辑上存在一些错误。在循环中,"do{ ... }while(n.>.eps);" 这个条件判断可能不正确。因为这里的 n 是 1.0 / m,当 m 增大时,n 会减小,而不是增大。因此,循环条件应该是当 n(即 1.0 / m)小于给定的精度 eps 时退出循环。另外,还需要确保每次循环中对 sum 的累加是正确的。

    根据以上分析,下面是修正后的代码示例:

    #include <stdio.h>
    
    int main() {
        double m = 1;  // m 的初始值应该为 1
        double sum = 0; // 部分和的初始值应该为 0
        double eps; // 需要计算的精度 eps
        int sign = 1; // 符号初始化为 1(正数)
        scanf("%Lf", &eps); // 从标准输入读取 eps 的值
        do {
            double n = 1.0 / m; // 计算当前项的值 n = 1/m
            sum += sign * n; // 将当前项加到部分和中
            m += 3; // m 增加 3(即下一项的分母)
            sign = -sign; // 改变符号(交替正负)
        } while (n > eps); // 当当前项的值大于给定的精度 eps 时继续循环
        printf("sum=%.6f", sum); // 输出部分和的值,精确到小数点后六位
        return 0; // 程序正常结束,返回 0
    }
    

    这段代码根据题目描述修正了之前的错误,并按照要求计算给定精度的简单交错序列部分和。请注意,这只是基于你提供的代码片段进行的修正,可能还有其他细节需要进一步完善和调整。

    评论

报告相同问题?

问题事件

  • 修改了问题 11月24日
  • 创建了问题 11月24日