挺有意思的問題,簡單談一下看法
創(chuàng)新互聯(lián)提供高防主機(jī)、云服務(wù)器、香港服務(wù)器、成都電信服務(wù)器托管等
將你的需求分成兩部分,一是讓程序自行解析用戶輸入的函數(shù)解析式,二是繪制函數(shù)圖像。
首先,關(guān)于第一個功能,最直接的思路就是字符串解析,按照數(shù)學(xué)知識定義不同的運(yùn)算符號,按照使用習(xí)慣定義常用的變量和常量的符號字母,然后據(jù)此規(guī)則解析輸入的字符串,再根據(jù)解析結(jié)果確定函數(shù)中基本運(yùn)算的次數(shù)及運(yùn)算順序,最后將整個操作流程以一定形式存儲起來即可。
例如,對于y=log(x^2+x),包含三次基本運(yùn)算,第一步是x^2,第二步是上一步的結(jié)果+x,第三步是上一步的結(jié)果求對數(shù)。注意到log有定義域的限制,這也是要在程序中實現(xiàn)的。
然后,對于第二個功能,根據(jù)給定函數(shù)繪制圖像并不難,對于一元和二元函數(shù)來說很容易實現(xiàn),難點在于多元函數(shù)應(yīng)如何繪制直觀易懂的函數(shù)圖像?不過這一點超出編程語言的范疇了,而且二元函數(shù)可以滿足大部分應(yīng)用場景了。
繪制函數(shù)圖像的程序只需在定義域上按指定的步長求出不同自變量對應(yīng)的函數(shù)值,然后將點連成線,即可繪制出函數(shù)圖像。例如對于logx,定義域為x0。假設(shè)步長為0.1,則可求出0.1,0.2,0.3,...,99.9,100.0的函數(shù)值,然后繪制出點,再連點成線,即可得到函數(shù)圖像。
另外,這里還有很多細(xì)節(jié)沒有討論,例如輸入數(shù)據(jù)是字符串還是圖像;是否可以用其他方法解析輸入,例如神經(jīng)網(wǎng)絡(luò)。這些就很復(fù)雜了,不再深入。
回答中可能有考慮不周的地方,希望上述內(nèi)容對你有參考意義
#include "graphics.h"
#include stdio.h
#include conio.h
#include math.h
void main()
{
int GD,GM;
int i,val;
GD=DETECT;
initgraph(GD,GM,"");
setfillstyle(SOLID_FILL,WHITE);
bar(0,0,639,479);
setcolor(BLACK);
line(20,20,20,459); // y軸
line(15,25,20,20);
line(25,25,20,20);
outtextxy(16,10, "Y");
line(20,239,620,239); // x軸
line(615,234,620,239);
line(615,244,620,239);
outtextxy(625,234, "X");
setcolor(RED);
for(i=0;i560;i=i+2)//隔點輸出*,可以根據(jù)梳密需要調(diào)整 /
{
val=50*tan(i*2*3.14159/560);//2PI弧度表示360度
outtextxy(i+20,239-val,"*");
}
getch();
closegraph();
}
需要Window圖像編程,Window編程就是基于C語言的,在Visual C++6.0可以編寫Win32程序
這是一段java代碼,需要你自己改成C語言的了,注意換行啊
int x = 10;// 行數(shù)
String str = "*";
// 循環(huán),打印x行
// 位置1要換行,位置2,3不需要換行
for (int i = 0; i x; i++) {
// 每打印一行字符就換行
System.out.println();// 1
// 循環(huán)打印行開頭空格,每增加一行就多一個空格
for (int j = 0; j i + 1; j++) {
System.out.print(" "); // 2
}
// 打印圖案
for (int k = 0; k x; k++) {
System.out.print(str); // 3
}
}