枚举子界集合记录练习(答案)

更新时间:2023-10-15 09:07:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1. 一周七天用sun,mon,tue,wed,thu,fri,sat表示, 要求利用枚举类型编程:当输入星期几的数字,能输出它的后一天是星期几(也用英文表示)。 例:输入 5

输出 sat

源程序如下: program ex6_3; var month:1..12; date:1..31;

year:1900..1999; begin

write('Enter date(mm-dd-yy):'); readln(month,date,year); write(date); case month of

1:write('Jan':5); 2:write('Feb':5); 3:write('Mar':5); 4:write('Apr':5); 5:write('May':5); 6:write('Jun':5); 7:write('Jul':5); 8:write('Aug':5); 9:write('Sep':5); 10:write('Oct':5); 11:write('Nov':5); 12:write('Dec':5); end;

writeln(year:7); end.

2. 利用子界类型作为情况语句标号,编一个对数字,的程序。(数字:digits

大写字母:UPPER-CASELETTERS 小写字母:lower-caseletters 特殊字符:special charactors)

例 :输入:1

输出:digits 输入: A

输出:UPPER-CASELETTERS

大小写字母和特殊字符进行判别 源程序如下: program cas; var c:char; begin

readln(c); case c of

'0'..'9':writeln('digits');

'A'..'Z':writeln('UPPER-CASELETTERS'); 'a'..'z':writeln('lower-caseletters'); esle writeln('special charactors'); end; end.

3.(此题不用编写程序,手动算) 设有如下说明: type weekday=(sun,mon,tue,wed,thu,fri,sat); week=set of weekday; subnum=set of 1..50; 写出下列表达式的值:

⑴[sun,sat]+[sun,tue,fri] ⑵[sun,fri]*[mon,tue] ⑶[wun,sat]*[sun..sat] ⑷[sun]-[mon,tue] ⑸[mon]-[mon,tue]

⑹[sun..sat]-[mon,sun,sat] ⑺[1,2,3,5]=[1,5,3,2] ⑻[1,2,3,4]<>[1..4] ⑼[1,2,3,5]>=[1..3] ⑽[1..5]<=[1..4] ⑾[1,2,3]<=[1..3] ⑿ 2 in[1..10]

答: 表达式的值分别是: ⑴ [sun,sat,tue,fri] ⑵ [ ]

⑶ [sun,sat] ⑷ [ ] ⑸ [ ]

⑹ [tue..fri] ⑺ TRUE ⑻ FALSE

⑼ TRUE ⑽ FALSE ⑾ TRUE ⑿ TRUE

4. 输入一系列字符,对其中的数字字符、字母字符和其它字符分别计数。输入'?'后结束。

例: 输入:abc123+-?

输出:letter:3 digit:3 Other:2

源程序如下:

program ex10_2;

var id,il,io:integer; ch:char;

letter:set of char; digit:set of '0'..'9'; begin

letter=['a'..'z','A'..'Z']; digit:=['0'..'9']; id:=0;il:=0;io:=0; repeat read(ch);

if ch in letter then il:=il+1

else if ch in digit then id:=id+1 else io:=io+1; until ch='?';

writeln('letter:',il,'digit:',id,'Other:',io); end.

5. 设计一个函数比较两个dates日期类型记录变量的迟早。 设函数名、形参及函数类型定义为: AearlyB(A,B:dates):boolean;

函数的形参为两个dates类型的值参数。当函数值为true 时表示日期A早于日期B,否则日期A迟于日期B或等于日期B。显然不能对A、B两个记录变量直接进行比较,而要依具体的意义逐域处理。(日期形式:月 日 年)

例: 输入:5 15 2002

5 16 2001

输出:Date X not early!

输入:6 7 2010 6 8 2010 输出: Date X early!

源程序如下: program ex6_7; type dates=record

year:1900.1999; month:1..12; day:1..31 end; var x,y:dates;

