当前位置:文档之家› 第七章+程序设计

第七章+程序设计

第七章+程序设计
第七章+程序设计

第二部分提高篇

本部分主要介绍程序设计的基本理论与方法、SQL语句的具体应用、表单的设计与开发方法、各类菜单的设计、工具栏的创建、Visual FoxPro与WEB的结合及开发方法、Visual FoxPro向SQL SERVER2000等大中型数据库升迁的方法和步骤、Visual FoxPro的文件操作。

第七章 Visual FoxPro程序设计

前面介绍的在命令窗口中输入命令或通过选择菜单来执行Visual FoxPro命令,都是交互执行方式。除此外,还可以通过程序的方式来调用Visual FoxPro命令,以完成更为复杂的任务。

§7.1 基本知识

7.1.1程序的概念

学习Visual FoxPro的目的就是要使用它的命令来组织和处理数据,完成一些特定任务。如果靠单一的在命令窗口中逐条输入命令执行,不仅繁琐,而且容易出错,特别是命令需要反复执行或所包含的命令很多时,应用交互方式根本无法完成,必须通过命令组来实现。这里就应该采取程序方式。

程序是能够完成一定任务的命令的有序集合。这组命令被存放在称为程序文件或命令文件中。当程序运行时,系统会按照一定的次序自动执行包含在程序中的命令。与命令方式相比较,主要有如下的优势:

◆可以方便的利用编辑器输入、修改和保存程序。

◆可以用多种方式,多次的运行程序。

◆可以在一个程序中调用另一个程序。

【例7.1】从D:\VFP_example\xj.dbf中选出所有1984年出生的同学,并显示该年出生的同学的姓名,性别,家庭住址,入学成绩。

程序代码如下:

Set talk off &&关闭人机对话

Clear &&清除屏幕

Use d:\VFP_example\xj.dbf &&打开数据表

List xm,xb,jtzz,rxcj for year(csrq)=1984 &&显示满足条件的记录

Use &&关闭数据表

Set talk on &&打开人机对话

【例7.2】求D:\ VFP_example\cj.dbf中的总分、平均分,并按总分排序,同时显示排序

后的结果。

程序代码如下:

Set talk off

Clear

Use d:\VFP_example\cj.dbf

Replace all zf with yw+sx+yy+VFP,pjf with zf/4 &&求总分和平均分

Sort to d:\ VFP_example\cjpx.dbf on zf /d &&按总分排序

Use d:\ VFP_example\cjpx.dbf &&打开排序后的数据表

browse &&显示排序后的记录

Use

Set talk on

注:①命令注释:以*或NOTE开关的代码行为注释行,在命令行中以&&做注释,注释行为非执行代码,不影响程序的功能。

