当前位置:首页 >> 学科竞赛 >>

数组练习题


数组练习题
一、数组的输入输出 1、 计算并输出 s=错误!未找到引用源。,其中 xi 的值为 1,3,5,7,??17,19,yi 的为 21,22,23,??29,30。 2、 总务室在商店购买了八种文具用品,其数量及单价如下表: 编程计算各物品计价及总 计价。
序号 品名 件数 单价 1 圆珠笔 24 1 .1 8 2 铅笔 110 0 .4 5 3 笔记本 60 1 .8 0 4 订书机 16 8 .8 0 5 计算器 26 7 8 .5 0 6 三角板 32 3 .2 8 7 圆规 32 4 .2 0 8 文件夹 42 2 .1 6

3、 读入 10 个数,输出偶数项及它们的和,输出奇数项及它们的平均数。 4、 读入 N 个数,打印其中的最大数及其位置号。 5、 用筛法求出 100 以内的全部素数,并按每行五个数显示。 解:⑴ 把 2 到 100 的自然数放入 a[2]到 a[100]中(所放入的数与下标号相同); ⑵ 在数组元素中,以下标为序,按顺序找到未曾找过的最小素数 minp,和它的位 置 p(即下标号); ⑶ 从 p+1 开始,把凡是能被 minp 整除的各元素值从 a 数组中划去(筛掉),也 就是给该元素值置 0; ⑷ 让 p=p+1,重复执行第②、③步骤,直到 minp>Trunc(sqrt(N)) 为止; ⑸ 打印输出 a 数组中留下来、未被筛掉的各元素值,并按每行五个数显示。 Program Exam53; const N=100; Var a: array[1..n] of boolean; t,i,j: integer; Begin Fillchar(a,sizeof(a),true); a[1] := False; for i:=2 to Trunc(sqrt(N)) do if a[I] then for j := 2 to N div I do a[I*j]:= False; t:=0; for i:=2 to N do if a[i] then Begin write( i:5); inc(t); if t mod 5=0 then writeln end; End.

二、数组元素的移动 1、将 A 数组中的第一个元素移到最后数组末尾,其余数据依次往前平移一个位置。 2、将 a 数组中的元素实现逆序交换 program exa2; Const n=10; var a:array[1..n] of integer; i,temp:integer; begin writeln(‘read’,n,’datas’); for i:=1 to n do read(a[i]); for i:=1 to n div 2 do begin temp:=a[i] ; a[i]:=a[n+1-i]; a[n+1-i]:=temp; end; for i:=1 to n do write(a[i],’ ‘); 3、有一组数(设有 N 个)其排列顺序如下:3,6,11,45,23,70,67,34,26,89,90, 15,56,50,20,10。编一程序交换这组数中任意指定的两段不重合数据 program a1; const n=16; const a:array[1..n] of integer =(3,6,11,45,23,70,67,26,89,90,15,56,50,20,10,34); var i,k,b1,e1,b2,e2:integer; var b:array[1..n] of integer; begin writeln('please read data:'); write('begin 1=');read(b1); write('end 1=');read(e1); write('begin 2=');read(b2); write('end 2=');read(e2); if b1<b2 then begin i:=b1;b1:=b2;b2:=i; i:=e1;e1:=e2;e2:=i; end; for i:=1 to b1-1 do b[i]:=a[i]; for k:=0 to e2 -b2 do b[b1+k]:=a[b2+k]; for k:=1 to b2 -e1-1 do b[b1+e2-b2+k]:=a[e1+k]; for k:=0 to e1-b1 do b[e2-e1+b1+k]:=a[b1+k]; for i:=e2+1 to n do b[i]:=a[i]; writeln('number:':7,'begin:':7,'end:':7); for i:=1 to n do writeln(i:7,a[i]:7,b[i]:7);

end. 三、数组元素的查找、插入、删除 1、对于数组 A,输入一个测试数据 X,如果 X 存在于数组 A,则把 X 元素删除,否则将 X 插在相应的位置,要求数组仍然有序(假设数组递增) Program exa3; Const n=10; Var a:array[1..n+1] of integer x, i, j :integer; Begin writeln(‘ read array a:’); for i:=1 to n do read(a[i]); write(‘ x=’); readln(x); a[n+1]:=x; i:=1; while a[i]<x do i:=i+1; if i=n+1 then write(‘Not found and no place to insert.’) else if a[i] = x then begin writeln(‘Found and deleted.Result:’); for j:=i to n-1 do a[j]:=a[j+1]; for j:=1 to n-1 do write(a[j]:3); end else begin writeln(‘Not found and insert. Result:’); for j:=n downto i do a[j+1]:=a[j]; a[i]:=x; for j:=1 to n+1 do write(a[j],3); end; readln; end. 2、从键盘输入若干个数,将它们按从小到大的顺序输出。 3、给定一串整数数列,求出所有的递增和递减子序列的数目。如数列 7,2,6,9,8,3, 5,2,1 可分为(7,2),(2,6,9),(9,8,3),(3,5),(5,2,1)5 个子 序列,答案就是 5,我们称 2,9,3,5 为转折元素。 program aaa; const n=9; var a:array[1..n] of integer; i,dz,dj:integer; begin for i:=1 to n do read(a[i]); dz:=0;dj:=0;

