Ⅰ 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");
}
}
望採納~如您還有不解,歡迎追問~
是否可以解決您的問題?