输入个学生的某门课程的成绩打印出低于平均分的同学的.ppt

上传人:sccc 文档编号:5382114 上传时间:2023-07-01 格式:PPT 页数:65 大小:785.01KB
返回 下载 相关 举报
输入个学生的某门课程的成绩打印出低于平均分的同学的.ppt_第1页
第1页 / 共65页
输入个学生的某门课程的成绩打印出低于平均分的同学的.ppt_第2页
第2页 / 共65页
输入个学生的某门课程的成绩打印出低于平均分的同学的.ppt_第3页
第3页 / 共65页
输入个学生的某门课程的成绩打印出低于平均分的同学的.ppt_第4页
第4页 / 共65页
输入个学生的某门课程的成绩打印出低于平均分的同学的.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《输入个学生的某门课程的成绩打印出低于平均分的同学的.ppt》由会员分享,可在线阅读,更多相关《输入个学生的某门课程的成绩打印出低于平均分的同学的.ppt(65页珍藏版)》请在三一办公上搜索。

1、,为什么要使用数组,下面我们引进一种新的数据类型数组,应用数组类型解决上述问题,程序就会变得十分简单。应用数组的程序段如下:tot:=0;tot表示总分for i:=1 to 50 do begin循环读入每一个学生的成绩,并累加它到总分 read(ai);tot:=tot+ai;end;ave:=tot/50;计算平均分for i:=1 to 50 doif aiave then writeln(i,ai);如果第i个同学成绩小于平均分,则输出,数组类型定义:type 类型标识符=array下标类型1,下标类型2,of 元素类型;其中下标类型必须是有序的(整型、字符型、布尔型、枚举型、子界型

2、等)逗号隔开的下标类型个数表示数组的维数。一维数组在编程中多用于描述线性关系,如一组数,一组成绩等。二维数组在编程中多用于描述二维关系,如地图,棋盘、迷宫等。,数组由具有固定数目的相同类型的元素按一定的顺序排列而成。,一维数组的定义,格式:type 类型标识符=array下标类型 of 元素类型;var 数组名:类型标识符;如:type data=array1.50 of integer;var a,b:data;注意:数组类型和数组变量是两个不同的概念,不能混淆。就数组而言,程序的执行部分使用的不是数组类型而是数组变量。如上定义,在程序中data不能在执行部分中出现。也可以将数组类型定义和变

3、量定义合并在一起:var 数组名:array下标类型 of 元素类型;如:var a,b:array1.50 of integer;,在说明部分定义了一个数组变量之后,pascal 编译程序就为所定义的数组在内存空间开辟一串地址连续的存储单元。数组中的各个元素就共用一个数组名(即该数组变量名),它们之间是通过下标不同以示区别的。对数组的操作归根到底就是对数组元素的操作。,说明:score数组共有50个元素,在内存中,这50个数组元素共占用50个连续的存储单元,每个存储单元中只能存储一个整数,占用2个字节的存储空间,因此整个数组共占用100个字节的存储空间。第一个元素对应的存储单元的起始地址称为

4、数组首地址。若设这个首地址为loc(score1),则数组中元素i的内存地址loc(scorei)可按下式计算:loc(scorei)=loc(score1)+(i-1)*2 例如:loc(score10)=loc(score1)+18,首地址,score1 score2 score3 score50,数组名代表的并不是一个变量,而是一批变量,因而,不能直接整个数组读入,而是要逐个数组元素读入,通常用循环结构来完成这一功能。for i:=1 to 10 do read(ai);从键盘读入数组元素的值;最常用的方法for i:=1 to 10 do ai:=i;数组元素a1到a10的值分别为1到

5、10;数据赋初值for i:=1 to 10 do ai:=0;数组元素清0;最常用的数据初始化的方法for i:=1 to 10 do ai:=random(100);随机产生10个100以内的数,赋给各数组元素,数组元素的输入,和数组元素的输入相同,数组元素的输出也不能由一个write语句直接完成。同样要逐个数组元素输出。通常也用循环结构来完成这一功能:for i:=1 to 10 do write(ai,);数组元素之间用空格分隔writeln;,数组元素的输出,vara:array 1.10 of integer;i,s:integer;begin for i:=1 to 10 do