if a[2]>a[1] then dz:=1 else dj:=1; for i:=2 to n-1 do begin if(a[i]-a[i-1])*(a[i+1]-a[i])<0 then begin if a[i+1]<a[i] then dj:=dj+1; if a[i+1]>a[i] then dz:=dz+1; end; end; writeln('dz:',dz); writeln('dj:',dj); writeln('total:',dz+dj); end. 4、已知数组 A 中含 N 个整型元素,求 A 中有多少个最大数?多少个次大数???多少个 互不相同的数。编程实现之。 program aaa; const n=10; var a:array[1..n] of integer; i,j,temp,l:integer; begin writeln(n,'data:'); randomize; for i:=1 to n do a[i]:=random(n); for i:=1 to n do write(a[i]:4);writeln; for i:=1 to n-1 do for j:=i+1 to n do if a[i]<a[j] then begin temp:=a[i];a[i]:=a[j];a[j]:=temp; end;//排序 i:=1;j:=1; //统计数据,j 记录不同的数据的个数 temp:=a[i];{temp 初值即为最大值} l:=0;{l 记录相同数据个数} writeln('data number'); write(temp:4,':'); while i<=n do begin if a[i]=temp then begin i:=i+1;l:=l+1;end else begin temp:=a[i]; writeln(l); write(temp:4,':'); inc(j);l:=0; end;

end; writeln(l); writeln('total:',j); end. 四、数组的应用

1、一个两位以上的自然数,如果左右数字对称,就称为回文数,编程找出所有不超过 6 位
数字的回文数,同时又是完全平方数的数。如 121 是回文数,又是 11 的平方,所以是完全 平方数。 解:①不超过 6 位数的完全平方数用循环在 10~999 范围产生(for i:=10 to 999) ; ②将完全平方数 (i*i)转成字串类型存入 s 中; ③逐个取 s 的左右字符,检查是否相同(对称),检查对数不超过总长度的一半; ④如果是回文数,就调用打印过程(Print)。 Program Exam55; Var n, k, j ,t : integer; s : string; i: longint; Procedure Print; begin write(s : 10); inc(t); if t mod 6=0 then writeln end;

{字符串类型 } {长整数类型 } {打印过程(无形参)} {打印 s, 用 t 计数 } {打印 6 个换行 }

Begin t:=0; for i:=10 to 999 do begin str(i*i,s); {将完全平方数转换成字串 } k:=length(s); {计算字串长度 } n:=k div 2; {计算字串长度的一半 } j:=1; while j < = n do {取左右字符检查是否对称 } if copy(s,j,1) < > copy(s,k+1-j,1) then j:=1000 else inc( j ) ; {若不对称让 j=1000,退出循环 } if j <1000 then Print { j <1000 即是回文数,调打印 } end; writeln; writeln('Total=':8, t); {打印总个数 } readln End.

2、裴波那契数列:数列 1、1、2、3、5、8、13、21…称为裴波那契数列,它的特点是:数 列的第一项是 1,第二项也是 1,从第三项起,每项等于前两项之和。编程输入一个正整 数 N,求出数列的第 N 项是多少?(N 不超过 30)。 3、将一个十进制整数转化为二进制数 Var bin:array[1..50] of 0..1; X:longint; k,i:integer; Begin write(‘read decimal data x:’); read(x); for i:=1 to 50 do bin[i]:=0; {将 bin 数组清 0} k:=1; {从第 0 位开始存储} while x>0 do begin bin[k]:=x mod 2; x:=x div 2; k:=k+1; {进位} end; write(‘Binar:’); for i:=k-1 downto 1 do write(bin[i]:1); {第 k 位无效} end. 4、如图所示,找出 4 个相邻的数,使其相加之和最大和最小的是哪 4 个数?并给出它们的 起始位置。

分析: 假设圆盘上 20 个数中 5 为第一个数, 12 为最后一个数, 将这些数存放在数组 a[0..19] 中,由于起始位置的不同出现不同的情况: 0<=i<17, s=a[i]+a[i+1]+a[i+2]+a[i+3] i=17, s=a[i]+a[i+1]+a[i+2]+a[0] i=18, s=a[i]+a[i+1]+a[0]+a[1] i=19, s=a[i]+a[0]+a[1]+a[2]