②SET TALK ON|OFF:许多数据处理命令(如SUM、AVERAGE等,执行时会返回一些有关执行状态的信息,并且显示在Visual FoxPro的主窗口、状态栏或用户自定义的窗口里。而SET TALK OFF禁止执行状态信息的显示,SET TALK ON允许执行状态信息的显示。

③程序代码可以写在程序文件中,还可以出现在表单设计器和类设计器的事件和方法代码窗口、报表设计器和菜单设计器的过程代码窗口中。

④在命令窗口中可像执行程序一样,一次执行多条命令,具体实现方法如下:

◆在命令窗口中选择要执行的多条命令。

◆按ENTER键,或单击鼠标右键并在弹出的快捷菜单中选择【运行所选区域】

7.1.2 程序的建立与执行

1、程序的建立与修改

(1)程序文件的建立与修改是通过调用系统内置的文本编辑器来进行。建立程序文件的步骤:

①从【文件】菜单中选择【新建】命令,在“新建”对话框中选择【程序】单选按钮,并单击【新建文件】命令按钮。

②在程序编辑窗口中输入程序内容,程序内容是一条条的命令,程序中一行只能写一条命令,每条命令都以回车键结束,当命令太长,需要分行书写时,在一行末键入续行符分号“;”,再按回车键。这些命令不会立即执行。

③从【文件】菜单中选择【保存】命令或按CTRL+W键,然后在“另存为”对话框中指定程序文件的存放位置和文件名,并单击【保存】命令按钮。

注:程序文件默认扩展名是prg,如果指定其它扩展名,那么在打开或执行程序文件时都要显示指定扩展名。

(2)打开、修改程序文件的步骤:

①从【文件】菜单中选择【打开】命令,弹出“打开”对话框中,在“文件类型”列

141

表框中选择“程序”,在“文件列表”框中选定要修改的文件,并单击【确定】命令按钮。

②编辑修改后,从【文件】菜单中选择【保存】命令或按CTRL+W修改键保存文件,若要放弃本次,可从【文件】菜单中选择【还命令原】命令或按ESC键。

(3)用命令方式建立、修改程序文件:

格式:MODIFY COMMAND [文件路径]<文件名>

作用:执行该命令时,系统首先检索磁盘文件,如果指定文件存在,则打开修改,否则系统认为是要建立一个指定了文件名的程序文件。

注:格式中的[文件路径]可以省略,如果没有给定扩展名,系统自动加上默认扩展名prg。

2、执行程序文件

程序文件建好后,就可以用多种方式、多次执行它。具体方法有:

(1)菜单方式:

①从【程序】菜单中选择【运行】命令,弹出“运行”对话框。

②在“文件类型”列表框中选择“程序”,在“文件列表”框中选定要运行的文件,并单击【运行】命令按钮。

(2)命令方式:

格式:do [文件路径]<文件名>

作用:运行指定的文件。

该命令即可在命令窗口执行,也可在某个程序文件、表单、菜单事件中出现,这样就可完成程序的调用。当程序文件被执行时,文件中包含的命令将依次执行,直到所有的命令被执行完毕,或执行到以下命令:

①CANCAL:终止程序执行,清除所有私有变量,返回命令窗口。

②DO:转去执行另一个程序。

③RETURN:结束当前程序的执行,返回到调用它的上级程序,若无上级程序则返回到命令窗口。

④QUIT:退出Visual FoxPro系统,返回到操作系统。

Visual FoxPro程序通过编译、连编,可以产生不同的目标代码文件,这些文件具有不同的扩展名,当用DO命令执行程序文件时,如果没有指定扩展名,系统将按下列顺序寻找该程序文件的源代码或某种目标代码文件执行,.exe(Visual FoxPro可执行文件) .app(Visual FoxPro的应用程序文件) .fxp(Visual FoxPro的编译文件) .prg(Visual FoxPro的源程序文件)。

注:如果用DO命令执行查询文件、菜单文件,文件名必须要加上扩展名(.qpr、.mpr)。

§7.2 顺序结构程序设计

程序的基本结构是指程序中命令或语句执行的流程结构,基本结构有三种:顺序结构、选择结构、循环结构。顺序结构是最简单的程序结构,它按命令在程序中出现的顺序依次执行。

142

7.2.1输入命令

1、输入命令

(1)INPUT命令

格式:INPUT [<字符型表达式>] TO <内存变量>

作用:该命令等待用户从键盘输入数据,用户可以输入任何合法的表达式,当按回车键结束输入时,系统将表达式的值赋给指定的内存变量,程序继续执行。

注:①如果选用<字符型表达式>,它将作为提示信息,首先显示该表达式的值。

②必须输入数据,输入的数据可以是常量、变量,也可以是表达式,且以回车键结束输入。

③输入字符串时必须加定界符(如”闫秀婧”),输入逻辑型常量时要用圆点定界符(如.t.、.f.),输入日期时间型常量时要用大括号(如{^2004-12-25})。

【例7.3】从键盘上输入x的值,求Y=3×X+5的值。

程序代码:

Set talk off

Clear

Input "请输入X的值:" TO X

Y=3*X+5

?"Y=",y

set talk on

【例7.4】从键盘上输入姓名,在D:\VFP_example\xj.dbf中选出该同学。

程序代码:

Set talk off

Clear

close all

Input "请输入姓名:" TO X

Use d:\VFP_example\xj.dbf

list xm,jg,rxcj for xm=x

Use

Set talk on

(2)accept命令

格式:accept [<字符型表达式>] TO <内存变量>

作用:该命令等待用户从键盘输入字符串,当按回车键结束输入时,系统将字符串赋给指定的内存变量,程序继续执行。

注:①如果选用<字符型表达式>,它将作为提示信息,首先显示该表达式的值。

②必须输入数据,输入的数据只能是字符串,用户在输入字符串时不加定界符,且以回车键结束输入。

③如果不输入任何内容而直接按回车键,系统会把空串赋给指定的内存变量。

【例7.5】从键盘输入姓名,显示该同学的相关情况。

143

程序代码:

Set talk off

Clear

close all

accept "请输入姓名:" TO X

Use d:\VFP_example\xj.dbf

browse for xm=x

Use

Set talk on

(3)WAIT命令

格式:wait[<字符型表达式>][ TO<内存变量>][windows[AT<行>,<列>]][NOwait][clear|NOclear][timeout<数值表达式>]

作用:无任何选项时,暂停程序的执行,当按任意键,继续程序执行;若选择了TO <内存变量>该命令等待用户从键盘输入值,并按回车键,系统将字符赋给指定的内存变量,并继续执行程序。

注:①如果<字符型表达式>的值为空,则不显示任何信息,没有指定<字符型表达式>,显示默认的提示信息“按任意键盘继续……”。

②<内存变量>用来保存键入的字符,若用户按回车键或单击鼠标,那么内存变量中保存的是空值,若不选TO <内存变量>,输入的字符不保留。

③默认情况,提示信息被显示在主窗口或用户当前自定义窗口,若指定了windows 子句,则会出现在一个WAIT的提示窗口,提示窗口一般位于主窗口的右上角,也可用AT 短语指定其在主窗口中的位置。

④若同时选用Nowait和windows子句,系统将不等待用户按键,直接执行。

⑤若选用Noclear子句,则不关闭提示窗口,直到用户执行下一条WAIT windows 命令或WAIT clear命令为止。

⑥ timeout子句用来设置等待时间(秒),一旦超时,继续执行。

【例7.6】弹出提示窗口,5秒钟后关闭窗口,继续执行程序。

程序代码:

Set talk off

Clear

close all

wait "输入无效,请重新输入..." windows timeout 5

Set talk on

2、输出命令

(1)“\”与“\\”命令

格式1:\<文本行>

格式2:\\<文本行>

作用:将文本行的文字输出到屏幕上。

注:<文本行>需要定界符,<文本行>中除了可以包含一般的文字外,还可以包含具有

144

特殊含义的文字,如某些变量、表达式和函数,但这些变量、表达式和函数必须包含在文字读取符号“<<”和“>>”之间,并且事先用set textmerge on设置。

【例7.7】用该语句输出“今天的日期是:12/31/04”

程序代码

set talk off

clear

close all

set textmerge on

\今天的日期是:<>

set talk on

(2)text…endtext

格式:TEXT

<文本行1>

<文本行2>

……

ENDTEXT

作用:将由多个<文本行>所组成的文字块输出到屏幕上。

注:同“\”一样,当输出数据中包含变量、表达式和函数时,必须包含文字读取符号“<<”和“>>”,并且事先用set textmerge on设置。

【例7.8】用该语句输出

“今天值班人员是:李平

今天的日期是:12/31/04”

程序代码:

set talk off

clear

close all

set textmerge on

xm="李平"

text

今天的值班人员:<>

今天的日期是:<>

endtext

set talk on

7.2.2输出命令

(3)“?”与“??”命令

在第二章已讲,不再重复。

145

146

§7.3 选择结构程序设计

在大多数情况下,有些问题顺序结构程序设计是无法解决的,还要用选择结构和循环结构。支持选择结构的语句包括IF …ELSE …ENDIF 和DO CASE …ENDCASE 。 7.3.1 IF …ELSE …ENDIF

格式1:IF<条件> <语句序列>

Endif

作用:当条件成立时,执行<语句序列>,否则执行ENDIF 的下一条语句。 格式2:IF<条件>

<语句序列1> [ELSE

<语句序列2>]

Endif

作用:当条件成立时,执行<语句序列1>,否则执行<语句序列2>,再转到ENDIF 的下一条语句。

注:①IF 和ENDIF 必须成对出现,IF 是本结构的入口,ENDIF 是本结构的出口。

②条件语句可以嵌套,但不能出现交叉。在嵌套时,为了使程序清晰,易于阅读,

可按缩进格式缩写。

③<条件>为逻辑表达式,它先要进行计算,然后根据结果来判断程序的执行流程。

【例7.9】已知函数y=

{

)

8(58

(52>+≤+X x X x ,编程求相应的Y 值。

程序代码: set talk off close all

input "请输入X 的值" to x if x>8 y=x+5 else y=x*x+5 endif ?"y=",y set talk on 7.3.2 DO CASE …ENDCASE

格式:do case

Case <条件1>

<命令序列1>

Case <条件2>

<命令序列2>

……

Case <条件n>

<命令序列n>

[otherwise

<命令序列 n+1>]

Endcase

作用:<条件1>成立,执行<命令序列1>,否则判断<条件2>,如其为真,执行<命令序列2>,依次类推。无论执行了那个语句序列,系统对其它的条件不再判断,若N个条件都不成立,执行 <命令序列n+1>,若无该选项,直接执行ENDCASE后面的语句。

注:①<条件1>到<条件N>都是逻辑表达式,先计算,然后根据结果来判断程序的执行流程。

②系统只会执行该多路分支语句中的一个分支。

【例7.10】从键盘上输入成绩,判断该同学成果是优秀、良好、合格还是不合格(成绩在60分以下为不合格,60到80为合格,80到90为良好,90以上为优秀)程序代码:

set talk off

close all

input "请输入成绩" to x

do case

case x>90

?"优秀"

case x>80

?"良好"

case x>60

?"合格"

otherwise

?"不合格"

endcase

set talk on

§7.4 循环结构程序设计

Visual FoxPro提供了三种循环结构语句,FOR…ENDFOR、DO WHILE…ENDDO、SCAN…ENDSCAN。

147

7.4.1 FOR…ENDFOR

格式:FOR <循环控制变量>=<初值> TO <终值> [STEP<步长>]

<命令序列>

ENDFOR

作用:循环控制变量,按指定的步长从初值到终值变化,并控制命令序列的执行次数。

执行过程:

1、将初值赋给循环控制变量;

2、判断<循环控制变量>与<终值>的大小,存在两种情况:

◆步长为正值,为递增型循环,比较循环变量与终值的大小,当循环变量的值小于

终值时,执行<命令序列>,当循环变量的值大于终值时,转步骤5;

◆步长为负值,为递减型循环,比较循环变量与终值的大小,当循环变量的值大于

终值时,执行<命令序列>,当循环变量的值小于终值时,转步骤5;

3、循环控制变量按步长变化,即<循环控制变量>=<循环控制变量>+<步长>;

4、遇到ENDFOR,转步骤2

5、结束循环过程,转到ENDFOR后面执行。

【例7.11】某林场2000年的林木产值为12万元,计划年增长率为5%,请分别计算2005年、2010年、2015年、2020年的产值。

程序代码:

set talk off

close all

clear

v=12

r=0.05

for i=2001 to 2020 step 1

v=v*(1+r)

if i/5=int(i/5)

?str(i,4)+"年的产值为:",v

endif

endfor

set talk on

【例7.12】求1!+2!+……+N!

set talk off

close all

clear

s=0 &&累加和变量清0

x=1 &&计数变量置1

input "请给N赋值:" to n

for i=1 to n

148

x=x*i

s=s+x

endfor

?"1!+2!+......"+ltrim(str(n))+"!=",s

set talk on

7.4.2 DO WHILE…ENDDO

格式:DO WHILE <条件>

<命令序列1>

[loop]

<命令序列2>

[exit]

Enddo

作用:在循环条件的控制下,实现命令序列的重复执行。

执行过程:

1、先判断<条件>,若<条件>不成立,则转到ENDDO后面执行;若<条件>成立,则执行<命令序列1>;

2、如果循环体包含LOOP命令,当遇到LOOP语句时,就结束循环体的本次执行,转回DO WHILE处重新判断条件;

3、如果循环体包含EXIT命令,当遇到EXIT语句时,转到ENDDO后面执行。

注:LOOP和EXIT出现在DO WHILE…ENDDO中的选择语句中,根据条件来决定是按LOOP 转回,还是按EXIT转出。

【例7.13】d:\VFP_example中有cj.dbf(成绩表),从中统计数学成绩60分以下的人数,60-70的人数,70-80的人数,80-90的人数,90分以上的人数。

程序代码:

Set talk off

Clear

close all

store 0 to x1,x2,x3,x4,x5

Use d:\VFP_example\cj.dbf

do while not eof()

do case

case sx>90

x1=x1+1

case sx>80

x2=x2+1

case sx>70

x3=x3+1

149

case sx>60

x4=x4+1

otherwise

x5=x5+1

endcase

skip

enddo

?"90分以上的人数是:",x1

?"80-90分以上的人数是:",x2

?"70-80分以上的人数是:",x3

?"60-70分以上的人数是:",x4

?"60分以下的人数是:",x5

Use

Set talk on

【例7.14】从键盘上输入出生日期,查找该年出生的同学,并显示“姓名”、“入学成绩”。(要求该程序能实现循环查找。

程序代码:

Set talk off

Clear

close all

Use f:\VFP_example\xj.dbf

do while .T.

input "请输入出生日期:" to x

do while not eof()

if year(csrq)=x

?"姓名:"+xm

?"入学成绩:"+str(rxcj)

endif

skip

enddo

wait "继续查找吗?"to cx

if upper(cx)="Y"

loop

else

exit

endif

enddo

Use

Set talk on

150

7.4.3 SCAN…ENDSCAN

格式: SCAN [<范围>] [FOR <条件1>][WHILE<条件2>]

<循环体>

ENDSCAN

作用:执行该语句时,记录指针自动、依次的在当前表的指定范围内满足条件的记录上移动,对每一条记录执行执行循环体内的命令。

注:范围的默认值是ALL,而且LOOP和EXIT同样可以出现在该语句的循环体内。

【例7.15】统计专业代码(学号的第2、3位)为02的男、女生人数。

程序代码:

Set talk off

Clear

close all

store 0 to x,y

Use f:\VFP_example\xj.dbf

scan for subs(xh,2,2)="02"

if xb="男"

x=x+1

else

y=y+1

endif

endscan

?"男生人数:",x

?"女生人数:",y

Set talk on

7.4.4 循环的嵌套

循环还可以嵌套,即循环体中可包含循环语句,多个循环的嵌套称为多重循环。在多重循环中,循环层次必须分明,不允许交叉,否则会造成逻辑上的错误。

【例7.16】用程序实现屏幕上打印九九乘法表

程序代码:

set talk off

close all

clear

for x=1 to 9

for y=1 to 9

??str(x,1)+"*"+str(y,1)+"="+str(x*y,2)+" "

endfor

151

?

endfor

set talk on

【例7.17】打印等腰三角型。

程序代码:

clear

for i=1 to 5

?space(10-i)

for j=1 to 2*i-1

??"*"

endfor

?

endfor

§7.5 多模块程序

应用程序一般都是多模块程序,包含多个程序模块。模块是一个相对独立的程序段,它可以被其它模块所调用,也可以调用其它的模块。通常,把被其它模块调用的模块称为子程序,把调用其它模块而没有被其它模块调用的模块称为主程序。

将应用程序划分成一个个功能相对简单、单一的模块程序,不仅便于程序的开发,也利于程序的阅读和理解。

7.5.1 模块的定义和调用

在Visual FoxPro中,模块可以是命令文件,也可以是过程或函数。

1、过程的定义如下:

格式:procedure <过程名>|function<函数名>

<命令序列>

[return[<表达式>]]

[endproc|endfunc

作用:定义过程或函数。

注:①过程名或函数名必须以字母或下划线开头,可包含字母、数字或下划线。

②当程序执行到RETURN命令时,控制将转回到调用程序处,并返回表达式的值,若无RETURN,则在过程结束处自动生成一条隐含的RETURN命令,若RETURN不带表达式,则返回逻辑值.T.。

③ endproc|endfunc表示过程的结束,如果缺省,那么过程结束于下一条procedure <过程名>|function<函数名>命令或文件结尾处。

④过程或函数可以放置在程序文件代码的后面,也可以保存在称为过程文件的单独文件里,过程文件的建立仍用MODIFY COMMAND命令,文件的扩展名还是.prg.

152

153

⑤过程文件里只包含过程,这些过程能被其它任何程序所调用,但在调用过程文

件之前先要打开过程文件。

2、过程文件的打开

格式:SET PROCEDURE TO [<过程文件1>][,<过程文件2>,…][ADDITIVE]

作用:打开一个或多个过程文件,一旦过程文件被打开,那么该过程文件中的所有过程都可以被调用。若选用ADDITIVE ,那么在打开过程文件时,并不关闭原先已打开的过程文件。

3、过程文件的关闭

格式1:SET PROCEDURE TO

格式2:RELEASE PROCEDURE <过程文件1> [<过程文件2>…] 作用:关闭所有打开的过程文件。 4、模块的调用

格式1:DO<文件名>|<过程名> 格式2:<文件名>|<过程名> 作用:调用过程或文件。

注:①如果模块是程序文件代码,用<文件名>,否则用<过程名>。

②格式2中,即可作为命令使用,也可作为函数出现在表达式中,且文件名不能包含扩展名。

【例7.18】编程求组合数3)!-(83!8!C 3

8

程序代码: set talk off close all clear

zhs=jc(8)/(jc(3)*jc(8-3)) &&函数调用 ?"8中3的组合数:"+str(zhs) set talk on

function jc &&自定义函数

parameters n &&n 为模块程序中的私有变量 s=1

do while n>0 s=s*n n=n-1 enddo return(s) endfunc 【例7.19】例2、测得一马尾松的去皮胸径为24CM ,其外测1CM 的半径上有8个年轮,此树生长良好,树冠长度大于树高的一半,求材积生长率是多少?(生长率公式为:生长率=生长势常数/(去皮胸径*胸高最外1CM 半径的年轮数))

程序代码:

Main.prg(主程序)

set talk off

close all

clear

set procedure to qq &&打开过程文件

input "请输入生长势常数: "to x

input "请输去皮胸径: "to y

input "请输入胸高最外1CM半径的年轮数: "to z

do qw with x,y,z &&调用过程qw

set proce to

set talk on

qq.prg(过程文件名) &&建立过程文件

procedure qw(过程名) &&定义过程

parameters k,d,n,p

p=k/(d*n)

?"材积生长率为:"+str(p*100,4,2)+"%"

return

endproc

7.5.2 参数传递

模块程序可以接收调用程序传过来的参数,并能够根据接收到的参数控制程序流程或对接收到的参数进行处理,从而大大提高模块程序功能设计的灵活性。

1、接收参数的命令

格式1:PARAMETERS<形参变量1>[,<形参变量2>……]

作用:声明的形参变量被看作是模块程序中建立的私有变量。

格式2:LPARAMETERS<形参变量1>[,<形参变量2>……]

作用:声明的形参变量被看作是模块程序中建立的局部变量。

注:无论是PARAMETERS还是LPARAMETERS都应是模块程序的第一条可执行命令。

2、模块参数的调用

格式1:DO <文件名>|<过程名> WITH <实参1>[,<实参2>……]

格式2:<文件名>|<过程名> WITH <实参1>[,<实参2>……]

作用:调用模块程序时,系统自动会把实参传递给对应的形参。

注:①实参可以是常量、变量,也可以是表达式。

②形参的数目不能少于实参的数目,否则系统运行时会出错;若形参的数目多于实参的数目,多余的形参取初值逻辑假(.F.)。

③采用格式1调用程序模块时,如果实参是常量或一般形式的表达式,系统会计算出实参的值,并把它们的值赋给相应的形参,这种形式称为按值传递。如果实参是变量,

154

那么传递的不是变量的值,而是变量的地址,这时形参和实参是同一个变量(尽管它们的名字可能不同),在模块程序中对形参变量值的改变,同样是对实参变量值的改变,这种情形称为按引用传递。

④采用格式2调用程序模块时,默认情况下,都按值方式传递参数,如果实参是变量,可以通过命令SET UDEFPARMS命令重新设置参数传递的方式,具体设置如下: 格式:SET UDEFPARMS TO VALUE|REFERENCE

作用:选择TO VALUE,按值传递,形参变量值的改变不会影响实参PARAMETERS和LPARAMETERS。

7.5.3 变量的作用域

程序设计离不开变量,一个变量除了类型和取值外,还有属性。其属性就是它的作用域。变量的作用域指的是变量在什么范围内是有效或能被访问的,在Visual FoxPro中,若以变量的作用域来划分,内存变量可分为公共变量、私有变量和局部变量三类。

1、公共变量

公共变量在任何模块中都可以使用的变量。公共变量要先建立后使用,公共变量用PUBLIC命令建立。

格式:PUBLIC <内存变量表>

作用:建立公共的内存变量,并为它们赋初值逻辑假(.F.)。

例1、PUBLIC X,Y,S(10)

建立了两个简单内存变量X,Y和一个含有10个元素的数组S,它们的初值都必须是.F.。

注:①公共变量一旦建立就一直有效,即使程序运行结束返回到命令窗口也不会消失,只有当执行CLEAR MEMORY、RELEASE、QUIT等命令后,公共变量才被释放。

②在命令窗口中直接使用而由系统自动隐含建立的变量也是公共变量。

2、私有变量

在程序中直接使用(没有通过PUBLIC和LOCAL命令事先声明)而由系统自动隐含建立的变量都是私有变量。私有变量的作用域是建立它的模块及其下属的各层模块,一旦建立它的模块程序运行结束,这些私有变量将自动清除。

3、局部变量

局部变量只能在建立它的模块中使用,不能在上层和下层模块中使用,当建立它的程序模块运行结束时,局部变量自动释放,局部变量用LOCAL命令建立。

格式:LOCAL<内存变量表>

作用:建立指定的局部内存变量,并为它们赋初值.F.。

注:①由于LOCAL与LOCATE前四个字母相同,所以这条命令的动词不能缩写。

②局部变量要先建立,后使用。

4、隐藏内存变量

开发应用程序时,主程序与子程序不一定是由同一个人来设计的,编写子程序的人不可能对主程序中用到的变量了解的非常清楚。这样就可能出现以下情形:子程序中用到的变量实际上在主程序中已经建立,子程序的运行会无意间改变主程序中变量的取值。为了

155

解决这个问题,可以在子程序中使用private命令隐藏主程序中可能存在的变量,使得这些变量在子程序中暂时无效。

格式:private<内存变量表>

Private all [like<通配符>|except<通配符>]

作用:隐藏指定的在上层模块中可能已经存在的内存变量,使得这些变量在当前模块程序中暂时无效。

注:①该命令只能在子程序中使用。

②当前模块程序运行结束返回上层模块时,那些被隐藏的内存变量就自动恢复有效性。

③local命令在建立局部变量时,也具有隐藏在上层模块中建立的同名变量的作用,但该命令只在它所在的模块内隐藏这些同名变量。

§7.6 程序调试

程序调试是指在发现程序有错误的情况下,确定出错的位置并纠正错误,其中关键是确定出错的位置。有些错误系统能够发现(如语法错误),当系统执行、编译到这类错误代码时,不仅能给出出错信息,还能指出出错的位置;而有些错误(如计算和逻辑上的错误)系统是无法确定的,只能由用户通过“调试器”自己来查错。

7.6.1调试器环境

1、调试器的调用:

方法一:执行【工具】菜单中的【调试器】命令。

方法二:在命令窗口中输入DEBUG命令。

系统打开“调试器”窗口(如图7-1),进入调试器环境,在“调试器”窗口中可以选择的打开五个子窗口:跟踪、监视、局部、调用堆栈和调试输出。要打开子窗口,可以选择“调试器”窗口中的【窗口】菜单中的相应命令;要关闭子窗口,只需单击窗口右上方的“关闭”按钮。

2、跟踪窗口:

用于显示正在执行的程序文件,要打开一个需要调试的程序,可从“调试器”窗口的【文件】菜单中选择【打开】命令,然后在打开的对话框中选定所需的程序文件,被选中的程序文件将显示在跟踪窗口中,以便调试和观察。

跟踪窗口左端的灰色区域会显示某些符号,常见的符号及其意义如下:

→:指向调试程序中正在执行的代码行。

●:断点。可以在某些代码行处设置断点,当程序执行到该代码行时,中断程序执行。

可以控制跟踪窗口中的代码是否显示行号,方法是:在Visual FoxPro系统【选项】对话框的【调试】选项卡中选择【跟踪】单选按钮,然后设置“显示行号”复选框。

3、监视窗口:

用于监视指定表达式在程序调试执行过程中的取值变化情况。要设置一个监视表达式,

156

可单击窗口中的“监视”文本框,然后输入表达式的内容,按回车键后表达式便添入文本框下方的列表框中。当程序调试执行时,列表框内将显示所有监视表达式的名称、当前值及类型。

双击列表框中的某个监视表达式就可对它进行编辑;右键单击列表框中的某个监视表达式,然后在弹出的快捷菜单中选择【删除监视】可删除一个监视表达式。

在监视窗口中可以设置表达式类型的断点。

4、局部窗口:

用于显示模块程序(程序、过程和方法程序)中的内存变量(简单变量、数组、对象),显示它们的名称、当前取值和类型。

可以从“位置”下拉列表框中选定一个程序模块,下方的列表框内将显示在该模块程

157

序内有效(可视)的内存变量的当前情况。

单击局部窗口,然后在弹出的快捷菜单中选择“公共”、“局部”、“常用”或“对象”等命令,可以控制在列表框内显示的变量种类。

5、调用堆栈窗口

用于显示当前处于执行状态的程序、过程或方法程序。若正在执行的程序是一个子程序,那么子程序和主程序的名称都会显示在该窗口中。

模块程序名称的左侧往往会显示一些符号,常见的符号的意义如下:

调用顺序序号:序号小的程序模块处于上层,是调用程序;序号大的程序模块处于下层,是被调用程序,序号最大的程序模块也就是当前正在执行的程序模块。

当前行指示器:指向当前正在执行的行所在的程序模块。

从快捷菜单中选择【原位置】和【当前过程】命令可以控制上述两个符号是否显示。

6、调试输出窗口:

可以在程序模块中安置一些DEBUGOUT命令:

格式:DEBUGOUT<表达式>

作用:当程序模块调试执行到此命令时,会计算出表达式的值,并将计算结果送入调试输出窗口。

注:①为了区别于DEBUG命令,命令动词DEBUGOUT至少要写出6个字母。

②若要把调试输出窗口中的内容保存到另外一个文本文件中,可以选择“调试器”窗口【文件】菜单中的【另存输出】命令,或选择快捷菜单中【另存为】命令。

③要清除该窗口中的内容,可选择快捷菜单中的【清除】命令。

7.6.2设置断点

可以设置以下四种类型的断点:

类型1:在定点处中断。可以指定一代码行,当程序调试执行到该代码时中断程序执行。

类型2:如果表达式值为真,则在定位处中断。指定一代码行以及一个表达式,当程序调试执行到该代码行时,如果表达式的值为真,就中断程序执行。

类型3:当表达式值为真时中断。可以指定一个表达式,在程序调试执行过程中,当该表达式值改成逻辑.T.时中断程序执行。

类型4:当表达式值改变时中断。指定一个表达式,在程序调试执行过程中,当该表达式值改变时中断程序运行。

不同类型断点的设置方法大致相同,但也有一些区别,下面分别介绍:

◆设置类型1断点

在跟踪窗口中找到要设置断点的那行代码,然后双击该行代码左端的灰色区域,或先将光标定位于该行代码中,然后按F9键。设置断点后,该代码行左端的灰色区域会显示一个实心点。用同样的方法可以取消已经设置的断点。

也可以在“断点”对话框中设置该类断点,其方法与设置类型2断点的方法类似。

◆设置类型2断点

操作步骤如下:

158

①在“调试器”窗口中,选择【工具】菜单上的【断点】命令,打开“断点”对话框,如图7-2所示。

②从“类型”下拉列表中选择相应的断点类型。

③在“定位”框中输入适当的断点位置。如“TEST,2”表示在模块程序TEST的第二行处设置断点。

④在“文件”框中指定模块程序所在的文件。文件可以是程序文件、过程文件、表单文件等。

⑤在“表达式”框中输入相应的表达式。

⑥单击【添加】按钮,将该“断点”添加到断点列表框中。

⑦单击【确定】按钮。

与类型1断点相同,类型2断点在跟踪窗口的指定位置上也会有一个实心点。要取消类型2断点,可以采用与取消类型1断点相同的方法,也可以先在“断点”对话框的“断点”列表中选择断点,然后单击【删除】按钮。后者适合于所有断点类型的删除。

在设置该类断点时,如果觉得“定位”框和“文件”框的内容不大好指定,也可以采用下面的方法进行:

①在所需位置上设置一个类型1断点。

②在“断点”对话框的“断点”列表框内选择该断点。

③重新设置类型并指定表达式。

159

C语言程序设计第四版第七章答案 谭浩强

第七章函数 7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 maxyueshu(m,n) int m,n; { int i=1,t; for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) t=i; } return(t); } minbeishu(m,n) int m,n; {int j; if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); return j; } main() {int a,b,max,min; printf("enter two number is: "); scanf("%d,%d",&a,&b); max=maxyueshu(a,b); min=minbeishu(a,b); printf("max=%d,min=%d\n",max,min); } 7.2求方程的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #include"math.h" float yishigen(m,n,k) float m,n,k; {float x1,x2; x1=(-n+sqrt(k))/(2*m); x2=(-n-sqrt(k))/(2*m); printf("two shigen is x1=%.3f and x2=%.3f\n",x1,x2); } float denggen(m,n) float m,n; {float x; x=-n/(2*m); printf("denggen is x=%.3f\n",x); }

程序设计基础(C)第七章数组习题

学号:姓名:成绩: 程序设计基础(C)第七章数组习题 一、选择题 1.下列叙述中错误的是()。 A)对于double 类型数组,不可以直接用数组名对数组进行整体输入或输出 B)数组名代表的是数组所占存储区的首地址,其值不可改变 C)在程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数 2.下列关于字符串的叙述中正确的是()。 A)C 语言中有字符串类型的常量和变量 B)两个字符串中的字符个数相同时才能进行字符串大小的比较 C)可以用关系运算符对字符串的大小进行比较 D)空串一定比空格打头的字符串小 3.当用户要求输入的字符串中含有空格时,应使用的输入函数是()。 A)scanf( ) B)getchar( ) C)gets( ) D)getc( ) 4.若有定义语句:int a[3][6];,按在内存中的存放顺序,a 数组的第10 个元素是()。 A)a[0][4] B)a[1][3] C)a[0][3] D)a[1][4] 5.已有定义:char a[ ]="xyz",b[ ]={'x', 'y', 'z'};,下列叙述中正确的是()。 A)数组a 和b 的长度相同 B)a 数组长度小于b 数组长度 C)a 数组长度大于b 数组长度 D)上述说法都不对 6.下列程序的输出结果是()。 main( ) { char a[7]="a0\0a0\ 0"; int i,j; i=sizeof(a); j=strlen(a); printf("%d %d\n",i,j); } A)2 2 B)7 6 C)7 2 D)6 2 7.下列能正确定义一维数组的选项是()。 A)int a[5]={0,1,2,3,4,5}; B)char a[ ]={0,1,2,3,4,5}; C)char a={'A', 'B', 'C'}; D)int a[5]="0123"; 8.有以下程序 #include main() { int a[]={2,3,5,4},i; for(i=0;i<4;i++) switch(i%2) { case 0:

