今天在csdn论坛中,看到几个题目。分析并解答。
FoxPro数据库编程题 如下:
1、通过键盘输入20个数。(1)求其中最大者和最小者,并显示之;
(2)将这20个数依从大到小排序,并显示排序结果。
原贴见:http://topic.csdn.net/u/20080116/20/1a6830dc-0657-4dcb-8d86-3f6155b3f7fe.html
本人解答如下:
SET TALK OFF
CLEA ALL
CLEA
k=20 &&表示需要处理的数据个数
DIME N(k)
*输入k个数,并赋值给数组n
FOR i=1 TO k
INPUT "请输入第 "+STR(i,2)+" 个数: " TO N(i)
ENDFOR
*找出最大值和最小值
tmax=N(1)
tmin=N(1)
FOR i=2 TO k
tmax=MAX(tmax,N(i))
tmin=MIN(tmin,N(i))
* 也可用比较运算符,按以下运算
IF tmax<N(i)
tmax=N(i)
ENDIF
IF tmin>N(i)
tmin=N(i)
ENDIF
ENDFOR
? "最大的数是:",tmax
? "最小的数是:",tmin
*从大到小排列
DIME nn(k) &&用另一个数组来保存排序后的结果
FOR i=1 TO k
nn(i)=N(i)
ENDFOR
FOR i=1 TO k
FOR j=i+1 TO k
IF nn(i)<nn(j)
T=nn(i)
nn(i)=nn(j)
nn(j)=T
ENDIF
ENDFOR
ENDFOR
? "序号","原数","排序后"
FOR i=1 TO k
?i, N(i),nn(i)
ENDFOR
以上程序,主要是为了帮助初学者理解而编写的,实际上还可以优化与精简。
在 注1处,如果不想用min 和max函数,可以将以下两行
tmax=MAX(tmax,N(i))
tmin=MIN(tmin,N(i))
改为:
* 也可用比较运算符,按以下运算
IF tmax <N(i)
tmax=N(i)
ENDIF
IF tmin> N(i)
tmin=N(i)
ENDIF
如果借助于数据表,看以下程序,应该更容易理解,效率也比较高。
***********************************************************
SET TALK OFF
SET SAFE OFF
CLEA ALL
CLEA
* 建立个表, 整数部分15位,小数部分3位。可根据实际需要来确定位数
CREA CURSOR _temp (数据 N (19,3))
k=20 &&表示需要处理的数据个数
i=1
*输入k个数,并赋值给数组n
DO WHILE .T.
INPUT "请输入第 "+STR(i,2)+" 个数: " TO N
IF TYPE("N")="N"
APPE BLAN
REPL 数据 WITH N
i=i+1
ELSE
? " 您输入的数据类型不正确,只能输入数字!"
ENDIF
IF i>k &&只输入 k 个数据
EXIT
ENDIF
ENDDO
INDE ON -数据 TO _l && 注意,“数据”这个字段前加个负号,表示对数值型字段按降序排列
GO TOP
? "最大的数是:",数据
GO BOTT
? "最小的数是:",数据
LIST &&显示结果是从大到小
***********************************************************
当然,最后建立索引、排序那几行,通过SQL语句来实现也是可以的。