|
QB教程(六)标准函数 |
|
| 来自:雷网 | 作者:leinet |
| QBASIC提供了标准函数。一个标准函数就是一段程序,它具有一种特定的功能。
我们在使用时只需写出它的名字(即函数名)和参数就可以直接调用。 QBASIC提供的标准函数包括:算术函数和字符串函数等。这些函数功能齐全、
用途广泛。这里主要介绍算术函数,有关字符串函数将以后章节中介绍。算术函数, 指调用函数后返回一个数值,本节主要介绍取整函数与随机函数。 取整函数 随机函数 1. 取整函数 函数格式:INT(X) 功能:产生一个不大于X的最大整数。其中,X可以是常数、变量或表达式。 使用取整函数可以解决很多数学问题。 (1)取一个数的整数部分 例如: X=5.3: Y=5.5: Z=-6.1 X=INT(X): Y=INT(Y): Z=INT(Z) PRINT X,Y,Z END 执行后屏幕上显示: 5 5 -7 (2)四舍五入 取整函数本身没有四舍五入的功能,但将其稍加变化就可以实现四舍五入。 四舍五入的通式为: INT(X+0.5)。 例1 将下面的数字保留整数部分,小数部分四舍五入。 1.36 2.5 4.1 0.48 FOR I=1 TO 4 READ X PRINT X, INT(X+0.5) NEXT I DATA 1.36,2.5,4.1,0.48 END 执行后屏幕上显示: 1.36 1 2.5 3 4.1 4 0.48 0 (3)保留N位小数 将X保留N位小数,可以先将X乘以10N,取整后再除以10N。 通式为INT(X*10^N)/ 10^N。 例2 将3.14159保留三位小数且最后一位小数四舍五入。 X=3.14159 Y=INT(X*1000+0.5)/1000 PRINT X,Y END 执行后屏幕上显示: 3.14159 3.142 (4)判断整除 要判断一个整数X能否被另外一个整数Y整除,只需判断X/Y=INT(X/Y),条件满足则为整除。 例如: CLS INPUT X,Y IF X/Y=INT(X/Y) THEN PRINT "能整除"ELSE PRINT "不能整除"; END 执行后屏幕上显示: ? 30, 5 能整除 ? 30, 7 不能整除 如果将除数改为2,则可以判断一个数的奇偶性。 (5)分离数字 要对一个三位数X分离数字,可以采用如下方法: 百位数字B=INT(X/100) 十位数字S=INT((X-B*100)/10) 个位数字G=X-B*100-S*10 例3 求100~999之间的所有水仙花数,并统计个数。水仙花数是指一个三位数,其中各位数字的立方和就等于该数本身。 REM 求水仙花数 N=0 FOR X=100 TO 999 B=INT(X/100) S=INT((X-B*100)/10) G=X-B*100-S*10 IF X=B*B*B+S*S*S+G*G*G THEN N=N+1: PRINT X, NEXT X PRINT "N="; N END 执行后屏幕上显示: 153 370 371 471 N=4 2. 随机函数 什么是随机数?我们可以这样理解:每次从若干个可能的数中抽出一个,抽出哪一个,事先不能确定,这样抽出的数叫做随机数。 函数格式:RND(X) 功能:产生一个0~1之间的随机数。 其中,X可以是任意的数值,也可以忽略不写。 在具体的程序中,无论RND(1)、RND(100)、RND(562),RND产生随机数的效果是相同的,一般写成RND就可以了。 为了能产生真正的随机数(即每次执行程序产生的数各不相同),需要在程序的 开头加上语句RANDOMIZE TIMER。 使用随机函数还可以产生某一个区域中的随机数: A~B(不包括A和B) (B-A)*RND+A A~B(包括A和B) (B-A+1)*RND+A 例4 算术练习程序。 利用随机函数产生10道不同的两位数加法题,要求回答, 每答对一道题加10分,最后给出总得分。 分析:先产生两个两位的随机整数,并显示在屏幕上。 输入答案后判断结果是否正确,如果正确则加10分。如此重复10次即可。 RANDOMIZE TIMER CLS : S=0 FOR I=1 TO 10 A=INT(90*RND)+10 B=INT(90*RND)+10 PRINT A; "+"; B; "="; INPUT C IF C=A+B THEN S=S+10 NEXT I PRINT "你的得分是:"; S END 使用随机函数还可以模拟一些自然现象,得到统计数据。 例5 模拟抛硬币试验。求硬币落地以后正面向上或反面向上的次数。 分析:产生一个随机整数,如果这个数是奇数,则将正面向上次数加1,否则将反面向上的次数加1。如此重复N次即可。 RANDOMIZE TIMER CLS INPUT "N=";N FOR I = 1 TO N X = INT(RND * 100) IF X / 2 = INT(X / 2) THEN A = A + 1: GOTO 5 B = B + 1 5 NEXT I PRINT "正面次数=";A, "反面次数=";B END 执行后屏幕上显示: N=? 100 正面次数=49 反面次数=51 N=? 1000 正面次数=505 反面次数=495 N=? 10000 正面次数=4975 反面次数=5025 从上面的结果我们可以看到,抛硬币的次数越多,正、反面的概率就越接近。 |
|