C程序设计第七章课后练习答案

C程序设计(第三版)谭浩强著课后习题答案第7章 2009-05-16 10:56 7.7 打印“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之 和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2 要求打印出由1 到n2 的自然数构成的魔方阵。 /******************************************************************** **算法思路:魔方阵中各数的排列规律如下: **(1)将1放在第一行中间一列 **(2)从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的** 行数减1,列数加1 **(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行) **(4)当上一个数的列数为n时,下一个数的列数应为1,行数减1 **(5)如果按上面的规则确定的位置数已有数,或者上一个数是第1行第n列时,则把 ** 下一个数放在上一个数的下面 ********************************************************************/ #include void main(){ int a[16][16],i,j,k,p,m,n; /*初始化*/ p=1; while(p==1){ printf("input n.(0n)){

智慧树知到《Python程序设计基础》章节测试答案

智慧树知到《Python程序设计基础》章节测试答案绪论 1、学好Python程序设计要注意的几个问题是 A:多看多练 B:多想多整理 C:多交流多请教 D:只看视频,不思考、不练习 答案: 多看多练,多想多整理,多交流多请教 2、本门课程将主要介绍哪些内容 A:运算符 B:内置函数 C:常用数据类型 D:文件操作 答案: 运算符,内置函数,常用数据类型,文件操作 第一章 1、下面特点属于Python语言的有哪些? A:开源 B:免费 C:跨平台 D:解释执行 答案: 开源,免费,跨平台,解释执行 2、Python支持函数式编程。 A:对 B:错 答案: 对

