当前位置:文档之家› 一维数组习题

一维数组习题

一维数组

【例1】输入50个数,要求程序按输入时的逆序把这50个数打印出来;也就是说,请你按输入相反顺序打印这50个数

分析:我们可定义一个数组a用以存放输入的50个数,然后将数组a内容逆序输出,源程序如下

program ex5_1;

type

arr=array[1..50]of integer; {说明一数组类型arr}

var

a:arr;

i:integer;

begin

writeln('Enter 50 integer:');

for i:=1 to 50 do read(a[i]);{从键盘上输入50个整数}

readln;

for i:=50 downto 1 do {逆序输出这50个数}

write(a[i]:10);

end.

【例2】输入十个正整数,把这十个数按由大到小的顺序排列(将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序中的―简单选择排序‖是一种较简单的方法)

分析:要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,……;因此,我们第一步可将第一个数与其后的各个数依次比较,若发现,比它大的,则与之交换,比较结束后,则第一个数已是最大的数。同理,第二步,将第二个数与其后各个数再依次比较,又可得出次大的数。如此方法进行比较,最后一次,将第九个数与第十个数比较,以决定次小的数。于是十个数的顺序排列结束。

例如下面对5个进行排序,这个五个数分别为829105。按选择排序方法,过程如下:

初始数据:82910 5

第一轮排序:82910 5

92810 5

10289 5

10289 5

第二轮排序:10829 5

10928 5

10928 5

第三轮排序:10982 5

10982 5

第四轮排序:10985 2

对于十个数,则排序要进行9次。源程序如下:

program ex5_2;

var

a:array[1..10]of integer;

i,j,t:integer;

begin

writeln('Input 10 integers:');

for i:=1 to 10 do read(a[i]);{读入10个初始数据}

readln;

for i:=1 to 9 do{进行9次排序}

begin

for j:=i+1 to 10 do{将第i个数与其后所有数比较}

if a[i]

begin

t:=a[i];a[i]:=a[j];a[j]:=t;

end;

write(a[i]:5);

end;

end.

【例3】从键盘输入10个数,将这10个数逆序输入,并求这10个数的和,输出这个和。

program p1;

var

a:array [1..10] of integer;

i,s:integer;

begin

for i:=1 to 10 do read(a[i]);

for i:=10 downto 1 do write(a[i],' ');

writeln;

s:=0;

for i:=1 to 10 do s:=s+a[i];

writeln('s=',s);

end.

【例4】用筛法求100以内的素数(质数)。

分析:素数是除了1和它本身以外没有其它约数的数。用筛法求素数的方法是:用质数筛去合数:从第一个素数2开始,把它的倍数去掉;这样2以后的第一个非0数就一定也是素数,把它的倍数也删了……重复这个删数过程,直到在所找到的素数后再也找不到一个非0数。把所有非0数输出。

program p2;

var

a:array [1..100] of integer;

i,j,k:integer;

begin

for i:=1 to 100 do a[i]:=i;

a[1]:=0;i:=2;

while i<=100 do

begin

k:=i;

while k<=100 do

begin

k:=k+i;

a[k]:=0;

end;

{————上面将所有a[i]的倍数清0}

i:=i+1;

while a[i]=0 do i:=i+1;

{————查找接下来的第一个非0数}

end;

for i:=1 to 100 do if a[i]<>0 then write(a[i],' ');

end.

【例5】输入50个学生的某门课程的成绩,打印出低于平均分的同学号数与成绩。

【问题分析】

在解决这个问题时,虽然可以通过读入一个数就累加一个数的办法来求学生的总分,进而求出平均分。但因为只有读入最后一个学生的分数以后才能求得平均分,且要打印出低于平均分的同学,故必须把50 个学生的成绩都保留下来,然后逐个和平均分比较,把高于平均分的成绩打印出来。如果,用简单变量a1,a2,…,a50 存放这些数据,可想而知程序要很长且繁。要想如数学中使用下标变量ai形式表示这50 个数,则可以引入下标变量a[i]。这样问题的程序可写为:

tot:=0; {tot表示总分}

for i:=1 to 50 do {循环读入每一个学生的成绩,并累加它到总分}

begin

read(a[i]);

tot:=tot+a[i];

end;

ave:=tot/50; {计算平均分}

for i:=1 to 50 do

if a[i]

而要在程序中使用下标变量,则必须先说明这些下标变量的整体―数组,即数组是若干个同名(如上

面的下标变量的名字都为a)下标变量的集合。

【例6】将a数组中第一个元素移到最后数组末尾,其余数据依次往前平移一个位置。

【问题分析】

为完成题目所要求的操作,其算法应该包括以下几个主要步骤:

①把第一个元素的值取出入在一个临时单元temp中;

②通过a[2]→a[1], a[3]→a[2], a[4]→a[3],……,a[n]→a[n-1],实现其余元素前移

③将temp值送入a[n].

program p6-4;

const n=10;

var a:array[1..n] of integer;

i:integer; temp:integer;

begin

writeln(‗reak',n,'datas');

for i:=1 to n do read(a[i]);

temp:=a[1];

for i:=1 to n-1 do a[i]:=a[i+1];

a[n]:=temp;

writeln(‗Result:');

for i:=1 to n do write(a[i]:3);

end.

运行结果:

read 10 datas:

• 1 2 3 4 5 6 7 8 9 10

Result:

• 2 3 4 5 6 7 8 9 10 1

【例7】编程输入十个正整数,然后自动按从大到小的顺序输出。(冒泡排序)

【问题分析】

①用循环把十个数输入到A数组中;

②从A[1]到A[10],相邻的两个数两两相比较,即:

A[1]与A[2]比,A[2]与A[3]比,……A[9]与A[10]比。

只需知道两个数中的前面那元素的标号,就能进行与后一个序号元素(相邻数)比较,可写成通用形式A[ i ]与A[ i +1]比较,那么,比较的次数又可用1~( n - i )循环进行控制(即循环次数与两两相比

较时前面那个元素序号有关) ;

③在每次的比较中,若较大的数在后面,就把前后两个对换,把较大的数调到前面,否则不需调换位置。

下面例举5个数来说明两两相比较和交换位置的具体情形:

5 6 4 3 7 5和6比较,交换位置,排成下行的顺序;

6 5 4 3

7 5和4比较,不交换,维持同样的顺序;

6 5 4 3

7 4和3比较,不交换,顺序不变

6 5 4 3

7 3和7比较,交换位置,排成下行的顺序;

6 5 4

7 3 经过(1~(5-1))次比较后,将3调到了末尾。

经过第一轮的1~(N-1)次比较,就能把十个数中的最小数调到最末尾位置,第二轮比较1~(N-2)次

进行同样处理,又把这一轮所比较的―最小数‖调到所比较范围的―最末尾‖位置;……;每进行一轮两

两比较后,其下一轮的比较范围就减少一个。最后一轮仅有一次比较。在比较过程中,每次都有一个―最小数‖往下―掉‖,用这种方法排列顺序,常被称之为―冒泡法‖排序。

Program Exam52;

const N=10;

Var a: array[1..N] of integer; {定义数组}

i,j: integer;

procedure Swap(Var x,y: integer); {交换两数位置的过程}

Var t:integer;

begin

t:=x; x:=y; y:=t

end;

Begin

for i:=1 to N do {输入十个数}

begin

Readln(a[ i ])

end;

for j:=1 to N-1 do {冒泡法排序}

for i:=1 to N-j do {两两相比较}

if a[ i ] < a[i+1] then swap(a[ i ], a[i+1]); {比较与交换}

for i:=1 to N do {输出排序后的十个数}

write(a[ i ]:6);

Readln

end.

【例8】用筛法求出100以内的全部素数,并按每行五个数显示。

【问题分析】

⑴把2到100的自然数放入a[2]到a[100]中(所放入的数与下标号相同);

⑵在数组元素中,以下标为序,按顺序找到未曾找过的最小素数minp,和它的位置p(即下标号);

⑶从p+1开始,把凡是能被minp整除的各元素值从a数组中划去(筛掉),也就是给该元素值置0;

⑷让p=p+1,重复执行第②、③步骤,直到minp>Trunc(sqrt(N)) 为止;

⑸打印输出a数组中留下来、未被筛掉的各元素值,并按每行五个数显示。

用筛法求素数的过程示意如下(图中用下划线作删去标志):

① 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {置数}

② 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被2整除的数}

③ 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被3整除的数}

