c语言解一元一次方程的函数,问一道算法题目(解一元一次方程的问题)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

void fun(char *a,int left ,int right , int *b ,int *c) // int fun(字符数组 上界 下界 常数 系数)

{

int f; // 符号位

int sum ; //数字位

int i; // 循环变量

f=1;

sum=0;

for (i=left; i<= right ; i++)

{ if(a[i] == '-') f=-1;

if (a[i] =='+') f=1;

if(a[i] >='0' && a[i] <= '9')

{

sum=10*sum + a[i] - '0' ;

}

if(a[i]>='a' && a[i]<='z')

*c=sum;

else *b=sum;

}

}

// 函数 用来在a[left] -- a[right]中 得出a常数,b系数。

int main( int argc, char *argv[])

{

char *a; //字符串

int dy; // 等于号的位置;

int z; // 字符数组总共元素

int b,c; // b为常数 c为系数

int d,e; // d为常数 e为系数

int i; //循环变量

int jie; //方程的解

int zm ; //字母

a=NULL;

dy=0;

scanf("%s",a);

z=strlen(a);

for(i=1;i<=z;i++)

{

if (a[i] == '==' )

{z=i;

break;

}

}

for(i=1;i<=z;i++)

{

if ( a[i] <= 'z' && a[i] >='a')

{

zm=a[i];

break;

}

}

a=0;b=0;

fun(a,1,dy,&b,&c);

fun(a,dy,z,&d,&e);

jie=(d-b)/(e-c);

printf("%c = %d",zm,jie);

getch();

return 0;

}

这是我的第一次源代码,后来经过人指点

改为:

#include

#include

void fun(char *a,int left ,int right , int *b ,int *c) // int fun(字符数组 上界 下界 常数 系数)

{

int f; // 符号位

int sum ; //数字位

int i; // 循环变量

f=1;

sum=0;

for (i=left; i<= right ; i++)

{ if(a[i] == '-') f=-1;

if (a[i] =='+') f=1;

if(a[i] >='0' && a[i] <= '9')

{

sum=10*sum + a[i] - '0' ;

}

if(a[i]>='a' && a[i]<='z')

*c=sum;

else *b=sum;

}

}

// 函数 用来在a[left] -- a[right]中 得出a常数,b系数。

int main( int argc, char *argv[])

{

char a[20]; //字符串

int dy; // 等于号的位置;

int z; // 字符数组总共元素

int b,c; // b为常数 c为系数

int d,e; // d为常数 e为系数

int i; //循环变量

double jie; //方程的解

int zm ; //字母

a=NULL;

dy=0;

scanf("%s",a);

z=strlen(a);

for(i=0;i

{

if (a[i] == '==' )

{z=i;

break;

}

}

for(i=0;i<=z;i++)

{

if ( a[i] <= 'z' && a[i] >='a')

{

zm=a[i];

break;

}

}

fun(a,1,dy,&b,&c);

fun(a,dy,z,&d,&e);

jie=jie=((double)(d-b))/(c-e);

printf("%c = %.3f",zm,jie);

getch();

return 0;

}

——————

改动日志:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 最小二乘法是一种常见的数据拟合方法,可以用于拟合一次函数。下面是使用C语言实现最小二乘法拟合一次函数的示例代码: ```c #include <stdio.h> #include <math.h> int main() { int n = 5; // 数据点个数 double x[] = {1, 2, 3, 4, 5}; // 自变量 double y[] = {2.1, 3.9, 6.1, 8.2, 10.1}; // 因变量 double sumx = 0, sumy = 0, sumxy = 0, sumx2 = 0; // 定义一些中间变量 for (int i = 0; i < n; i++) { sumx += x[i]; sumy += y[i]; sumxy += x[i] * y[i]; sumx2 += x[i] * x[i]; } double a = (n * sumxy - sumx * sumy) / (n * sumx2 - sumx * sumx); // 计算斜率a double b = (sumy - a * sumx) / n; // 计算截距b printf("y = %gx + %g\n", a, b); // 输出拟合结果 return 0; } ``` 上述代码中,我们假设要拟合的一次函数为y=ax+b,其中a表示斜率,b表示截距。我们通过最小二乘法的公式计算出斜率a和截距b,然后输出拟合结果。 ### 回答2: C语言最小二乘法拟合一次函数的基本思路是通过已知的数据点来拟合一条一次函数的直线。下面是一个简单的实现步骤: 1. 定义两个数组,存储已知的数据点的横坐标和纵坐标。例如,分别定义一个数组x[]和y[]分别存储已知点的横坐标和纵坐标。 2. 计算已知数据点的个数n,并计算数组x[]和y[]的平均值,分别记为x_avg和y_avg。 3. 计算回归直线的斜率a和截距b。 - 先计算斜率a的分子sum1和分母sum2,其中sum1为Σ((x[i]-x_avg) * (y[i]-y_avg))的和,sum2为Σ(x[i]-x_avg)^2的和。 - 计算斜率a = sum1 / sum2。 - 计算截距b = y_avg - a * x_avg。 4. 根据得到的斜率a和截距b,输出拟合的一次函数的方程。 这样就完成了通过最小二乘法拟合一次函数的过程。 需要注意的是,上述的实现只适用于已知的数据点是符合一次函数关系的情况。对于线性关系的数据点,最小二乘法会得到拟合效果不好的结果。此外,还可以考虑使用其他更高阶的多项式来拟合数据点,或者使用其他更高级的拟合算法来提高拟合精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值