6、read(ai);for i:=10 downto 1 do write(ai,);writeln;s:=0;for i:=1 to 10 do s:=s+ai;writeln(s=,s);end.,从键盘输入10个数,将这10个数逆序输出,并求这10个数的和,输出这个和。,1、读入一个含有n个元素的整型数组,请找出其中值最大的一个数组元素,并指出它的下标。,分析:设置二个变量max和k,先将第一个元素的值存入max,并将其下标存入k,然后从第二个元素开始逐个与max比较,如果max的值比当前元素的值小,则把max的值变成当前元素的值,并记录其下标于k中。这样当所有元素都与max比较完后,ma

7、x中的值即是所有元素中的最大值,k中的值便是其下标。,var i,k,n,max:integer;a:array 1.100 of integer;begin readln(n);for i:=1 to n do read(ai);readln;max:=a1;();for i:=()do if()then begin();k:=i;end;writeln(max=a,k,=,max);end.,k:=1,2 to n,maxai,max:=ai,2、将数组a中的各元素按颠倒的次序重放后再输出。(约定:在操作时,只能借助于一个临时存储单元而不得另外开辟数组),分析:假设数组a有n个整型元素,则

8、a1的值最终要存放在an中,反之an的值最终要存放在a1中,通过交换二者的赋值可实现这一目的。类似地,a2应与an-1交换,a3应与an-2交换,,直到每对要交换的元素对的值都交换过为止。程序中使用变量i和j存放当前要交换赋值的两个数组元素的下标,开始时,i=1,j=n,每交换赋值一次,则i增加1,同时j减少1,当ij时,交换结束。,var i,j,n,temp:integer;a:array 1.100 of integer;begin readln(n);for i:=1 to n do read(ai);i:=1;j:=n;while()do begin temp:=ai;ai:=aj;

9、();();()end;for i:=1 to n do write(ai,);end.,ij,aj:=temp,i:=i+1,j:=j-1,3、读入一个十进制自然数,要求将其转换成二进制数后输出。,分析:将十进数转换成二进制数,一般采用除二取余法。如果用一个数组b来存放二进制数,可以依次把所得的余数存入b0、b1、bn,最后按bn、bn-1、b1、b0的顺序输出这些余数,就得到了所求的二进制数。,例如:,余数:,0,输出结果为:11001,0,1,0,1,1,var i,j,n:longint;b:array 0.31 of 0.1;begin readln(n);write(n,=();i

10、:=0;while()do begin();i:=i+1;指定下一个余数的存放位置 n:=n div 2 产生的商将作为新的被除数 end;for j:=()do write(bj);writeln()2)end.,n0,bi:=n mod 2,i-1 downto 0,4、输入一串字符,字符个数不超过100,且以“.”结束,请判断它们是否构成回文。若是回文,则输出Yes,否则输出No。,分析:所谓回文指从左到右和从右到左读一串字符的值是一样的,如12321,ABCBA,AA等。先读入要判断的一串字符(存入数组letter中),并统计这串字符的长度,然后首尾字符比较,若相等则取下一对字符再比较

11、,就可以判断出是否为回文。,varletter:array1.100of char;i,j:0.100;ch:char;begin read(ch);();while ch.do begini:=i+1;();read(ch)end;,();while(ji)and()do begin i:=i-1;j:=j+1;end;if()then writeln(Yes)else writeln(No);end.,i:=0,letteri:=ch,j:=1,(letterj=letteri),j=i,5、输入一个以.结束的字符串,统计并输出其中各小写字母出现的次数。,分析:引入一个下标类型为字符子界的

