资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第四章 程序设计初步,程序文件,程序的控制结构,多模块程序,第四章 程序设计初步 程序文件,1,第一节 程序文件,程序:,是计算机能够分析执行的指令集合。,程序文件:,程序以文本文件的形式保存。,扩展名为:,.,prg,程序执行的过程就是程序中所有指令执行的过程。,第一节 程序文件程序:是计算机能够分析执行的指令集合。,2,一、建立,1、命令方式:,格式:,modify command ,程序文件名|?,2、菜单方式:,文件/新建/程序,3、在项目管理器中:,代码/程序/新建,一、建立,3,二、编辑,1、命令方式:,格式:,modify command ,程序文件名|?,2、菜单:文件/打开,在打开窗口中选择要编辑的文件名,确定,。,3、在 项目管理器中,代码/选择要修改的程序/修改。,二、编辑,4,三、运行,1、命令方式:,格式:,do ,2、菜单方式:,程序 / 运行 在运行窗口中选择要运行的程序文件名,单击“运行”。,3、在 项目管理器中:,代码 / 选择要运行的程序/运行。,三、运行,5,四、程序书写规则,1、命令分行:,每条命令都以回车键结尾,一行一条命令,可用“;“分行。,2、命令注释:,注释行以“*“开头,命令后以“&“开头。,例:显示表文件,SP,中的品名,*本程序用于显示表文件,SP,中的品名,use sp,&,打开表文件,?,品名,&显示品名,return,&,结束语句,四、程序书写规则*本程序用于显示表文件SP中的品名,6,五、程序文件中的专用命令,1、程序结尾命令,return:,结束执行程序,并返回到调用它的上级程序继续执行。允许缺省。,cancel:,程序运行终止,清除程序的私有变量,返回到命令窗口。,quit:,程序终止运行后返回到,Win。,五、程序文件中的专用命令,7,2、输入类语句,赋值语句,格式: = ,store ,to,功能:给内存变量赋值,例:,A=1,B=A+1,C=A*B,I=I+1,STORE 0 TO X,Y,Z,2、输入类语句,8,交互式语句,INPUT ,提示信息 TO ,可输入,N、C、L、D,型数据。,ACCEPT ,TO ,只能输入,C,型数据。,功能:系统执行命令时暂停,等待用户从键盘上输入信息给内存变量后,继续执行。,交互式语句,9,例:求任意半径的圆面积,Input “,半径为:”,to r,S=pi()*r*r,? “,面积为:” ,,s,? “,面积为:” ,,alltrim(str (s),例:求任意半径的圆面积,10,例2、在,xsda.dbf,中按姓名查找某学生的记录。,程序:,(,在此例中说明,input,和,accept,的用法),解1、,use xsda,input,请输入学生姓名,to a,loca all for,姓名=,a,disp,解2、,use xsda,accept,请输入学生姓名,to a,loca all for,姓名=,a,disp,例2、在xsda.dbf中按姓名查找某学生的记录。解1、us,11,例3、编写程序,在,xsda,中查找指定日期以后出生的学生记录。,Use xsda,Clear,Set stri to 0,Input ,请输入日期:,to rq,Sele * from xsda where,出生日期,rq,Use,return,例3、编写程序,在xsda中查找指定日期以后出生的学生记录。,12,3、输出类语句,非格式输出语句,格式1:? ,格式2:? ,显示内存变量、常量或表达式的值。,格式输出语句,格式: SAY ,文本输出语句,格式:,TEXT,ENDTEXT,3、输出类语句,13,例4、给出三角形的底和高,编程求三角形的面积。,设三角形的底为,a,,高为,h,,面积为,s.,S=a*h/2,Input ,请输入,a,值:,to a,Input ,请输入,h,值:,to h,s=a*h/2,? s,return,Input ,请输入,a,值:,to a,Input ,请输入,h,值:,to h,s=a*h/2,? s=,s,return,例4、给出三角形的底和高,编程求三角形的面积。Input ,14,例5、鸡兔同笼,已知鸡兔的总头数为,H,,总脚数为,F,,求鸡兔各有多少只?,算法:,Input ,请输入,H,值:,to h,Input ,请输入,F,值:,to f,X=(4*h-f)/2,Y=(f-2*h)/2,? x=,x,? y=,y,return,Input ,请输入,H,值:,to h,Input ,请输入,F,值:,to f,X=(4*h-f)/2,Y=(f-2*h)/2, 10,10 say x=, 10,12 say x, 12,10 say y=, 12,12 say y,return,X=(4H-F)/2,Y=(F-2H)/2,得出:,X+Y=H 2X+4Y=F,例5、鸡兔同笼,已知鸡兔的总头数为H,总脚数为F,求鸡兔各有,15,实验:程序设计,一、实验目的:,1、掌握程序文件的建立、编辑、及执行的方法。,2、掌握程序设计中的常用的输入、输出语句。,二、实验内容,: (编程),1、在,xsda.dbf,中:,显示并统计入学成绩在400分以上的学生记录。,要求能按指定的出生日期查找学生的记录。,2、在,xscj.dbf,中:,要求能按姓名查找学生的记录。,分别求男、女同学总分的平均分,统计总分在200分以上的人数。,实验:程序设计一、实验目的:,16,3、在,SP,表中:,要求能按指定的品名显示出“品名、单价、数量、生产单位“。,要求能按“进口“显示“货号、编号、开单日期“。,4、编程求半径为,R,的圆面积,S。,分别用?和格式输出面积,S,值。,3、在SP表中:,17,输入输出语句, SAY ,GET ,DEFAULT ,说明:,SAY,子句用来输出数据,,GET,子句用来输入及编辑数据。,GET,子句的变量必须具有初值。,GET,子句的变量必须用,READ,命令来激活。,输入输出语句,18,例6:编程,能根据,记录号,来修改,SP,中某商品的单价、数量、开单日期、生产单位。,use sp, 2,10 say ,请输入记录号:,get jih,default 1,read,go jih, 4,10 say,请修改第+,str(jih,2)+,个商品的记录, 5,10,say ,单价,get,单价, 6,10,say ,数量,get,数量, 7,10,say ,开单日期,get,开单日期, 8,10,say ,生产单位,get,生产单位,read,use,例6:编程,能根据记录号来修改SP中某商品的单价、数量、开单,19,例7:编程,能根据商品的,品名,来修改此商品的单价、数量及开单日期。,use sp,pm= , 2,10 say ,请输入品名,get pm,read,loca for,品名=,pm, 4,10 say,请修改+,pm+,的记录, 5,10,say ,单价,get,单价, 6,10,say ,数量,get,数量, 7,10,say ,开单日期,get,开单日期,read,use,例7:编程,能根据商品的品名来修改此商品的单价、数量及开单日,20,问题:,编程在,XSCJ,中要求能按姓名查找学生的记录,若查到则显示此记录,若查不到此记录,则显示“无此记录”。,use xscj,accept ,请输入学生姓名:,to xm,loca for,姓名=,xm,if .not.eof(),disp,else,? ,无此记录,endif,use,问题:编程在XSCJ中要求能按姓名查找学生的记录,若查到则,21,第二节 程序的控制结构,一、分支结构,(一) 单分支,:,IF,ELSE,ENDIF,第二节 程序的控制结构一、分支结构(一) 单分支:,22,第一种解法:,use xscj,accept ,请输入学生姓名:,to xm,loca for,姓名=,xm,if .not.eof(),disp,else,? ,无此记录,endif,use,第二种解法:,use xscj,accept ,请输入学生姓名:,to xm,loca for,姓名=,xm,if found(),disp,else,wait ,查无此人,window,endif,use,第一种解法:第二种解法:,23,5,10,say ,请输入表名:,get bm default space(10),read,bm=alltrim (bm) &,删除字符串前后的空格,if file(&bm.dbf),use &bm,brow,else,wait ,该文件不存在!,window,endif,use,宏代换函数:&,& .,替换出字符型内存变量的值。,注意:不能直接用变量名表示表名。如:,USE bm,但可用:,USE &bm,或:,USE (bm),5,10 say 请输入表名:get bm defau,24,(二,),多分支:,DO CASE,CASE ,CASE ,CASE ,ENDCASE,(二) 多分支:,25,例8:计算分段函数值:,2,x-1,(x0),3x+5,(0=x3),X+1,(3=x5),5X-3,(5=x=10),f(x)=,input “,输入,X,值:“,to x,do case,case x0,f=2*x-1,case x3,f=3*x+5,case x5,f=x+1,case x0)f(x)=i,26,例9:编写显示当前季节程序,yue=month(date(),do case,case inlist (yue,3,4,5),&yue,是否在3,4,5中,jj=,春,case inlist(yue,6,7,8),jj=,夏,case inlist(yue,9,10,11),jj=,秋,case inlist(yue,12,1,2),jj=,冬,endcase,wait jj window,return,例9:编写显示当前季节程序yue=month(date(),27,二、循环结构,(,一) 条件循环,DO WHILE ,逻辑表达式,语句序列,ENDDO,二、循环结构(一) 条件循环DO WHILE 逻辑表达式,28,例10、编程,在,SP.dbf,中显示中某种品名的商品的记录。,clear,use sp,accept ,请输入商品的品名:,to pm,do while .not.eof(),&,记录指针是否在表尾,if,品名=,pm,disp,endif,skip,enddo,use,例10、编程,在SP.dbf中显示中某种品名的商品的记录。c,29,例11、在,SP,中,单价按1千元以下、1千元至5千元以下,5千元以上三个分档统计商品的个数。,设三个单价档次商品的个数分别为:,S1、S2、S3,store 0 to s1,s2,s3,use sp,do while .not.eof(),do case,case,单价1000,s1=s1+1,case,单价5000,s2=s2+1,otherwise,s3=s3+1,endcase,skip,enddo,? 1,千元以下商品个数:,s1,? 1,千至5千元以下商品个数:,s2,? 5,千元以下商品个数:,s3,use,例11、在SP中,单价按1千元以下、1千元至5千元以下,5千,30,(,二) 步长循环,FOR X,初值,TO,终值,SETP,步长值,NEXT,例12、编程,求,s=123+100,的值。,clear,s=0,for i=1 to 100 setp 1,s=s+1,next,? s=,s,(二) 步长循环FOR X初值 TO 终值 SETP,31,(,三) 扫描循环,SCAN ,范围 ,FOR,WHILE ,ENDSCAN,此语句一般用于处理表中记录,针对当前表进行循环。,(三) 扫描循环SCAN 范围 FOR1000,? 品名,endscan,use,例13、编程,显示在SP中单价大于1000元的商品品名。cl,33,clea,use sp,scan for year(,开单日期)1996,? ,品名,endscan,use,例14、编程,显示在,SP,中开单日期在1996年以后的商品的品名。,clea例14、编程,显示在SP中开单日期在1996年以后的,34,(,四) 循环辅助语句,LOOP,语句,EXIT,语句,DO WHILE ,.,.,.,LOOP,.,.,.,ENDDO,DO WHILE ,.,.,.,EXIT,.,.,.,ENDDO,(四) 循环辅助语句 DO WHILE ,35,例15、编程计算,s=1+2+3+100,,并求1100之间的偶数之和。,clear,store 0 to i,s,t,do while i100,i=i+1,s=s+i,if int(i/2)i/2,loop,endif,t=t+i,enddo,? 1+2+3+.+100=,s,? 1100,的偶数和为:,t,例15、编程计算s=1+2+3+100,并求1100之,36,小结:,一、分支结构,单分支,:,IF,ELSE,ENDIF,多分支:,DO CASE,CASE ,CASE ,CASE ,ENDCASE,小结:单分支:多分支:,37,二、循环结构,DO WHILE ,逻辑表达式,语句序列,ENDDO,FOR X,初值,TO,终值,SETP,步长值,NEXT,SCAN ,范围,FOR,WHILE ,ENDSCAN,条件循环,步长循环,扫描循环,二、循环结构DO WHILE 逻辑表达式FOR X初,38,实验:程序设计(分支结构、循环结构,),目的:掌握分支结构、循环结构程序的设计方法。,内容:,1、求5!+10!+15!+20!的值。,2、给一个百分制的成绩,要求输出成绩的等级,优、良、中、及格、不及格,。,90,分以上为“优”,8089分为“良”,7079分为“中”,6069分为“及格”,59分以下为“不及格”,实验:程序设计(分支结构、循环结构),39,3、编程在,SP,中要求能按开单日期查找商品的记录,若查到则显示此记录,若查不到此记录,则显示“无此记录”。,4、编程在,XSDA,中显示入学成绩高于某个分数段的学生记录,并统计其人数。,5、编程,显示在,SP,中某种品名的商品的记录。,6、编程,显示在,XSDA,中1983年以后出生的学生的记录。,7、从键盘上输入任意三个数,从大到小排序。,3、编程在SP中要求能按开单日期查找商品的记录,若查到则显示,40,例2、编程:求10!的值。,设,t=1*2*3*10,t=1,for j=1 to 10,t=t*j,next,? t=,t,return,例1、编程:求5101520的值。,设,s=5+10+15+20,clear,s=o,for i=5 to 20 step 5,s=s+i,next,? s=,s,return,例2、编程:求10!的值。t=1例1、编程:求51015,41,1、求5!+10!+15!+20!的值。,解:,s=0,for i=5 to 20 step 5,t=1,for j=1 to i,t=t*j,next,s=s+t,next,? s=,s,return,外循环求累加,s,内循环求阶乘,t,1、求5!+10!+15!+20!的值。 s=0外循环,42,2、给一个百分制的成绩,要求输出成绩的等级,优、良、中、及格、不及格,。,90,分以上为“优”,8089分为“良”,7079分为“中”,6069分为“及格”,59分以下为“不及格”,input ,请输入分数:,to fs,do case,case fs=90,cj=,优,case fs=80,cj=,良,case fs=70,cj=,中,case fs=60,cj=,及格,otherwise,cj=,不及格,endcase,? ,分数为:,alltrim,(,str,(fs),成绩为:,cj,2、给一个百分制的成绩,要求输出成绩的等级优、良、中、及格、,43,3、编程在,SP,中要求能按开单日期查找商品的记录,若查到则显示此记录,若查不到此记录,则显示“无此记录”。,clea,use sp,input ,请输入所要查找的开单日期:,to kdrq,loca for,开单日期=,kdrq,if .not.eof(),disp,endif,wait ,无此记录!,window,use,3、编程在SP中要求能按开单日期查找商品的记录,若查到则显示,44,clea,use sp,input ,请输入所要查找的开单日期:,to kdrq,loca for,开单日期=,kdrq,if eof(),wait ,无此记录!,window,endif,do while .not.eof(),if,开单日期=,kdrq,disp,endif,skip,enddo,use,若显示所有满足要求的记录。,clea若显示所有满足要求的记录。,45,4、编程在,XSDA,中显示入学成绩高于某个分数段的学生记录,并统计其人数。,clea,use xsda,m=0,input ,请输入所要查找的入学分数:,to fs,do while .not.eof(),if,入学成绩,fs,disp,m=m+1,endif,skip,enddo,? ,人数为:,alltrim(str(m),use,4、编程在XSDA中显示入学成绩高于某个分数段的学生记录,并,46,5、编程,显示在,SP,中某种品名的商品的记录。,use sp,accept ,请输入商品的品名:,to pm,loca for,品名=,pm,if eof()=.t.,? ,无此记录,else,Do while .not.eof(),if,品名=,pm,disp,endif,skip,enddo,endif,use,5、编程,显示在SP中某种品名的商品的记录。use sp,47,6、编程,显示在,XSDA,中1983年以后出生的学生的记录。,clea,use xsda,scan,for,year(,出生日期)1983,disp,endscan,use,在此题中说明,for,与,while,的区别,6、编程,显示在XSDA中1983年以后出生的学生的记录。c,48,上机作业,1、编程计算 3*4+6*7+9*10+12*13+15*16的值。,2、,从键盘上输入10个数,显示出其中最大和最小的数。,3、,编程显示在,SP,中2001年以后开单日期的所有商品的记录。若没有则显示“无此记录“。,4、编程,在,xsda,中能根据的,姓名,来修改此学生的专业、入学成绩、出生日期。,(用 say get ,语句),上机作业,49,1、编程计算 3*4+6*7+9*10+12*13+15*16的值。,s=0,for i=3 to 15 step 3,s=s+i*(i+1),next,?s=,s,return,1、编程计算 3*4+6*7+9*10+12*13+15*1,50,2、,从键盘上输入10个数,显示出其中最大和最小的数。,input ,请输入第一个数,to a,stor a to ma,mi,for i=2 to 10,input ,请输入数值,to a,if ama,ma=a,else,if a1996,if eof()=.t.,? ,无此记录,else,do while .not.eof(),if year(,开单日期)1996,disp,endif,skip,enddo,endif,use,3、编程显示在SP中1996年以后开单日期的所有商品的记录。,52,4、编程,在,xsda,中能根据的,姓名,来修改此学生的专业、入学成绩、出生日期。,clea,use xsda,xm= , 5,10 say ,请输入学生姓名,get xm,read,loca for,姓名=,xm, 6,10 say ,请修改+,xm+,的记录, 7,10,say ,专业名称,get,专业名称, 8,10,say ,入学成绩,get,入学成绩, 9,10,say ,出生日期,get,出生日期,read,use,4、编程,在xsda中能根据的姓名来修改此学生的专业、入学成,53,use xsda, 5,10 say ,请输入学生姓名,get xm defa space(6),read,loca for,姓名=,xm,if .not.eof(), 6,10 say ,请修改+,xm+,的记录, 7,10,say ,专业名称,get,专业名称, 8,10,say ,入学成绩,get,入学成绩, 9,10,say ,出生日期,get,出生日期,read,else,wait ,无此学生记录!,window,endif,use,若无此姓名学生,,,则输出提示“无此学生记录!“,use xsda若无此姓名学生,则输出提示“无此学生记录!“,54,
展开阅读全文