融合辛普森的规则

时间:2015-04-01 20:26:20

标签: c

我的一个任务是创建一个使用Simpson的1/3规则来查找总和的c程序。我遇到了一些我无法修复的问题。有经验的人可以指出我正确的方向吗?

理论上,我的代码集成了y = ax ^ 2 + bx + c,其中用户选择a,b,c的值,然后用户选择上限和下限[d,e]。然后用户选择将该区域分割成更多矩形的n值(我们将在我的类中使用的值为100,因此该区域被分成100个矩形)。之后,它贯穿辛普森的规则并打印出总和。

//n is required number of iterations.

#include<stdio.h>
#include<conio.h>
#include<math.h>

double integral (int a,int b,int c,int d,int e,int n)

int main()
{
    double a, b, c, d, e, n;

    printf("Please select values for y=ax^2+bx+c");
    printf("Please select value for a");
    scanf("%d", &a);
    printf("Please select value for b");
    scanf("%d", &b);
    printf("Please select value for c");
    scanf("%d", &c);
    printf("Please select value for the upper limit");
    scanf("%d", &d);
    printf("Please select value for the lower limit");
    scanf("%d", &e);
    printf("Please select the number of rectangles for the Simpson's Rule (Input 100)");
    scanf("%n", &n);

    int i;  
    double sum=0,length=(double)(d-e)/(n),ad,bd,cd,dd;

    ad=(double)a;
    bd=(double)b;
    cd=(double)c;
    dd=(double)d;
    for (i=0;i<n;i++)
    {
        sum+=(ad*(dd*dd+2*dd*length*i+length*length*i*i)+bd*(dd+length*i)+cd)*length;
        printf("the value is = %d",sum);
    }
    return sum;
}

2 个答案:

答案 0 :(得分:1)

为什么你认为这个

scanf("%e", &e);

应该是这样吗?

scanf()函数采用格式说明符来匹配扫描输入,在您的情况下,您希望将值存储在double变量中,您需要"%lf"说明符,所以scanf()所有内容都应改为

scanf("%lf", &whateverDoubleVariableYouWantToStoreTheResultIn);

您不需要从给定类型的变量转换为相同类型,例如此处

dd=(double)d;

而且,你必须知道,scanf()返回一个值,你不应该忽略它,因为你的程序在输入错误的情况下会出错,你应该在库手册中检查scanf()或者C标准,以更好地了解如何使用它。

答案 1 :(得分:1)

除了@iharob好的建议:

  1. 更改n类型

    // double a, b, c, d, e, n;
    double a, b, c, d, e;
    int n;
    
  2. 调整输入代码

    // and previous lines
    if (1 != scanf("%lf", &e))  // %d --> %lf
      Handle_InputError();
    printf("Please select the number of rectangles for the Simpson's ...
    if (1 != scanf("%d", &n)  // %n --> %d
      Handle_InputError();
    
  3. 调整输出

    // printf("the value is = %d",sum);
    printf("the value is = %e",sum);  // or %f
    
  4. 次要位

    // int main()  
    int main(void) // or int main(int argc, char *argv[])
    
    // return sum;  returning a double here is odd
    return 0;