【www.gbppp.com--人文百科】
完善程序(共20道题)
1.实现功能:在Text1、Text2、Text3中输入三个整数后,单击“输出最大值”按钮后,在Label3中显示这3个数中的最大值。
Private Sub Command1_Click()
Dim a, b, c, max As Integer
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)
If a > b Then max = a Else ①
If c > max Then ②
Label3.Caption = CStr(max)
End Sub
答案:
① max=b
② max=c
2.计算s=5+10+15+20的和
s=①
For n=5 to 20 step ②
s=s+n
next n
print s
答案:
① 0
② 5
3.计算1-100之间偶数的积
s=①
For n=100 to 1 step ②
s=s*n
next n
print s
答案:
① 1
② -2
4. 某超市为了对苹果进行促销,规定购买2公斤以上可以在原价每公斤6.80元的基础上打8折。实现功能:
输入购买的苹果公斤数,输出应付款。
Private Sub Command1_Click()
Dim x As Single
Dim cost As Single
x = Val(InputBox("请输入苹果公斤数:"))
If x ① Then
cost = x*6.8
Else
cost = x * 6.8 * 0.8
②
Print cost
End Sub
答案:
① <= 2
② end if
5.用DO WHILE 循环 求s=1+2+3+„„+100的和
I=0
S=0
Do While I<100
I=①
S=S+1
②
Print s
答案:
①I+1
6. 用DO WHILE 循环 求s=5*4*3*2*1的积
I=5
S=①
Do While I>=1
S=S*I
I=②
loop
Print s
答案:
①1
②I-1
7. 设计一个程序,单击按钮Command1时,让标签label1的字体为幼圆,字号36号字,label1上显示“祝同学们考试顺利”。
Private Sub Command1_Click()
Label1. ①=“幼圆”
Label1.fontsize=36
Label1. ②=“祝同学们考试顺利”
End Sub
①FontName
②caption
8.设计程序,窗体包含3个文本框Text1,Text2,Text3,当录入Text1内容时,Text2等于Text1内容的大写,Text3等于Text1内容的小写。
Text1的change事件代码:
Private Sub Text1_change ()
Text2.text= ①(Text1.text)
Text3.text =Ucase(②)
End Sub
答案:
① Lcase
② Text1.text
9.设计程序,窗体包含1个文本框Text1,当录入Text1内数字大于100,或小于0时,输出Text1内数字
Text1的change事件代码:
Private Sub Text1_change ()
x= ①(Text1.text)
完善程序练习
第1题(14分)以下程序是将一组整数按从小到大的顺序排列。排序的方法是将长度为n的数a分为两个长度分别为(n div 2)与(n-n div 2)的子数组a1,a2。然后递归调用排序过程,将a1,a2分别排序,最后将a1,a2归并成数组a。例如a=(3,1,2,4),那么a1=(3,1),a2=(2,4)。调用排序过程将a1,a2排序,得到a1=(1,3),a2=(2,4),然后进行合并排序。
从键盘输入数的长度n以及n个整数,存在数组a中,调用子过程sort进行排序,最后输出排序结果。
program wsh;
const maxn=100;.
type arr:array[1..maxn] of integer;
var
a:array[1..maxn] of integer;
n,i:integer;
procedure sort(n:integer; var a:arr);
var
i, p1, p2, n1, n2: integer;
a1,a2 :arr;
begin
if n = 1 then exit;
fillchar(a1,sizeof(a1) ,0);
fillchar(a2,sizeof(a2) ,0);
n1:=0; n2:=0;
n1:=n div 2; n2:=(____(1)____);
for i:= 1 to n1 do a1[i]:=a[i];
for i:= 1 to n2 do a2[i]:=____(2)____;
____(3)____;
sort(n2, a2);
p1:=1; p2:=1;
n:=0;
while (p1 <= n1) and (____(4)____) do
begin
n:=n+1;
if ____(5)____
then begin a[n]:=a1[p1] ;inc(p1); end
else begin ____(6)____; inc(p2) ;end;
end;
if p1 <= n1
then for i:= ____(7)____ to n1 do begin n:=n+1;a[n]:=a1[i] end
else for i:=p2 to n2 do begin n:=n+1; a[n]:=a2[i]; end;
end;
begin
write('n = ');
readln (n);
for i:= 1 to n do read(a[i]);
readln;
sort(n,a);
for i:=1 to n do write(a[i],'');
writeln;
end.
第2题(8分)有n(1≤n≤100)个同学种m(1≤n≤m≤100)种小树苗,例如:4个同学(1、2、3、4)每小时种4种树苗(A、B、C、D)的数量估算如下表所示,编程输出每人种1种苗所用的总时间最少的安排方案和所花费的时间。
学 生 A
1
2
3
4
const
maxn=100; maxm = 100;
var
a: array[1..maxn, 1..maxm] of integer;
m, n: integer;
i, j, t: integer;
procedure work(k,t1: integer);
var i: integer;
begin
if ____(1)____ then
begin
if t1 < t then t1:=t;
exit;
end;
for i:= ___(2)___ to ___(3)___ do
B 2 3 2 2 C 4 5 4 3 D 5 3 2 3 5 4 5 3 program wsh;
work(k+1,___(4)___);
end;
begin
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do read (a[i,j]);
readln
end;
t:= maxint;
work(1,0);
writeln(t)
end.
第3题(10分)程序的任务是用0„9中的数字填入如下乘法运算的*处,数字可重复使用,且所用的数字至少有一个是素数,要求输出满足下列算式的方案数。
* * *
x * *
----------------
* * *
* * *
----------------
* * *
program wsh;
const p:set of 0...9 = [2,3,5,7];
var
s:set of 0..9;
n: integer;
ans: longint;
f: text;
procedure init;
var
i: integer;
t:byte;
begin
readln(n);
s:=[];
begin
read(t);
s:=s+[t];
end;
close(f);
end;
function ok(x,l:integer):boolean; {此函数判断x是否符合条件}
var t: byte;
begin
ok:=false;
if ___(1)___< > l then exit;
while x< >0 do
begin
t:=x mod 10;
if not ( t in s) then exit;
x:=x div 10;
end;
ok:=true;
end;
function inset(x:integer):boolean; {此函数判断x中是否包含素数字}
var t: byte;
begin
inset:= false;
while ___(2)___ do
begin
t:=x mod 10;
if t in p then
begin
inset:= true;
exit;
end;
___(3)___;
end;
end;
procedure work;
var i,i1,i2,i3,j1,j2:integer;
begin
ans:=0;
if i1 in s then
for i2:=1 to 9 do
if i2 in s then
for i3:=1 to 9 do
if i3 in s then
begin
___(4)___;
for j1:=1 to 9 do
if (j1 in s) and ok(j1*i,3) then
for j2:=1 to 9 do
if (j2 in s) and ok(j2*i,3) and ___(5)___ then
begin
if (i1 in p) or (i2 in p) or (i3 in p)
or (j1 in p) or (j2 in p) or inset(j1*i) or inset(j2*i) then inc(ans);
end;
end;
writeln(ans);
end;
begin【程序完善】
init;
work;
end.
第4题(15分)下列程序是对冒泡排序的一种改进,数组elem中有n个元素elem[1]、elem[2]„、elem[n]。要排序的关键字是key。先从一端开始扫描,进行比较、交换,然后改变下一趟的扫描方向进行同样的处理。请完善下面的过程。
program wsh;
type
Td = record
key: integer;
inf: real;
end;
var
elem:array[1..1000] of Td;
n, i: integer;
第1题(14分)以下程序是将一组整数按从小到大的顺序排列。排序的方法是将长度为n的数a分为两个长度分别为(n div 2)与(n-n div 2)的子数组a1,a2。然后递归调用排序过程,将a1,a2分别排序,最后将a1,a2归并成数组a。例如a=(3,1,2,4),那么a1=(3,1),a2=(2,4)。调用排序过程将a1,a2排序,得到a1=(1,3),a2=(2,4),然后进行合并排序。
从键盘输入数的长度n以及n个整数,存在数组a中,调用子过程sort进行排序,最后输出排序结果。 program wsh;
const maxn=100;.
type arr:array[1..maxn] of integer;
var
a:array[1..maxn] of integer;
n,i:integer;
procedure sort(n:integer; var a:arr);
var
i, p1, p2, n1, n2: integer;
a1,a2 :arr;
begin
if n = 1 then exit;
fillchar(a1,sizeof(a1) ,0);
fillchar(a2,sizeof(a2) ,0);
n1:=0; n2:=0;
n1:=n div 2; n2:=(____(1)____);
for i:= 1 to n1 do a1[i]:=a[i];
for i:= 1 to n2 do a2[i]:=____(2)____;
____(3)____;
sort(n2, a2);
p1:=1; p2:=1;
n:=0;
while (p1 <= n1) and (____(4)____) do
begin
n:=n+1;
if ____(5)____
then begin a[n]:=a1[p1] ;inc(p1); end
else begin ____(6)____; inc(p2) ;end;
end;
if p1 <= n1
then for i:= ____(7)____ to n1 do begin n:=n+1;a[n]:=a1[i] end
else for i:=p2 to n2 do begin n:=n+1; a[n]:=a2[i]; end;
end;
begin
write('n = ');
readln (n);
for i:= 1 to n do read(a[i]);
readln;
sort(n,a);
for i:=1 to n do write(a[i],'');
writeln;
end.
答案:
n-n1
a[n1+i]
sort(n1,a1)
(p2 < =n2)
a1[p1] < a2[p2]
a[n]:=a2[p2]
p1
第2题(8分)有n(1≤n≤100)个同学种m(1≤n≤m≤100)种小树苗,例如:4个同学(1、2、3、4)每小时种4种树苗(A、B、C、D)的数量估算如下表所示,编程输出每人种1种苗所用的总时间最少的安
排方案和所花费的时间。
学 生 A
1
2
3
4 5 4 5 3 B 2 3 2 2 C 4 5 4 3 D 5 3 2 3
program wsh;
const
maxn=100; maxm = 100;
var
a: array[1..maxn, 1..maxm] of integer;
m, n: integer;
i, j, t: integer;
procedure work(k,t1: integer);
var i: integer;
begin
if ____(1)____ then
begin
if t1 < t then t1:=t;
exit;
end;
for i:= ___(2)___ to ___(3)___ do
work(k+1,___(4)___);
end;
begin
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do read (a[i,j]);
readln
t:= maxint;
work(1,0);
writeln(t)
end.
答案:
k>n
1
m
t1+t[k,i]
第3题(10分)程序的任务是用0„9中的数字填入如下乘法运算的*处,数字可重复使用,且所用的数字至少有一个是素数,要求输出满足下列算式的方案数。
* * *
x * *
----------------
* * *
* * *
----------------
* * *
program wsh;
const p:set of 0...9 = [2,3,5,7];
var
s:set of 0..9;
n: integer;
ans: longint;
f: text;
procedure init;
i: integer;
t:byte;
begin
readln(n);
s:=[];
for i:=1 to n do
begin
read(t);
s:=s+[t];
end;
close(f);
end;
function ok(x,l:integer):boolean; {此函数判断x是否符合条件} var t: byte;
begin
ok:=false;
if ___(1)___< > l then exit;
while x< >0 do【程序完善】
begin
t:=x mod 10;
if not ( t in s) then exit;
x:=x div 10;
end;
ok:=true;
end;
function inset(x:integer):boolean; {此函数判断x中是否包含素数字} var t: byte;
begin
inset:= false;
专题训练
1、【问题描述】
集合A中的元素有以下特征:
(1)数1是A中的元素;
(2)如果X是A中的元素,则2X+1,3X+1也是A中的元素;
(3)除了条件(1),(2)以外的所有元素均不是A中的元素;
给定数N,请求出集合中的第N个元素(元素按由小到大排列)。
例如 N=5, A(5)=9
5个元素分别是1、3、4、7、9
var n,Long,x:longint;
function init(x:longint):boolean;
begin
if x=1 then init:=true
else if( (x-1)mod 2=0)and( init((x-1)div 2))
or ________________________then init:=true else_________________ ; end;
begin
readln(n);
x:=0;
Long:=0;
while Long<n do
begin
x:=__________ ;
if init(x) then _____________________ ;
end;
writeln(_________________ );
end.
2、求N个数中的第K小的数。程序利用快排(递归、分治算法),当找到第N个小的数时候就停止。
样例:输入:5 {N}
5 6 4 1 8 {N个数}
2 {第2小的数}
输出:4 {第2小的数是4}
var i,j,k,n:integer;
a:array[1..100] of integer;
procedure search(b,e:integer);
var i,m,t:integer;
begin
if b=e then ____;
i:=b; j:=e; m:=a[k];
repeat
while _______do inc(i);
while ______ do dec(j);
if _____ then begin t:=a[i];a[i]:=a[j];a[j]:=t end;
until i>=j;
if i=k then exit;
if i>k then ________________else ______________________;
end;
begin
readln(n);
for i:=1 to n do read(a[i]);
readln(k);
search(1,n);
writeln(a[k]);
end.
3、根据二叉树的前序遍历和中序遍历,求出树的后序遍历。
样例输入:abdec (前序) 输出:debca(后序)
dbeac (中序)
var s1, s2 : string;
procedure try(L1, r1, L2, r2 : integer);
var m : integer;
begin
m := pos(s1[L1], s2);
if m >L2 then try(__________________);
if m < r2 then try(________________________);
write(s1[L1])
end;
begin
readln(s1); readln(s2);
try(1, length(s1), 1, length(s2));
end.
4、(选排列)下面程序的功能是利用递归方法生成从1到n(n<10)的n个数中取k(1<=k<=n)个数的全部可能的排列(不一定按升序输出)。例如,当n=3,k=2时,应该输出(每行输出5个排列):
12 13 21 23 32
31
程序:
Var i,n,k:integer;
a:array[1..10] of integer;
count:longint;
Procedure perm2(j:integer);
var i,p,t:integer;
begin
if ① then
begin
for i:=k to n do
begin
inc(count);
t:=a[k]; a[k]:=a[i]; a[i]:=t;
for ② do write(a[p]:1);
write(' ');
t:=a[k];a[k]:=a[i];a[i]:=t;
if (count mod 5=0) then writeln;
end;
exit;
end;
for i:=j to n do
begin
t:=a[j];a[j]:=a[i];a[i]:=t;
③ ;
t:=a[j]; ④ ;
end
end;
begin
writeln('Entry n,k (k<=n):'); read(n,k);
count:=0;
for i:=1 to n do a[i]:=i;
⑤ ;
end.
5、(大整数开方)输入一个正整数n(1≤n<10100),试用二分法计算它的平方根的整数部分。NOIP2011题
Const size = 200;
type
hugeint = record
len : integer;
num : array[1..size] of integer;
end; //len表示大整数的位数;num[1]表示个位、num[2]表示十位,以此类推
var s : string;
i : integer;
target, left, middle, right : hugeint;
function times(a, b : hugeint) : hugeint; // 计算大整数 a 和 b 的乘积
var i, j : integer;
ans : hugeint;
begin
fillchar(ans, sizeof(ans), 0);
for i := 1 to a.len do
for j := 1 to b.len do
① := ans.num[i + j - 1] + a.num[i] * b.num[j]; for i := 1 to a.len + b.len do
begin
ans.num[i + 1] := ans.num[i + 1] + ans.num[i] div 10;
② ;
if ans.num[a.len + b.len] > 0 then
ans.len := a.len + b.len
else ans.len := a.len + b.len - 1;
end;
times := ans;
end;
function add(a, b : hugeint) : hugeint; // 计算大整数 a 和 b 的和 var i : integer;
ans : hugeint;
begin
fillchar(ans.num, sizeof(ans.num), 0);
if a.len > b.len then
ans.len := a.len
else ans.len := b.len;
for i := 1 to ans.len do
begin
ans.num[i] := ③ ;【程序完善】
ans.num[i + 1] := ans.num[i + 1] + ans.num[i] div 10;
ans.num[i] := ans.num[i] mod 10;
end;
if ans.num[ans.len + 1] > 0 then
inc(ans.len);
add := ans;
end;
function average(a, b : hugeint) : hugeint; // 计算大整数 a 和 b 的平
均数的整数部分
var i : integer;
ans : hugeint;
begin
ans := add(a, b);
for i := ans.len downto 2 do
begin
ans.num[i - 1] := ans.num[i - 1] + ( ④ ) * 10;
ans.num[i] := ans.num[i] div 2;
end;
ans.num[1] := ans.num[1] div 2;
if ans.num[ans.len] = 0 then
dec(ans.len);
average := ans;
end;
function plustwo(a : hugeint) : hugeint; // 计算大整数 a 加 2 后的结果
var i : integer;
ans : hugeint;
begin
ans := a;
ans.num[1] := ans.num[1] + 2;
i := 1;
while (i <= ans.len) and (ans.num[i] >= 10) do
begin
ans.num[i + 1] := ans.num[i + 1] + ans.num[i] div 10;
ans.num[i] := ans.num[i] mod 10;
inc(i);
end;
if ans.num[ans.len + 1] > 0 then
⑤ ;
plustwo := ans;
end;
function over(a, b : hugeint) : boolean; // 若大整数 a > b 则返回 1, 否则返回 0
var i : integer;
begin
if ( ⑥ ) then
begin
over := false;
exit;
end;
if a.len > b.len then
begin
over := true;
exit;
end;
for i := a.len downto 1 do
begin
if a.num[i] < b.num[i] then
begin
over := false;
exit;
end;
if a.num[i] > b.num[i] then
本文来源:http://www.gbppp.com/jy/392653/
推荐访问:仲裁程序完善 完善征地程序