12、数组num,用于存放字符串中各小写字母出现的次数。例如用numa记录字母a出现的次数。开始时应将num的每个元素置成0,当读入一个ch后,若ch是小写字母,则让numch加1。,var num:arraya.z of integer;ch:char;begin for ch:=a to z do();read(ch);while ch.do begin if()then numch:=numch+1;();end;for ch:=()do if numch 0 then writeln(ch,numch);end.,numch:=0,(ch=a)and(ch=z),a to z,read(ch

13、),6、某宾馆有一百个房间,从 1100编了号。第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是2的倍数的房间作”相反处理”,第三个服务员把所有编号是3的倍数的房间再作”相反处理”,以后每个服务员都是如此。当第100个服务员来过后,问有哪几扇门是打开的。(所谓的“相反处理”指:原来开着的门关上,原来关着的门打开。),分析:可设置一个表示门是开的还是关的标志数组,另外由于有固定的循环次数,可用for循环。,const n=100;var a:array1.n of();i,j:integer;begin for i:=1 to n do ai:=true;for i:=2 to n

14、do for j:=()do if()then aj:=not(aj);for i:=1 to n do if()then write(i:5);end.,boolean,i to n,j mod i=0,ai=true,7、用筛法求100以内的素数。如:20以内的素数为2、3、5、7、11、13、17、19。,分析:素数是除了1和它本身以外没有其它约数的数。用筛法求素数的方法是:用质数筛去合数。从第一个素数2开始,把它的倍数去掉(置为0)。这样2以后的第一个非0数就一定也是素数,把它的倍数也删了,重复这个删数过程,直到在所找到的素数之后再也找不到一个非0数为止。最后把所有非0数输出。,var

15、 a:array 1.100 of integer;i,j,k:integer;begin for i:=1 to 100 do ai:=i;a1:=0;i:=2;1不是素数 while i=100 do begin k:=i;while k=100 do begin k:=k+i;();end;();while ai=0 do();查找接下来的第一个非0数 end;for i:=1 to 100 do if()then write(ai,);end.,ak:=0,i:=i+1,i:=i+1,ai0,8、有一个有N个不同整数的数列:例如N=4时,有4个不同整数的数列为17,4,16,5。数列中

16、的第1个数17,比它后面的三个数都大,则称数17的逆数为3;数列中的第2个数4,比它后面的数都小,则称数4的逆数为0;同时记数列中全部逆数的和称为数列的逆数。如数列17,4,16,5的逆数为:3+0+1+0=4 程序要求:当给出N个不同整数的数列后,求出此数列的逆数。,分析:为求得上面问题的解,设置数组a:array1.n of integer和逆数计数器s,然后用一个二重循环求出数列的逆数。,const n=10;var i,j,s:integer;a:array1.nof integer;begin s:=0;for i:=1 to n do read(ai);for i:=1 to()d

17、o for j:=()do if aiaj then();writeln(s=,s)end.,n-1,i+1 to n,s:=s+1,9、输入n个整数a1、a2、ak、ak+1、an,对其进行平移处理后,按ak+1、ak+2、an、a1、a2、ak的顺序输出,其中k是小于n的常数。,解题思路:将n个整数输入到整型数组a中,重复k次下列步骤,完成平移操作;将a1中的值保存到临时单元t中;将a2-an中的值顺序左移一个位置;将临时单元t中的值存到an中.步骤是个循环过程,操作时要先把a2中的值移到a1中,然后把a3中的值移到a2中,最后把an中的值移到an-1中,不可倒过来,否则会把a1-an中的

18、内容都变成an中的值。,const n=8;k=4;var a:array1.n of integer;i,j,t:integer;begin for i:=1 to n do read(ai);for i:=()do begin t:=a1;for j:=2 to n do();()end;for j:=1 to n do write(aj,);end.,1 to k,aj-1:=aj,an:=t,10、已知一个数组中的元素按非递减有序排列。下列程序的功能是删除数组中多余的值相同的元素,请完善程序。,var i,j,n:integer;a:array1.100of integer;begin

19、 read(n);for i:=1 to n do read(ai);();while i=n-1 do if()then i:=i+1,else begin for j:=()do aj-1:=aj;();end;for i:=1 to n do write(ai:2);end.,i:=1,aiai+1,i+2 to n,n:=n-1,11、约瑟夫问题:设有n个人编号分别为1n,围坐在一个圆桌周围。现从第一个人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,如此重复,直到所有人都出列为止。输入n和m,求出出列的顺序表。例如当n8,m5时,出列的顺序表是:5

