C:通过命令行参数制作多项式函数

问题描述

在我的微积分课程中,经常被要求找到两点之间的平均速度以找到瞬时速度,这需要我做f(b) - f(a) / b - a。我想将参数传递给程序(最终加载到Ti-84上)以快速,理想地为我解决此问题 像这样工作:./a.out 2 4 -1,2.9 2.9999生成多项式2x^2 + 4x - 1,它将同时在2.92.9999上运行。到目前为止,我已经在这段代码中编写了大多数逻辑,但是我很难将其放入适当的C语言中。

#include<stdio.h>
int main(int argc,char *argv[])
{
        int comma; // Ex: ` ./a.out 1 2 3,4 5 ` comma is at index 3
        // Find out where comman is located
        for ( int i=1;i<argc; i++)
        {
                if (argv[i] == ','){
                        int comma = i;
                        break;
                }
        }

        printf("%d",comma);

        // PSUEDO-CODE START
        //
        // Problem: f(b) - f(a) / b - a
        //
        // Idea
        // ------------------------------------------------------------
        // ./a.out 7 2 3,2 5
        // // Right now argc is 6
        // // Right now comma is 4
        // polynomialOrder = argc - comma
        //
        // // Get bigger number for the / b - a part
        // firstNum  = argv[comma + 1]
        // secondNum = argv[comma + 2]
        // biggerNum = ( firstNum > secondNum ) ? firstNum : secondNum;
        // smallerNum = ( firstNum < secondNum ) ? firstNum : secondNum;
        //
        // ------------------------------------------------------------
        //
        // Psuedo-code:
        //
        // for  (int i=polynomialOrder; i >= 0; i--)
        // {
        //      if (i == 0){ function += argv[i]} // I don't want 3x^2 + 2x^1 + 4^0,the
4^0 should be 4
        //      else{
        //              // Generate a function?
        //              polynomial += argv[i]^i;  // The += appends to the function
        //      }
        // }
        // // result is -7x^2 + 2x^1 + 1
        //
        // Function generated:
        // -------------------------------------------------------
        // float polynomial(a,b) {
        //      float result;
        //      float a_result = (-7*(a**2)) + (2*(a**1)) + 1;
        //      float b_result = same as ^,substitute in b
        //      float result = (b_result - a_result) / ( b - a);
        //      return return;
        // }
        // -------------------------------------------------------
        // }
        // -------------------------------------------------------
        // polynomial( smallerNum,biggerNum );

        return 0;
}

解决方法

至少这些问题:

比较错误

','不是字符串,并且是strcmp()的无效参数。当字符串相等时,strcmp()返回0。

// if (strcmp(argv[i],',')) // Check if arg is ','
if (strcmp(argv[i],",") == 0) // Check if arg is ","

本地对象

comma仅在块本地。中断后,此comma不再存在。以后polynomialOrder = argc - comma;没有comma可以访问。

{
   printf("Parameters to function");
   int comma = i; // All before are parts of function,after params
   break;
}

无效的电源代码

// (-7*(a**2)) + (2*(a**1)) + 1;
-7*pow(a,2) + 2*pow(a,1) + 1;
// or 
-7*a*a + 2*a + 1;
// or numerical best stability as 
(-7*a + 2)*a + 1;

floatdouble

当空间或精度超出精度/范围时,请使用float。在C语言中,最好使用double作为默认的浮点类型。

发布编译器警告/错误

OP的代码无法编译。发表有关剩余问题的错误,警告和详细问题。

如果所有代码都是 pseudo-code (伪代码),请将其张贴在代码开头。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...