……

2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被整除的数}

Program Exam53;

const N=100;

type xx=1 .. N; {自定义子界类型xx(类型名)}

Var a: array[xx] of boolean; 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(a[ i ]:5); inc(t);

if t mod 5=0 then writeln

end;

End.

练习

1、国际象棋盘中,第1 格放1 粒米,第2 格放2 粒米,第3格放4 粒米,第4 格放8 粒米,第5 格放16

粒米,......问:16个格子总共可以放多少粒米?

分析:第i个格子可放多少粒米:2

i–1

2、输出斐波列契数列的前N项(5个1行)

0 1 1 2 3 5 8 13 21 ..........

3、输入N个整数,找出最大数所在位置,并将它与第一个数对调位置。

方法:―比武招亲‖ 、―打擂台‖

4、插入1个整数在1个有序数组中(从小到大,整型数据),要求插入后仍有序。

5、将一个数组中的所有元素倒序存放。

分析:A[ 1 ]←→A[ N ] A[ 2 ] ←→A[N-1]…… A[ I ] ←→A[ J ]

I 从1开始,每交换1次,I 加1;直到I = N DIV 2

6、删除数组中的某元素,且右边的元素都向左平移一格。

7、查找数组A 中是否有等于NUM 这个数,有则返回这个数在数组中的位置;没有,则返回0。(假设 A 中

有N个互异的整数)

8、有N个数存放于数组A中,将其按照从小到大的顺序重新排列。

选择排序法:用―打擂台‖法将最小的1个数找出来放在数组的最前面。然后在剩下的N-1个数中重

复做上面的操作………..,一共要N – 1 趟。

练习:

1.输入N个数,将这N个数用与输入时相反的顺序显示在屏幕上,如:

N=5

23 34 32 12 54

54 12 32 34 23

2.输入10个数,将每个数与平均值的差依次显示在屏幕上;

3.输入一串小写字母(以"."为结束标志),统计出每个字母在该字符串中出现的次数(若某字母不出现,则不要输出) ,例:

输入:aaaabbbccc.

输出:a:4

b:3

c:3

4.输入一个不大于32767的正整数N,将它转换成一个二进制数,例如:

输入:100

输出:1100100

*5.输入一个由10个整数组成的序列,其中序列中任意连续三个整数都互不相同,求该序列中所有递增或递减子序列的个数,例如:

输入:1108593267 4

输出:6

对应的递增或递减子序列为:

110

1085

59

93 2

267

7 4

*6.输入N个数,将这N个数按从小到大的顺序显示出来;

**7.猴子选大王:有N只猴子围成一圈,每只猴子各一个从1到N中的依次编号,打算从中选出一个大王;

经过协商,决定出选大王的规则:从第一个开始循环报数,数到M的猴子出圈,最后剩下来的就是大王。要求:从键盘输入N、M,编程计算哪一个编号的猴子成为大王

样例:

输入:73

输出:4

输入:52

输出:3

待解:

输入:99915

输出:?

**8.编程求出100!的末尾有多少个连续的0;(100!=1×2×3×4×……×99×100)

pascal编程题库

初级篇

1、输入10个正整数,计算它们的和,平方和;

2、2、输入20个整数,统计其中正、负和零的个数;

3、在1——500中,找出能同时满足用3除余2,用5除余3,用7除余2的所有整数;

4、输出1——999中能被3整除,且至少有一位数字是5的数;

5、输入20个数,求出它们的最大值、最小值和平均值。

6、甲、乙、丙三人共有384本书,先由甲分给乙、丙,所给书数分别等于乙、丙已有的书数,再由乙分给甲、丙,最后由丙分给甲、乙,分法同前,结果三人图书数相等。编程求甲、乙、丙三人原各有书多少本?

7、某养金鱼爱好者,决定出售他的金鱼。第一次卖出了全部金鱼的一半加2分之一条金鱼;第二次卖出剩金鱼的三分之一加三分之一条金鱼;第三次卖出剩金鱼的四分之一加四分之一条金鱼;第四次卖出剩金鱼的五分之一加五分之一条金鱼,最后还剩11条。问原来有多少条金鱼?(每次卖的金鱼都是整数条)

8、猴子吃桃子问题:猴子第一天摘下若干个桃子,当即吃了一半还不过瘾,又多吃了一个;第二天又将剩下的桃子吃掉一半又多吃了一个;以后每天早上都吃了前一天剩下的一半零一个。到了第十天想再吃时,见只剩下一个桃子,求第一天共摘了多少个桃子?

9、从键盘输入整数l,统计出边长为整数的周长为l的不等边三角形的个数。

10、输入三个整数,以这三个数为边长,判断是否构成三角形;若构成三角形,进一步判断它们构的是:锐角三角形或直角三角形或钝角三角形。

11、1*2*3*...*1000结果是一个很大的数,求这个数末尾有多少个连续的零。

12、任意输入两个整数,求这两个整数的最大公约数,并求这两个整数的最小公倍数。

13、一个整数的立方可以表示为两个整数的平方差,如19853=19711052-19691202。

编程:输入一个整数N,自动将其写成N3=X2-Y2。

14、求100以内的所有素数。纯粹素数是这样定义的:一个素数,去掉最高位,剩下的数仍为素数,再去掉剩下的数的最高位,余下的数还是素数。这样下去一直到最后剩下的个位数也还是素数。求出所有小于3000的四位的纯粹素数。

15、验证回文数的猜测:左右对称的自然数称回文数。如121,4224,13731等,有人猜测:从任意一个两位或两位以上的自然数开始,将该数与它的逆序数(如1992的逆序数是2991)相加,得到一个新数,再用这个新数与它的逆序数相加,不断重复上述操作,经过若干步的逆序相加之后,总可以得到一个回文数,

