十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Go语言由Google公司开发,并于2009年开源,相比Java/Python/C等语言,Go尤其擅长并发编程,性能堪比C语言,开发效率肩比Python,被誉为“21世纪的C语言”。
创新互联是一家集成都网站设计、网站建设、网站页面设计、网站优化SEO优化为一体的专业网站建设公司,已为成都等多地近百家企业提供网站建设服务。追求良好的浏览体验,以探求精品塑造与理念升华,设计最适合用户的网站页面。 合作只是第一步,服务才是根本,我们始终坚持讲诚信,负责任的原则,为您进行细心、贴心、认真的服务,与众多客户在蓬勃发展的市场环境中,互促共生。
Go语言在云计算、大数据、微服务、高并发领域应用应用非常广泛。BAT大厂正在把Go作为新项目开发的首选语言。
Go语言能干什么?
1、服务端开发:以前你使用C或者C++做的那些事情,用Go来做很合适,例如日志处理、文件系统、监控系统等;
2、DevOps:运维生态中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go语言开发;
3、网络编程:大量优秀的Web框架如Echo、Gin、Iris、beego等,而且Go内置的 net/http包十分的优秀;
4、Paas云平台领域:Kubernetes和Docker Swarm等;
5、分布式存储领域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、区块链领域:区块链里面有两个明星项目以太坊和fabric都使用Go语言;
7、容器虚拟化:大名鼎鼎的Docker就是使用Go语言实现的;
8、爬虫及大数据:Go语言天生支持并发,所以十分适合编写分布式爬虫及大数据处理。
1、求1+2+3+……….+100。(循环)
答案
#includestdio.h
void main()
{
int i,sum=0;
for(i=1;i=100;i++)
sum=sum+i;
printf("%d",sum);
}
2、 求1*2*3*……….*10。(循环)
答案
void main()
{
int i=0,j=1;
for (i=2;i=10;i++)
{
j*=i;
}
printf("%d",j);
return 0;
}
3、 输入三个数字,输出他们的最大值。(if)
答案
#includestdio.h
void main()
{int a,b,c,d;
scanf("%d,%d,%d",a,b,c);
d=max(a,b,c);
printf("max=%d",d);
getch();/*暂停看运行结果*/
}
int max(int x,int y,int z)
{int u;
if(x=yx=z)
u=x;
else if(y=xy=z)
u=y;
else
u=z;
return(u);
4.用起泡法对十个数据排序(数组实现)
答案
#includestdio.h
main ( )
{ int i,j,t;
static int a[10]={5,7,4,2,3,6,1,0,9,8};
for(j=0;j9;j++)
{ for(i=0;i9-j;i++)
{ if(aa)
{ t=a;a=a;a=t ;
}
}
}
for(i=0;i10;i++)
printf("%2d",a);
}
5、输入十个数字,逆序输出。(数组实现)
答案
#includestdio.h
main()
{int a[10],i=0;
for(i=0;i=9;i++)
scanf("%f",a);
printf("\n");
for(i=9;i=0;i--)
printf("%f",a);
}
6输入两个数,交换他们的值并输出。(元素交换)
答案
#includestdio.h
int main ()
{
int m,n,temp;
scanf("%d%d",m,n);
if (mn)
{
temp=m;
m=n;
n=temp;
}
printf("%d",m);
return 0;
}
7.输出9*9乘法表。(双层循环)
答案
#include stdio.h
void main()
{
int i=1;
for(i; i=9; i++)
{
int j=1;
for(j;j=i;j++)
{
printf("%d*%d=%d ", i, j, i*j);
}
printf("\n");
}
}
8.输入一行字符,将所有的小写字母转换成大写字母,大写字母转换成小写字母,其余字符不变。输出转变后的这行字符。
答案
#include "stdio.h"
void main()
{
char a[n];
int i;
scanf("%s",a);
printf("大写为:");
for(i=0;i=n;i++)
{
if(a='z'a='a')
a=a-32;
printf("%c",a);
}
printf("\n小写为:");
for(i=0;i=3;i++)
{
a=a+32;
printf("%c",a);
}
}
9、 编写一个简单计算器程序,要求能够完成两个数的+,-,*,/四种运算。输出运算式及运算结果。(switch)
6.2
#include"stdio.h"
main()
{char c;int i=0,j=0,k=0,l=0;
while((c=getchar())!=’\n’)
{if(c=65c=90||c=97c=122) i++;
else if(c=48c=57) j++;
else if(c==32) k++;
else l++;}
printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);
}
6.6
#include"math.h"
main()
{int x=100,a,b,c;
while(x=100x1000) {a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;
if(x==(pow(a,3)+pow(b,3)+pow(c,3))) printf("%5d",x);x++;}
}
6.7
main()
{int m,i,j,s;
for(m=6;m10000;m++)
{s=1;
for(i=2;im;i++)
if(m%i==0) s=s+i;
if(m-s==0)
{printf("%5d its fastors are 1 ",m);for(j=2;jm;j++) if(m%j==0)
printf("%d ",j);printf("\n");}
}
}
或
main()
{int m,i,j,s;
for(m=6;m1000;m++)
{s=m-1;
for(i=2;im;i++)
if(m%i==0) s=s-i;
if(s==0)
{printf("%5d its fastors are 1 ",m);for(j=2;jm;j++) if(m%j==0)
printf("%d ",j);printf("\n");}
}
}
6.8
main()
{int i=1,n;double t,x=1,y=2,s,sum=0;
scanf("%ld",n);
while(i=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;}
printf("%f\n",sum);
}
11,
#includestdio.h
void main()
{
char c;
while((c=getchar())!='\n')
{
c=c+4;
if(c'Z'+4||c'z')
c=c-26;
}
printf("%c",c);
}
printf("\n");
}
12,P111 5.5 5.6(switch)
5.5
#include stdio.h
main()
{int x,y;
printf("输入x:");
scanf("%d",x);
if(x1)
{ y=x;
printf("x=%3d, y=x=%d\n",x,y);
}
else if (x10)
{ y=2*x-1;
printf("x=%3d, y=2*x-1=%d\n",x,y);
}
else
{ y=3*x-11;
printf("x=%3d, y=3*x-11=%d\n",x,y);
}
}
5.6
#include stdio.h
main()
{ float score;
char grade;
case 2:
printf("请输入学生成绩:");
scanf("%f",score);
while(score100||(score0)
{ printf("\n输入有误,请重新输入:");
scanf("%f",score);
}
switch((int)(score/10))
{ case 10:
case 9: grade=’A’;break;
case 8: grade=’B’;break;
case 7: grade=’C’;break;
case 6: grade=’D’;break;
case 5:
case 4:
case 3:
case 1:
case 0: grade=’E’;
}
printf("成绩是%5.1f,相应的等级是%c。\n",score,grade);
}
13(一元二次方程求根) (求闰年)
5.5
#includestdio.h
void main()
{
int year,leap;
scanf("%d",year);
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
leap=1;
else
leap=0;
}
else
leap=1;
}
else
leap=0;
if(leap)
printf("%d is",year);
Else
printf("%d is not",year);
printf("a leap year.\n")
}
5.6
14.
2.17
输出50个学生中成绩高于80分者的学号和成绩
2.18
输出2000——2500年每一年是否闰年
#includestdio.h
void main()
{
int year;
year=2000;
go: if(((year%4 == 0)(year%100 != 0)) || (year%400 == 0))
printf("%d is run nian",year);
if(year=2500)
year=year++;
if(year2500)
goto end;
goto go;
end: getch();
}
1、服务器编程:以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
2、分布式系统、数据库代理器、中间件:例如Etcd。
3、网络编程:这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包基本上把我们平常用到的网络功能都实现了。
4、开发云平台:目前国外很多云平台在采用Go开发,我们所熟知的七牛云、华为云等等都有使用Go进行开发并且开源的成型的产品。
5、区块链:目前有一种说法,技术从业人员把Go语言称作为区块链行业的开发语言。如果大家学习区块链技术的话,就会发现现在有很多很多的区块链的系统和应用都是采用Go进行开发的,比如ehtereum是目前知名度最大的公链,再比如fabric是目前最知名的联盟链,两者都有go语言的版本,且go-ehtereum还是以太坊官方推荐的版本。
自1.0版发布以来,go语言引起了众多开发者的关注,并得到了广泛的应用。go语言简单、高效、并发的特点吸引了许多传统的语言开发人员,其数量也在不断增加。
使用 Go 语言开发的开源项目非常多。早期的 Go 语言开源项目只是通过 Go 语言与传统项目进行C语言库绑定实现,例如 Qt、Sqlite 等。
后期的很多项目都使用 Go 语言进行重新原生实现,这个过程相对于其他语言要简单一些,这也促成了大量使用 Go 语言原生开发项目的出现。
卡西欧计算器有很多种的,,每一种卡西欧计算器编程语言都大不一样,就比如卡西欧4800和卡西欧5800计算器,编程语句和关键字很多不一样的了,如果你问的仅仅是进入计算器编程界面的话,对于卡西欧5800计算器那就是:“MODE SRTUP”——5号键,PROG——1号键,NEW——输入程序名称——选择程序模式(一般情况下都是在COMP模式下)——进入代码输入界面,输入程序代码再运行就行了。
一、使用简单,最大的一个优点就是只要具有初中水平会运用数学公式对函数有一般的了解的人,能基本理解casio4x00的内装函数即可进行简单的编程。非常适合测量初学者和数学程序爱好者学习,也适合专业的测量人员的使用和能力提高。不像其它的专业一定要具有较高的专业技术水平才能进行电脑编程。
二、成本低廉,价格在400元左右。
三、携带方便,体积很小可随时放在口袋里随拿随用。casio系列较好的编程型号有casio4500(以下简称4500)、casio4800(以下简称4800),(好象近来还推出了一款casio4850)前者较内存小,只有1103个字节,能应付一些较为简单的公式计算和科学计算,但由于内存有限,对一些较复杂或子程序过多的程序就力不从心了,不能出色的完成测量任务。4800就比4500有较大的改进,4800内存达到的4500个字节,而且显示屏是4500的几倍大,能更准确的显示数据,内装函数字符一目了然。且具有简单的人机对话功能,出现了菜单子菜单。4800还在4500增加了啊佛加德罗常数、万有引力长常数、详见《操作说明书》。4800有很多很实用的功能如他有一个公式解答功能,其原理是用牛顿法解方程。
举个例子: 有一方程式:a=2b-c求 当a=2、c=5时的b值。 将该方程式存入公式存贮器中,:先按按解答键“SOLVE” a输入2 、c输入5,再按解答键“SOLVE”计算器就会显示:b=3.5。此项功能被称为自动解答功能。同时它也是非常实用的,在实际工作中通常要有一个经常使用的小公式,可借助它来完成。4800使用的程序语言可以算做简单的BASIC语言,有的命令如GOTO(转移到)、PAUSE(暂停)就与BASIC语言的一模一样。现在4800的程序语言来说说。 其主要命令有:
1、=…… 条件转移成立符号,其用法相当于BASIC中的IF……THEN(假设语句相当于假如……然后,IF相当于条件……THEN相当于结果)语句
2、≠……条件转移不成立符号,其用法相当于BASIC中的IF……ELSE语句通常二者连用,相当于BASIC中的IF……THEN……ELSE语句(它的英语形式一般为if a>b then c>d else if b>a the……)
3、⊿ …… 条件转移结束符号,与=和≠配合使用,放在条件语句最后面。
4、 LbI……标记命令。用于将一段语句作转换标记。后可接字母、数字、符号,但不能超过两个字节,如不能用≥10的数字作行标,否则会出现出错信息。
5、Goto…… (条件)转移命令。前面可加条件语句,与BASIC中的GOTO作用相同。通常与LbI一起用,如果所转移的行号无效,则会显示:GO ERROR(详见说明书)出错信息
6、 Dsz……减量循环命令。可减少未知数的数量。
7、 Isz……增量循环命令。
8、 Pause……暂停命令。后可接0~9之间的整数n,可使某一数据显示n/2秒钟,然后继续运行下面的程序。它被认为是一个语句。
9、 Fixm……变量锁定命令。该命令能使其所有变量值(A~Z)均当成定数处理。当程序运行时,将不需要输入变数(“{}”内的变数除外),而是将存贮器中原有的数值来完成计算。
10、{}…… 变量输入命令。只程序在循环使用时经常发生改变的数字,如里程、和宽度。它的输入方式可以使很多种如{AB}{A,B}{A B}都可以。注意“{”和“}”必需成对输入。否则会出现Syn ERROR(详见说明书)出错信息。
11、=、≠、、、≤、≥……条件运算关系算子,常与Goto命令构成条件转换语句。
12、Prog……在正常情况是下打开程序的快捷键。在编程过程中是运行子程序命令,后接子程序名(一定要加引号,且要注意空格,否则会出现Syn ERROR(详见说明书)的出错信息。
13、↓……换行,只保留计算过程不显示计算结果。当不想对其换行时也可用:代替。
14、◣……数据显示命令。该命令输入后会自动换行。保留计算过程并显示计算结果。有一条总原则即:①学会运用程序的语言,尽可能使程序变得简明扼要;我们编写程序应该尽可能地使程序变得简明扼要,能省略的要一定省略。烦琐的语句过多的字节只能使计算器的运算速度变慢没有任何好处,而且相当站用内存。学会节省字节和使用符号是相当重要的。尤其要灵活运用计算器语句因为它会使你更多的节省字节达到预期效果。比如下程序就灵活运用了 Dsz (减量循环命令)。比如使其能输入10个数值,并计算10个数值的平均值。一般程序求10个数字的平均值需要有11个数字的提示符号。但学会灵活运用了 Dsz (减量循环命令)那么只要有三个就可以了,这样就大大节省了字节的占用。 例程序如下:
A=10
C=0
Lbi 1
{B}
C=B+C
Dsz A
Goto 1
C÷10
但要注意的是:如果你是初学者或你对程序的编程不熟练,首先一定要先按照你的思路把程序步骤一步一步的列好在确定它能正确的计算后在想办法对其进行精简修改,否则只会使程序出现过多的错误;②尽可能使程序所包含的子程序减少;子程序过多就会造成程序结构松散,有的计算器主程序需要三个或四子程序,过多的子程序只会引起程序之间紊乱、混淆。子程序过多对在使用时查找也比较麻烦。而且子程序过多如果其中某个环节出现错误很难发现其错误所在,在编写程序时要尽量的少编写子程序,即使要编写子程序时也要注意尤其在容易出错的地方要多加注意。有弊就有利如果你对子程序了解得多了那么可以几个主程序合用一个之程序也到到了要求的减少程序的字节使程序更简化。例程序如下:
CX CD
Lbi 1 Lbi 1
Prog”V” Prog”V”
B=L-(K-S) ◣ B=L+(K-S) ◣
Goto 1 Goto 1
V
Y=√A2B2+B2X2÷A
③尽量少用或不使用扩充变数存贮器,如A[1]、A[2]等:使用扩充存贮器是一个利少弊多的做法。每扩充一个存贮器就要减少10个字节的容量,而每个扩充存贮器至少要占四个字节,比一个A~Z变量净增三个。有时你会觉得变量存贮器不够用。其实不尽然,一般程序变量数很少会超过26个,只是你不懂得去使用。一般来说,两个相对独立的程序步骤之间根本不需要考虑变量重复问题。针对某一个程序,只要不是固定变量({}内的变量),也就是那些通过计算出来的用于下一步计算的数值。我们就可以通过重复赋值来得到某些计算量。反正在下一轮循环中该量是变化的。明白了各种命令的含义和注意事项就可以编程了。 举例有公式如下:
CX 程序名称
Lbl 0↓ 起始标记命令语句
QMNFJ↓ 数据输入语句 (指公式循环运算时的不变量)
{KDE}↓ 数据输入语句(指公式循环运算时变量)
S=K—Q:G=F+J↓ 公式运算命令
X=M+ScosF↓ 公式运算命令
Y=M+SsinF↓ 公式运算命令
Prog ”j”↓ 运行子程序命令
Goto 0↓ 循环运算语句
J 子程序名称
H=X+DcosG◣ 公式运算、数据显示语
I=Y+DsinG◣ 公式运算、数据显示语
T=X—EcosG◣ 公式运算、数据显示语
U=Y—EsinG◣ 公式运算、数据显示语
最后计算器状态设定语句是大家最容易忽视的。如果将单位进行预设那么计算器就会默认其使用单位在进行下一单位换算时要一定要进行单位转换,否者会使计算结果错误。在显示屏幕的左下角可以清楚地发现小提示符号:如D代表度为现在的缺省单位、R代表弧度为现在的缺省单位、G 代表梯度为现在的缺省单位。
卡西欧计算器有很多种的,,每一种卡西欧计算器编程语言都大不一样,就比如卡西欧4800和卡西欧5800计算器,编程语句和关键字很多不一样的了,如果你问的仅仅是进入计算器编程界面的话,对于卡西欧5800计算器那就是:“MODE SRTUP”——5号键,PROG——1号键,NEW——输入程序名称——选择程序模式(一般情况下都是在COMP模式下)——进入代码输入界面,输入程序代码再运行就行了。
一、使用简单,最大的一个优点就是只要具有初中水平会运用数学公式对函数有一般的了解的人,能基本理解casio4x00的内装函数即可进行简单的编程。非常适合测量初学者和数学程序爱好者学习,也适合专业的测量人员的使用和能力提高。不像其它的专业一定要具有较高的专业技术水平才能进行电脑编程。
二、成本低廉,价格在400元左右。
三、携带方便,体积很小可随时放在口袋里随拿随用。casio系列较好的编程型号有casio4500(以下简称4500)、casio4800(以下简称4800),(好象近来还推出了一款casio4850)前者较内存小,只有1103个字节,能应付一些较为简单的公式计算和科学计算,但由于内存有限,对一些较复杂或子程序过多的程序就力不从心了,不能出色的完成测量任务。4800就比4500有较大的改进,4800内存达到的4500个字节,而且显示屏是4500的几倍大,能更准确的显示数据,内装函数字符一目了然。且具有简单的人机对话功能,出现了菜单子菜单。4800还在4500增加了啊佛加德罗常数、万有引力长常数、详见《操作说明书》。4800有很多很实用的功能如他有一个公式解答功能,其原理是用牛顿法解方程。
举个例子: 有一方程式:a=2b-c求 当a=2、c=5时的b值。 将该方程式存入公式存贮器中,:先按按解答键“SOLVE” a输入2 、c输入5,再按解答键“SOLVE”计算器就会显示:b=3.5。此项功能被称为自动解答功能。同时它也是非常实用的,在实际工作中通常要有一个经常使用的小公式,可借助它来完成。4800使用的程序语言可以算做简单的BASIC语言,有的命令如GOTO(转移到)、PAUSE(暂停)就与BASIC语言的一模一样。现在4800的程序语言来说说。 其主要命令有:
1、=…… 条件转移成立符号,其用法相当于BASIC中的IF……THEN(假设语句相当于假如……然后,IF相当于条件……THEN相当于结果)语句
2、≠……条件转移不成立符号,其用法相当于BASIC中的IF……ELSE语句通常二者连用,相当于BASIC中的IF……THEN……ELSE语句(它的英语形式一般为if a>b then c>d else if b>a the……)
3、⊿ …… 条件转移结束符号,与=和≠配合使用,放在条件语句最后面。
4、 LbI……标记命令。用于将一段语句作转换标记。后可接字母、数字、符号,但不能超过两个字节,如不能用≥10的数字作行标,否则会出现出错信息。
5、Goto…… (条件)转移命令。前面可加条件语句,与BASIC中的GOTO作用相同。通常与LbI一起用,如果所转移的行号无效,则会显示:GO ERROR(详见说明书)出错信息
6、 Dsz……减量循环命令。可减少未知数的数量。
7、 Isz……增量循环命令。
8、 Pause……暂停命令。后可接0~9之间的整数n,可使某一数据显示n/2秒钟,然后继续运行下面的程序。它被认为是一个语句。
9、 Fixm……变量锁定命令。该命令能使其所有变量值(A~Z)均当成定数处理。当程序运行时,将不需要输入变数(“{}”内的变数除外),而是将存贮器中原有的数值来完成计算。
10、{}…… 变量输入命令。只程序在循环使用时经常发生改变的数字,如里程、和宽度。它的输入方式可以使很多种如{AB}{A,B}{A B}都可以。注意“{”和“}”必需成对输入。否则会出现Syn ERROR(详见说明书)出错信息。
11、=、≠、、、≤、≥……条件运算关系算子,常与Goto命令构成条件转换语句。
12、Prog……在正常情况是下打开程序的快捷键。在编程过程中是运行子程序命令,后接子程序名(一定要加引号,且要注意空格,否则会出现Syn ERROR(详见说明书)的出错信息。
13、↓……换行,只保留计算过程不显示计算结果。当不想对其换行时也可用:代替。
14、◣……数据显示命令。该命令输入后会自动换行。保留计算过程并显示计算结果。有一条总原则即:①学会运用程序的语言,尽可能使程序变得简明扼要;我们编写程序应该尽可能地使程序变得简明扼要,能省略的要一定省略。烦琐的语句过多的字节只能使计算器的运算速度变慢没有任何好处,而且相当站用内存。学会节省字节和使用符号是相当重要的。尤其要灵活运用计算器语句因为它会使你更多的节省字节达到预期效果。比如下程序就灵活运用了 Dsz (减量循环命令)。比如使其能输入10个数值,并计算10个数值的平均值。一般程序求10个数字的平均值需要有11个数字的提示符号。但学会灵活运用了 Dsz (减量循环命令)那么只要有三个就可以了,这样就大大节省了字节的占用。 例程序如下:
A=10
C=0
Lbi 1
{B}
C=B+C
Dsz A
Goto 1
C÷10
但要注意的是:如果你是初学者或你对程序的编程不熟练,首先一定要先按照你的思路把程序步骤一步一步的列好在确定它能正确的计算后在想办法对其进行精简修改,否则只会使程序出现过多的错误;②尽可能使程序所包含的子程序减少;子程序过多就会造成程序结构松散,有的计算器主程序需要三个或四子程序,过多的子程序只会引起程序之间紊乱、混淆。子程序过多对在使用时查找也比较麻烦。而且子程序过多如果其中某个环节出现错误很难发现其错误所在,在编写程序时要尽量的少编写子程序,即使要编写子程序时也要注意尤其在容易出错的地方要多加注意。有弊就有利如果你对子程序了解得多了那么可以几个主程序合用一个之程序也到到了要求的减少程序的字节使程序更简化。例程序如下:
CX CD
Lbi 1 Lbi 1
Prog”V” Prog”V”
B=L-(K-S) ◣ B=L+(K-S) ◣
Goto 1 Goto 1
V
Y=√A2B2+B2X2÷A
③尽量少用或不使用扩充变数存贮器,如A[1]、A[2]等:使用扩充存贮器是一个利少弊多的做法。每扩充一个存贮器就要减少10个字节的容量,而每个扩充存贮器至少要占四个字节,比一个A~Z变量净增三个。有时你会觉得变量存贮器不够用。其实不尽然,一般程序变量数很少会超过26个,只是你不懂得去使用。一般来说,两个相对独立的程序步骤之间根本不需要考虑变量重复问题。针对某一个程序,只要不是固定变量({}内的变量),也就是那些通过计算出来的用于下一步计算的数值。我们就可以通过重复赋值来得到某些计算量。反正在下一轮循环中该量是变化的。明白了各种命令的含义和注意事项就可以编程了。 举例有公式如下:
CX 程序名称
Lbl 0↓ 起始标记命令语句
QMNFJ↓ 数据输入语句 (指公式循环运算时的不变量)
{KDE}↓ 数据输入语句(指公式循环运算时变量)
S=K—Q:G=F+J↓ 公式运算命令
X=M+ScosF↓ 公式运算命令
Y=M+SsinF↓ 公式运算命令
Prog ”j”↓ 运行子程序命令
Goto 0↓ 循环运算语句
J 子程序名称
H=X+DcosG◣ 公式运算、数据显示语
I=Y+DsinG◣ 公式运算、数据显示语
T=X—EcosG◣ 公式运算、数据显示语
U=Y—EsinG◣ 公式运算、数据显示语
最后计算器状态设定语句是大家最容易忽视的。如果将单位进行预设那么计算器就会默认其使用单位在进行下一单位换算时要一定要进行单位转换,否者会使计算结果错误。在显示屏幕的左下角可以清楚地发现小提示符号:如D代表度为现在的缺省单位、R代表弧度为现在的缺省单位、G 代表梯度为现在的缺省单位。
这种运算比较麻烦,不过4种运算符号优先级相同应该简单写,我这里有个算法,能进行简单的四则运算,delphi的,供参考
Function Math_Evaluate(S0:string):Extended;
Function Evaluate(S0:String):Extended;Forward;
Procedure CleanUp(var s0:string);
Var
I:integer;
Begin
S0:=LowerCase(s0);
I:=Pos(' ',s0);
While I0 Do
Begin
Delete(S0,I,1);
I:=Pos(' ',S0);
End;
End;
Function GetFirstOpp(Tot:Integer;S0:String):Integer;
Const
Sopps:String=('+-*/^');
Var
I:Integer;
Begin
If Tot=0 Then Tot:=Length(S0);
For I:=1 To 5 Do
Begin
Result:=Pos(Sopps[i],S0);
If ((I3) And (Result0)) Then
If ((Result=1) Or (Pos(S0[Result-1],Sopps)0)) Then
Result:=0;
If Result0 Then
If ResultTot Then
Exit;
End;
If ResultTot Then
Result:=0;
End;
Function SpecialF(P1:Integer;S0:String):Extended;
Var
Operstr:String;
Arg:Extended;
Begin
Result:=0;
Operstr:=Copy(S0,1,P1-1);
If S0[Length(S0)]')' Then
Exit;
Operstr:=LowerCase(Operstr);
Arg:=Evaluate(Copy(S0,P1+1,Length(S0)-P1-1));
if Operstr ='sin' Then
Result:=Sin(Arg)
Else if Operstr ='cos' Then
Result:=Cos(Arg)
Else if Operstr ='tan' Then
Result:=Sin(Arg)/Cos(Arg)
Else if Operstr ='arctan' Then
Result:=Arctan(Arg)
Else if Operstr ='log' Then
Result:=Ln(Arg)/Ln(10)
Else if Operstr ='ln' Then
Result:=Ln(Arg)
Else if Operstr ='exp' Then
Result:=Exp(Arg)
Else if Operstr ='sqrt' Then
Result:=Sqrt(Arg)
{enter additional functions here}
Else Exit;
End;
Function GetValue(S0:String):Extended;
Begin
Result:=0;
If Length(S0)1 Then Exit;
If Length(S0)=1 Then
Result:=StrToFloat(S0)
Else
Case s0[1] Of
'x':Result:=1;
'y':Result:=1;
'z':Result:=1;
Else Result:=StrToFloat(S0);
End;
End;
Procedure MatchBracket(Var I:Integer;S0:String);
Var
J,Len:Integer;
Begin
J:=1;
Len:=Length(S0);
Repeat Inc(I);
If ILen Then Exit;
If S0[I]='(' Then Inc(J);
If S0[I]=')' Then Dec(J);
If J0 Then Exit;
Until J=0;
End;
Function Calculate(P1:Integer;S0:String):Extended;
Var
V1,V2:Extended;
Begin
Result:=0;
V1:=Evaluate(Copy(S0,1,P1-1));
V2:=Evaluate(Copy(S0,P1+1,Length(s0)-P1));
Case S0[P1] Of
'+': Result:=V1+V2;
'-': Result:=V1-V2;
'/': Result:=V1/V2;
'*': Result:=V1*V2;
'^': Result:=Exp(V2*Ln(V1));
Else Exit;
End;
End;
Function Evaluate(S0:string):Extended;
Var
P1,P2,Q1:Integer;
Begin
P1:=Pos('(',S0);
P2:=P1;
If P20 Then
MatchBracket(P2,S0);
If P1=1 Then
Begin
If P2=Length(S0) Then
Begin
Delete(S0,P2,1);
Delete(S0,1,1);
Result:=Evaluate(S0);
End Else
Result:=Calculate(P2+1,S0);
Exit;
End;
Q1:=GetFirstOpp(P1,S0);
If (P1+Q1=0) Then
Begin
Result:=GetValue(S0);
Exit;
End;
If Q10 Then
Result:=Calculate(Q1,S0)
Else If Length(S0)P2 Then
Result:=Calculate(P2+1,S0)
Else
Result:=SpecialF(P1,S0);
End;
Begin
Try
CleanUp(S0);
Result:=Evaluate(S0);
Except
Result:=0;
End;
End;