博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
那几个题(没懂的地方留言)
阅读量:6988 次
发布时间:2019-06-27

本文共 5066 字,大约阅读时间需要 16 分钟。

  • 001

  • 说明

    假定表中数据为:

    姓名 学号
    E 5
    A 1
    C 3
    E 5
    B 2
    C 3
    D 4
    A 1

    index on 学号 tag xh 执行此条命令过后,根据建立的索引里的逻辑顺序,表中数据如下显示(没有选择排序方式,所以默认为升序):

    索引是和表之间是映射关系~ ,并没改变表的记录,但是因为我们刚刚建立了索引,建立时索引会被默认打开,所以我们接下来的操作就可以按照索引里的逻辑顺序关系,我也不知道你会不会弄混~,要是混了就干脆理解为变了,嗯~ ,就酱,这段话先选择性忽略吧,如果你看到这里脑袋不太清,,清醒~

    姓名 学号
    A 1
    A 1
    B 2
    C 3
    C 3
    D 4
    E 5
    E 5

    程序从第1条记录开始遍历,比较第 n 和 n+1(n=1,2,3,...) 条记录学号是否相等,相等则对n+1记录添加删除标记;然后重复此操作直到文件末尾;

    姓名 学号
    A 1
    * A 1
    B 2
    C 3
    * C 3
    D 4
    E 5
    * E 5

    遍历结束过后使用pack命令物理删除添加标记内容;

  • 代码

&& 关闭程序运算的显示过程,一般大型程序的运算过程很多,为了方便,就大小程序都关闭显示;set talk off clear   && 清屏,清除屏幕上之前的内容,只显示现在程序的运行结果;use xs  && 打开xs 表    && 根据学号字段建立索引,使表中记录处于有序状态;index on 学号 tag xh       && 对表中记录进行遍历;若记录指针已处于文件末尾,eof()为逻辑真(.t.),否则为逻辑假(.f.);do while !eof()       xh = 学号   && 将此时指针指向记录的学号赋给变量 xh;    skip  && 记录指针跳转到下一条记录;    if 学号 = xh  && 判断现在指针指向记录的学号是否和上条记录相等,相等则为重复记录;        delete   && 对该重复记录添加删除标记;    endifenddo pack  && 对标记的记录进行理删除;use     && 关闭当前打开的表;set talk on  && 恢复到系统默认状态(打开状态),这两句命令可有可无,属于固定格式;复制代码
> 注释好像写的有点啰里啰嗦,将就看啦~  -.-复制代码
  • 002

  • 说明

    这个题就是遍历表中数据,然后把记录依次打印在屏幕上~;你应该是str(入学分,5,1)这个不知道意思(如果那两个也不知道为什么的话就该挨捶了,呵);

    str()函数的用法,str(a,b,c),将 a 代表的值转换为总长度为 b ,小数位数为 c 的字符串,转换过后函数的值为c,字符型;题里面意思,将入学分代表的记录转换成总长为5个字节,小数位1位的字符串;

  • 代码(注释的标志我换掉了,那个好丑哎~,现在这个注释不是VFP的标准,所以别弄混了,嗯,就酱)

set talk offclearuse xsda  /*对谁操作就打开谁;*/do while !eof()    ?姓名+性别+str(N,5,1)        /* 这里的"+"是字符串的连接符,之前给你说过的","也是连接符,他可以           进行不同类型的连接,比如*?"计算结果=",sum*,从题目里可以看到             姓名和性别都是C,字符型数据,学分是N,数值型,加号只是字符型           数据的连接符,所以通过str()函数将数值型转为字符型;*/        skipenddouseset talk on复制代码
  • 003

  • 说明

    S = 1! + 2! +3! + 4! + 5! + ... + n! ,现在眼熟了吧,咸鱼~

    题目中把头部和尾部换成 KM ,将用户输入的数据作为计算边界;

    之前说的遇到这种样子的就先写一个计算单个阶乘的通用程序,然后再使用这个程序去计算不同的值得阶乘,最后将他们的结果加起来(从1加到100的那个模板);

    现在看题,题里有提到用了一个过程,就理解为这是一个独立的小程序好了,他的代码把刚刚提到的计算单个阶乘的通用程序放到了过程里,使用的时候每次调用这个小程序来计算不同的值得阶乘;

  • 代码

    在VFP里大小写不影响代码的执行;

set talk offclearinput "输入k值:" to kinput "输入m值:" to mstor 0 to s,p  /* 下面的代码里使用了S和P,但是没有发现他们的定义,所以这一行要对变量进行定                  义,因为这里只有空了一行,所以只能用store命令同时定义s,p并一起赋初值0;*/for n = k to  m    do 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 /*固定模板下次不注释这句了;*/ endfor return /*返回到调用函数的下一条语句;和自定义函数有区别,上次的那个题是自定义函 数,可以附带返回值;(见程序改错1-2,好像是那里,有空翻一眼咯~)*/endproc /*固定格式,嗯!*/set talk on复制代码
  • 004 (这个程序有问题,先不管了)