例如:从1992开始,1992+2991=4983; 4983+3894=8877;8877+7788=16665;16665+56661=73326;73326+62337=135663;135663+366531=502194;502194+491205=993399。经过七步就得到了回文数。

设计一个程序,由计算机在局部范围内验证回文数的猜测,并将寻找回文数的每一个步骤都显示出来。

16、已知一个正整数的个位数为7,将7移到该数的首位,其它数字顺序不变,则得到的新数恰好是原数的7倍,编程找出满足

上述要求的最小自然数。

17、任意一个大于9的整数减去它的各位数字之和的差,一定能被9整除。

18、有一个六位数,其个位数字7,现将个位数字移至首位(十万位),而其余各位数字顺序不变,均后退一们,得到一个新的六位数,假如旧数为新数的4倍,求原来的六位数。

19、任意给定平面上三个点A(X1,Y1),B(X2,Y2),C(X3,Y3),试判断这三个点能否构成三角形。能则求出它的面积。

20、将1至9这几个数字排成3x3方阵,并使每一横行的三个数字组成一个三位数。如果要使第三行的三位数是第一行的两倍,第三行的三位数是第一的三倍,应怎样排法?编程找出所有排法。

21、一个合数(质数的反数),去掉最低位,剩下的数仍是合数,再去掉剩下的数的最低位,余留下来的数还是合数,这样反复,一直到最后公剩下的一位数仍是合数;我们把这样的数称为纯粹合数。求所有的三位纯粹合数。

22、输入一个大于1的整数,打印出它的素数分解式。如输入75,则打印:"75=3*5*5"。

23、某自然数n的所有素数的平方和等于n,(1<100),请找出二个这样的自然数n。

24、若某个自然数的所有小于自身的素数之和恰好等于其自身,则该自然数称为一个完全数。

例如:6是一个完全数,6=1+2+3。目前至少发现29个完全数。

编程找出三个最小的完全数。

25、一个自然数,若它的素因数至少是两重的(相同的素因数至少个数为二个,如:36=2*2*3*3),则称该数为"漂亮数"。若相邻的两个自然数都是"漂亮数",就称它们为"孪生漂亮数",例如8和9就是一对"孪生漂亮数"。

编程再找出一对"孪生漂亮数"。

26、每一个素数的倒数都可以化为一个循环小数,例如:1/7可以化为0.(142857),1/13可化为0.(076923)。

编程把1997的倒数化为循环小数,并统计出这个循环小数有多少位。

27、 59=52+52+32=72+32+12,即59可以分别等于两组不同的自然数(每组各3个数)的二次幂之和,请找出10个最小的具有这种特性的数。

28、验证2147483647是一个素数(质数)。

29、如果一个数从左边读和右边读都是同一个数,就称为回文数,例如686就是一个回文数。

编程求1000以内所有的既是回文数同时又是素数的自然数。

30、有这样的一个六位数字labcde,将其乘以3后变成abcdel,编程求这个数。

31、试找出6个小于160而成等差数列的素数。

32、已知数列1、5、12、22、35、。。。。编程求该数列的前50项。

33、求数列1、5、17、53、161、。。。前20项的和。

高级篇

1、编一程序实现:由键盘输入年月日后,计算机能打印出该日期是星期几。

2、编程实现:键盘输入年月,计算机能打印出该月的月历,如输入2000、1,则输出:

SUN MOD TUE WED THU FRI SAT

1 2 3 4 5

6 7 8 9 10 11 12

13 14 15 16 17 18 19

20 21 22 23 24 25 26

27 28 29 30 31

3、写出两个1,然后在它们中间插入2,成121;下一步是在上面数中每两个相邻的和数为3的数之间插入3,成为13232;再下一步又在上面数中任意两个相邻的和数为4的数中插入4,成为1432341;由键盘输入N,求出用上面方式构造出来的序列,其最后插入的数是N。假设这个序列不超过1000项,给出N=9时的运算结果。

4、把所有3的方幂及不相等的3的方幂的和排列成递增序列:1、3、4、9、10、12、13、。。。这个序列的第300项是多少?(6840)

5、求196+295+394+….+961除以3、5、7、11的余数

6、 2100是一个很大的数,计算机无法直接计算出来,编程求该式的准确结果(从最高位到最低位第一位都要打印出来)(126750600228229401496703205376)

7、求789789…789(共29组789)除以79的商和余数。

8、6的因子有1、2、3、6,它们的和1+2+3+6与原数6的比值等于2,比6小的数的这个比值都小于2,比6大的数一直到12,才有(1+2+3+4+6+12)/12=2.33,比值超过2。编程序,给出120以内最大比值的统计表,即从6开始计算此值,得到更大的此值就输出,再得到新的更大比值则再输出,一直到120,输出格式为:

6 12 。。。

2 2.3

3 。。。(其中比值精确到小数点后第二位)

9、两个1,两个2,两个3,这6个数可组成6位数312132。这个数有如下特点:两个1之间隔一位,两个2之间隔两位,两个3之间隔3位。231213也是一个符合条件的6位数。用数字1、2、3、4、5、6、7、8各两个,可以组成类似的16位数,请找出10个这样的16位数。

10、这是一个3阶幻方,它每行每列及对角线的和都等于常数15,它的产生规则是这样的:6 1 8 先在第一行中间填入1,每填下一个数,然后在该位置的左上方填下它的后继数(若左边超出边界则将该位置定在上一行的最右边,若上方超出边界则将位置定在上一列的最下方);若左上方事先已填下数,则在当前填数的位置的下一格填入后继数,….. 如此下去,直至填完3x3个数为止。编程任输入一个奇数N(3〈=N〈=9〉,输出N阶幻方。

11、美国中学数学竞赛试题由30道选择题组成,得分公式:S=30+4G-W 其中G为答对的题数,W为答错的题数,未答的题不给分。第二届第10题如下:玛丽告诉约翰,她在美国中学生数学竞赛中所得分数,这个分数超过80分,根据这个分数,约翰就能定出玛丽做对时的题目的数目。如果玛丽的分数低一些,但仍超过80分,约翰就无法确定她做对几题了,玛丽得分是多少?试编程求出答案。

12、请按下列规则找出集合M中前1000个元素。

(1)1是M中的一个元素;

(2)若x是M中的一个元素,那么2X+1也是M中的一个元素;3X+1也是M中的一个元素。

13、如果两个素数之和的一半仍然是一个素数,则这三个素数可以组成一个等差素数组,如(3+7)/2=5,则(3,5,7)为一个等差素数组,编程求100以内的所有等差素数组。

14、日本数学家角谷提出如下猜测:任给一个自然数,把这个数按下步骤进行处理:1)是偶数则把它除以2,一直到除成奇数为止。2)是奇数(但非1),则把它乘3加1,再返回1)去处理;重复步骤1)2)直到这个数变为1。

任何数都会经过上面的有限步骤变为1。我们把一次"乘3加1"叫做一次角谷运算。编程序,对小于等于100的所有自然数,求出按上述步骤变为1需要做角谷运算的最多次数和运算最多次数的数在运算中数(奇数)的变化过程。

15、对于所有的数字不完全相同的三位数(不够三位数的前面补零也当成是三位数)。我们定出如下计算规则:用这个三位数的三个数字可组成的最大数减去可组成的最小数,则得到一个新的三位数;对新的三位数还按照上面的规则继续算下去,最后会发现,我们陷入一个死循环里,或者说是跌入了一个数的黑洞里。用具体例子说明。比如从三位数123开始,计算如下321-123=198;981-189=792;972-279=693;963-369=594;954-459=495;954-459=495;…. 从其他的任何三位数开始,最终也都会停止在495,我们把495叫做三位数的黑洞。类似地也存在着一个由一个数组成的四位数的黑洞。请编程序把它找出来。(6174)

16、11,323,74947,63144136这样的数叫回文数,它们的特点是最高位、最低位的数相同,次高位,次低位相同,….其中11是个更特殊的回文数,它的平方121、立方1331也是回文数。这是最小的一个具有这种性质的回文数。请编程序,找出三次方小于999999999的具有上述性质的所有回文数。

17、请编写程序,以简单算术表达式作为输入,构造对应的无括号表达式(无括号表达式的运算符写在运算对象的后面)。如:输入:A*(B-C)+D,应输出ABC-*D+;输入:(A+B)/C-D*E,应输出AB+C/DE*-。

18、求369369…..369(底数为30个369组成的数)的准确值。

19、编程实现两个高精度实数减法,两数分别由键盘输入,均不超过240位。

20、键盘输入一个只含加、减、乘、除四则运算和括号的数学表达式,编程求出该表达式的值并输出结果。

攻关篇

第一期

1、菲波那契数列:0、1、1、

2、

3、5、8、13...。第一项为0,第二项为1,往后第N项为第(N-2)项+第(N-1)项之和,如第三项为:0+1=1,第四项为:1+1=2...。

输入一个正整数N求出前N项数列。

如N=5,显示:0 1 1 2 3

N=10,显示:0 1 1 2 3 5 8 13 21 34

2、求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a^3+b^3+c^3=abc,则abc是水仙花数。

3、输入一整数A,判断它是否质数。(提示:若从2到A的平方根的范围内,没有一个数能整除A,则A是质数。)第二期

百钱买百鸡

【题目】一只公鸡值5元,一只母鸡值3元,3只小鸡值1元,现用一百元要买一百只鸡,问有什么方案?【答案】四种方案:

公鸡母鸡小鸡

①02575

②41878

③81181

④12484

钞票换硬币

【题目】把一元钞票换成一分、二分、五分硬币(每种至少一枚),有哪些种换法?

【答案】461种

求最大公约数和最小公倍数

【题目】求两个正整数的最大公约数和最小公倍数

【算法】用辗转相除法

素数问题

【问题】任给一个自然数n,求出这个自然数不同因数的个数。

例如 n=6时,因为1,2,3,6这四个数均是6的因数,故输出为total=4。

猴子选大王(利用数组)

【问题】n只猴子选大王,选举办法如下:从头到尾1,2,3报数,凡报3的退出,

余下的从尾到头1,2,3报数,凡报3的退出...如此类推,当剩下两

只猴子时,取这时报1的为王,若想当猴王,请问当初应占据什么位置?

【测试数据】

n │7 │10│20│100 │

─┼─┼─┼─┼──┼

位│2 │ 8│16│ 77 │

狐狸捉兔子(利用数组)

【问题】围绕着山顶有10个洞,狐狸要吃兔子,兔子说:“可以,但必须找到我,

我就藏身于这十个洞中,你从10号洞出发,先到1号洞找,第二次隔1个

洞找,第三次隔2个洞找,以后如此类推,次数不限。”但狐狸从早到晚进

进出出了1000次,仍没有找到兔子。问兔子究竟藏在哪个洞里?

【答案】2,4,7,9

一维数组练习题

一维数组练习题 题目一:数组元素反转 描述:给定一个整数数组,将数组中的元素反转并输出。 要求: 1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100); 2. 输入n个整数构成的数组; 3. 输出数组中的元素,按照逆序输出。 解答: 题目二:查找数组中的最大值和最小值 描述:给定一个整数数组,找出数组中的最大值和最小值,并输出。 要求: 1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100); 2. 输入n个整数构成的数组; 3. 输出数组中的最大值和最小值。 解答: 题目三:计算数组的和与平均值 描述:给定一个整数数组,计算数组中所有元素的和及平均值,并 输出结果。

要求: 1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100); 2. 输入n个整数构成的数组; 3. 输出数组中所有元素的和及平均值,结果保留两位小数。 解答: 题目四:数组去重 描述:给定一个整数数组,去除数组中的重复元素,并输出结果。 要求: 1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100); 2. 输入n个整数构成的数组; 3. 输出去除重复元素后的数组。 解答: 题目五:数组元素排序 描述:给定一个整数数组,对数组中的元素进行排序,并输出结果。要求: 1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100); 2. 输入n个整数构成的数组;

3. 输出排序后的数组。 解答: 题目六:数组元素查找 描述:给定一个整数数组和一个目标值,判断目标值是否存在于数组中,并输出结果。 要求: 1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100); 2. 输入n个整数构成的数组; 3. 输入一个整数作为目标值; 4. 若目标值存在于数组中,则输出"目标值存在于数组中",否则输出"目标值不存在于数组中"。 解答: 以上为一维数组练习题的题目描述及解答,请根据题目所需完成相应的练习。

数组 选择练习题

例题 1:下列一维数组定义正确的是()。 A.x=6;int num[x]; B.const int x=6;float a[x]; B.const float x=6;int b[x]; D.const int x;x=6;int c[x]; 答案:B, 分析:因为数组的下标不能是变量,不能为非整数,定义为常量的标识符不能再用来赋值,只能在定义的同时初始化。 例题 2:下面选项中等价的是()。 A.int a[2][3]={1,0,2,2,4,5}与int a[2][]= {1,0,2,2,4,5}; B.int a[][3]= {1,0,2,2,4,5}与int a[2][3]= {1,0,2,2,4,5}; C.int a[2][3]={3,4,5}与int a[][3]={3,4,5}; D.int a[2][3]={0,1}与int a[2][3]={{0},{1}}; 答案:B, 分析:二维数组定义的时候不能省略列下标。 例题 3:下面程序的输出结果是()。 #include void main( ) { int a[3][3]={{1,2},{3,4},{5}}; int sum=0; for (int I=1;I<3;I++) for(int j=0;j<=I;j++) sum+=a[I][j]; cout<

C语言数组练习及答案

第四部分数组 4.1 选择题 1. 以下关于数组的描述正确的是(c )。 A. 数组的大小是固定的,但可以有不同的类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同的类型的数组元素 2. 以下对一维整型数组a的正确说明是(d )。 A.int a(10); B. int n=10,a[n]; C.int n; D. #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是(c )。 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 4. 以下对一维数组m进行正确初始化的是(c )。 A. int m[10]=(0,0,0,0) ; B. int m[10]={ }; C. int m[ ]={0}; D. int m[10]={10*2}; 5. 若有定义:int bb[ 8];。则以下表达式中不能代表数组元bb[1]的地址的是(c )。 A. &bb[0]+1 B. &bb[1] C. &bb[0]++ D. bb+1 6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是(d )。 A. 3 B. 6 C. 10 D. 20 7. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g; 则数值为4的表达式是(d ) A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] 8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入(a )。 #include main() { int a[10],i=0; while(i<10) scanf("%d",________ ); ┇ }

C语言程序设计第六章数组习题及答案

1.以下对一维整型数组a的定义,正确的是_。(2分) A.int a(10) ; B.int n = 10 , a[n] ; C.int n ; scanf( "%d" , &n ) ; int a[n] ; D.int a[10] ; 2.若有定义:int a[10] ;,则对a数组元素的正确引用是_。(2分) A.a[10] B.a[3.5] C.a(5) D.a[10-10] 3.对定义int a[10] = {6 , 7 , 8 , 9 , 10} ; 的正确理解是_。(2分) A.将5个初值依次赋给a[1]--a[5] B.将5个初值依次赋给a[0]--a[4] C.将5个初值依次赋给a[6]--a[10] D.因为数组长度与初值个数不相同,所以此语句不正确 4..若有定义:int a[3][4]; , 则对a数组元素的正确引用是_。(2分) A.a[3][4] B.a[1,3] C.a[1+1][0] D.a(2)(1) 5.以下对二维数组a初始化正确的语句是_。(2分) A.int a[2][ ]={{0 , 1 , 2}, {3 , 4 , 5}}; B.int a[ ][3]={{0, 1, 2}, {3, 4, 5}}; C.int a[2][4]={{0, 1 , 2}, {3 , 4}, {5}}; D.int a[ ][3]={{0, 1, 2}, { }, {3, 4}}; 6.对二维数组a进行如下初始化: int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5}; 则a[1][1]的值是_。(2分) A.0 B.3 C.4 D.1 7.下面程序段的运行结果是_。(2分) #include int main( ){ int i , x[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ;

一维数组习题

一维数组 【例1】输入50个数,要求程序按输入时的逆序把这50个数打印出来;也就是说,请你按输入相反顺序打印这50个数 分析:我们可定义一个数组a用以存放输入的50个数,然后将数组a内容逆序输出,源程序如下 program ex5_1; type arr=array[1..50]of integer; {说明一数组类型arr} var a:arr; i:integer; begin writeln('Enter 50 integer:'); for i:=1 to 50 do read(a[i]);{从键盘上输入50个整数} readln; for i:=50 downto 1 do {逆序输出这50个数} write(a[i]:10); end. 【例2】输入十个正整数,把这十个数按由大到小的顺序排列(将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序中的―简单选择排序‖是一种较简单的方法) 分析:要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,……;因此,我们第一步可将第一个数与其后的各个数依次比较,若发现,比它大的,则与之交换,比较结束后,则第一个数已是最大的数。同理,第二步,将第二个数与其后各个数再依次比较,又可得出次大的数。如此方法进行比较,最后一次,将第九个数与第十个数比较,以决定次小的数。于是十个数的顺序排列结束。 例如下面对5个进行排序,这个五个数分别为829105。按选择排序方法,过程如下: 初始数据:82910 5 第一轮排序:82910 5 92810 5 10289 5 10289 5 第二轮排序:10829 5 10928 5 10928 5 第三轮排序:10982 5 10982 5 第四轮排序:10985 2 对于十个数,则排序要进行9次。源程序如下: program ex5_2; var a:array[1..10]of integer; i,j,t:integer; begin writeln('Input 10 integers:'); for i:=1 to 10 do read(a[i]);{读入10个初始数据} readln; for i:=1 to 9 do{进行9次排序} begin for j:=i+1 to 10 do{将第i个数与其后所有数比较}

一维数组练习题

维数组练习题1 、以下对一维数组 a 进行正确初始化的是 ____________ A) int a[10]=(0,0,0,0,0); C) int a[ ]={0}; B) int a[10]={ }; D) int a[10]={ 10*2}; 2 、以下一维数组 a 的正确定义是_________ 。 A) int a(10); B) int n=10,a[n]; C) int n; D) #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 3 、执行下面的程序段后 , 变量 k 中的值为 __________ 。 int k=3,s[2]; s[0]=k; k=s[1]*10; A) 不定值B) 33 C) 30 D) 10 4 、下列程序执行后的输出结果是 main() {int a,b[5]; a=0; b[0]=3; printf("%d,%d\n",b[0],b[1] ); A) 3,0 C) 0,3 } B) 3 0 D) 3, 不定值 5、已知数组a的赋值情况如下所示,则执行语句a[2]++; 后a[1]和a[2]的值分别是_______________ 。 a[0] a[1] a[2] a[3] a[4] 10 | 20 | 30 | 40 | 50 | A) 20 和 30 C) 21 和 30 B) 20 和 31 D) 21 和 31 6、以下程序输出 a 数组中的最小值及其下标,在划线处应填入的是 _____________ main( ) { int i,p=0,a[10]; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=1;i<10;i++) if(a[i]

一维数组习题

一维数组习题 一、选择题 1、对定义“int a[2];”的正确描述是()。 A、定义一维数组a,包含a[1]和a[2]两个元素 B、定义一维数组a,包含a[0]和a[1]两个元素 C、定义一维数组a,包含a[0]、a[1]和a[2]三个元素 D、定义一维数组a,包含a(0)、a(1)和a(2)三个元素 2、以下数组的定义中,合法的是()。 A、int x(3); B、int x[3] C、int x[2+1]; D、int n=3,[n]; 3、以下数组的初始化中,正确的是()。 — A、char s[]={‘a’,’b’}; B、char s[2]={‘a’,’b’,’c’}; C、char s(2)={‘a’,’b’}; D、char s={‘a’,’b’,’c’}; 4、以下初始化中,能够将各初始值正确赋给a数组元素的是()。 A、int a[3]={1,2}; B、int a[3]={,2,}; C、int a[3]={1,5,4,12}; D、int a(3)={1,5}; 5、以下对一维数组的定义中,正确的是()。 A、#define MAX 5 B、int MAX=5; int a[MAX]; int a[MAX]; C、int MAX; D、#define MAX 5; scanf(“%d”,&MAX); int a[MAX]; 。 int a[MAX]; 6、若有初始化“float a[]={1,2,3,4,5};”,则以下叙述中错误的是()。 A、因所提供的初值都是整数,与数组类型不一致,所以出现错误 B、a数组在内在中占据20个字节 C、a数组中的最后一个元素是a[4] D、元素a[2]的值是 7、若有初始化“int a[5]={1,2,3,4,5};”,则值为4的表达式是()。 A、a[4] B、a[a[2]+1] C、a[a[2]] D、a[3]+1 8、若有初始化语句“int a[]={1,2,3,4,5,6,7,8,9,10};”,则对a数组元素的错误引用是()。 A、a[10] B、a[0] C、a[5] D、a[1]) 9、有以下程序 main( ) { int a[3]={1,2,3},i; for(i=3;i>=1;i--) printf(“%d”,a[i]); } 程序运行后的输出结果是()。 A、1 2 3 B、不确定的值 C、程序出错 D、3 2 1 10、设有如下程序段 char str[10]; ? int i; for(i=1;i<=10;i++) scanf(“%c”,&str[i]); for(i=1;i<=5;i++) printf(“%c”,str[i]); 则以下选项中存在错误的是()。 A、第1行 B、第2行 C、第3行 D、第4行 二、填空题 1、若有定义“float a[7];”,则a数组中元素的下标下界是,上界是。 2、若有定义“double x[2];”,则sizeof(x)的值是。 《 3、已知“int i,a[5];”,使用for循环为a数组中的所有元素输入数据的语句是。 4、假设SIZE为已经声明的符号常量,定义一个具有SIZE个元素的double型数组x,且所有元素初值为0的语句是` 。 5、同一数组中的元素应具有相同的名称和。 6、以下程序运行后的输出结果是。 main( ) { int a[10],i; a[0]=1;

数组编程练习(带答案)

数组编程练习 1、产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。 解: #include #include #define N 10 int main() { int a[N],i; for(i=0;i #include #define N 10 int main() { int a[N],i,max,min,sum; float ave; for(i=0;imax) { max=a[i]; } if(a[i] #include #define N 10 int main() { int a[N],i,j,t; for(i=0;i

C语言一维数组练习题及参考程序

4.1习题 1、输入10个整数,然后将这10个整数逆序输出。 #include int main() { int i; int a[10]; printf("Input data: "); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("Output data: "); for(i=9;i>=0;i--) //通过下标引用顺序实现逆序 printf("%d ",a[i]); return 0; } 2、输入一个整数m,然后输入m个整数,存放在数组a中;再输入一个整数n,然后输入 n个整数,存放在数组b中。找出a和b两数组的非共有元素,存放在数组c中并输出。 (m和n的值不超过20) #include int main() { int a[20], b[20], c[20];//假定元素值不超过20 int m, n, i, j, k=0; scanf("%d", &m); for(i=0; i=n)//不是共同元素 { c[k]=a[i]; k++;//为存放下一个元素做准备 } } for(i=0; i

数据结构习题3(数组)

一、选择题 1. 将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。供选择的答案: A. 198 B. 195 C. 197 2. 二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。从供选择的答案中选出应填入下列关于数组存储叙述中()内的正确答案。(1)存放A至少需要(E)个字节; (2)A的第8列和第5行共占(B)个字节; (3)若A按行存放,元素A[8,5]的起始地址与A按列存放时的元素( B )的起始地址一致。 供选择的答案: (1)A. 90 B. 180 C. 240 D. 270 E. 540 (2)A. 108 B. 114 C. 54 D. 60 E. 150 (3)A. A[8,5] B. A[3,10] C. A[5,8] D. A[0,9] 3. 设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij(1≤i,j≤n,且i≤j)在B中的位置为( A )。 A. i(i-l)/2+j B. j(j-l)/2+i C. j(j-l)/2+i-1 D. i(i-l)/2+j-1 4. A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是(B)。 A. i(i-1)/2+j B. j(j-1)/2+i C. i(j-i)/2+1 D. j(i-1)/2+1 5. 设二维数组A[1.. m,1..n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为( A)。 A.(i-1)*n+j B.(i-1)*n+j-1 C. i*(j-1) D. j*m+i-1 6.有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。存储器按字节编址。假设存储数组元素A[0,1]的第一个字节的地址是0。 存储数组A的最后一个元素的第一个字节的地址是(⑧)。若按行存储,则A[3,5]和A[5,3]的第一个字节的地址分别是(③)和(⑤)。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是(①)和(⑥)。供选择的答案:A~E:①28 ②44 ③76 ④92 ⑤108 ⑥116 ⑦132 ⑧176 ⑨184 ⑩188 7.有一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是((12))个字节。假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是((11))。若按行存储,则A[2,4]的第一个字节的地址是(③)。若按列存储,则A[5,7]的第一个字节的地址是(⑨)。供选择的答案A~D:①12 ②66 ③72 ④96 ⑤114 ⑥120 ⑦156 ⑧234 ⑨276 ⑩282 (11)283 (12)288 8. 设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素ai,j(i≤j), 在一维数组B中下标k 的值是:(B) A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j

一维、二维数组及应用程序设计习题

一维、二维数组及应用程序设计习题 1、 【字符统计问题】 题目描述:试统计用户键盘输入的一串英文字符中每种英文字符个数。 题目要求:⑴相同英文字符的大小写形式视为同一种统计对象;⑵遇到任意非英文字符时统计终止;⑶输出数据时每行仅输出10个数据。 输入数据:abcdeABCDElKlhmn2 输出数据:A(2) B(2) C(2) D(2) E(2) F(0) G(0) H(1) I(0) J(0) K(1) L(0) M(1) N(1) O(0) P(0) Q(0) R(0) S(0) T(0) U(0) V(0) W(0) X(0) Y(0) Z(0) 2、 【约瑟夫(猴子选大王)问题】 题目描述:有M(1000以内)个猴子围成一圈,每个有一个编号,编号从1到M 。打算从中选出一个大王。经过协商,决定选大王的规则如下:从第一个开始,每隔N(任意正整数)个,数到的猴子出圈,最后剩下来的就是大王。 题目要求:从键盘输入M 、N(均为正整数),试编程计算哪一个编号的猴子将成为大王。 输入数据:15 3 输出数据:5 200 55 93 3、 【行列互换问题】 题目描述:试编程将一个二维数组行和列元素互换,存到另一个二维数组中。例如: A = B = 4、 【矩阵初始化问题】 题目描述:矩阵是线性代数中的重要概念及研究工具,在计算机算法设计中,我们常常选用二维数组之类的数据结构来描述矩阵。下图是两个4×4的下三角方阵(即行列相等)初始化后的状态,请编程输出任意方阵(用户从键盘输入方阵的行列值)的这类初始化状态。 A 4×4 = B 4×4 = 5、 【杨辉三角问题】 题目描述:杨辉三角(出自其1261年所著的《详解九章算法》,也叫贾宪三角或帕斯卡三角),它可以简单解释为由两个未知数和的幂次方运算后按某个未知数的降幂排列(或另一未知数的升幂排列)后的系数表(二项式定理)。比如(x+y)0 =1,系数为(1);(x+y)1 =x+y ,系数为(1、1);(x+y)2 =x 2 +2xy+y 2 ,系数为(1、2、1);(x+y)3 =x 3 +3x 2 y+3xy 2 +y 3 ,系数为(1、3、3、1)以及四次、五次、……等运算后所得的系数表,如下图(仅举5行): 题目要求:⑴利用一维数组试求用户给定行数的杨辉三角形;⑵利用二维数组试求用户给定行数的杨辉三角形(请尽力严格按照上图要求的输出格式)。 输入数据:5 输出结果:如上图如示。 1 2 3 4 5 6 1 4 2 5 3 6 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 0 0 0 2 3 0 0 4 5 6 0 7 8 9 10 0 0 0 7 0 0 4 8 0 2 5 9 1 3 6 10

一维数组练习题

一维数组练习题 一维数组练习题 1、以下对一维数组a进行正确初始化的是__________。 A) int a[10]=(0,0,0,0,0); B) int a[10]={ }; C) int a[ ]={0}; D) int a[10]={ 10*2}; 2、以下一维数组a的正确定义是________ 。 A) int a(10); B) int n=10,a[n]; C) int n; D) #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 3、执行下面的程序段后,变量k中的值为__________。 int k=3,s[2]; s[0]=k; k=s[1]*10; A) 不定值B) 33 C) 30 D) 10 4、下列程序执行后的输出结果是__________。 main() {int a,b[5]; a=0; b[0]=3; printf("%d,%d\n",b[0],b[1]); } A) 3,0 B) 3 0 C) 0,3 D) 3,不定值 5、已知数组a的赋值情况如下所示,则执行语句a[2]++;后a[1]和a[2]的值 分别是________。 a[0] a[1] a[2] a[3] a[4] ┌──┬──┬──┬──┬──┐ │ 10 │ 20 │ 30 │ 40 │ 50 │ └──┴──┴──┴──┴──┘