20、2 8 7 1 4 6 3。,var a:array1.10 of boolean;i,j,s,n,m:integer;begin readln(n,m);for i:=1 to n do ai:=true;i:=0;j:=0;s:=0;repeat i:=i+1;if in then();if ai then begin();if s=m then begin();write(i:4);();j:=j+1;end;end;until();end.,i:=1,s:=s+1,ai:=false,s:=0,j=n,提示:程序中i表示人的编号,j表示已出列的人数,s表示当前所报的数字,布尔数组ai用

21、来标记第i个人有没有出列。,12、给定一串整数数列,求出所有的递增和递减子序列的数目。如数列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为转折元素。,提示:本题的关键在于转折元素的判定。程序中用数组ai来存放一串整数数列,当(ai-ai-1)*(ai+1-ai)0时,我们可以认为出现了一个转折元素。程序中用dz和dj两个计数器来分别统计递增数列和递减数列的个数。最后输出dz+dj的值。,const n=9;var a:array1.nof integer;i,dz,dj:intege

22、r;begin for i:=1 to n do read(ai);dz:=0;dj:=0;if()then dz:=1 else dj:=1;for i:=2 to n-1 do begin if()then begin if ai+1ai then();end;end;writeln(total=,dz+dj);end.,a2a1,(ai-ai-1)*(ai+1-ai)0,dj:=dj+1,dz:=dz+1,13、精确计算n的阶乘n!(n大于小于50)解题思路:因为49!已超出longint类型的表示范围,所以不能用longint类型来表示n!(也不能用实数类型,因为实数运算有误差)。可以

23、用一个一维数组来表示这个大数,数组中每个元素只存放一个数字。因为50!小于10的100次方,所以数组下标类型用子界1.100。下图所示的是大数3628800在数组中的存储方法。,0,0,8,8,2,6,3,1 2 99 100,const max=100;数组最大下标 n=20;计算20!var a:array1.max of 0.9;存放大数 i,j,k,x:integer;begin k:=max;ak:=1;初值为1 for i:=2 to n do 每次将保存在ak-amax中的大数乘上一个i begin x:=0;来自低位的进位 for j:=max downto k do,begi

24、n x:=x+aj*i;aj:=();x:=();end;while x0 do 处理最后一位进位 begin();ak:=x mod 10;x:=x div 10;end end;for i:=()do write(ai:1)end.,x mod 10,x div 10,k:=k-1,k to max,max,乘7,0,4,0,5,例14、输入十个整数,把这十个数按由小到大的顺序排列。(选择排序)分析:一组整数放在a1,a2,an-1,an中,先将a1与其后的各元素依次比较,凡比它小的,则与之交换,比较结束后,则a1中存放的是最小的数;然后将a2与其后各元素再依次比较,凡比它小的,则与之交换

25、,又可得出a2为次小的数;依次类推,最后一次,将an-1与an比较。于是a1,a2,an为一组从小到大的数。,例如下面对5个数进行排序,这个五个数分别为8、2、9、10、5。按选择排序方法,过程如下:初始数据:829105第一躺排序:829105928105102895102895第二躺排序:108295109285109285第三躺排序:109825109825第四躺排序:109852,var a:array1.10of integer;i,j,t:integer;beginfor i:=1 to 10 do read(ai);for i:=()do 进行9趟排序 for j:=()do 将

26、第i个数与其后所有数比较 if()then begin aj若比ai小,则与之交换 t:=ai;ai:=aj;aj:=t;end;for i:=1 to 10 do write(ai,);end.,1 to 9,i+1 to 10,aiaj,例15、输入十个整数,把这十个数按由小到大的顺序排列。(冒泡排序),思想:从左端开始比较相邻的两个数据元素的大小。小的浮起,大的沉底。第一趟:第1个与第2个比较,大则交换;第2个与第3个比较,大则交换,值最大的数组元素交换到最后一个位置上;第二趟:对前n-1个数组元素进行同样的操作,值次大的数交换到第n-1个位置上;依次类推,则完成排序。,第六趟排序后,第

