Delphi 练习题
-
选择题:
-
设a,b,c为整形变量,且有a:=5,b:=2; 下面能使c的值为1的正确语句是
A)c:=(a-2)/b; B)c:=a MOD(b+2.0)
C) c:=a DIV (b+1) D)c:=(a-2) DIV (b/1)
-
下列那个表达式无语法错误:
A)70<30 B) 70>30 AND70>15 C)15<30<50 D)70 NOT 70>20
-
设r为实变量,i为整变量,下面CASE 语句合法的是
A)case r of B) case I mod 3 of
1.5,2.5:语句1; 0:语句1;
3.5,4.5:语句2; 2:语句2;
END; END;
-
C) case r of D) case I mod 3 of
1,3,.5:语句1; 0:语句1;
3,4,6:语句2; 1,2:语句2;
END;
-
下列说法中错误的是:
A)IF语句可以嵌套 B)循环语句可以嵌套
C)子程序可以嵌套 D)集合可以嵌套
(5) 不是object passcal 数据类型的是:
A)string B) int C) char D) real
(6)tbuttom 构件的visible 属性类型是:
A)boolean B) integer
C) char D) real
-
timage 构件的left ,top 属性类型是:
A)boolean B)integer
C) tstring D) real
-
ttimer 构件所在的选项卡是:
A)win32 B)standard
C) additional D)system
-
dephi 单元文件的后缀名是:
A).dpr B) .res
C) .dcu D) .pas
-
dephi 工程文件的后缀名是:
A).dpr B).res
C) .dcu D).pas
-
构件的enabled属性用于
A).显示构件 B).使构件工作
C) .显示标题 D).清除标题
-
构件的visible属性用于
A).显示构件 B).使构件工作
C) .显示标题 D).清除标题
-
窗体的oncreate事件在
A).在关闭窗体时发生 B). 在创建窗体时发生
C) . 在显示窗体时发生 D). 在点击窗体时发生
-
Tedit 的onkeypress 事件在
A).在点击edit时发生 B). 在edit的text变化时发生
C) . 在按下键盘的某个键时发生 D). 在点击窗体时发生
(15) 窗体的onmouseup事件在
A).在点击鼠标时发生 B). 在拖动鼠标时发生
C) . 在双击鼠标时发生 D). 在放开时鼠标时发生
(16)确定一个构件的位置由属性()
A).left,top B). width,height
C) caption,name. D). enabled,visible
(17)状态栏的面板的第一个面板的序号是:
A).1 B). 0
C) . -1 D). 2
(18)窗体的许多事件中,最早发生的是:
A).onshow B). onclick
C) . onkeypress D). oncreate
(19)timer中的interval代表时间1秒的是:
A).500 B). 200
C) . 1000 D). 2000
(20)edit1.text[i]表示
A).edit1中的i个字符 B). .edit1中的第i个字符
C) . .edit1中的左边的i个字符 D). .edit1中的右边的i个字符
二、填空题:
(1)、隐藏窗体的方法是:( hide )
(2)、关闭窗体的方法是:( close )
(3)、把组件Tmemo的内容保存到文本文件的方法是:lines.savetofile(filename);() )
(4)、要初始化窗体构件或某些变量时,需编写窗体事件:( oncreate,onshow )
(5)、本窗体若干个共用的变量要在单元文件的( implementition 下 )部分声明
(6)、其他窗体要用的变量要在单元文件的(interface )部分声明
(7)、要在列表框中添加一项的方法是:( items.add(strings) )
(8)、要使timer1构件停止工作的程序语句是:(timer1.enable:=false )
(9)、要使edit1构件在窗体上显示的程序语句是:(edit1.visible:=true )
(10)、把时间转换为字符串型的函数是:( timetostr() )
(11)、随机函数是( random() )
(12)、四舍五入函数是( round() )
(13) 函数odd(3)的值是( true );
(14) const pai=3.14; 表示( )
(15)uses unit1;表示( )
(16)var a:array[-3..3,false..true] of integer;表示数组a有( 14 )整数。
(17)adoquery1.sql的属性是(tstrings )类型。
(18)form1.caption 表示窗体的( 标题 )。
(19)form1.name表示窗体的( 名字 )。
(20)ado连接的数据集构件有两个( adotable ,adoquery )
(21)把字体颜色设置为红色的语句是( font.color:=clred )
(22) 把字体大小设置为18的语句是( font.size:=18 )
(23) 把字体样式设置为下划线的语句是(Font.Style:= Font.Style+[fsunderline]; )
(24) 把字体设置为隶书的语句是(font.name:='隶书' )
(25)打开文件对话框的语句是( opendialog1.execute )
(26)在窗体上画圆的语句是( form1.canvas.ellipse(x1,x2,x1+y,x2+y) )
(27)把画笔移到x0,y0的语句是( form1.canvas.moveto(x0,y0) )
(28)把画刷的样式设置为交叉的语句是( form1.canvas.brush.style:=bscross )
(29)画线的方法是( form1.canvas.lineto(x,y) )
(30)画椭圆的方法是( canvas.ellipse(x1,x2,y1,y2) )
-
阅读程序,说明其功能。
-
Var f:textfile;
Num:integer;
Begin
Assiginfile(f,opendialog1.filename)
Reset(f)
Num:=0;
While not eof(f) do
Begin
Readln(f);
Num:=num+1;
End;
Edit1.text:=inttostr(num);
显示文件的行数
-
2. procedure TForm1.Button1Click(Sender: TObject);
var s:string;i,j,n:integer;
begin
n:=0;//初值
s:=inputbox('input ch','ch=?','');
j:=length(s);
for i:=1 to j do
begin
if (s[i]>='0') and (s[i]<='7') then
n:=n*8+ord(s[i])-ord('0');
end;
edit1.Text:=inttostr(n);
end;
输入 777 时 其输出为:511
输入 505 时 其输出为:325
3. procedure TForm1.Button1Click(Sender: TObject);
Var n,x,I,s,power:integer;c:string;
begin
c:=inputbox('input ch','c=?',' ');
n:=strtoint(c);
s:=0;
for x:=1 to n do
begin
power:=1;
for I:=1 to x do
power:=power*x;
s:=s+power;
end;
Edit1.text:=inttostr(s);
end;
当c中的值为 5 时 输出是:1+22+33+…..
4. var x,y:integer;
begin
x:=80 y:=5;
repeat
if x-y>15 then
y:=y+3
else
x:=x div 2;
until x div y <=5;
showmessage(inttostr(x)+inttostr(y));
80 14
四、.设计题:
-
写一个函数revers(x:integer):integer;,求一个整数的逆序数。如:4503的逆序数是:3054
function rever(x:integer):integer;
var s:integer;
begin
s:=0;
while x>0 do
begin
s:=s*10+x mod 10;
x:=x div 10;
end;
rever:=s;
end;
-
写一个过程p1(p1,p2,p3:tpoint,var l,s:real);求三角形(由p1,p2,p3三点围成)的周长l 及面积 s
procedure p1(p1,p2,p3:tpoint,var l,s:real);
var a,b,c,pp:real;
function d(p1,p2:tpoint):real;
begin
d:=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
end;
begin
a:=d(p1,p2);b:=d(p2,p3);c:=d(p1,p3);
pp:=0.5*(a+b+c);
l:=a+b+c;
s:=sqrt(pp*(pp-a)*(pp-b)*(pp-c));
end;
-
写一个过程add_string(s:string;c:Tcombobox);把字符串s加入到下拉列表框c中。
Procedure add_string(s:string;c:Tcombobox);
Begin
c.items.add(s);
end;
*4 写一个过程draw(n:integer)在窗体上输出:
1
-
2 1
1 2 3 2 1
……………………………………………..
1 2 3 …………………..n …………………3 2 1
procedure draw(n:integer);
var x,y,i,j:integer;
begin
for i:=1 to n do
begin
j:=i;
y:=i*20;
while j>0 do
begin
x:=form1.Width div 2;
form1.Canvas.TextOut(x+(i-j)*20,y,inttostr(j));
form1.Canvas.TextOut(x-(i-j)*20,y,inttostr(j));
j:=j-1;
end;
end;
end;
4.如下界面: richedit1
在edit1中输入文件名,点击button1 使文件中的内容显示在richedit1
procedure TForm1.Button1Click(Sender: TObject);
var f:textfile; s:string;
begin
assignfile(f,edit1.Text);
reset(f);
while not eof(f) do
begin
readln(f,s);
RichEdit1.lines.add(s);
end;
closefile(f);
end;
查询的时候必须加上路径。
其实TMD这些都废话,直接一句richedit1.lines.loadfromfile(edit1.text);
5. 有雇员信息表(guyuan.mdb)如下:
雇员号 | 雇员名 | 部门号 | 工资 |
001 | 刘玟民 | 02 | 2000 |
010 | 马键辉 | 01 | 1200 |
056 | 罗小海 | 02 | 1300 |
101 | 牛进林 | 04 | 2100 |
界面如下:
现查询部门号为'02'的所有记录,请写出相应的SQL语句,并使之显示在
procedure TForm2.Button1Click(Sender: TObject);
var I:integer;
begin
adouery1.close;
adouery1.sql.add('select * from guyuan where部门号=:部门号);
adoquery1.parameters.paramerterbyname('部门号').value:='02'
adouqery1.open;
stinrggrid1.cells[0.0]:='雇员号';
stinrggrid1.cells[1.0]:='雇员名';
stinrggrid1.cells[2.0]:='部门号';
stinrggrid1.cells[3.0]:='工资';
I:=1;
while not adoquery1.eof do
begin
stinggrid1.cells[0.i]:=adoquery1.fieldvalue['雇员号'];
stinggrid1.cells[1.i]:=adoquery1.fieldvalue['雇员名';];
stinggrid1.cells[1.i]:=adoquery1.fieldvalue['部门号'];
stinggrid1.cells[1.i]:=adoquery1.fieldvalue['工资'];
I:=I+1;
Adoquery1.next;
End;
end;
end.
6.写两个事件过程,(1.)点击"输入数据"在edit1中输入10个随机数.
(2)点击"分离数据"把奇数显示在edit2中.偶数显示在edit3中.
var a:array[1..10] of integer;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;s:string;
begin
edit1.Clear;
for i:=1 to 10 do
begin
s:=inputbox('输入','请输入一个数','');
edit1.Text:=edit1.Text+s+' ';
a[i]:=strtoint(s);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
edit2.Clear;
edit3.Clear;
for i:=1 to 10 do
begin
if odd(a[i]) then edit2.text:=edit2.Text+inttostr(a[i])+' '
else edit3.Text:=edit3.text+inttostr(a[i])+' ';
end;
end;
*7.写两个事件过程,(1.)点击"k个随机数"窗体上显示k(<10)个随机数(<100).
(2)点击"k个button"产生k个button,并把k个数显示在k个button,中.
var n:array[1..10] of integer;
k:integer;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
randomize;
k:=random(10);
for i:=1 to k do
begin
n[i]:=random(100);
form1.Canvas.TextOut(100+(i-1)*20,50,inttostr(n[i]));
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var Kbutton:array[1..10] of Tbutton;
i:integer;
begin
for i:=1 to k do
begin
Kbutton[i]:=Tbutton.Create(self);
Kbutton[i].Parent:=self;
Kbutton[i].Top:=100;
Kbutton[i].Left:=100+(i-1)*40;
Kbutton[i].Height:=40;
Kbutton[i].Width:=40;
Kbutton[i].Visible:=true;
Kbutton[i].Caption:=inttostr(n[i]);
end;
end;8.设有student表(学号,姓名,性别,出生年月,成绩,照片);
Xiuanxiu表(学号,课程号,成绩);用学号连接,datasource1,datasource2,query1,query2的相关属性均已设置好,请写一个ondatasourcechange的事件代码,令主表(student)每移动一个记录,从表(xuanxiu)的内容跟着变化.如图所示:
procedure tform1.ondatasource(tobject)
var s:string;
begin
adoquery1.open;
s:=adoquery1.fieldvalue['学号'];
adoquery2.close;
adoquery2.sql.add(select * from xuanxiu where 学号=学号);
adoquery2.parameters.parambyname('学号').value:=s;
adoquery2.open;
end;
9. 设有student表(学号,姓名,性别,出生年月,成绩,照片);在combobox1中用手工输入学号,姓名,性别,出生年月,成绩,在edit1中输入要查询的相应数据, 请写一个button1click的事件代码以及combobox1click的事件代码,实现所要的查询.假设datasource1,query1,dbgrid1属性已连接好。
var s:string;
procedure tform1.comboboxclick(tobject)
begin
s:=combobox1.text;
end;
procedure tform1.buton1click(tobject);
begin
query1.close;
query1.sql.add('select * from student while'+s+'=:参数');
query1.parameters.parambyname('参数').value:=edit1.text;
query1.open;
end;
10.如图所示,写两个事件代码,单击"添加"把edit1中的内容加到listbox1中,并把他的字符个数添加到listbox2中
procedure TForm1.Button1Click(Sender: TObject);
var n:integer;
begin
listbox1.items.add(edit1.text);
n:=length(edit1.text);
listbox2.items.add(inttostr(n));
end;
procedure TForm1.Button2Click(Sender: TObject);
var I:integer;
begin
for I:=0 to listbox1.items.count-1 do
if listbox1.selected[i] then begin
listbox1.items.delete(i);
listbox2.items.delete(i);
break;
end;
end;
11.有student表(学号,姓名,性别,成绩)现要建立直方图,分析每位学生的成绩分布
请写button1click的事件代码
Implementition
Type re=record
Name:string;
Scor: real;
End;
Var a:array[1..10] of re; i:integer
Procedure tfom1-button1click(sender:tobject);
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from student');
query1.Open;
i:=1;
while not query1.Eof do
begin
a[i].name :=query1.FieldValues ['姓名'];
a[i].scor :=query1.FieldValues ['成绩'];
i:=i+1;
query1.Next ;
end;
With Series1 do
Begin
Add( a[1].scor , a[1].name , clRed ) ;
Add( a[2].scor , a[2].name , clBlue ) ;
Add( a[3].scor , a[3].name , clGreen ) ;
end;