Ⅰ c语言编程:怎么让编写的程序理解用户给出的函数解析式,并绘制出相应的函数图像
挺有意思的问题,简单谈一下看法
将你的需求分成两部分,一是让程序自行解析用户输入的函数解析式,二是绘制函数图像。
首先,关于第一个功能,最直接的思路就是字符串解析,按照数学知识定义不同的运算符号,按照使用习惯定义常用的变量和常量的符号字母,然后据此规则解析输入的字符串,再根据解析结果确定函数中基本运算的次数及运算顺序,最后将整个操作流程以一定形式存储起来即可。
例如,对于y=log(x^2+x),包含三次基本运算,第一步是x^2,第二步是上一步的结果+x,第三步是上一步的结果求对数。注意到log有定义域的限制,这也是要在程序中实现的。
然后,对于第二个功能,根据给定函数绘制图像并不难,对于一元和二元函数来说很容易实现,难点在于多元函数应如何绘制直观易懂的函数图像?不过这一点超出编程语言的范畴了,而且二元函数可以满足大部分应用场景了。
绘制函数图像的程序只需在定义域上按指定的步长求出不同自变量对应的函数值,然后将点连成线,即可绘制出函数图像。例如对于logx,定义域为x>0。假设步长为0.1,则可求出0.1,0.2,0.3,...,99.9,100.0的函数值,然后绘制出点,再连点成线,即可得到函数图像。
另外,这里还有很多细节没有讨论,例如输入数据是字符串还是图像;是否可以用其他方法解析输入,例如神经网络。这些就很复杂了,不再深入。
回答中可能有考虑不周的地方,希望上述内容对你有参考意义
Ⅱ c语言怎样实现绘图,解微分方程跪求源代码。。。
你连题都没有,想要源代码,估计希望不大了,不过有本书里有将如何用C语言解微分方程。
好像是叫计算方法 C语言版。哦,找到了
《计算方法(C语言版)》是作者十多年计算方法研究应用和教学经验的结晶。全书共分9章,主要内容包括算法与误差、非线性方程求根、线性方程组的直接求解和迭代求解、代数插值、数值积分、矩阵特征值与特征向量的计算、常微分方程初值问题的数值解
Ⅲ c语言编写二元一次方程组求解,菜鸟级,帮忙指出错误,谢谢
#include
#include
#include
#include
main()
{
int
x1,x2,x3,y1,y2,y3,d1,d2,d3;
/*赋任意值,已知数和未知数都是整数
*/
signed
int
x=-32767,y=-32767;
/*未知数取值范围,可修改*/
int
r1=0,r2=0,r3=0;
/*方程是否成立变量*/
int
suc=0;
/*解题是否成功变量*/
for(;x<=32767;x++)
{
for(y=-32767;y<=32767;y++)
{
if(sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1))==d1)
r1=1;
if(sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2))==d2)
r2=1;
if(sqrt((x-x3)*(x-x3)+(y-y3)*(y-y3))==d3)
r3=1;
if(r1&&r2&&r3)
{
suc=1;
break;
}
else
{
r1=0;
r2=0;
r3=0;
}
}
if(suc)
break;
}
if(suc)
printf("x=%d,y=%d",x,y);
/*有解输出结果*/
esle
printf("no
solution
in
the
range");
/*在限定范围内无解*/
}
Ⅳ 怎么利用C语言解方程
#include"math.h"
typedefstruct{
double*coef;
intn;
}poly;
doubledfx(poly*p,doublev){
doublet=v;
doubler=0;
double*coef=p->coef;
inti;
r+=coef[1];
for(i=2;i<p->n;i++){
r+=coef[i]*i*t;
t*=v;
}
returnr;
}
doublefx(poly*p,doublev){
doublet=v;
doubler=0;
double*coef=p->coef;
inti;
r+=coef[0];
for(i=1;i<p->n;i++){
r+=coef[i]*t;
t*=v;
}
returnr;
}
doublepolyroot(poly*p,doublex0){
doublex=x0-1;
intn=0;
while(fabs(x-x0)>1e-12&&n++<100){
doubledx0=dfx(p,x0);
x=x0;
if(dx0)
x0-=fx(p,x0)/dx0;
else
x0-=0.1;
printf("inter:%df(%lf)=%lf ",n,x0,fx(p,x0));
}
returnx0;
}
intmain()
{
doublec[4]={-6,3,-4,2};
polyd={c,4};
polyroot(&d,1.5);
return0;
}
Ⅳ 谁能帮我设计一个C语言程序,求解方程组的,急啊,哪位高手帮下咯,万分感谢
假定你要的是线性方程组,下面的
float *GauseSeidel(float *a,int n)
是高斯赛德尔法求解线性方程组的通用子程序。
N 是 迭代次数极限。
main()里写了调用的例子。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 100
float *GauseSeidel(float *a,int n)
{
int i,j,nu=0;
float *x,dx;
x=(float *)malloc(n*sizeof(float));
for(i=0;i<=n-1;i++)
x[i]=0.0;
do {
for(i=0;i<=n-1;i++) {
float d=0.0;
for(j=0;j<=n-1;j++)
d+=*(a+i*(n+1)+j)*x[j];
dx=(*(a+i*(n+1)+n)-d)/(*(a+i*(n+1)+i));
x[i]+=dx;
}
if(nu>=N)
{
printf("iter divergence\n");
exit(1);
}
nu++;
}
while(fabs(dx)>1e-6);
return x;
}
void main()
{
int i;
float *x;
float c[12]={5,2,1,8,2,8,-3,21,1,-3,-6,1};
float *GauseSeidel(float *,int);
x=GauseSeidel(c,3);
for(i=0;i<=2;i++)
printf("x[%d]=%f\n",i,x[i]);
getch();
}
Ⅵ 用c语言编写一个程序用高斯消元法求解线性方程组的解程序流程图
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,i,j,k;
double a[100][100],b[100],o;
cout<<"输入未知数个数:"<<endl;
cin>>n;
cout<<"输入"<<n<<"个方程组(未知数系数及等号右边常数):"<<endl;
for (i=1;i<=n;i++)
for (j=1;j<=n+1;j++)
cin>>a[i][j];
for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
if (fabs(a[j][i])>1e-7)
{
o=a[i][i]/a[j][i];
for (k=i;k<=n+1;k++)
a[j][k]=a[j][k]*o-a[i][k];
}
for (i=n;i>0;i--)
{
b[i]=a[i][n+1]/a[i][i];
for (j=i-1;j>0;j--)
a[j][n+1]=a[j][n+1]-b[i]*a[j][i];
}
cout<<"解得:"<<endl;
for (i=1;i<=n;i++) cout<<b[i]<<endl;
system("pause");
return 0;
}
Ⅶ 用c语言编写三元二次方程组的求解
#include "stdio.h"
void main()
{
int a,b,c,d,x,y;
printf("Please put the mumber of a,b&c from th quadratic equation of one variable one by one\n");
scanf("%d,%d,%d",&a,&b,&c);
d=b*b-4*a*c;
if (d<0)
{
printf("NO Root!Wrong!\n");
}
else
{
y=-b-sqrt(d)/2*a;
y=-b+sqrt(d)/2*a;
printf("The 1st equation root=%\nThe 2nd equation root=%d\n",y,x);
}
}
Ⅷ C语言编程:求一元二次方程的解,要求如下图,咋编
代码文本:
#include "stdio.h"
#include "math.h"
void fp(double a,double b,double t){
b/=(a+=a);
t=sqrt(t)/a;
printf("x1 = %g x2 = %g ",-b+t,-b-t);
}
void fn(double a,double b,double t){
b/=(a+=a);
t=sqrt(-t)/a;
if(b)
printf("x1 = %g+%gi x2 = %g-%gi ",-b,t,-b,t);
else
printf("x1 = %gi x2 = %gi ",t,-t);
}
void f0(double a,double b){
printf("x1=x2 = %g ",-b/(a+a));
}
int main(int argc,char *argv[]){
double a,b,c,t;
printf("Enter a, b, c(R:)... ");
if(scanf("%lf%lf%lf",&a,&b,&c)==3 && a)
(t=b*b-4*a*c)>0 ? fp(a,b,t) : t<0 ? fn(a,b,t) : f0(a,b);
else
printf("Input error, exit... ");
return 0;
}
Ⅸ 用C语言 求解方程ax*x+bx+c=0的根,要求:画出N—S流程图,写出伪代码,并写出相应程序
float f(float x)
设 dx 初值
计算 dy
dy = f(x0) - f(x0+dx);
导数 初值
dd1=dy/dx;
Lab:;
dx = 0.5 * dx; // 减小步长
dy = f(x0) - f(x0+dx);
dd2=dy/dx; // 导数 新值
判断新旧导数值之差是否满足精度,满足则得结果,不满足则返回
if ( fabs(dd1-dd2) < 1e-06 )
else ;
Ⅹ 用C语言编写 方程求解
您好!很高兴为您解答。
原代码中的scanf和printf中的%要放在d和lf的前面才对,改正后运算无误~
#include <stdio.h>
#include <math.h>
void main ()
{
double x1;//x1,x2分别为方程的2个解
double x2;
double melt;
int a;
int b;//初始化ABC的三个变量
int c;
printf("请输入a b c三个数的值:");
scanf("%d %d %d",&a, &b ,&c);//输入ABC的时候需要空格
melt = b*b - 4*a*c;//初始化melt的值
if (melt>0)
{ x1=(-b + sqrt(melt))/(2*a);
x2=(-b - sqrt(melt))/(2*a);
printf ("2个解,x1 = %lf,x2 = %lf\n",x1,x2);
}
else if (melt==0)
{
x1 = (-b )/(2*a);
x2 = x1;
printf("1个解,x1 = %lf,x2 = lf%\n",x1,x2);
}
else
{
printf("无解\n");
}
}
望采纳~如您还有不解,欢迎追问~
是否可以解决您的问题?