基本练习:(釆用文件输入输岀)1.输入一串小写字母(以〃.〃为结束标志),统计出每个字母在该字符串中出现的次数(若某字母不出现,则不要输出),例:输入:aaaabbbccc.输出:a:4b:3c: 3规定:文件名:tongji. pas 输出文件:tongji. in输出文件tongji. out程序:var a:array/ z" ] of integer;n:char;beginassign (input, ' tongji,in' );reset (input);assign(output,' tongji. out' );rewrite(output);read (n);while n〈>'.' dobegininc (a[n]);read(n);end;for n:=,a" to,z‘ doif 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程序:vara:array[L . 16] of integer;b, c, d, e: integer;beginassign (input,' erjinzhi. in');reset(input);assign(output,' erjinzhi. out');rewrite(output);readln(b);if b>=0 then write(b,)else write(b,'= -');b:=abs(b);d:=0;while b>0 dobegininc(d);a[d]:=b mod 2;b:=b div 2;end;for e:=d downto 1 do write(a[ej);writein;readln;close (input);close(output);end.提高练习:(釆用文件输入输岀)火3.输入一个由10个整数组成的序列,其中序列中任意连续三个整数都互不相同,求该序列中所有递增或递减子序列的个数,例如:输入:1 10 85932674输出:6对应的递增或递减子序列为:1 1010 8 55 99 3 22 6 77 4规定:文件名:geshu. pas 输出文件:geshu. in输出文件geshu. out【拓展】fuctionkeytype:Boolean;beginif keytype then ......【检测任意键回车出外)】程序:label 1, 3, 4;varc:array[1..10] of longint;y, b, i:longint;a, al:boolean;beginassign(input,' geshu. if);reset (input); assign(output,' geshu. out');rewrite(output); writ eC Please in put 10 numbers:,);for i:=l to 10 do read(c[i]);y: —0; b:=1; i: —0;3:if c[b]>c[b+l] thenbegina:=true;dec (b);l:inc (b);while b<ll dobeginif b=10 then begin inc(y) ; break; end;if c[b]>c[b+l] thenbeginal:=true;if al=a then goto 1endelsebegininc (y);goto 3;end;end;endelsebegina:二false;dec (b);4:inc (b);wh订e b<ll dobeginif b=10 then begin inc(y) ; break; end;if c[b]〈c[b+l] thenbeginal:=false;if al=a then goto 4;endelsebegininc(y);goto 3;end;end;end;writein('Then answer is y);close (input);close(output);end.*4.输入N个数,将这N个数按从小到大的顺序显示出來;规定:文件名:paixu. pas 输出文件:paixu. in输出文件paixu. outvara:array[1.. 100000000] of integer;b, c, d, i, z:longint;beginassign (input,' paixu.in,):reset(input);assign (output,,paixu. out");rewrite(output);readln(i); //读入输入个数for i:=l to i do read(a[i]); //循环读入,放入数组for c:=1 to i dobeginfor b: = (c+l) to i do beginif a[c]>a[b] thenbegina[c]:二a[c] xor a[b];a[b]:=a[c] xor a[b];a[c]:=a[c] xor a[b];end;end;end;for z:=l to i dowrite(a[z],'');close (input);close(output);end.猴子选大王;有"只猴子围成一圈,每只猴子各一个从1到N中的依次编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到M的猴子出圈,最后剩下來的就是大王。
要求:从键盘输入N、M,编程计算哪一个编号的猴子成为大王样例:输入:7 3输出:4输入:5 2输出:3待解:输入:9 9 9 1 5输出:?规定:文件名:houzi. pas 输出文件:houzi. in输出文件houzi. out var n, m, i, j, k, 1, t: longint;a:array[0.. 100000] of longint;f:array[0.. 100000] of boolean;beginreadln(n, m);for i:=l to n dobegin a[i]:=i; f[i]:=true; end;j:=0; k:=0;wh订e j<>n-l do // j为已经筛除的个数begint:=0;wh订e tOm dobegin //循环报数if f [k] then inc(t) ; //t为现在报数的号数l:=k;if kOn then inc(k) else k:=l;//检测编号是否大于总人数end;f[1]:=false;inc(j);end;for i:=l to n doif f[i] then begin writeln(i); halt; end; end.4.1简单排序1.选择排序选择排序的基本思想是:对待排序的记录序列进行n-l遍的处理,笫1遍处理是将L[l.. n]中最小者与L[l]交换位置,第2遍处理是将L[2..n]中最小者与L[2]交换位置,............ ,第i遍处理是将L[i..n]中最小者与L[i]交换位胃这样,经过i遍处理之后,前i个记录的位置就己经按从小到人的顺序排列好了。
例1:输入序列数据按非减顺序输出.程序如下:progrtim xzpx;const n=7;var a:array[l・・n] of integer;i, j, k, t: integer;beginwrite (? Enter date:');for i:= 1 to n do read(a[i]);wri teln;for i:=1 to n-1 dobegink:=i;for j:=i+l to n doif a[j]<a[k] then k:=j;if kOi thenbegin t:=a[i];a[i]:=a[k];a[k]:=t;end;end;write output data:');for i:= 1 to n do write(a[i]:6):writein;end.2.插入排序插入排序的基木思想:经过i-1遍处理后丄[1.. i-1]己排好序。
第i遍处理仅将L[i]插入L[l.. i-1]的适当位置P,原来P后的元素一一向右移动一个位置,使得Ml. • i]乂是排好序的序列。
例2:输入序列数据按非减顺序输出.程序1:progrtim crpx;const n=7;var a:array[l・・n] of integer;i, j, k, t: integer;beginwrite (? Enter date:');for i:= 1 to n do read(a[i]);wri teln;for i:=2 to n dobegink:=a[i];j:=i-l;while (k<a[j]) and (j>0) dobegin a[j+l]:=a[j];j:=j-l end;a[j+l]:=k;end;write output data:');for i:= 1 to n do write(a[i]:6):writein;end.3.冒泡排序冒泡排序又称交换排序其基本思想是:对待排序的记录的关键字进行两两比较,如发现两个记录是反序的,则进行交换,直到无反序的记录为止。
例:输入序列数据按非减顺序输出。
程序1:program mppx;const n=7;var a:array[1・・n] of integer;i, j, k, t:integer;beginwriteC Enter date:');for i:= 1 to n do read(a[i]);for i:=1 to n T dofor j:=n downto i+1 doif a[j-l]<a[j] thenbegin t:=a[j-l];a[j-l]:=a[j];a[j]:=t end;writeC output data:');for i:= 1 to n do write(a[i]:6);writein;end.程序2:program mppx;const n=7;var a:array[1・・n] of integer;i, j, k, t:integer;bool:boolean;beginwriteC Enter date:');for i:= 1 to n do read(a[i]);i:=1;bool:=true;while (i<n) and bool dobeginbool:=false;for j:=n downto i+1 doif a[j-l]<a[j] thenbegin t:=a[j-l]:=a[j];a[j]:=t;bool:=true end;i:=i+l;end;writeC output data:');for i:= 1 to n do write(a[i]:6);writeln;end.程序3:program mppx;const n=7;var a:array[1・・n] of integer;i,j, k, t:integer;beginwriteC Enter date:');for i:= 1 to n do read(a[ij);writeln;k:=n;while k>0 dobeginj:=k-l;k:=O;for i:=1 to j doif a[i]>a[i+l] thenbegin t:=a[i];a[i]:=a[i+l];a[i+l]:=t;k:=i;end;end;write C output data/ );for i := 1 to n do write(a[i] :6);writcln;end.返回4.2快速排序快速排序的思想是:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1,处理结束.例:输入一组数据小到大排序.程序1:program kspv;const n=7;typearr=array[l<. n] of integer;vara:arr;i:integer;procedure quicksort (var b:arr; s,t:integer); var i, j, x, 11: integer;i :二s;j:二t;x:二b[i];repeatwhile (b[j]>=x) and (j>i) do j:=j~l;if j>i then begin tl:=b[i]; b[i]:=b[j];b[j]:=tl;end; while (b[i]<=x) and (i<j) do i:=i+l;if i<j then begin t1:二b[j];b[j]:二b[i];b[i]:二t1; end until i=j;b[i] :=x;i:=i+l;j:=j-l;if s<j then quicksort (b, s, j);if i<t then quicksort (b, i, t);end;beginwriteC input data:');for i:=1 to n do read(a[i]);writeIn;quicksort (a, 1, n);writeoutput data:');for i: = 1 to n do write(a[i]:6);writein;end.程序2:program kspv;const n=7;typearr=array[L . n] of integer;vara:arr;i:integer;procedure quicksort(var b:arr; s, t:integer);var i, j, x: integer;begini:=s; j:=t;x:=b[i];repeatwhile (b[j]>=x) and (j>i) do j:=j-l;if j>i then begin b[i]:二b[j];i:二i+1;end;wh订e (b[i]<=x) and (i<j) do i:二i+1;if i<j then begin b[j]:=b[i];enduntil i=j;b[i]:=x;i:=i+l;j:=j-l;if s<j then quicksort (b,s,j);if i<t then quicksort (b, i,t);beginwriteinput data:');for i:=1 to n do read(a[ij);writein;quicksort (a, 1, n);writeC output data:');for i:=1 to n do write(a[i]:6);writein;end.返回4. 3希尔排序基本思想:将整个无序序列分割成若干小的子序列分别进行插入排序或冒泡排序。