3、对于Python程序,对代码缩进的要求非常严格。 A:对 B:错 答案: 对 4、一般建议,每行Python代码的长度不要超过屏幕宽度,如果确实太长的话,应使用续行符。 A:对 B:错 答案: 对 5、一般来说,程序中的重要代码应加上适当的注释。 A:对 B:错 答案: 对 6、下面导入标准库对象的语句,正确的有? A:from math import sin B:from random import random C:from math import D:import 答案: from math import sin,from random import random,from math import * 第二章 1、Python无法表示9999这样大的整数。 A:对 B:错 答案: 错 2、集合中的元素都是唯一的,不会有重复。 A:对

B:错 答案: 对 3、Python中变量的类型是动态的,随时可以变化。 A:对 B:错 答案: 对 4、可以使用break作为变量名。 A:对 B:错 答案: 错 5、Python支持复数以及相关的运算。 A:对 B:错 答案: 对 6、Python中没有++和–这两个运算符。 A:对 B:错 答案: 对 第三章 1、已知x = [1, 2, 3],执行语句(4)之后,x的值是什么?A:[1, 2, 3, 4] B:[4] C:[1, 2, 3] D:4 答案:

《程序设计基础》-自测7答案

《程序设计基础》 第七章自测 一、选择题(每题10分,共40分) 题目1 正确 获得8.00分中的8.00分 标记题目 题干 下面关于测试的结论中只有一个是正确的,它是______。 选择一项: A. 测试工作是指在编程实现过程中进行的排错工作 B. 测试工作是指在产品完成后用户的验收工作过程 C. 测试工作量的弹性比较大,可以根据时间进度进行裁减 D. 测试工作要贯穿于整个软件开发的全过程 反馈 正确答案是:测试工作要贯穿于整个软件开发的全过程 题目2 正确 获得8.00分中的8.00分 标记题目 题干 软件开发模型着重研究的是______。 选择一项: A. 程序设计的方法和编程技巧 B. 软件开发全部过程、活动和任务的结构框架 C. 软件系统的模型和对应不同模型的开发方法 D. 软件系统的基本架构和常见的软件系统模型

