(共30张PPT)
例1、输入50个学生的某门课程的成绩,打印出低于平均分的学号与成绩。
Type
score=array[1..50] of integer ;
Var a:score ;
或
Var a:array[1..50] of integer ;
Program array1(input,output);
const n=10;
var a:array[1..n] of integer; i,sum:integer; ave:real;
begin
sum:=0;
for i:=1 to n do
begin
read( a[i] );
sum:=sum+a[i]
end;
ave:=sum/n;
writeln(‘ave=’,ave:6:2);
for i:=1 to n do
if a[i]
end.
例2、输入10个数,将这10个数逆序输出,并求这10个数的和。
Program array2(input,output);
var a:array[1..10] of integer; i, sum:integer;
begin
writeln( ‘Please input 10 numbers:’ );
for i:=1 to 10 do
read(a[i]);
for i:=10 downto 1 do
write(a[i]:5);
writeln;
sum:=0;
for i:=1 to 10 do
sum:=sum+a[i];
writeln(‘sum=’,sum)
end.
例3、输入一串字符,以“?”结束,统计其中每个字母出现的次数。
Program array3(input,output);
var num:array[‘a’..‘z’] of integer; ch:char;
begin
for ch:=‘a’ to ‘z’ do
num[ch]:=0;
read(ch);
while ch<>‘ ’ do
begin
if (ch>=‘a’) and (ch<=‘z’)
then num[ch]:=num[ch]+1;
read(ch)
end;
for ch:=‘a’ to ‘z’ do
writeln(ch,num[ch]);
end.
例4、输入20个数,将它们按从高到低的次序排序以后输出。(选择排序)
Program sort1(input,output);
var a:array[1..20] of integer; i, j, temp:integer;
begin
for i:=1 to 20 do
read(a[i]);
for i:=1 to 19 do
for j:=i+1 to 20 do
if a[i]then begin
temp:=a[i];a[i]:=a[j];a[j]:=temp
end;
for i:=1 to 20 do
write(a[i]:5);
end.
例4、输入20个数,将它们按从高到低的次序排序以后输出。(冒泡排序)
Program sort2(input,output);
var a:array[1..20] of integer; i, j, temp:integer;
begin
for i:=1 to 20 do
read(a[i]);
for i:=1 to 19 do
for j:=1 to 20-i do
if a[j]then begin
temp:=a[j];a[j]:=a[j+1];a[j+1]:=temp
end;
for i:=1 to 20 do
write(a[i]:5);
end.
本次作业:P170
7.3
7.4
7.5
7.6
7.3 输入30个数a1,a2,…,a30,计算所有x与y。
Program ex73(input,output);
var a:array[1..30] of real;
x,y:array[1..10] of real; i:integer;
begin
writeln( ‘Please input 30 numbers:’ );
for i:=1 to 30 do
read(a[i]);
for i:=1 to 10 do
begin
x[i]:=(a[3*i-2]+a[3*i-1]+a[3*i])/4;
y[i]:=a[i]*a[31-i] / a[10+i];
writeln(‘x[’, i , ‘]=’, x[i]:6:2, ‘y[’, i , ‘]=’, y[i]:6:2)
end
end.
7.4 输入一串字符,以’ ’结束,分别统计其中每个数字0,1,2,…,9出现的次数。
Program ex74(input,output);
var num:array[‘0’..‘9’] of integer; ch:char;
begin
for ch:=‘0’ to ‘9’ do
num[ch]:=0;
while ch<>‘ ’ do
begin
if (ch>=‘0’) and (ch<=‘9’)
then num[ch]:=num[ch]+1;
read(ch)
end;
for ch:=‘0’ to ‘9’ do
writeln(ch,num[ch]:5)
end.
7.5 输入a1,a2,…,a20
(1)将它们从小到大排序后输出。(选择排序)
Program ex751(input,output);
var a:array[1..20] of real; i, j, temp:integer;
begin
for i:=1 to 20 do
read(a[i]);
for i:=1 to 19 do
for j:=i+1 to 20 do
if a[i]>a[j]
then begin
temp:=a[i];a[i]:=a[j];a[j]:=temp
end;
for i:=1 to 20 do
write(a[i]:5);
end.
7.5 输入a1,a2,…,a20
(2)将它们从大到小排序后输出。(冒泡排序)
Program ex752(input,output);
var a:array[1..20] of real; i, j, temp:integer;
begin
for i:=1 to 20 do
read(a[i]);
for i:=1 to 19 do
for j:=1 to 20-i do
if a[j]then begin
temp:=a[i];a[i]:=a[j];a[j]:=temp
end;
for i:=1 to 20 do
write(a[i]:5);
end.
7.6 输入a1,a2,…,a20,将它们从小到大排序后输出,并给出现在每个元素所对应的原来次序。
Program ex76(input,output);
var a:array[1..20] of real;
b:array[1..20] of integer; i, j:integer; temp:real;
begin
for i:=1 to 20 do
begin
read(a[i]); b[i]:=i
end;
for i:=1 to 19 do
for j:=i+1 to 20 do
if a[i]>a[j]
then begin
temp:=a[i];a[i]:=a[j];a[j]:=temp;
temp:=b[i];b[i]:=b[j];b[j]:=temp
end;
for i:=1 to 20 do
write(a[i]:5, b[i]:5);
end.
12、将一根长为369cm的钢管截成长为69cm和39cm两种规格的短料。在这两种规格的短料至少各截一根的前提下, 如何截才能余料最少。
Program exam12(input,output);
var x,y,min,r,a,b,c:integer;
begin
min:=369;x:=1;
a:=(369-39) div 69;
while x<=a do
begin
y:=(369-69*x) div 39;
r:=(369-69*x) mod 39;
if rthen begin
min:=r; b:=x; c:=y;
end
end
writeln(‘min= ’,min,‘chang=’,b, ‘duan=’,c)
end.
Program exam12(input,output);
var min,x,a,b,c,d:integer;
begin
min:=39;
for a:=1 to 4 do
for b:=1 to 7 do
begin
x:=369-a*69-b*39;
if (x>0) and (xthen begin
min:=x; c:=a; d:=b;
end
end
writeln(‘min= ’,min,‘chang=’,c, ‘duan=’,d)
end.
7.9 约瑟夫问题。m个人围成一圈,从第1个人开始报数,数到n的人出圈。再由下一个人开始报数,数到n的出圈,…输出依次出圈人的编号。
m值预先选定,n值由键盘输入。
a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8]
2 3 4 5 6 7 8 1
Program ex79(input,output);
const m=8;
var a:array[1..m] of integer; i, j, n, p:integer;
begin
for i:=1 to m-1 do
a[i]:=i+1;
a[m]:=1;
read(n);
writeln(‘n=’,n);
p:=m;
for i:=1 to m do
begin
for j:=1 to n-1 do
p:=a[p];
write(a[p]:3);
a[p]:=a[a[p]]
end
end.
一维数组定义
Type
<数组类型名>=array[下标类型] of <元素类型>;
Var
<数组变量表>:<数组类型名>;
二维数组定义
Type
<数组类型名>=array[<下标类型1>,<下标类型2>] of <元素类型>
一维数组引用
VAR
a:array[1..20] of integer;
ch:array[ ‘a’.. ‘z’] of char;
二维数组引用
VAR
a:array[1..3 , 1..5] of integer;
a[1,1] a[1,2] a[1,3] a[1,4] a[1,5]
a[2,1] a[2,2] a[2,3] a[2,4] a[2,5]
a[3,1] a[3,2] a[3,3] a[3,4] a[3,5]
例1、从键盘读入20个学生语文、数学、英语这三门课的成绩,计算出每位学生的平均分和每门课程的平均分。
VAR
a:array[1..20, 1..3] of integer ;
b:array[1..20] of real;
c:array[1..3] of real;
Program array1(input,output);
var
a:array[1..20,1..3] of integer;
b:array[1..20] of real;
c:array[1..3] of real; i, j:integer;
begin
for i:=1 to 20 do
for j:=1 to 3 do
read( a[ i, j ] );
for i:=1 to 20 do b[i]:=0;
for i:=1 to 20 do
begin
for j:=1 to 3 do b[i]:=b[i]+a[ i,j ];
b[i]:=b[i]/3; writeln(b[i]:5:2)
end;
for i:=1 to 3 do c[i]:=0;
for i:=1 to 3 do
begin
for j:=1 to 20 do c[i]:=c[i]+a[ i,j ];
c[i]:=c[i]/20; writeln(c[i]:5:2)
end
end.
例2、输入一个m行m列的矩阵,求它的转置矩阵,即对所有的i,j,将a[i,j]与a[j,i]交换。
Program array2(input,output);
const m=4;
var
a:array[1..m,1..m] of integer; i, j, t:integer;
begin
for i:=1 to m do
for j:=1 to m do
read( a[ i, j ] );
for i:=1 to m do
for j:=1 to i-1 do
begin
t:=a[i,j];a[i,j]:=a[j,i];a[j,i]:=t
end;
for i:=1 to m do
begin
for j:=1 to m do
write(a[ i,j ]:5);
writeln
end.
本次作业:P171
7.9
7.14 (1) (2)
7.18
7.9 约瑟夫问题。m个人围成一圈,从第1个人开始报数,数到n的人出圈。再由下一个人开始报数,数到n的出圈,…输出依次出圈人的编号。
m值预先选定,n值由键盘输入。
a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8]
2 3 4 5 6 7 8 1
Program ex79(input,output);
const m=8;
var a:array[1..m] of integer; i, j, n, p:integer;
begin
for i:=1 to m-1 do
a[i]:=i+1;
a[m]:=1;
read(n);
writeln(‘n=’,n);
p:=m;
for i:=1 to m do
begin
for j:=1 to n-1 do
p:=a[p];
write(a[p]:3);
a[p]:=a[a[p]]
end
end.
7.14 输入6行6列的矩阵a,然后:
(1)输出矩阵a
(2)将对角线之外的上三角形的每个元素加1,下三角形的每个元素减1,形成新的矩阵a并输出。
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
Program ex714(input,output);
var a:array[1..6 , 1..6] of integer; i, j:integer;
begin
for i:=1 to 6 do
for j:=1 to 6 do
read(a[i,j]);
for i:=1 to 6 do
for j:=i+1 to 6 do
a[i,j]:=a[i,j]+1;
for i:=1 to 6 do
for j:=1 to i do
a[i,j]:=a[i,j]-1;
for i:=1 to 6 do
begin
for j:=1 to 6 do
write(a[i,j]:3);
writeln
end
end.
本次作业:
(初赛篇)
P119 第7题