set talk offclearuse ghxxindex on 单位编号 tag dwbhtotal to xb on 单位编号 fields 数量,单价 all asceuse xbselect 0use dwxxdo while !eof()select dwxxreplace 商品总量 with xb.数量 for 单位编号 = xb.单位编号 replace 货款总额 with xb.单价 for 单位编号 = xb.单位编号skipenddoclose allset talk onreturn 复制代码
  • 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   endforset talk onreturn复制代码
  • 006 (统计字符)

set talk offclearacce "please input:" to ch      stor 0 to a,b,c,ds = ""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+1		case s >= '0' and s <= '9 '    /*因为输入是字符类型,所以就算是数字,也不能用来加减乘除,所以这里要加引号*/			b = b+1		case s = " "			c = c+1		other			d = d+1	endcase       /*中午记成enddo了,难怪一直错*/endfor?"字母个数=",str(a,2),"数字个数=",str(b,2),"空格个数=",str(c,2),"特殊字符个数=",str(d,2)set talk onreturn复制代码
  • 007(水仙花)

set talk offclearsum = 0for i = 100 to 999   /*水仙花数都是位数,所以在100~999范围里找*/	x1 = i%10      /*把每个位取出来*/	x2 = int(i/10)%10	x3 = int(i/100)	if x1^3 + x2^3 +x3^3 = i		sum = sum +i   /*固定模板*/	endifendfor?sumset talk onreturn复制代码
  • 008(末尾为3的素数)

set talk offclearf = .t.        /*定义一个找到素数的标志,赋值为0*/for i = 2 to 100   /*素数的定义是大于1的自然数,所有从2开始找*/	for j = 2 to sqrt(i)  		if i % j = 0       /*每个数除以2~自己平方根范围内的数,能除尽就不是素数*/		    f = .f.	   /*能除尽的时候,f重新赋值.f.,假*/		    exit		endif	endfor	if f = .t. and i%10=3        /*如果f和最开始不一样,那么代表这个时候的i在他的范围内*/	    ?i	                   /*被除尽了,所以此时i不是素数,反之,若f没有变化,则是素数*/	endif                      /*取出此时i的个位上的数字判断是不是3,输出结果*/f = .t.   /*使用了f之后需要对标志f的值清零,也就是恢复原样*/endfor  set talk onreturn复制代码
  • 009(房子面积这个题,字太多懒得看,立即放弃)

  • 010(打印很丑的图形的题)

set talk offcleardime a(6,6) /*定义一个二位数组a*/a= 0            /*初始化数组的值,因为之后要用到加法运算*/x=0y=0             /*这两个东西出现的原因是vfp糟糕的用户体验,这样写a(i,j)=a(i-1,j-1)就会报错,所以添加一个中间变量过渡一下*/for i = 1 to 6  /*把需要打印的图形的值按位置填到二维数组里*/    for j = 1 to i        if j=1 or i=j  /*如果是第一列,或者行数等于列数就给这些格子里填1*/	    a(i,j)=1        else   /*否则,(也就是剩下的所有格子)按照下面的规则赋值,(举个栗子:a32 = a21 + a22)*/            x = i-1            y = j-1            a(i,j) = a(x,y) + a(x,j)        endif    endforendforfor i = 1 to 6  /*将刚刚填到数组里面的数值打印在屏幕上*/    for j = 1 to i        ??str(a(i,j),2)  /*两个问号意思是不换行输出,str()是为了让输出结果的样子好看点*/    endfor?  /*单独的一个问号的作用是换行*/endfor   set talk onreturn复制代码

转载地址:http://pihpl.baihongyu.com/

你可能感兴趣的文章
AFNetWorking 2.0 使用
查看>>
VMware克隆Linux系统后,网络问题解决
查看>>
Linux系统下vsftp服务器搭建(二)
查看>>
Citrix User Profile Management 设定参考
查看>>
网络库性能对比
查看>>
博客开张
查看>>
jquery.Callbacks的实现
查看>>
同一环境下新建Standby RAC库
查看>>
随手笔记NO.4
查看>>
未来监护人:FCC专员正在努力推迟网络中立投票
查看>>
LVS负载均衡群集(LVS-NAT)
查看>>
【Zabbix】如何搭建memcached?并使用Zabbix监控memcached?
查看>>
完爆 Best Fit,看阿里如何优化 Sigma 在线调度策略节约亿级成本
查看>>
spring事务
查看>>
NoSQL最新现状和趋势:云NoSQL数据库将成重要增长引擎
查看>>
python系统监控--转载
查看>>
2019年我国云计算行业存在的问题和发展趋势
查看>>
DXF图纸打开后怎么改变保存其格式为DWG?
查看>>
zabbix 监控 介绍
查看>>
SVN使用
查看>>