反馈 正确答案是:软件开发全部过程、活动和任务的结构框架 题目3 正确 获得8.00分中的8.00分 标记题目 题干 在软件系统进行组装测试的时候发现错误,则针对被发现的错误,可以判断在整个软件开发过程最可能出现错误的阶段是______。 选择一项: A. 概要设计 B. 详细设计 C. 单元测试 D. 需求分析 反馈 正确答案是:概要设计 题目4 正确 获得8.00分中的8.00分 标记题目 题干 早期进行程序开发过程中存在不少问题,在下列问题中有一个并不是早期程序员常见的问题,它是______。 选择一项: A. 无固定程序设计方法 B. 程序中的控制随意跳转,不加限制地使用goto语句 C. 程序员过分依赖技巧与天分,不太注重所编写程序的结构

C语言程序设计第二版第四章第七章课后答案

1、输入函数scanf的参数错误,应该为:scanf("%f",&k); 2、|1234 1234 | 3、ff10 4、1,3,1 5、原字符串左边加空格再加字符串本省,字符个数总和为5个 6、scanf("%d,%d,%c,%c",&a1,&a2,&c1,&c2); 7、 printf("a+b=%d\n",a+b); printf("a-b=%d\n",a-b); printf("a*b=%d\n",a*b); printf("a/b=%d\n",a/b); printf("(float)a/b=%f\n",(float)a/b); printf("a%b=%d\n",a%b); 8、 void main() { float r; float s,c; printf("please input the number:"); scanf("%f",&r); if(r>=0) { s = 3.14*r*r; c = 2*3.14*r; printf("s = %f, c = %f\n",s,c); } else printf("you input number is error!"); } 9 void main() {int n; printf("please input the number:"); scanf("%d",&n); if(n>=100 && n <= 999) printf("%d%d%d",n%10,(n/10)%10,n/100); else printf("you input number is error!"); } 10、 void main() { int i,j,k; scanf("%d,%d,%d",&i,&j,&k); ((i%2 != 0?1:0) + (j%2 != 0?1:0)+(k%2 != 0?1:0)) == 2?printf("YES\n"):printf("NO\n"); } 11、 void main()