27、五趟排序后,第四趟排序后,第三趟排序后,第二趟排序后,第一趟排序后,初始关键字,const n=10;var a:array1.n of integer;temp,i,j:integer;begin for i:=1 to n do read(ai);for i:=()do for j:=()do if()then begin temp:=aj;aj:=aj+1;aj+1:=temp;end;for i:=1 to n do write(ai);writeln;end.,1 to n-1,1 to n-i,ajaj+1,二维数组在编程中多数用于描述二维的关系:如地图、棋盘、城市街道、迷宫等等。

28、而二维数组元素有两个下标:第一个下标表示该元素在第几行,第二个下标表示在第几列。二维数组的定义:var a:array1.10,1.5 of integer;中括号中的两个范围表示二维数组共有多少行、多少列(第一个范围表示行数,第二个范围表示列数);如上例,定义了一个二维数组a,共有10行5列。,二维数组,1、输入一个m行m列的矩阵,求它的倒置,即对所有的i,j,将ai,j与aj,i交换。,11 12 13 1421 22 23 2431 32 33 3441 42 43 44,11 21 31 4112 22 32 4213 23 33 4314 24 34 44,const m=4;typ

29、e matrix=array1.m,1.m of integer;var a:matrix;i,j,t:integer;begin for i:=1 to m do for j:=1 to m do read(ai,j);二维数组的输入 for i:=1 to m do for j:=()do begin()end;for i:=1 to m do begin for j:=1 to m do write(ai,j,);writeln;end;二维数组的输出 end.,1 to i-1,t:=ai,j;ai,j:=aj,i;aj,i:=t;,2阅读程序,写出运行结果。var a:array 1

30、.3,1.4 of integer;b:array 1.4,1.3 of integer;x,y:integer;begin for x:=1 to 3 do for y:=1 to 4 do ax,y:=x+y;for x:=4 downto 1 do for y:=1 to 3 do bx,y:=ay,x;writeln(b3,2);end.,2,3,4,5,3,4,5,6,4,5,6,7,5,6,7,4,5,6,3,4,5,2,3,4,3、已知数组A中,每个元素AI,J在存贮时要占3个字节,设I从1变化到8,J从1变化到10,分配内存时是从地址SA开始连续按行存贮分配的。试问A5,8的起

31、始地址为()。ASA+141 BSA+180 CSA+222 DSA+225,在逻辑上我们经常把二维数组看成是一张表格,但在计算机内部,二维数组的所有元素对应的存储单元是连续的,与一维数组的存储方式在本质上是相同的。Pascal编译程序按行下标主顺序存放数组元素,先放第一行上的元素,接着放第二行上的元素,依次把各行的元素放入一串连续的存储单元中。,A,4、已知如下N*(N+1)/2个数据,按行的顺序存入数组A1,A2,中。其中,第一个下标表示行,第二个下标表示列。a11 a21 a22 a31 a32 a33 an1 an2 an3 ann 若aij(ij,j,i=1,2,n)存贮在Ak中,试

32、问k和i,j之间的关系如何表示?,k:=(i-1)*i/2+j,5、求一个nn数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小而在列上最大的数。如下:(n=5)5 6 7 8 94 5 6 7 83 4 5 2 12 3 4 9 01 2 5 4 8则第一行第一列上的数就是马鞍数。,const n=5;var a:array1.n,1.nof integer;h,l:array1.nof integer;min,max,i,j:integer;begin for i:=1 to n do for j:=1 to n do read(ai,j);输入数阵 for i:=1 to n do

33、 begin();for j:=2 to n do if ai,jmax then max:=ai,j;lj:=max;记录每列最大值 end;for i:=1 to n do for j:=1 to n do if(ai,j=hi)and()then writeln(,i,j,):,ai,j);end.,min:=ai,1,max:=a1,j,ai,j=lj,6、阅读程序,写出运行结果。var yh:array1.5,1.5of integer;i,j:integer;begin yh1,1:=1;for i:=2 to 5 do begin yhi,1:=1;yhi,i:=1;for j:

34、=2 to i-1 do yhi,j:=yhi-1,j-1+yhi-1,j;end;for i:=1 to 5 do begin for j:=1 to i do write(yhi,j:3);writeln;end;end.,1,1,1,1,1,2,1,1,3,3,1,1,4,6,4,例N=5时 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9,7、方阵填数:在一个N*N的方阵中,填入1,2,N*N个数,并要求构成如下的格式:,分析:可以用N行N列的二维数组来存放这N*N个数,用整型变量left,right,up,do

