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;