《Visual Basic程序设计基础》教材习题参考答案第七章

第7章对话框与菜单程序设计 一、判断题 1.√2.√3.√4.×5.×6.×7.√8.√9.√10.√ 二、选择题 1.D 2.A 3.C 4.C 5.B 6.D 7.A 8.B 9.D 10.B 三、填空题 1.窗体控制菜单、下拉式菜单、快捷菜单2.ShowFont 3.打开文件、另存为、颜色、字体、打印对话框4.工程、部件 5.CommonDialog1.Action =3、CommonDialog1.ShowColor 6.提示信息、对话框类型、对话框标题7.Click 8.工具9.代码窗口、Click 10.相同、正 四、程序阅读题 程序1. 显示提示信息为“5”、标题为“na的输出结果”、有一个“确定”按钮的消息框。 程序2. 显示提示信息为“您选择了第1项”、标题为“第一项”、有一个“确定”按钮的消息框。 五、程序填空题 1.(1)Int(Rnd*100) (2)Str(i) (3)Exit For 2.(1)False (2)Date (3)CommonDialog1.Color (4)m1 六、程序设计题 程序1.界面设计略,过程设计如下: Private Sub Command1_Click() CommonDialog1.ShowOpen List1.AddItem CommonDialog1.FileName End Sub 程序2.界面设计略,过程设计如下: Private Sub Command1_Click() CommonDialog1.ShowSave List1.AddItem CommonDialog1.FileName End Sub 程序3.界面设计如图10-9、表10-2所示,过程设计如下: Private Sub Sqr_Click() Shape1.Shape = 1 End Sub Private Sub Rec_Click() Shape1.Shape = 0 End Sub Private Sub Oval_Click() Shape1.Shape = 2 End Sub

C程序设计书面作业

C 程序设计 第七章习题 1、分析并写出下面程序的运行结果。 #include “stdio.h” int Square(int i){ return i*i; } int main(){ int i=0; i=Square(i); for( ; i<3;i++){ static int i=1; i+=Square(i); printf(“%d,”,i); } printf(“%d\n”,i); return 0; } 2、用全局变量模拟编程显示一个数字式时钟,然后上机验证。#include int hour,minute,second; /*定义全局变量*/ void update(){ seconde++; if(second==60){ ① minute++; } if( ②){ minute=0; hour++; } if(hour==24) ③; } void display(){ printf(“④“,hour,minute,second); } void delay(){ int t; for(t=0;t<10000000; t++); /*用循环体为空语句的循环实现延时*/

} int main(){ int i; ⑤ ; for(i=0;i<10000000;i++){ /*利用循环结构控制时钟运行的时间*/ update(); /*更新时、分、秒显示值*/ display(); /*显示时、分、秒*/ delay(); /*模拟延迟时间为1秒*/ } return 0; } 3、用函数编程计算两整数的最大值,在主函数中调用该函数计算并输出从键盘输入的两整数的最大值。 4、请分别用以下三种方法编写计算最大公约数的函数Gcd(),在主函数中调用该函数计算并输出从键盘任意输入的两整数的取大公约数。 (1)穷举法。由于a和b的最大公约数不可能比a和b中的较小都还大,否则一定不能整除它,因此,先找出a和b中的较小者,然后从该数开始逐次减1尝试每种可能,即检验该数到1的所有整数,第一个满足公约数条件的值就是a和b的最大公约数。 (2)欧几里得算法,也称辗转相除法。对正整数a和b,连续进行求余运算,直到余数为0为止,此时非0的除数就是最大公约数。(3)递归方法。对正整数a和b,当a>b时,若a中含有与b相同的公约数,则a中去掉b后剩余的部分a-b中也应含有与b相同的公约数,对a-b和b计算公约数就相当于对a和b计算公约数。反复使用最大公约数的如下3条性质,直到a和b相等为止,这时a或b就是它们的取大公约数。 性质1 如果a>b,则a和b与a-b和b的最大公约数相同,即Gcd(a,b)=Gcd(a-b,b). 性质2 如果b>a,则a和b与a和b-a的最大公约数相同,即Gcd(a,b)=Gcd(a,b-a). 性质3 如果a=b,则a和b的最大公约数与a值和b值相同,即Gcd(a,b)=a=b. 5、编写一个递归函数,用以实现从1到n这n个数的累加和。 6、编写一个递归函数,用以实现n的阶乘。 7、中国古代民间有一个游戏:两个人从1开始轮流报数,每人每次可以报一个数或两个连续的数,谁先报到30,谁为胜方。若要改成游戏者与计算机做这个游戏,则首先需要决定谁先报数,可以通过生成一个随机整数来决定计算机和游戏者谁先报数。计算机报数的原则为:若剩下数据的个数除以3,余数为1,则报1个数,若剩下数除以3,余数为2,则报2个数,否则随机报1个或2个数。游戏者通过键盘输入自己报的数,所报的数必须符合游戏的规则。如果计算机和游戏者都未报到30,则可以接着报数。先到到30的一方为胜。请

《C语言程序设计》基本知识点

《C语言程序设计》教学基本知识点 第一章C语言基本知识 1.C源程序的框架 尽管各个C源程序的功能千变万化,但框架是不变的,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。 2.C语言源程序的书写规则: (1)C源程序是由一个主函数和若干个其它函数组成的。 (2)函数名后必须有小括号,函数体放在大括号内。 (3)C程序必须用小写字母书写。 (4)每句的末尾加分号。 (5)可以一行多句。 (6)可以一句多行。 (7)可以在程序的任何位置加注释。 3.语句种类 语句是程序的基本成分,程序的执行就是通过一条条语句的执行而得以实现的,根据表现形式及功能的不同,C语言的基本语句可以分为五大类。 (1)流程控制语句 流程控制语句的功能是控制程序的走向,程序的流程有三种基本结构:顺序结构、分支结构和循环结构,任何复杂的程序都可以由这三种基本结构复合而成。其中后两种结构要用特定的流程控制语句实现。 (2)表达式语句 表达式语句的形式是:表达式;,即表达式后跟一分号“;”,分号是语句结束符,是一个语句必不可少的成分。表达式和表达式语句的区别在于表达式代表的是一个数值,而表达式语句则代表一种动作。最常见的表达式语句是赋值语句。 (3)函数调用语句 函数调用语句实际上也是一种表达式语句,形式为:在一次函数调用的小括号后面加上一个分号。 (4)空语句 空语句的形式就是一个分号,它不代表任何动作,常常作为一个意义转折点使用。 (5)复合语句 复合语句从形式上看是多个语句的组合,但在语法意义上它只相当于一个语句,在任何单一语句存在的地方都可以是复合语句。注意复合语句中最后一个语句末尾的分号不能少。复合语句右大括号后面没有分号。 4.运算符 用来表示数据各种操作的符号称为运算符。运算符实际上代表了一种类型数据的运算规则。不同的运算符具有不同的运算规则,其操作的数据类型必须符合该运算符的要求,运算结果的数据类型也是固定的。 根据参加操作的数据个数多少,可以将C语言的运算符分为单目运算符,双目运算符和三目运算符(三目运算符只有条件运算符一个)。 根据运算对象和运算结果的数据类型可分为算术运算符、关系运算符、逻辑运算符等。 5.表达式 表达式是由常量、变量、函数,通过运算符连接起来而形成的一个算式。一个常量,一个变量或一个函数都可以看成是一个表达式。 表达式的种类有: 算术表达式、关系表达式、逻辑表达式、赋值表达式、字位表达式、强制类型转换表达式、逗号

C++ Primer Plus 第六版 第七章编程题答案