35、wn表示方阵的左、右、上、下边界,其初始值分别为1,n,1,n。重复执行下列操作,直到n*n个元素都填满:先从左往右填up行,然后up值加1;先从上往下填right列,然后right值减1;先从右往左填down行,然后down值减1;先从下往上填left列,然后left值加上。,const maxn=20;var a:array1.maxn,1.maxn of integer;n,i,j,s,left,right,up,down:integer;begin readln(n);left:=1;right:=n;up:=1;down:=n;();i:=up;while()do begin for

36、 j:=left to right do begin s:=s+1;ai,j:=s;end;up:=up+1;j:=right;for i:=up to down do begin s:=s+1;ai,j:=s;end;,right:=right-1;i:=down;for j:=right downto left do begin s:=s+1;ai,j:=s;end;down:=down-1;j:=left;for i:=()do begin s:=s+1;ai,j:=s;end;();i:=up;end;for i:=1 to n do begin for j:=1 to n do wr

37、ite(ai,j:4);writeln;end;end.,s:=0,sn*n,down downto up,left:=left+1,8、奇数阶魔阵 魔阵是用自然数1,2,3,n2填n阶方阵的各个元素位置,使方阵的每行的元素之和、每列元素之和及主对角线元素之和均相等。奇数阶魔阵的一个算法是将自然数数列从方阵的中间一行最后一个位置排起,每次总是向右下角排(即Aij的下一个是Ai+1,j+1)。但若遇以下四种情形,则应修正排数法。(1)列排完(即j=n+1时),则转排第一列;(2)行排完(即i=n+1时),则转排第一行;(3)对An,n的下一个总是An,n-1;(4)若Aij已排进一个自然数,则排

38、Ai1,j2。,var a:array1.99,1.99of integer;i,j,k,n:integer;beginfillchar(a,sizeof(a),0);readln(n);i:=n div 2+1;();ai,j:=1;for k:=2 to n*n dobeginif(i=n)and(j=n)then()else begin i:=i mod n+1;j:=j mod n+1;end;,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,j:=n,j:=j-1,i:=i-1,j:=j-2,1.阅读

39、程序,写出运行结果。var a:array1.5of integer;i,j:integer;begin for i:=1 to 5 do begin ai:=ai+i;for j:=1 to i do aj:=aj+j;end;for i:=1 to 5 do write(ai,);end.输出(),6 10 12 12 10,一维数组练习题,1,2,2,3,4,3,4,6,6,4,5,8,9,8,5,6,10,12,12,10,2、阅读程序,写出运行结果。var a:array0.14 of integer;s,max,min,i:integer;begin for i:=0 to 14

40、do read(ai);max:=-maxint;min:=maxint;for i:=0 to 14 do begin s:=ai+a(i+1)mod 15+a(i+2)mod 15;if smax then max:=s;if smin then min:=s;end;writeln(max);writeln(min);end.,输入:5 20 1 18 4 16 6 10 15 2 17 3 14 7 13输出(),3922,15个数形成环状,分别找出3个相邻的数,使其相加之和最大或最小。,26,26,26,39,39,23,23,38,26,32,31,27,34,22,22,34,2

41、4,34,25,38,3、阅读程序,写出运行结果。var i,j,f:integer;a:array1.5of integer;beginfor i:=1 to 5 dobeginf:=i mod 2;if f=0 then ai:=0 else ai:=1;for j:=1 to i doif f=0 then ai:=ai+j else ai:=ai*jend;for i:=1 to 5 do write(ai:5);end.输出(),1 3 6 10 120,1,1,0,1,3,1,1,2,6,0,1,3,6,10,1,1,2,6,24,120,4、阅读程序,写出运行结果。type co

42、mpon=(fruit,cheese,suger,flour,egg,wine);定义枚举类型 col=arraycompon of real;定义下标类型为compon的数组类型const 定义二个类型为col的数组常量 wt:col=(100,400,400,50,250,150);p:col=(0.25,0.30,0.20,0.05,0.20,0.15);var i:compon;枚举变量i,可用作循环变量 cp:real;n:integer;begin readln(n);cp:=0;for i:=fruit to wine do cp:=cp+wti*pi;write(cp*n:8:

43、2);end.,输入:8输出:(),2400.00,5、阅读程序,写出运行结果。var a:array1.10 of integer;i,k:integer;begin a1:=1;a2:=1;k:=1;repeat ak+2:=1;for i:=k downto 2 do ai:=ai+ai-1;k:=k+1;until k=6;for i:=1 to k do write(ai,);writeln;end.,输出(),1 5 10 10 5 1,1,1,1,1,2,3,3,1,4,6,4,1,5,10,10,5,11111,1,6、阅读程序,写出运行结果。const n=8;var a:a

44、rray1.n of integer;i,s,max,b,e,b1:integer;begin for i:=1 to n read(ai);max:=-maxint;s:=0;for i:=1 to n do begin if s=0 then b:=i;s:=s+ai;,if smax then begin b1:=b;max:=s;e:=i;end;if s0 then s:=0;end;writeln(max);writeln(b1,e);end.输入:3 17 78 44 50 53 80 48输出:(),1993 7,找出数组a中最大和的子序列:用max记录最大和,用b记录序列的起

45、始位,b1记录最大和的起始位,e记录最大和的终止位。用s记录从b开始到i为止的序列和,一旦发现s大于max,更新max、b1、e,一旦发现s值小于0,则认为序列不是最大和序列,重新进行b值的设定。,1,0+3,1,3,1,3-17-0,3,0+78,3,78,3,122,122,4,172,172,5,119,199,199,7,151,7、阅读程序,写出运行结果。var a:array1.4 of integer;x,i,j,y,step:integer;begin readln(x);step:=0;while x6174 do begin for i:=1 to 4 do begin a

46、i:=x mod 10;x:=x div 10;end;,for i:=1 to 3 do for j:=i+1 to 4 do if aiaj then begin y:=ai;ai:=aj;aj:=y;end;x:=a1*1000+a2*100+a3*10+a4;y:=a1+a2*10+a3*100+a4*1000;x:=x-y;step:=step+1;end;writeln(step);end.输入:7890输出:(),4,数学黑洞6174:输入一个任意的四位正整数,将数字重新组合成一个最大的数和最小的数相减,重复这个过程,最多七步,必得6174。,7 8 9 09 8 7 09870

47、-789,9 0 8 19 8 1 09810-189,9 6 2 19 6 2 19621-1269,8 3 5 28 5 3 28532-2358,6174,8、阅读程序,写出运行结果。var a:array1.15 of integer;i:integer;begin a1:=1;a2:=1;for i:=3 to 15 do ai:=ai-1+ai-2;write(a15,);end.输出:(),610,斐波拉契数列 ai:=ai-1+ai-2,2,3,5,8,13,21,34,55,89,144,233,377,610,9、阅读程序,写出运行结果。const m=100;var a:

48、array0.m of integer;x,n:integer;begin read(n);a0:=0;a1:=1;for x:=2 to n do if(x mod 2)=0 then ax:=ax div 2 else ax:=a(x-1)div 2+a(x-1)div 2+1;writeln(an);end.,输入:10输出(),3,f(0)=0;f(1)=0;f(2n)=f(n);f(2n+1)=f(n)+f(n+1).f(0)=0;f(1)=0;f(2)=f(1)=1;f(3)=f(1)+f(2)=1+1=2;f(4)=f(2)=1;f(5)=f(2)+f(3)=1+2=3;f(6)=f(3)=2;f(7)=f(3)+f(4)=2+1=3;f(8)=f(4)=1;f(9)=f(3)+f(4)=2+1=3;f(10)=f(5)=3,10、某数组中每个元素占2个存储单元,首地址为50,则第18个元素的存储地址为()A、82B、84C、85D、86,B,1、设数组A10.100,20.100 以行优先的方式顺序存储,每个元素占4个字节,且已知A10,20的地址为1000,则A50,90的地址是()。,14240,1000+(50-10)*(100-20+1)+(90-20)*4,二维数组练习题,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号