function AearlyB(A,B:dates):boolean; var earln:boolean; begin

early:=false;

if (A.year

if (A.year=B.year)and(A.month=B.month)and(A.day

write('Input DATE X(mm-dd-yy):')readln(X.month,X.day,X.year); write('Input DATE Y(mm-dd-yy):')readln(Y.month,Y.day,Y.year);

if AearlyB(X,Y) then writeln(’Date X early!') else writeln('Date X not early!'); end.

6. 读入10个日期,再对每个日期输出第二天的日期。输入日期的格式是月、日、年,如9□30□1993,输出的格式为10/1/1993。

分析: 可用一个记录变量today表示日期。 知道一个日期后要更新为第二天的日期,应判断输入的日期是否为当月的最后一天,或当年的最后一天。 源程序如下: program ex6_8; type date=record month:1..12;

day:1..31; year:1900..1999; end;

var today:array[1..10]of date; i:integer; maxdays:28..31;

begin

for i:=1 to 10 do {输入10个日期} with today[i] do

readln(month,day,year); for i:=1 to 10 do

with today[i] do{求第i个日期中月份最后一天maxdays} begin

case month of

1,3,5,7,8,10,12:maxdays:=31; 4,6,9,11 :maxdays:=30;

2 :if(year mod 400=0) or( year mod 4=0) and(year mod 100<>0) then maxdays:=29 else maxdays:=28; end;

if day=maxdays then begin

day:=1; if month=12 then begin

month:=1;year:=year+1; end

else month:=month+1; end

else day:=day+1;

writeln(month,'/',day,'/',year); end; end.

7. 编制用筛法求1-n(n≤200)以内素数的程序。

分析: 由希腊著名数学家埃拉托色尼提出的所谓\筛法\,步骤如下: ①将所有候选数放入筛中;

②找筛中最小数(必为素数)next,放入集合primes中; ③将next的所有倍数从筛中筛去; ④重复②~④直到筛空。

编程时,用集合变量sieve表示筛子,用集合primes存放所有素数。 源程序如下: program ex10_3; const n=200;

var sieve,primes:set of 2..n; next,j:integer; begin

sieve:=[2..n];{将所有候选数放入筛中} primes:=[];{素数集合置空} next:=2; repeat

{找筛sieve中最小一个数}

while not(next in sieve) and(next<=n)do next:=succ(next);

primes:=primes+[next];{将最小数放入素数集合中} {将这个素数的倍数从筛中删去} j:=next; while j<=n do begin

sieve:=sieve-[j]; j:=j+next; end

until sieve=[]; j:=0;

for next:=2 to n do{打印出所有素数} if next in primes then begin

write(next:5); j:=j+1;

if j mod 10=0 then writeln; end; writeln; end.

8.编程序建立某班25人的数学课程成绩表,要求用数组类型和记录类型,其成绩表格式如下:

姓名 性别 平时成绩 期中考试 期终考试 总评成绩 张良 男 90 85 92 ? 王心 男 70 82 71 ? ……

李英 女 82 84 75 ?

其中总评成绩=平时成绩×20%+期中考试×30%+期终考试×%50。 type

data=record

names:string; sex:0..1;

score1,score2,score3,score:real; end; var

student:array[1..30] of data; n,i:integer;

procedure inti; var i:integer; ch:char; begin

readln(n);

for i:=1 to n do begin

read(ch);

while ch<>' ' do begin

student[i].names:=student[i].names+ch;

read(ch); end;

with student[i] do

readln(sex,score1,score2,score3); end; end;

begin inti;

writeln('name sex score1 score2 score3 score'); for i:=1 to n do

with student[i] do begin

score:=score1*0.2+score2*0.3+score3*0.5;

writeln(names:10,sex:6,score1:9:2,score2:9:2,score3:9:2,score:9:2); end; end.

本文来源:https://www.bwwdw.com/article/coif.html

Top