str()函数的用法,str(a,b,c),将 a 代表的值转换为总长度为 b ,小数位数为 c 的字符串,转换过后函数的值为c,字符型;题里面意思,将入学分代表的记录转换成总长为5个字节,小数位1位的字符串;
代码(注释的标志我换掉了,那个好丑哎~,现在这个注释不是VFP的标准,所以别弄混了,嗯,就酱)
set talk off
clear
use xsda /*对谁操作就打开谁;*/dowhile !eof()?姓名+性别+str(N,5,1)/* 这里的"+"是字符串的连接符,之前给你说过的","也是连接符,他可以进行不同类型的连接,比如*?"计算结果=",sum*,从题目里可以看到 姓名和性别都是C,字符型数据,学分是N,数值型,加号只是字符型数据的连接符,所以通过str()函数将数值型转为字符型;*/skip
enddo
use
set talk on
复制代码
set talk off
clear
input "输入k值:" to k
input "输入m值:" to m
stor 0 to s,p /* 下面的代码里使用了S和P,但是没有发现他们的定义,所以这一行要对变量进行定义,因为这里只有空了一行,所以只能用store命令同时定义s,p并一起赋初值0;*/for n = k to mdo sub with n,p /*过程的固定调用格式,do <过程名> with <参数1>,<参数2>这里参数的格式要按照下面定义过程时形参的格式,参数个数与形参相等;*/s = s + p /*固定模板,下次不注释这句了;*/
endfor
?"s的值为:",s /*输出计算的结果;*/return
proc sub /*过程的固定使用方法,proc后面跟过程名*/para x,y /*这里个单词后面是形参,那天给你说过的~ (单词太长,只写了前四个字母)不影响结果;*/y = 1/*定义一个变量y来接收结果,并给y赋值1;(因为这里是求阶乘,所以初值不能赋0)*/for t = 1 to x y = y * t /*固定模板下次不注释这句了;*/endforreturn/*返回到调用函数的下一条语句;和自定义函数有区别,上次的那个题是自定义函数,可以附带返回值;(见程序改错1-2,好像是那里,有空翻一眼咯~)*/
endproc /*固定格式,嗯!*/set talk on
复制代码
004 (这个程序有问题,先不管了)
set talk off
clear
use ghxx
index on 单位编号 tag dwbh
total to xb on 单位编号 fields 数量,单价 all asce
use xb
select 0
use dwxx
dowhile !eof()
select dwxx
replace 商品总量 with xb.数量 for 单位编号 = xb.单位编号
replace 货款总额 with xb.单价 for 单位编号 = xb.单位编号
skip
enddo
close all
set talk on
return复制代码
005(吃馍)
set talk off
clear /*找遍所有可能的组合*/for i = 1 to 34/*大和尚*/for j = 1 to 50/*中和尚*/k = 100-i-j /*小和尚*/if i*3+j*2+k/3=100 ?"大和尚数量=",str(i,2),"中和尚数量=",str(j,2),"小河上数量=",str(k,2) endif endfor
endfor
set talk on
return复制代码
006 (统计字符)
set talk off
clear
acce "please input:" to ch
stor 0 to a,b,c,d
s = ""
for i = 1 to len(ch) /*len(),这个函数功能统计输入的字符串长度*/s = substr(ch,i,1) /*取第i个字符出来进行判断*/ do case /*'a'~'z'和'A'~'Z'是所有字母的取值范围*/ case (s >= 'a' and s <= 'z ') or (s >= 'A' and s <= 'Z ')a = a+1case s >= '0' and s <= '9 ' /*因为输入是字符类型,所以就算是数字,也不能用来加减乘除,所以这里要加引号*/b = b+1case s = " "c = c+1otherd = d+1endcase /*中午记成enddo了,难怪一直错*/
endfor
?"字母个数=",str(a,2),"数字个数=",str(b,2),"空格个数=",str(c,2),"特殊字符个数=",str(d,2)
set talk on
return
复制代码
007(水仙花)
set talk off
clear
sum = 0for i = 100 to 999/*水仙花数都是位数,所以在100~999范围里找*/x1 = i%10/*把每个位取出来*/x2 = int(i/10)%10x3 = int(i/100)if x1^3 + x2^3 +x3^3 = isum = sum +i /*固定模板*/endif
endfor
?sum
set talk on
return复制代码
008(末尾为3的素数)
set talk off
clear
f = .t. /*定义一个找到素数的标志,赋值为0*/for i = 2 to 100/*素数的定义是大于1的自然数,所有从2开始找*/for j = 2 to sqrt(i) if i % j = 0/*每个数除以2~自己平方根范围内的数,能除尽就不是素数*/f = .f. /*能除尽的时候,f重新赋值.f.,假*/exitendifendforif f = .t. and i%10=3/*如果f和最开始不一样,那么代表这个时候的i在他的范围内*/?i /*被除尽了,所以此时i不是素数,反之,若f没有变化,则是素数*/endif /*取出此时i的个位上的数字判断是不是3,输出结果*/
f = .t. /*使用了f之后需要对标志f的值清零,也就是恢复原样*/
endfor
set talk on
return复制代码
009(房子面积这个题,字太多懒得看,立即放弃)
010(打印很丑的图形的题)
set talk off
clear
dime a(6,6)/*定义一个二位数组a*/
a= 0/*初始化数组的值,因为之后要用到加法运算*/
x=0
y=0/*这两个东西出现的原因是vfp糟糕的用户体验,这样写a(i,j)=a(i-1,j-1)就会报错,所以添加一个中间变量过渡一下*/for i = 1 to 6/*把需要打印的图形的值按位置填到二维数组里*/for j = 1 to iif j=1or i=j /*如果是第一列,或者行数等于列数就给这些格子里填1*/a(i,j)=1else/*否则,(也就是剩下的所有格子)按照下面的规则赋值,(举个栗子:a32 = a21 + a22)*/x = i-1y = j-1a(i,j) = a(x,y) + a(x,j)endifendfor
endfor
for i = 1 to 6/*将刚刚填到数组里面的数值打印在屏幕上*/for j = 1 to i??str(a(i,j),2) /*两个问号意思是不换行输出,str()是为了让输出结果的样子好看点*/endfor
? /*单独的一个问号的作用是换行*/
endfor
set talk on
return复制代码