|
程序设计 共10分) 1.若x,y为实型变量,则要检查x等于y在pascal语言中可写成( ) A.x=y B.|x-y|<1E-6 C.abs(x)=abs(y) D.abs(x-y)<1E-6 2.下列符号在pascal语言中是标准类型标识符的是( ) A.begin B.text C.input D.odd 3.公式(1+y)4在pascal语言中可写成( ) A.sqr(1+y)*(1+y)(1+y) B.(1+y)(1+y)(1+y) C.(1+y)(1+y)(1+y)(1+y) D.exp(4*ln(1+y)) 4.设有如下程序片断,执行程序输出结果是( ) var a,b,c,d:integer; begin read(a,b);readln(c);readln(d); writeln(a:3,b:3,c:3,d:3) end. 执行程序时输入数据: 55 66 77 88 99 10 A.55 66 77 10 B.55 77 88 99 C.55 66 77 99 D.66 88 99 10 5.for循环控制变量的类型是( ) A.有序类型 B.简单类型 C.标准类型 D.有序类型和指针类型 6.执行下列程序段输出是( ) sum:=0; for counter:=7 downto 4 do case counter of 1,7:sum:=sum+1; 2,3,6: 4,5:sum:=sum+2 end; writeln(sum); A.5 B.1 C.0 D.4 7.过程与函数中的变量参数所对应的实在参数必须是( ) A.常量 B.变量 C.表达式 D.常数与表达式 8.在记录类型中,定义开域语句的目的( ) A.简化域变量的书写 B.简化域变量的操作 C.节省存储空间 D.提高运行速度 9.对文件进行读写操作时,勿须调用标准过程reset和rewrite的文件是( ) A.正文文件 B.顺序文件 C.正文文件和顺序文件 D.标准文件input和output 10.在pascal语言中,指针变量允许进行赋值、相等和不相等运算,但要求类型必须( ) A.相容 B.赋值相容 C.相同 D.一致 二、填空题(每空1分,共15分) 1.程序设计语言是指用来书写_______________的语言,是人与计算机进行信息通讯的工具。 2.布尔类型的值有两个:true和false。它们是标准常量,规定其次序关系为_______________。 3.pascal程序说明部分由标号说明,常量说明,_______________,变量说明及过程和函数说明五个部分组成。 4.pascal语言中,标识符有两类。一类是由pascal语言文本规定的标识符,称为_______________;另一类是由用户定义 的标识符。 5.执行语句writeln(succ(pred(358 div 6)))后,输出结果是_______________。 6.将代数式2根号[y2+4(x2/3)]写成pascal语言表达式_______________。 7.执行语句if(2*2=5)<(2*2=4) then writeln('true')else writeln('false') 后,输出结果是______________。 8.画出直到语句的语法图_______________ 9.执行如下程序段: for ch:='a' to 'd' do begin for i:=4 downto 1 do write(ch:2); writeln end; 后,输 出结果是_______________ _______________ _______________ _______________ 10.在程序的说明部分加以说明的且适用于整个程序的量,称为_______________。 11.执行如下程序段: var a,b:integer; procedure q(x,y:integer) begin x:=a+b;y:=a-b end; begin{main program} a:=1;b:=2;q(a,b);write(a:3,b:3) end. 后,输出结果是_______________。 12.设ch为字符变量,将以条件(ch='0')or(ch='2')or(ch='4')or(ch='8')用集合表示_______________。 13.设有以下说明: var a:array[-1..1,-1..1]of integer;则数组a的个数为_______________。 14.顺序文件是数据文件,仅有_______________。 15. 标准过程dispose(p)的作用是用来消去由_______________。 三、改错题(指出所给程序中的错误,在错误位置处打上横线标记,并注明错误原因。每小题4分,共20分) 1.1+1/(1·2)+1/(2·3)+…+1/[n(n+1)]…的和,直到最后一项小于0.001为止。 程序:program exam1(input,output); var b:integer; a,c:real; begin a:=1 repeat b:=b+1 c:=1/(b*(b+1)); a:=a+c until(a<=e-3) writeln('a=',a:8:2) end. 2.程序功能:读入一字母,如果它在字母表的前半部,则输出其后继字母,如果在字母表的后半部,则输出其 前趋的字母。 程序:program exam2(input,output); var letter:char; begin readln(letter); case letter<=m of true:writeln(succ(letter)); false:writeln(pred(letter)) end. 3.程序功能:求y=xn。 程序:program exam3(input,output); var n:integer; x:real; function power(x1:real,n1:integer):real; var i:integer; z:real; begin z:=1; if n1>1 then for i:=1 to n1 do z:=z*x1; if n1<0 then for i:=1 to n1 do z:=z div x1; power:=z end; begin read(x,n); power(x,n) end. 4.程序功能:求矩阵A的转置矩阵AT。(即A=(aij),则有AT=(aji))过程说明:设有类型定义: procedure trans(a,at:array[1..n,1..n]of real); var i,j:integer; begin for i:=1to n do for j:=1 to n do at[i][j]:=a[j][i] end; 5.程序功能:设有如下类型color的集合a,此过程是求出a中的元素的个数。 过程说明: type primary=(red,yellow,blue); color=set of primary; procedure elem(a:color;var count:integer); var x:primary; begin x:='red'; count:=0; while a<>[]do begin while not([x] in a)do x:=succ(x); count:=count+1; a:=a-[x] end end; 四、阅读程序(阅读给出的程序,将其运行结果写在横线上。第1、2小题各4分,第3、4小题各5分,第5小题7分, 共25分) 1. program exam1(input,output); var i:integer; begin i:=1 while i*(i+2)<399 do i:=i+2; if i*(i+2)=399 then writeln(i:3,i+2:3) else writeln('No find') end. 执行该程序,其输出为______________。 2. program exam2(output); var a,b:integer; procedure p(x:integer; var y:integer); begin x:=a+b;y:=a-b;writeln(x:3,y:3) end; begin a:=1;b:=2;p(a,b); writeln(a:3,b:3) end. 执行该程序,其输出为_______________。 _______________。 3.program exam3(output); const n=10; var c:array [1..n] of integer; i,k:integer; begin c[1]:=1; c[2]:=1 for i:=3 to 10 do c[i]:=c[i-2]+c[i-1]; k:=c[3];c[3]:=c[9];c[9]:=k; for i:=1 to 10 do write(c[i]:4); writeln end. 执行程序,其输出为__________________________________________。 4.program exam4(input,output); const n=5; var i,j:integer; a:array[0..n,0..n]of integer; begin for i:=0 to n do for j:=0 to n do a[i,j]:=0; a[0,1]:=1; for i:=1 to n do for j:=1 to i do a[i,j]:=a[i-1,j]+a[i-1,j-1]; for i:=1 to n do begin write('':10-2*i); for j:=1 to i do write(a[i,j]:4); writeln end end. 执行该程序,其输出为:___________________________。 ___________________________。 ___________________________。 ___________________________。 ___________________________。 5.program exam5(input,output); type pointer=^node; node=record data:integer; next:pointer end; var first ,p,q:pointer; i,m,n,x:integer; begin first:=nil; read(x);new(q);first:=q; m:=0;n:=0;i:=1; while x>=0 do begin new(p); p^.data:=x; q^.next:=p; q:=p; if odd(i)then m:=m+x else n:=n+x; i:=i+1; read(x) end; writeln('number1=',m/(i-i div 2):8:2); writeln('number2=',n/4:8:2) end. 执行该程序时如输入下列数据7 17 24 11 8 3 0 4 1 -4, 则其输出为:_________________________ _________________________ 五、编程题(阅读给出的程序,在横线上填入适当的词句、表达式或其它万分,以完善程序。第1、2小题各4分,第3小题10分,第4、5 小题各6分,共30分) 1.编制程序,求级数:S=1-1/(1o2)+1/(2o3)-1/(3o4)+……+(-1)/[no(n+1)]+……的和。当|(-1)n/[no(n+1)]|<0.005时停止 计算,打印S的值 program calsum(output); var k, n:integer; s,term:real; begin k:=-1;(1)_____________;n:=1; repeat term:=1.0*k/(n*(n+1));s:=s+term; (2)____________ (3)____________ until(4)_____________ write('s=',s:8:2) end. 2.设p(x)是十进制整数x的所有数码的乘积。试求p(x)=x2-10x-22成立的一切正整数。(提示只有两位数) program ex68(output); var i:integer; function p(x:integer):integer; begin p:=(x-10)*x-22 end; function q(x:integer):integer; var a:integer; begin (1)________________ while x>0 do begin a:a*(n mod 10); (2)_______________ end; (3)_______________ end; begin for i:=1 to 99 do if(4)_______________then writeln(i:3) end. 1 2 3 4 5 1 1 2 3 4 3.设计一个程序,形成矩阵 1 1 1 2 3 并输出。 1 1 1 1 2 1 1 1 1 1 program tran(input, output); var i,j,n:integer; a:(1)______________________________________________ begin for i:=1 to 5 do begin (2)_______________ for j:=1 to 5 do if(3)_______________then a[i,j]:=1 else begin (4)______________ a[i,j]:=n end end; for i:=1 to 5 do begin for j:=1 to 5 do write(a[i,j]:3); (5)_______________ end end. 4.编制程序生成一个文本文件,它由一个已知文件的所有奇数行组成。 program oddnum(oldfile,newfile,output); var oldfile,newfile:(1)_______________ c:char; begin assign(oldfile,'1.txt'); assign(newfile,'e.txt'); reset(oldfile);rewrite(newfile); while(2)______________do begin while(3)_________________do begin read(oldfile,c) ; (4)_________________ end; (5)_________________ (6)_________________ end; close(oldfile);close(newfile) end. 5.编制一函数,复制以head为链头的链表,并将新链表之头的值作为一个函数值。设类型定义: type pointer=^t; t=record ele:integer;next:pointer end; 函数说明如下: function copy(head:pointer):pointer; var p,q,tail:pointer; begin if head=nil then copy:=nil else begin new(p); p^.ele:=head^.ele; tail:=p;head:=head^.next; while(1)___________________do begin new(q);q^.ele:=head^.ele; (2)____________________ tail:=q;head:=head^.next end; tail^.next:=nil; (3)___________________ end end; |