红联Linux门户
Linux帮助

linux工具积累

发布时间:2007-11-15 00:38:02来源:红联作者:Shader
1. 计算器。 bc
bc是一个源自GNU的高精度计算程序,除了进行简单的数值计算,更可以用它特有的语言去写一个计算程序,来执行复杂的计算,比如复杂的级数求和。大多数Linux发行版中都自带了bc,Windows的用户可以在GnuWin32项目中找到。
在命令行下执行bc,你就进入了bc的解释器,要退出,可以输入halt或者是quit,这两者有些细小的差别,过后再说。
bc下可以进行简单的计算。你可以输入34*23,3^4等等,其中“^”代表乘方。既然bc是个高精度的计算器,你当然可以输入34^99这样的表达式,bc会把结果一字不差地告诉你。等等,如果你输入的是3/5,你会发现bc计算的结果是0,难道是出错了?
这要说到bc的一个特性。在默认的情况下,bc计算结果的小数位数是零。也就是说,如果计算结果是小数,bc会把小数部分舍去。你当然可以改变这个特性,方法是输入:
scale=10
然后你再让bc计算3/5,你会发现结果变成了
.6000000000
保留了10位小数。
scale是bc中的一个特殊的变量,默认情况下,scale=0,因此是忽略小数位的。你可以把scale设置成任意的正整数,只要它不超过2147483647就行。
在bc中还可以使用变量。bc中的变量名以一个小写字母开头,后面可以跟数字或小写字母、下划线,但不能含有大写字母。例如执行下面的语句:
a=3
b=2
c=5
a*(b+c)
bc会把结果21显示出来。
下面再试试这个:
obase=2
接着再执行一些计算,比如:3+9。bc居然显示出了1100!怎么回事?
如果你熟悉二制,你会发现二进制的1100等于二进制里的12。没错,obase也是bc中的一个特殊变量,它可以设定计算结果以那一种进制显示。obase的取值范围是2~16。通过给obase设定不同的值,我们轻而易举地可以把十进制数转换成任意进制的数。
你也许还不满足,能不能在输入的不使用十进制呢?可以的,你应该设定ibase这个变量。例如:
ibase=2
obase=2
1101+10011
bc显示的结果就成了100000。这样,通过改变ibase和obase的值,你就可以进行任意进制的计算。
bc还支持一种语言,这种语言和C语言类似,因此使用起来很容易。请在一个文件中写下如下的代码:
define is_prime(n){
auto prime,i;
prime=1;
for (i=2;i^2<=n;++i){
if (n%i==0){
prime=0;
break;
}
}
return prime;
}print "\nPlease enter a positive integer n:\n";
n=read();
print "\n\n"
for (i=2;i<=n;++i){
if (is_prime(i)){
print i;
print "\n";
}
}
quit;

假设你将其保存为t.b,那么就可以在命令行中运行:
bc -q t.b
然后按提示输入一个正整数,你就会得到一串的质数。其中参数-q的意思是bc启动时不显示版权信息。代码的第一行定义了一个函数名,这个函数有一个参数n。下面的auto prime,i定义了两个局部变量。后面一句n=read()作用是从键盘读入一个整数。其余的和C语言极其类似,就不解释了。

总结:bc作为高精度计算程序,足够简单,也足够强大。缺点是对于没有学过程序语言的人来说,难于使用。
文章评论

共有 0 条评论