由此可以产生对 i 求 s 的通式: s=a[i]+a[(i+1) mod 20]+a[(i+2) mod 20]+a[(i+3) mod 20](0≤i≤19) Program exa4; Var a:array[0..19] of integer; S,max,min:integer; Smax,smin:integer; i:integer; Begin writeln(‘Please read 20 datas:’); for i:=0 to 19 do read(a[i]); max:=-maxint;min:=maxint; for i:=0 to 19 do begin s=a[i]+a[(i+1) mod 20]+a[(i+2) mod 20]+a[(i+3) mod 20]; if s>max then begin max:=s; smax:=I; end; if s<min then begin min:=s; smin:=I; end; end; write(‘max:’,a[smax]:2); for i:=1 to 3 do write(‘+’,a[(smax+i) mod 20]:2); write(‘=‘,max,‘start from’,smax+1); write(‘min:’,a[smin]:2); for i:=1 to 3 do write(‘+’,a[(smin+i) mod 20]:2); write(‘=‘,min,‘start from’,smin+1); End.

5、投票问题:竞选时,要求选民在 A、B、C、D 四个候选人中选择(人数不限),如果选择 了 ABCD 以外的人员,则视为废票。统计时输入“#”结束,请按候选人得票数从大到小顺序 输出候选人及得票情况。 分析:程序细化为:统计得票数、将票数从大到小排序、将候选人及其票数同时输出。 Program xuanju; Var score:array['A'..'D'] of integer; name:array[1..4] of char; i,j:integer; s,ch:char; Begin for ch:='A' to 'D' do score[ch]:=0; for i:=1 to 4 do name[i]:=chr(ord('A')+i-1); writeln('Please read data'); read(s); while s <> '#' do begin if s in ['A','B','C','D'] then score[s]:=score[s] +1; read(s);

end; for i:=1 to 3 do for j:=i+1 to 4 do if score[name[i]] < score[name[j]] then begin ch:=name[i]; name[i]:=name[j]; name[j]:=ch; end; writeln('Result:'); for i:=1 to 4 do writeln(name[i],':',score[name[i]]); End.

6、将 1-9 这九个数分成 3 组(每个数字只能使用一次),分别组成 3 个三位数,且这三个三位 数的值构成 1:2:3 的比例,试求出所有满足条件的三个三位数。 program a2; var a:array[0..9] of integer; i,g,s,b,k,t:integer; begin writeln('result'); for i:=100 to 333 do begin for k:=0 to 9 do a[k]:=0; k:=i; g:=k mod 10; b:=k div 100; s:=(k div 10) mod 10; a[g]:=1;a[s]:=1;a[b]:=1; k:=2*i; g:=k mod 10;b:=k div 100;s:=(k div 10) mod 10; a[g]:=1;a[s]:=1;a[b]:=1; k:=3*i; g:=k mod 10;b:=k div 100;s:=(k div 10) mod 10; a[g]:=1;a[s]:=1;a[b]:=1; t:=0; for k:=1 to 9 do t:=t+a[k]; if t=9 then writeln(i:4,i*2:4,i*3:4); end; end.


相关文章:
Java数组练习题(带答案)
Java数组练习题(带答案)_IT认证_资格考试/认证_教育专区。一 填空题 1) 2) 3) 4) 5) 6) 7) 8) 9) 数组的元素通过 下标 JVM 将数组存储在 栈 来...
一维数组练习题
一维数组练习题 1、以下对一维数组 a 进行正确初始化的是___。 A) int a[10]=(0,0,0,0,0); C) int a[ ]={0}; B) int a[10]={ }; D) ...
指针与数组练习题
指针与数组练习题 1、下面程序实现如下功能: 输入一个整数字符串转换为一个整数值, 如”1234” 转换为 1234, ”-1234”转换为-1234。 读懂 main 函数, 编写...
数组练习题及答案
第五章一、选择题 数组练习题及答案 1、判断字符串 a 和 b 是否相等,应当使用( ) A、if(a==b) B、if(a=b) ) B、float x[3][]={{1},{2},{...
java编程基础—数组练习
java编程基础—数组练习_计算机软件及应用_IT/计算机_专业资料。数组练习,java 2017.02.14 数组课后题 1、 编写一个简单程序, 要求数组长度为 5, 分别赋值 10,...
基础Java数组练习题及答案
基础Java数组练习题及答案_计算机软件及应用_IT/计算机_专业资料。为Java基础学习者提供的有关数组的练习及答案 在开发的时候主方法之中的代码越少越好。 1、 将...
数组编程练习(带答案)
数组编程练习(带答案)_理学_高等教育_教育专区。答案数组编程练习 1、产生一个...C语言数组编程题及解答 10页 免费 c语言二维数组练习题 3页 免费 数组编程习题...
C语言数组试题
核心考点:数组的定义、初始化和数组元素的引用方法,一维数组、二维数组和字符数 组的实际应用,字符串的处理方法。 4.2 典型题解析【例 4.1】以下对一维数组 a 的...
数组练习题
数组练习题_计算机软件及应用_IT/计算机_专业资料。C语言数组练习题及答案第5 章 数组 练习题 学号: 姓名: 单选: 1. 下列数组说明中,正确的是(). A. B. ...
数组与指针习题
数组与指针习题 1 数组与指针习题一、.基本概念与基础知识自测题 基本概念与..., <,解: 此例既是对第 4 章的复习也是一个提高。拷贝构造函数的应用请参...
更多相关标签: