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

一维数组习题

一维数组习题
一维数组习题

一维数组

【例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

JAVA一维数组二维数组运用的例子

题目:定义一个一维数组存储10个学生名字;定义一个二维数组存储这10个学生的6门课(C程序设计、物理、英语、高数、体育、政治)的成绩; 程序应具有下列功能: (1)按名字查询某位同学成绩 (2)查询某个科目不及格的人数,及学生名单 代码如下: import java.util.*; public class Test{ public static void main(String[]args){ Scanner input=new Scanner(System.in); String[]name={"a","b","c","d","e","f","g","h","i","l"};//存储学生的名字 int[][] grade={{50,60,70,80,90,10},{40,90,80,60,40,70},{60,80,70,60,40,90},{50,60,70,80,90,10}, {60,80,70,60,40,90},{60,70,80,90,70,70},{60,80,70,60,40,90},{60,80,70,60,40,90},{70, 80,90,70,70,70},{60,80,70,60,40,90}};//存储学生各科成绩 System.out.println("输入要查询成绩的学生名字:"); String chioce=input.nextLine(); for(int i=0;i<10;i++) { if(name[i].equals(chioce)) {System.out.println("学生:"+name[i]+"的成绩如下:"); System.out.println("C程序设计:"+grade[i][0]+"物理:"+grade[i][1]+"英 语:"+grade[i][2]+"高数:"+grade[i][3]+"体育:"+grade[i][4]+"政治:"+grade[i][5]+"\n"); break;} } System.out.println("******************************************************");

实验六 一维数组程序设计

实验六一维数组程序设计 一、实验学时 2学时 二、实验目的 (一)掌握一维数组的定义、初始化方法; (二)掌握一维数组中数据的输入和输出方法; (三)掌握与一维数组有关的程序和算法; (四)了解用数组处理大量数据时的优越性。 三、预习要求 (一)理解数组的概念、利用数组存放数据有何特点; (二)一维数组的定义、初始化方法; (三)一维数组中数据的输入和输出方法。 四、实验内容 (一)下面的几个程序都能为数组元素赋值,请输入程序并运行。比较一下这些赋值方法的异同。 1.在定义数组的同时对数组初始化。 /* c6-1.c */ /*在定义数组的同时对数组初始化*/ #include "stdio.h" void main( ) { int a[4]={0,1,2,3}; printf("\n%d %d %d %d\n",a[0],a[1],a[2],a[3]); } 2.不使用循环对单个数组元素赋值。 /* c6-2.c */ /*不使用循环对单个数组元素赋值*/ #include "stdio.h" void main( ) { int a[4]; a[0]=2;a[1]=4;a[2]=6;a[3]=8; printf("\n%d %d %d %d\n",a[0],a[1],a[2],a[3]); } 3.用循环结构,从键盘输入为每个数组元素赋值,输出各数组元素。 /* c6-3.c */ /*利用循环通过键盘对数组元素赋值*/ #include "stdio.h" void main( ) { int i,a[4]; for(i=0; i<4; i++) scanf("%d",&a[i]); printf("\n"); for(i=0; i<4; i++) printf("%d ",a[i]);

c++基本语句和一维数组测试题

C++阶段测试(三种基本结构+一维数组) 班级姓名 一、单项选择题(共15题,每题有且仅有一个正确选项) ⒈以下哪个是面向对象的高级语言( )。 A.汇编语言 B. C++ C.Fortran D.Basic ⒉1TB代表的字节数是( )。 A.2的10次方 B.2的20次方 C.2的30次方 D.2的40次方 ⒊二进制数00100100和00010101的和是( )。 A.00101000 B.001010100 C.01000101 D.00111001 4.下列各无符号十进制整数中,能用八位二进制表示的数中最大的是( )。 A.296 B.133 C.256 D.199 5.要求以下程序的功能是计算:s=1+1/2+1/3+...+1/10。 #include using namespace std; int main() { int n; float s; s = 1.0; for(n = 10; n > 1; n--) s = s + 1 / n; cout << s << endl; return 0; } 程序运行后输出结果错误,导致错误结果的程序行是( )。 A.s = 1.0; B.for(n = 10; n > 1; n--) C.s = s + 1 / n; D.cout << s << endl; 6设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是( )。 A.x = (x * 100) + 0.5 / 100.0; B.x = (x * 100 + 0.5) / 100.0; C.x = (int)(x * 100 + 0.5)/100.0; D.x = (x / 100 + 0.5) * 100.0; 7.有以下程序 #include using namespace std; int main() { int s, a, n; s = 0; a = 1; cin >> n; do { s += 1; a -= 2; }while(a != n); cout << s << endl; return 0; } 若要使程序的输出值为2,则应该从键盘给n输入的值是( )。 A.-1 B.-3 C.-5 D.0 8.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值,c>0。s = a; for(b = 1; b <= c; b++) s += 1; 则与上述程序段功能等价的赋值语句是( )。 A. s = a + b B. s = a + c C. s = s + c D. s = b + c 9.若有定义: int a=7; float x=2.5,y=4.7; 则表达式x+a%3*(int)(x+y)%2/4的值是( )。 A. 2.500000 B. 2.750000 C. 3.500000 D. 0.000000 10. 在C/C++语言中,逻辑值“真”用( )表示。

一维数组练习.doc

基本练习:(釆用文件输入输岀) 1.输入一串小写字母(以〃.〃为结束标志),统计出每个字母在该字符串中出现的次数(若某字母不出现,则不要输出),例: 输入:aaaabbbccc. 输出:a:4 b:3 c: 3 规定:文件名:tongji. pas 输出文件:tongji. in输出文件tongji. out 程序: var a:array/ z" ] of integer; n:char; begin assign (input, ' tongji,in' );reset (input); assign(output,' tongji. out' );rewrite(output); read (n); while n〈>'.' do begin inc (a[n]); read(n); end; for n:=,a" to,z‘ do if a[n]<>0 then writeln(n,J :,, a[n]); close (input);close (output); end. 2.输入一个不大于32767 (integer)的正整数N,将它转换成一个二进制数,例如:输A: 100 输出:1100100 规定:文件名:erjinzhi. pas 输出文件:erjinzhi. in输出文件erjinzhi. out 程序: var a:array[L . 16] of integer; b, c, d, e: integer; begin assign (input,' erjinzhi. in');reset(input); assign(output,' erjinzhi. out');rewrite(output); readln(b);

数组及其应用(详细教案)

提问:给一组数排序,这组数该如何存 放呢? 8 2 9 4 5 6 3 7 1 6 这就是本节课要解决的问题。 ?一个班学生的学习成绩 ?一行文字 ?一个矩阵 这些数据的特点是: 1.具有相同的数据类型 2.使用过程中需要保留原始数据 C语言为这些数据,提供了一种型:数组。所谓数组就是一组具有相数据的有序集合。 提出学习要求: 1 一维数组的定义和应用

2 二维数组的定义和应用 3 字符数组的应用 第七章数组 7.1一维数组及应用 7.1.1一维数组的定义方式 在C语言中使用数组必须先定义、后使用,定义数组也就确定了数组的首地址、数组元素的类型和个数(数组长度)。 一维数组的定义方式为: 类型说明符数组名[常量表达式]; 例如: 1) int a[5]; 说明整型数组a,a是数组名,有5个元素。但

是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。注意不能使用数组元素a[5]。 float b[10],c[20]; 说明实型数组b,b是数组名,有10个元素,实型数组c,有20个元素。 char ch[20]; 说明字符数组ch,有20个元素。 对于数组类型说明应注意以下几点:2) 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。 3) 数组名的书写规则应符合标识符的书写规定。 4) 数组名不能与其它变量名相同。 例如:

main() { int a; /*a为整型变量*/ float a[10]; /* 数组名a与上面的变量名a相同,错误!*/ …… } 是错误的。 5) 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。 例如: #define FD 5 /* FD是符号常数*/ main() {

一维数组练习题

一维数组练习题 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]

c语言程序设计 一维数组实验

程序填空: 1、将数组a中所有偶数删除,把奇数按原顺序依次存放到a[0]、a[1]、a[2]、……、中。例如:若a数组中的数据最初排列为:9、1、4、 2、 3、6、5、8、7,删除偶数后a数组中的数据为:9、1、3、5、7。 #include main() { int a[9]={9,1,4,2,3,6,5,8,7},i,k=0; for(i=0;i<9;i++) if(__【1】__) a[k++]=a[i]; for(i=k;i<9;i++) a[i]=0; for(i=0;__【2】__;i++) printf("%4d",a[i]); printf("\n"); } 2、将所有大于1小于整数m的非素数存入数组a中。例如,若输入17,则应输出:4 6 8 9 10 12 14 15 16。 #include #define N 100 main() { int a[N],i,j,k=0,m; __【1】__ for(i=2;i #define N 20 main() { int fibonaci[N],i; for(i=0;i

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",

vb中一维二维数组应用

一维数组 排序 一、选择排序法: 数据已经放在一维数组中,要求从小到大排序。 数组 20 4 36 …… 45 109 3 下标 1 2 3 …… n-2 n-1 n 排序过程: 1、从第1项到第n项选择最小值,然后将第1项与最小项交换。 2、从第2项到第n项选择最小值,然后将第2项与最小项交换。 3、…… 4、从第n-1项到第n项选择最小值,然后将第n-1项与最小项交换。注意:最小值及下标由临时变量存储。 所以,需要两层循环:外层循环i执行n-1次,内层循环j执行n-i-1次For i=1 to n-1

最小值及下标由临时变量存储 tmpVal=第i项值 tmpId=第i项下标 For j=i+1 to n 若tmpVal >第j项值,则: tmpVal=第j项值 tmpId=第j项下标 next 将第i项与最小项交换 Next 从大到小呢? 二、冒泡排序法: 数据已经放在一维数组中,要求从小到大排序。 数组 20 4 36 …… 45 109 3 下标 1 2 3 …… n-2 n-1 n

两种方法:小数上浮和大数下沉。 小数上浮排序过程:从第n项到第k项,依次相临两项比较,若第m项小于第m-1项,则两项交换。(k从2到n) 第1次执行:结果是第1项至第n项中的最小值放到第1项中 1、若第n项小于第n-1项,将第n项与第n-1项交换。 2、若第n-1项小于第n-2项,将第n-1项与第n-2项交换。 3、…… 4、若第2项小于第1项,将第2项与第1项交换。 第2次执行:结果是第2项至第n项中的最小值放到第2项中 1、若第n项小于第n-1项,将第n项与第n-1项交换。 2、若第n-1项小于第n-2项,将第n-1项与第n-2项交换。 3、…… 4、若第3项小于第2项,将第3项与第2项交换。 …… 第n-1次执行: 1、若第n项小于第n-1项,将第n项与第n-1项交换。 所以,需要两层循环:外层循环i执行n-1次,内层循环j执行n-i次 For i=1 to n-1 For j=n to i+1 step -1 若第j项值<第j-1项值,则:

C语言数组编程题

实验4 数组 一.实验目的: 1.掌握一维数组的定义、赋值和输入输出的方法; 2.掌握字符数组定义、初始化、赋值的方法; 3.了解常见的字符串函数功能及其使用方法; 4.掌握二维数组的定义与引用。 二.实验内容: 1.编写程序,输入10个整数存入一维数组,统计输出其中的正数、负数和零的个数。 2.编写程序,输入10个整数存入一维数组,再按逆序重新存放后再输出。 3.编写程序,输入10个整数存入一维数组,对其进行升序排序后输出。 4.编写程序,求二维数组中元素的最大值和最小值。 5.编写程序,求一个4×4矩阵中所有元素之和。 6.编写程序:从键盘上输入一字符串,统计输出该字符串中的字母字符、数字字符、空格以及其他字符的个数。 7.编写程序:从键盘上输入一字符串,并判断是否形成回文(即正序和逆序一样,如“abcd dcba”)。 8. 产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。 9. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,按原来的规律将其插入并输出。 页脚内容1

10. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,要求找出该数是数组中的第几个元素,如果不在数组中,则输出找不到。 11. 找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列最小。可能没有鞍点。 12. 编程输出杨辉三角。(要求输出10行)(杨辉三角:每行端点与结尾的数为1.每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大) 13. 输入一行字符,统计大写字母、小写字母、数字、空格以及其它字符个数。 14. 编写程序,将两个字符串连接起来,不用strcat。 15. 编写程序实现strcpy函数功能。 16. 编程实现strlen函数功能。 17. 编程求2-4+6-8…-100+102的值。 18. 假设某人有100,000现金。每经过一次路口需要进行一次交费。交费规则为当他现金大于50,000时每次需要交5%如果现金小于等于50,000时每次交5,000。请写一程序计算此人可以经过多少次这个路口。 19. 输入若干个正整数,以0结束,将其中大于平均值且个位为5的数排序后输出。(按由大到小的顺序排序) 20. 输入一个字符串,将其中ASCII码值为基数的字符排序后输出。(按由小到大的顺序) 21. 输入一个以回车结束的字符串(少于80个字符),滤去所有的非16进制字符后,组成一个新字符串(16进制形式),然后将其转换为10进制数后输出。 22. 读入一个正整数n(1<=n<=6),再读入n阶矩阵,计算该矩阵除副对角线、最后一行、最后一列 页脚内容2

一维数组习题

一维数组 【例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个数与其后所有数比较}

数组复习题.doc

数组复习题 1. 单项选择题 (1) int a[4]={5,3,8,9};其中a[3]的值为( D )。 A. 5 B. 3 C. 8 D. 9 (2) 以下4 个字符串函数中,( A )所在的头文件与其他3 个不同。 A. gets B. strcpy C. strlen D. strcmp (3) 以下4 个数组定义中,( D )是错误的。 A. int a[7]; B. #define N 5 long b[N]; C. char c[5]; D. int n,d[n]; (4) 对字符数组进行初始化,( B )形式是错误。 A. char c1[ ]={'1', '2', '3'}; B. char c2[ ]=123; C. char c3[ ]={ '1', '2', '3', '\0'}; D. char c4[ ]="123"; (5) 在数组中,数组名表示( C )。 A. 数组第1 个元素的首地址 B.数组第2 个元素的首地址 C. 数组所有元素的首地址 D.数组最后1 个元素的首地址 (6) 若有以下数组说明,则数值最小的和最大的元素下标分别是(B )。 int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; A. 1,12 B. 0,11 C. 1,11 D. 0,12 (7) 若有以下说明,则数值为4 的表达式是(D )。 int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; char c=’a’, d, g ; A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] (8) 设有定义:char s[12]="string";则printf( "%d\n",strlen(s)); 的输出是 (A ) A. 6 B. 7 C. 11 D. 12 (9) 设有定义:char s[12] = "string"; 则printf("%d\n ", sizeof(s)); 的输出是( D )说明:sizeof是一个运算符,求变量或类型的长度 A. 6 B. 7 C. 11 D. 12 (10) 合法的数组定义是( A )。 A. char a[ ]= "string " ; B. int a[5] ={0,1,2,3,4,5}; C. char a= "string " ; D. char a[ ]={0,1,2,3,4,5}

C语言一维数组教案

学科:计算机科学与技术 课程:C语言程序设计 课题:一维数组 课时:2 教学目标:1、掌握一维数组的定义和引用 2、掌握一维数组的初始化方法 3、了解与一维数组有关的应用编程方法 教学重点:一维数组的定义和引用、初始化方法 教学难点:与一维数组有关的应用编程方法 教学方法:举例法,引导法 教学步骤:1、通过一个例子提出问题来引出本节课的知识点 2、讲授一维数组的定义和引用、初始化方法 3、示例训练 4、进行本节课的总结及作业布置 教具:黑板计算机投影仪 教学过程: 一、导入: 提问:保存一个班50位同学的一门功课的成绩,并且找出最高分和最低分,应如何实现? 解题思路:定义50个变量,从键盘中输入值,然后再相互比较。处理起来很复杂,是

否有更简便的方法?引出本节课的知识点-----数组。 二、讲授: 1、数组概述: ·数组:是数目固定,类型相同的若干个变量的有序集合,用数组名标识。 序:是数组元素之间的位置关系,不是元素值的大小顺序。 数组名:是用于区别其它数组及变量的。 ·数组元素:集合中的变量,属同一数据类型,用数组名和下标确定。 下标:是数组元素在数组中的位置。 ·数组的维数:数组名后所跟下标的个数。 2、一维数组的定义 一维数组是指由一个下标数组元素组成的数组。其定义形式为: 存储类型数据类型数组名[常量表达式] 例如:static int score[50]; 它表示定义了一个名为score的数组,该数组有50个元素,其存储类型为静态型,数据类型为整型。 说明: (1)存储类型为任选项,可以是auto、static、extern存储类型,但是没有register 型。 (2)数据类型是用来说明数组元素的类型:int , char , float。 (3)数组名的命名应遵守标识符的命名规则,但是不能与其他变量同名。

一维数组练习题

维数组练习题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]

实验4使用数组的程序设计

C语言程序设计实验报告 实验4 使用数组的程序设计 一、实验目的 (1)掌握一维数组和二维数组的定义、赋值和输入输出方法。 (2)掌握字符数组的使用。 (3)掌握与数组有关的算法。 二、实验内容及步骤 1、检验并打印幻方矩阵 在下面的5*5阶幻方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些幻方矩阵中的元素读到一个二维整型数组中,然后检验其是否为幻方矩阵,并将其按如下格式显示到屏幕上。 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 程序代码: #include main() { int a[5][5],i,j,sr,sc,st1=0,p=0,st2=0; printf("请输入一个方阵:\n"); for(i=0;i<5;i++) {for(j=0;j<5;j++) scanf("%d",&a[i][j]); } for(i=0;i<5;i++) {st1=st1+a[i][i];//主对角线的和 st2=st2+a[i][4-i];}//次对角线的和 if(st1==st2) p++; for(i=0,sr=0;i<5;i++) {for(j=0,sc=0;j<5;j++) {sr=sr+a[i][j];//行的和 if(sr!=st1)break; sc=sc+a[j][i];//列的和 if(sc!=st1)break;} } if(p==1&&i==5) {printf("这是一个幻方矩阵\n");

for(i=0;i<5;i++) {for(j=0;j<5;j++) printf("%d\t",a[i][j]); printf("\n"); }} else printf("这不是一个幻方矩阵\n"); } 运行结果 2、完成以下程序,并进行调试 某班期末考试科目为数学、英语和计算机,有最多不超过30人参加考试,考试后要求:1)计算每个学生的总分和平均分; 2)按总分成绩由高到低排出成绩的名次; 3)打印出名次表,表格内包括学生学号、各科分数、总分和平均分; 4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。 【提示】:用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分。 程序代码: #include main() { double score[5][3],sum[5],aver[5]; int i,j,num[5],t; printf("请输入每位同学的学号和各科成绩,用Tab键隔开:\n"); printf("学号\t数学\t英语\t计算机\n"); for(i=0;i<5;i++) { scanf("%d",&num[i]); for(j=0;j<3;j++) scanf("%lf",&score[i][j]);

Java数组练习题(带答案)

一填空题 1)数组的元素通过下标来访问,数组Array的长度为Array.length 。 2)数组复制时,"="将一个数组的引用传递给另一个数组。 3)JVM将数组存储在栈(堆或栈)中。 4)数组的二分查找法运用的前提条件是数组已经排序。 5)Java中数组的下标的数据类型是整型。 6)数组最小的下标是0 。 7)arraycopy()的最后一个参数指明复制元素的个数。 8)向方法传递数组参数时,传递的是数组的引用。 9)数组初始化包括数组的申明,创建和初始化。 10)数组下标访问超出索引范围时抛出数组越界异常 11)浮点型数组的默认值是0.0f 。 12)数组创建后其大小不能改变。 二选择题 1.下面错误的初始化语句是_ABD__ A. char str[]="hello"; B. char str[100]="hello"; C. char str[]={'h','e','l','l','o'}; D. char str[]={'hello'}; 2.定义了一维int型数组a[10]后,下面错误的引用是_B__ A. a[0]=1; B. a[10]=2; C. a[0]=5*2; D. a[1]=a[2]*a[0]; 3.下面的二维数组初始化语句中,正确的是____ A. float b[2][2]={0.1,0.2,0.3,0.4}; B. int a[][]={{1,2},{3,4}}; C. int a[2][]= {{1,2},{3,4}}; D. float a[2][2]={0}; 4.引用数组元素时,数组下标可以是_D___ A. 整型常量 B. 整型变量 C. 整型表达式 D. 以上均可 5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为____ A. 24 B. 25 C. 18 D. 17 6.下列初始化字符数组的语句中,正确的是__B__ A. char str[5]="hello"; B. char str[]={'h','e','l','l','o','\0'}; C. char str[5]={"hi"}; D. char str[100]=""; 7.数组在Java中储存在 C 中 A. 栈 B. 队列 C. 堆 D. 链表 8.下面程序的运行结果是____ main() { int a[][]={{1,2,3},{4,5,6}}; System.out.printf("%d", a[1][1]); } A. 3 B. 4 C. 5 D. 6 9.下面程序的运行结果是_C___ main() {

C语言程序设计 一维数组

5.1一维数组 5.1.1找最小数 【例5-1】输入10个整数,找出其中的最小数,然后输出这10个数和最小数。 参考程序如下: /*程序5-1.c*/ #include int main() { int i,min,a[10];/*定义数组*/ printf("Enter data:");/*提示输入*/ for(i=0;i<10;i++) scanf("%d",&a[i]);/*输入10个数*/ min=a[0];/*假设下标为0的元素最小*/ for(i=1;i<10;i++)/*找最小值a[i]*/ if(a[i]

一维数组程序设计

实训六一维数组程序设计 一、实训目标 熟练掌握使用一维数组的编程方法和常用算法。 1、掌握数组的定义、输入和输出方法。 2、掌握下标变量的使用方法。 3、掌握求极值、分类统计、排序、查找、移动等常用算法。 4、进一步熟练程序的调试和测试方法。 5、*学习数组作为函数参数的编程方法。 二、语法练习 1、数组是把同类型的变量组织在一起。 2、 int a[5]; 表示定义了 5 个整形类型的变量,分别为: a[2]、a[3]、 a[4] 、 a[0] ,各元素在内存中连续存放,数组名a表示数组在内存中的初始地址。 3、在C语言中对一维整型数组的正确定义为 D 。 A)int a(10); B)int n=10,a[n]; C)int a[ ]; D)#define N 10 int a[N]; 4、以下能对一维数组a进行初始化的语句是: ( C ) A. int a[5]=(0,1,2,3,4,); B. int a(5)={} ; C. int a[3]={0,1,2}; D. int a[5]={5*1}; 5、已知:int a[10]; 则对a数组元素的正确引用是( D )。 A、a[10] B、a[3.5] C、a(5) D、a[0] 6、若有以下数组说明,则数值最大的和最小的元素下标分别是( B )。 int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; A.1,12 B.0,11 C.1,11 D.0,12 7、若有以下数组说明,则i=4;a[a[i]]元素数值是( A )。 int a[6]={ 8,11,3,6,2,12}; A.3 B.2 C.6 D.11 8、设有定义int a[5],i;用for循环结构分别写出数组的输入和输出程序段。 for(i=0;i<5;i++) scanf(“%d”,&a[i]); for(i=0;i<5;i++) printf(“%d”,&a[i]);

C语言数组练习题

C语言程序设计实验教学(6) 【实验目的】数组的应用是很重要的一章。通过实验掌握一维数组的主要应用,并理解数组的存储。对二维数组的处理要比较熟悉。 【实验要求】一维数组的题目要求全面掌握,应用循环结构完成一维数组的输入、处理和输出。二维数组能够完成简单的数据处理和应用。 【实验课时】8.0 【实验内容】 一维数组: 1、定义一个可以存放10个元素的int数组a,输入10个数,并逆序输出。 #include #include void main( ) {int a[10], i; clrscr(); printf("Please input array a :"); for(i=0;i<10;i++) scanf("%d", &a[i]);/* 由键盘逐次输入值赋予数组各元素*/ for(i=9;i>=0;i--) /* 变量i递减控制着数组元素倒序输出*/ printf("%5d", a[i]); } 2、用数组来保存Fibonacci数列前20项数值,以每5个数据为一行进行 输出。 #include #include void main( ) {int i; long f[20]; clrscr(); f[0]=1;f[1]=1; for(i=2;i<20;i++)

f[i]=f[i-1]+f[i-2]; for(i=0;i<20;i++) {if(i%5==0) printf("\n"); printf("%10ld",f[i]); } } 3、统计具有10个元素的自然数数组num中的奇数个数。 #include #include void main( ) {int i,num[10],count=0; clrscr(); for(i=0;i<10;i++) {printf("enter NO %d : ",i+1);/*给予输入提示*/ scanf("%d",&num[i]); if(num[i]%2!=0) count++;} printf("Count is:%d\n",count ); } 4、计算整数数组a中的最大值及其所在的下标。 #include #include void main( ) {int i,max,p,a[10]; clrscr(); printf("please enter 10 data:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); max=a[0];p=0; for(i=1;i<10;i++)

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