A) 20和30 B) 20和31 C) 21和30 D) 21和31 6、以下程序输出a数组中的最小值及其下标,在划线处应填入的是________。main( ) { int i,p=0,a[10]; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=1;i<10;i++) if(a[i] printf("%d,%d\n",a[p],p); } A) i=p B) a[p]=a[i] C) p=j D) p=i 7、以下程序的输出结果是________。 main( ) { int i,p=0,a[10]={1,5,9,0,-3,8,7,0,1,2}; for(i=1;i<10;i++) if(a[i] printf("%d,%d\n",a[p],p); } A) -3,4 B) 0,1 C) 9,2 D) 2,9 8、有如下说明: int a[10]={0,1,2,3,4,5,6,7,8,9}; 则数值不为9的表达式是________。 A) a[10-1] B) a[8] C) a[9]-0 D) a[9]-a[0] 9、有如下程序 main() { int n[5]={0,0,0},i,k=3; for(i=0;i

C语言(数组与函数)习题与答案

1、有以下程序 main() { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2) j+=p[i]; printf("%d\n",j); } 程序运行后的输出结果是()。 A.42 B.56 C.60 D.45 正确答案:D 2、以下叙述中错误的是()。 A.数组名代表的是数组所占存储区的首地址,其值不可改变 B.只有double类型数组,不可以直接用数组名对数组进行整体输入或输出 C.可以通过赋初值的方式确定数组元素的个数 D.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 正确答案:B 3、以下能正确定义一维数组的选项是()。 A.int a[5]={0,1,2,3,4,5}; B.int a[5]="0123"; C.char a[]={0,1,2,3,4,5}; D.char a={'A','B','C'}; 正确答案:C

解析: D、不加[ ],a只能被看作是一个字符变量,只能接收一个字符 4、有以下程序 main() { char p[ ]={‘a’,’b’,’c’},q[ ] =”abc”; printf("%d %d\n",sizeof(p),sizeof(q)); }; 程序运行后的输出结果是()。 A.4 4 B.3 3 C.3 4 D.4 3 正确答案:C 解析: C、p[] 只能认作字符数组,不会有字符串的结束标志,所以只有3个字符q[] 是字符串,末尾还会有字符串的结束标志,所以有4个字符 5、以下程序运行后的输出结果是()。 main() { int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i+1;j<3;j++) a[j][i]=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%d ", a[i][j]); printf("\n"); } } A.1 2 3 0 5 6 0 0 9

PHP数组练习及答案

1.一维数组是最简单的数组,其定义形式是?$arr = array()或者$arr = []; 2.怎么判断一个变量是否为空,怎么判断一个变量是否存在?empty($str); isset($str); 3.如何获取数组$arr = array(array(‘a’,’b’,’c’));中的 值’c’ ? $arr[0][2]; 4.如何定义一个三维数组? $arr = array(array(array()));或者$arr = [[[]]]; 5.怎么才能从数组$multi_array中找出值cat? $multi_array = array( "red","green", 42 => "blue", "yellow" => array("apple",9 => "pear","banana", "orange" => array("dog","cat","iguana")) ); $multi_array[‘yellow’][‘orange’][1]; 6.下面数组$arr中,打印$arr[1][1]输出的值是什么? $arr = array( array('jack','boy',23,'18nan'=>array(18000,180,18)), array('rose','girl',18) );

答案:girl 7.遍历输出数组$arr = array(1=>’ff’,‘aa,’dd,’cc’,’eee’); foreach($arr as $value){ echo $value; } 8.求数组$arr = array(‘qwer,’jkls’,’cc’,’eee’)中元素 的个数。 答案:count($arr); 9.运行下面代码输出的内容是? $arr=array(5=>1,12=>2); $arr[]=3; $arr["x"]=4; print_r($arr); echo "
"; unset($arr[5]); print_r($arr); echo "
"; unset($arr); print_r($arr); Array( [5] => 1 [12] => 2 [13] => 3 [x] => 4 ) _____________________________________________ Array([12] => 2 [13] => 3 [x] => 4) ______________________________________________

一维数组程序设计习题

一维数组程序设计习题 1、【逆序输出问题】 题目描述:按照顺序从键盘读入十个数据,以逆序方式输出。 输入数据:1 2 3 4 5 6 7 8 9 10 输出结果:10 9 8 7 6 5 4 3 2 1 2、【数组元素的移动问题】 题目描述:将元素个数为10的数组a中的第一个元素移到数组末尾,其余数据依次往前平移一个位置,请编程实现。 输入数据:1 2 3 4 5 6 7 8 9 10 输出结果:2 3 4 5 6 7 8 9 10 1 3、【斐波那契数列问题】 题目描述:有这样一种数列:1、1、2、3、5、8、……,这个数列的特点是:第1、2两个数为1,1,从第3个数开始,该数是其前面两个数之和。这种数列被称为Fibonacci(斐波那契)数列,请编程输出斐波那契数列的前20项(用一维数组完成)。 输出结果:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 4、【求和问题】 题目描述:编程计算并输出S=∑ = 10 1 i i i y x 其中,Xi的值为1、8、5、7、2、99、34、67、2589、19,Yi的值为2、22、14、3、7、9、11、8、132、30。 输出结果:344402 5、【排序问题】 题目描述:从键盘输入10个数,将它们按照从小到大的顺序输出。 输入数据:72 98 79 66 39 95 96 25 5 37 输出结果:5 25 37 39 66 72 79 95 96 98 6、【进制转换问题】 题目描述:请编程将一个从键盘输入的十进制整数转化为二进制数输出。 输入格式:32570 输出格式:111111********* 7、【圆环找数问题】 题目描述:有一组数,其排列形式如下:11,19,9,12,5,20,1,18,4,16,6,10,15,2,17,3,14,7,13,15,8且尾部8和头部11首尾相连,构成环形的一组数,编程找出相邻的4个数,其相加之和最大,并给出它们的起始位置。 输出结果:58 19 8、【质数问题】 题目描述:用筛选法求100之内的质数,要求每行输出5个数据。 输出结果:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

c语言数组习题

数组练习解答 1 定义一个名为a的单精度实型一维数组,长度为4,所有元素的初值均为0的数定义语句是___________ 【分析】按照一般数据定义语句的格式,可以直接写出方法一〔参看答案〕;考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二〔参看答案〕;考虑到不省略数组长度,给局部元素赋初值时,所有未赋初值的元素均有空值〔对数值型数组来说,初值为0〕,可以写出方法三〔参看答案〕;考虑到选用静态型,不赋初值所有元素也自动赋予。空值〔对数值型数组来说,初值为0〕,可以写出方法四〔参看答案〕。 【答案】方法一:float a[4]={0.0,0.0,0.0,0.0}; 方法二:float a[]={ 0.0,0.0,0.0,0.0}; 方法三:float a[4]= {0.0}; 方法四: static float [4]; 2 以下数组定义语句中,错误的选项是〔〕 ① char x[1]='a';②auto char x[1]={0}; ③ static char x[l];④ char x[l]; 【分析】显然答案①中给字符型数组赋初值的格式不对〔不能直接赋予字符常量,必须用花括号括住〕,所以备选答案①是符合题意的答案。 【答案】① 3 用"冒泡排序法"对n个数据排序,需要进行n一1 步。其中第k步的任务是:自下而上,相邻两数比拟,小者调上;该操作反复执行n-k次。现在假设有4个数据:4、l、3、2要排序,假定4为上、2为下,那么利用"冒泡排序法"执行第2步后的结果是_________________。 【分析】开始排序前的排列执行第1步后的排列执行第2步后的排列 4 1 1 1 4 2 3 2 4 2 3 3 【答案】 l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,那么利用"冒泡排序法"执行第2步后的结果是______________________。 【分析】开始排序前的排列为: 4 1 3 2 执行第1步后的排列为: 1 4 3 2 执行第2步后的排列为: 1 2 3 4 【答案】1、2、3、4 5 以下数组定义语句中,正确的选项是〔〕 ① int a[][]={1,2,3,4,5,6};② char a[2]「3]='a','b'; ③ int a[][3]= {1,2,3,4,5,6};④ static int a[][]={{1,2,3},{4,5,6}}; 【分析】C语言规定,二维数组定义时不允许省略第二维的长度,所以备选答案①④是错误的。C语言还规定,定义字符型数组时不允许直接使用"字符常量"的方式赋初值,所以备选答案②也是错误的。显然备选答案③符合题意。【答案】③ 6 定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句是〔〕 ①char s[]={‘1','2','3','\0 '};②char s「」={"123"}; ③char s[]={"123\n"}; ④ char s[4]={'1','2','3'}; 【分析】备选答案①中省略了数组长度,所以每个元素都赋了初值,共计4个元素,初值依次为'l'、'2'、'3'、'\0',最后一个元素的值为字符串结束标记,所以数组S中存放的是字符串"123",该答案不符合题意〔即正确的〕;备选答案③中直接赋予字符串作为初值所以数组s的长度为4,其中的初值是字符串"123",不符合题意〔即正确的〕;备选答案③中也是给数组s赋予字符串的初值,但是字符串不是"123",而是"123\n",所以该答案符合题意〔即错误的〕;显然答案④也不符合题意〔即正确的〕。下面来分析

《C++数组》习题参考答案

《C++数组》习题 学号姓名 一、选择题 1、下列对字符数组进行初始化的语句正确的是 A A.char a[]= "Hello"; B.char a[][]= {'H','e','l','l','o'}; C.char a[5]="Hello"; D.char a[2][5]= {"Hello","World"}; 2、以下一维数组a的正确定义是 D A.int a(10) ; B.int n=10,a[n]; C.int n; D.#define size 10 cin>>n; int a[size]; int a[n]; 3、以下对二维数组a进行不正确初始化的是 C A.int a[2][3]={0}; B.int a[][3]={{1,2},{0}}; C.int a[2][3]={{1,2},{3,4},{5,6}}; D.int a[][3]={1,2,3,4,5,6); 4、执行以下程序后,s的值为 A int a[]={5,3,7,2,1,5,4,lO); int s=0,k; for(k=0;k<8;k+=2) s+=*(a+k); A.17 B.27 C.13 D.无定值 5、为了判断两个字符串sl和s2是否相等,应当使用 D A.if (s1==s2)

B.if (s1=s2) C.if(strcpy(S1,s2)) D.if(strcmp(s1,s2)==O) 6、有定义int a[2][5];,若a[0][1]的地址为x,则a[0][O]、a[1][3]地址分别为(假设一个整型数据占用两个字节的内存空间): A A.x-2,x+14 B.x-1,x+7 C.x+1,x+7 D.x-1,x+14 7、若有定义float a[m][n];,且a[1][1]的地址为x,每个float元素占用4个字节,则a[il[j]的地址为 A A.x+4*(i-1)*n+4*(j-1) B.x+(i-1)*n+(j-1) C.x+4*(i-1)*j+(j-1) D.x+4*i*j+4*j 二、填空题 1、char st[20] = "SEU\0\t\\"; cout<

c++一维数组例题讲解

c++一维数组例题讲解 C++一维数组是一种存储相同类型数据的容器,可以按照索引访问和操作数组元素。下面我将从多个角度讲解一维数组的例题。 例题1,求一维数组的和。 假设有一个一维数组arr,长度为n,要求计算数组中所有元素的和。 解答: cpp. #include 。 using namespace std; int main() {。 int arr[] = {1, 2, 3, 4, 5};

int n = sizeof(arr) / sizeof(arr[0]); int sum = 0; for (int i = 0; i < n; i++) {。 sum += arr[i]; }。 cout << "数组的和为," << sum << endl; return 0; }。 上述代码中,我们首先定义了一个整型数组arr,并初始化了一些元素。然后通过`sizeof`运算符获取数组的长度n,即数组元素的个数。接下来,我们使用一个for循环遍历数组的每个元素,并将其累加到sum变量中。最后,输出sum的值,即为数组的和。

例题2,查找一维数组中的最大值。 给定一个一维数组arr,长度为n,要求找出数组中的最大值。 解答: cpp. #include 。 using namespace std; int main() {。 int arr[] = {5, 2, 8, 1, 9}; int n = sizeof(arr) / sizeof(arr[0]); int maxVal = arr[0]; for (int i = 1; i < n; i++) {。

相关主题
文本预览
相关文档 最新文档