//7.13.10 #include double add(double x,double y); double subtraction(double x,double y); double calculate(double x,double y ,double (*ps)(double a ,double b)); int main() { using namespace std; cout << "Please enter two number: \n"; double x,y; cin >> x >>y ; if(cin) { double result_add,result_subtraction; result_add = calculate(x,y,add); result_subtraction = calculate(x,y,subtraction); cout << "The sum of "<< x << " and "<< y << "is " << result_add<> x; cout << "Enter another number: "; cin >> y; } return 0; } double add(double x,double y) { return x+y; } double subtraction(double x,double y) { return x-y; } double calculate(double x,double y,double (*ps)(double,double)) { double a; a = (*ps)(x,y); return a;

《程序设计基础》课程教学大纲

《程序设计基础》课程教学大纲1.课程概况

2.教学内容及要求 第一章程序设计与C语言 1.教学内容 第一节C语言出现的历史背景、C语言的特点 第二节简单的C语言程序介绍 第三节运行C程序的步骤与方法 2.教学要求 了解C语言出现的历史背景、C语言的特点 理解简单的C程序功能及结构 掌握C程序的上机调试步骤 3.教学重点和难点 C语言的特点,运行C程序的步骤与方法。 第二章算法——程序的灵魂 1.教学内容 第一节算法的概念、算法的特性、简单算法举例 第二节算法的表示、结构化程序设计方法 2..教学要求 了解算法的概念、算法的特性 理解结构化程序设计方法 掌握算法的表示(自然语言表示、传统流程图表示、N-S流程图表示、伪代码表示、计算机语言表示) 3.教学重点和难点 掌握算法的表示 第三章顺序结构程序设计 1.教学内容 第一节顺序结构程序设计举例 第二节数据的表达形式及其运算 第三节C语句 第四节字符数据的输入输出、格式输入与输出 2.教学要求 掌握C语言的数据类型、常量与变量、整型数据、浮点型数据、字符型数据、变量赋初值、数值型数据间的混合运算、算术运算符算术表达式、赋运算符和赋值表达式、逗号运算符 和逗号表达式。 理解C语言的赋值语句、输入输出概念 掌握字符数据输入输出、格式输入输出,熟练掌握顺序结构程序设计方法 3.教学重点和难点 各类数值型数据间的混合运算;算术运算符和算术表达式;逗号运算符和逗号表达式。字 符数据的输入输出,简单的格式输入与输出,较复杂的输入输出格式控制。 第四章选择结构程序设计

1.教学内容 第一节关系运算符和关系表达式、逻辑运算符和逻辑表达式 第二节if语句、switch语句 第三节选择结构程序设计综合举例 2.教学要求 理解关系运算符和关系表达式、逻辑运算符和逻辑表达式 掌握if语句、switch语句,熟练掌握选择结构程序设计方法 3.教学重点和难点 用if语句实现选择结构,利用switch语句实现多分支选择结构。 第五章循环结构程序设计 1.教学内容 第一节为什么需要循环控制 第二节用while和do while语句实现循环 第三节用for语句实现循环 第四节循环的嵌套、break语句和continue语句 第五节循环结构程序设计综合举例 2.教学要求 理解while语句、do while语句、for语句、break语句、continue语句的功能及用法 掌握使用while语句、do while语句、for语句、break语句、continue语句设计循环结构程序的方法,熟练掌握使用while语句、for语句设计循环结构程序的方法,掌握分析、调试循环结构程序的基本原理和方法 3.教学重点和难点 用while语句和do…while语句实现循环,用for语句实现循环,循环的嵌套,用break语句和continue语句改变循环状态。 第六章利用数组处理批量数据 1.教学内容 第一节一维数组的定义和引用 第二节二维数组和多维数组的定义和引用 第三节字符数组 2.教学要求 理解一维数组、二维数组、多维数组的含义 掌握数组的定义和引用方法,熟练掌握运用数组设计程序的基本方法 3.教学重点和难点 一维数组的定义及使用方法,字符串的使用方法。 第七章函数 1.教学内容 第一节函数概述及函数定义的一般形式 第二节函数参数和函数的值 第三节函数的调用 第四节函数的嵌套调用 第五节函数的递归调用

程序设计基础上机考试题库

第三章: 1.输入整数n,输出由2×n+1行2×n+1列组成的以下(n=2)的图案。 2.输入整数n(<10),输出以下形式(n=3)的数字排列图案。 3.编写一个程序,输入一个整数,输出0~9各数字在该整数中出现的次数。 4.编写一个程序,输出所有英文字符及它们的ASCII码值,其中代码值分别用八进制形式、十六进制形式和十进制形式输出。 5.水仙花数是一个n(n>=3)位数字的数,它等于每个数字的n次幂之和。例如,153是一个水仙花数,153=13+53+33。试编写一个程序求小于999的所有水仙花数。 6.编写程序解百鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡。问鸡翁、鸡母和鸡雏各几何 7.编写一个程序,输入一个整数,逐位地输出整数的十进制数,要求位与位之间有一个空格符分隔。 8.编写程序,列表输出整数1~10的平方和立方值。 9.编写一个程序,输入3个实数,判断这些值能否作为一个三角形的三条边的长,如果能构成三角形,要求输出三角形的面积。 10.输入正整数n,输出n行n列星号字符组成的三角形图案。以下是n等于4的图案。

11.输入正整数n,输出由n行2×n-1列星号字符组成的三角形图案。以下是n等于3的图案。 12.输入正整数你n,输出n行2×n-1列的空心三角形图案。以下是n等于4的图案。 13..输入正整数n,输出n行n列的空心四边形图案。以下是n等于5的图案。 14.编写程序,按下面的公式计算自然对数底e的值。 E=1+1/1!+1/2!+1/3!+1/5!+··· 15.编写程序,按如下公式计算圆周率π的近似值。 π=4-4/3+4/5-4/7+4/9-4/11+··· 16.编写输入正实数x,求平方不超过x的最大整数n,并输出。

C++程序设计习题答案第七章

第七章动态内存分配习题 一、基本概念与基础知识自测题 7.1 填空题 7.1.1 C/C++定义了4个内存区间:(1)、(2)、(3)和(4)。 答案:(1)代码区,存放程序代码; (2)全局变量与静态变量区,存放全局变量或对象(包括静态); (3)局部变量区即栈(stack)区,存放局部变量; (4)自由存储区(free store),即动态存储区或堆(heap)区。 7.1.2 静态定义的变量和对象用标识符命名,称为(1);而动态建立的称为(2),动 态建立对象的初始化是通过(3)实现(4)。 答案:(1)命名对象 (2)无名对象 (3)初始化式(initializer) (4)显式初始化 7.1.3 在用new运算符建立一个三维数组15*30*10时,使用了(1)个下标运算符,对 应的用delete运算符注销这个三维数组时使用了(2)个下标运算符。new返回的指针是指向(3)的指针。 答案:(1)3个 (2)1个 (3)30行10列的2位数组 7.1.4 当动态分配失败,系统采用(1)来表示发生了异常。如果new返回的指针丢失, 则所分配的自由存储区空间无法收回,称为(2)。这部分空间必须在(3)才能找回,这是因为无名对象的生命期(4)。 答案:(1)返回一个空指针(NULL) (2)内存泄漏 (3)重新启动计算机后 (4)并不依赖于建立它的作用域 7.1.5 按语义的默认复制构造函数和默认复制赋值操作符实现的复制称为(1),假设类 对象obj中有一个数据成员为指针,并为这个指针动态分配一个堆对象,如用obj1按成员语义拷贝了一个对象obj2,则obj2对应指针指向(2)。 答案:(1)浅拷贝 (2)同一个堆对象 7.1.6 单链表的结点包含两个域:(1)和(2)。使用链表的最大的优点是(3), 即使是动态数组也做不到这一点。 答案:(1)数据域 (2)指针域 (3)用多少空间,开多少空间

C语言程序设计现代方法第七章答案

Chapter 7 Answers to Selected Exercises 3. [was #4] (b) is not legal. 4. [was #6] (d) is illegal, since printf requires a string, not a character, as its first argument. 10. [was #14] unsigned int, because the (int) cast applies only to j, not j*k. 12. [was #16] The value of i is converted to float and added to f, then the result is converted to double and stored in d. 14. [was #18] No. Converting f to int will fail if the value stored in f exceeds the largest value of type int. Answers to Selected Programming Projects 1. [was #2] short int values are usually stored in 16 bits, causing failure at 18 2. int and long int values are usually stored in 32 bits, with failure occurring at 46341. 2. [was #8] #include int main(void) { int i, n; char ch; printf("This program prints a table of squares.\n"); printf("Enter number of entries in table: "); scanf("%d", &n);

C语言程序设计教程 第七章 课后习题参考答案

P198 3 求主、副对角线元素之和 #include #define M 4 #define N 4 int main() { int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; int i,j,m=0,n=0; for(i=0;i void input(int a[],int n); void reverse(int a[],int n);

int main() { int a[5]; int size=sizeof(a)/sizeof(int); input(a,size); reverse(a,size); printf("\n"); return 0; } void input(int a[],int n) { int i; printf("请输入%d个整数:\n",n); for(i=0;i void reverse(int a[],int n); void print(int a[],int n); int main() { int a[]={1,2,3,4,5,11,16,13}; int size=sizeof(a)/sizeof(int); print(a,size); reverse(a,size);

C语言程序设计_第二阶段练习参考答案

江南大学现代远程教育第二阶段练习题 考试科目:《C语言程序设计》第七章至第九章(总分100分) 学习中心(教学点)批次: 层次: 专业: 学号:身份证号:姓名:得分: 一、单项选择题(本题共20小题,每小题2分,共40分.) 1、有以下程序 main() {?int?p[7]={11,13,14,15,16,17,18},i=0,k=0; ?while(i<7&&p[i]%2){k=k+p[i];i++;} ?printf("%d\n",k); } 执行后输出结果就是( )。 A、58 B、56 C、45 D、24 2、以下叙述中正确得就是( )。 A、全局变量得作用域一定比局部变量得作用域范围大 B、静态(static)类别变量得生存期贯穿于整个程序得运行期间 C、函数得形参都属于全局变量 D、未在定义语句中赋初值得auto变量与static变量得初值都就是随机值 3、程序如下: #define N 5 #defineM1 N*3 #define M2 N*2 main() { int i; i=M1+M2; printf(“%d\n”,i); } 程序编译后运行得输出结果就是( )。 A、10 ?B、20??C、25??D、30 4、有如下程序 void? f(int?x,int?y) {?int?t; if(x〈y){?t=x;?x=y;?y=t; }

} main() {int?a=4,b=3,c=5; ?f(a,b); f(a,c); f(b,c); printf("%d,%d,%d\n”,a,b,c); } 执行后输出结果就是( ). A、 3,4,5 ??B、 5,3,4 C、 5,4,3 D、4,3,5 5、有以下程序 main() {?char?s[]="\n123\\"; ?printf("%d,%d\n”,strlen(s),sizeof(s)); } 执行后输出结果就是()。 A、赋初值得字符串有错 B、 6,7 C、5,6? D、 6,6 6、若已定义得函数有返回值,则以关于该函数调用得叙述中错误得就是( )。 A、调用可以作为独立得语句存在? B、调用可以作为一个函数得实参 C、调用可以出现在表达式中?? D、调用可以作为一个函数得形参 7、以下不能正确定义二维数组得选项就是()。 A、 int a[2][2]={{1},{2}};?? B、int a[][2]={1,2,3,4}; C、 int a[2][2]={{1},2,3};? D、 int a[2][]={{1,2},{3,4}}; 8、有以下函数定义: void fun( int n,double x) {…… } 若以下选项中得变量都已正确定义并赋值,则对函数fun得正确调用语句就是( )。 A、fun(int y,doublem); B、k=fun(10,12、5); C、fun(x,n); D、voidfun(n,x); 9、有以下程序 #define f(x) x*x main() { int i; i=f(4+4)/f(2+2); printf(“%d\n”,i); } 执行后输出结果就是( )。 A、28 B、22 C、16 D、4

C程序设计基础课程教学大纲

《C程序设计基础》课程教学大纲 英文名称:Fundamentals of Programming in C 课程编号: 适用专业:非信息类各专科专业 总学时数:64 学分:3 一、课程的性质、目的和任务 《C程序设计基础》是学院非信息类专科各专业学生的专业选修课。 课程主要是为学生学习并掌握自己的第一门高级语言而开设的。通过一学期的学习(课堂教学和上机编程实践),学生能够掌握C语言的基本语法知识以及程序设计的三种基本控制结构,掌握C语言的基于函数的代码组织方法,掌握数组的使用方法并了解指针的一般用法,掌握文件读写的基本方法。 本课程的学习可以让学生了解程序设计,为进一步学习其他高级程序设计语言打下基础,也为今后从事基于专业的应用开发做一个知识准备。同时本课程教学内容基本符合浙江省高等学校计算机等级考试C语言考试大纲,该课程的教学将有助于学生通过省高校计算机等级二级考试。 二、教学内容及要求 第一章C语言概述 1、教学内容 C语言程序及其程序结构,C语言字符集、标识符与关键字,C语言程序的实现 2、重点、难点 重点:C语言结构特点,C语言标识符与关键字的识别,熟悉Turbo C开发环境 难点:C语言程序结构 3、教学基本要求 (1)了解C语言出现的历史背景 (2)了解C语言的特点 (3)掌握C语言程序结构和及书写规则

(4)掌握利用Turbo C开发环境的基本上机步骤 第二章数据类型运算符与表达式 1、教学内容 C语言的数据类型,常量和变量,整型数据,实型数据,字符型数据,C语言运算符和表达式,位运算和位运表达式,自增(减)运算符和表达式,逗号运算符逗号表达式,类型转换 2、重点、难点 重点:常量类型及变量的定义和初始化,C语言基本数据类型,C语言运算符的优先级和结合性,C语言表达式及其求值规则 难点:变量的定义及数据在内存中的存放,C语言运算符与表达式运算规则,自增自减、复合赋值运算符的使用,类型转换 3、教学基本要求 (1)了解变量和常量的表示 (2)了解C语言数据类型、运算符与表达式 (3)了解C语言基本数据类型的定义 (4)掌握不同类型常量的书写和识别 (5)掌握变量的定义和初始化 (6)掌握运算符的优先级和结合性 (7)掌握各种表达式的书写和求值 (8)掌握类型转换的默认规则 第三章C程序结构及顺序结构程序设计 1、教学内容 C语言基本语句,程序三种基本结构,数据的输入和输出,顺序结构程序设计实例 2、重点、难点 重点:C程序的三种基本结构及其流程图,N-S结构图描述,数据的输入输出格式符 难点:C程序的三种基本结构及执行过程,数据的输入输出格式 3、教学基本要求 (1)了解C语句种类及结构 (2)了解C程序的三种基本结构 (3)了解数据的输入输出格式符 (4)掌握常用的数据输入输出格式 (5)掌握顺序结构程序设计的基本方法

c程序设计(谭浩强)第七章习题答案

# include # include # include /*intyue(inta,int b) //求最大公约数 { inti,min; min=a>b?b:a; for(i=min;i>0;i--) { if(a%i==0&&b%i==0) { returni; break; } } } intbei(inta,int b) //求最小公倍数 { int c; return c=a*b/yue(a,b); } int main() { inta,b; printf("enter number:"); scanf("%d %d",&a,&b); printf("%d和%d的最大公约数和最小公倍数分别为:%d,%d\n",a,b,yue(a,b),bei(a,b)); } void det1(float a,floatb,float c) //求根 { float x1,x2; x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a); printf("x1=%f,x2=%f\n",x1,x2); } void det2(float a,float b) { float x=-b/(2*a); printf("x1=x2=%f\n",x); } void det3() { printf("无实数根\n");

} int main() { floata,b,c,d; printf("enter a,b,c:"); scanf("%f %f %f",&a,&b,&c); d=b*b-4*a*c; if(d>0) det1(a,b,c); if(d==0) det2(a,b); if(d<0) det3(); } void sushu(int a) //判断素数 { inti,k; k=sqrt(a); if(a==2||a==3) printf("%d是素数\n",a); else for(i=2;i<=k;i++) if(a%i!=0) continue; else {printf("%d不是素数\n",a);break;} if(i==k+1) printf("%d是素数\n",a); } int main() { int a; printf("enter number:"); scanf("%d",&a); sushu(a); }*/ /* void chang(int a[][3]) //转置,数组名作参数。{ inti,j,t; for(i=0;i<3;i++) for(j=0;j<3;j++)

相关主题
文本预览
相关文档 最新文档