1、初级程序员下午试题-42 及答案解析(总分:120.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.说明已知递推数列:a(1)=1,a (2s)= a (s),a(2s+1)=a (s)+a (s+1)(s 为正整数)。试求该数列的第 n 项与前 n 项中哪些项最大?最大值为多少?算法分析:该数列序号分为奇数或偶数两种情况做不同递推,所得数列呈大小有规律的摆动。设置 a 数组,赋初值 a (1)=1。根据递推式,在循环中分项序号 s (2n)为奇数或偶数作不同递推:每得一项 a (s),即与最大值 max 作比较,如果 a (s)max,则 max=a(i)。最后,在
2、所有项中搜索最大项(因最大项可能多于一项),并打印最大值 max。问题将流程图中的(1)(5)处补充完整。注:流程图中(1)循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。流程图(分数:15.00)填空项 1:_二、试题二(总题数:1,分数:15.00)2.函数 2.1 说明将一个正整数分解质因数。例如:输入 90,打印出 90=2335。函数 2.1fun 1 ( int n )int i;for ( i=2;i=n; i+)while ( (1) )if (n %i=0 )printf ( “%d*“,i );(2) elsebreak;printf ( “%d“,n
3、) ;函数 2.2 说明下面程序的功能是:海滩上有一堆桃子,5 只猴子来分。第 1 只猴子把这堆桃子平均分为 5 份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第 2 只猴子把剩下的桃子又平均分成 5 份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第 3、第 4、第 5 只猴子都是这样做的,问海滩上原来最少有多少个桃子?函数 2.2main ( )int i, m, j, k, count;for ( i=4;i10000;i+=4 )count=0;(3) ;for ( k=0;k5;k+ )(4) ;i=j;if ( j%4=0 )(5) ;elsebreak;i=m;if
4、 ( count=4 )printf ( “%d/n“, count) ;break;(分数:15.00)填空项 1:_三、试题三(总题数:1,分数:15.00)3.说明完成以下中序线索化二叉树的算法。函数Typedef int datatype;Typedef struct node Int ltag, rtag;Datatype data;*lchild,* rchild;bithptr;bithptr pre;void inthread ( p );ifinthread ( p-lchild );if ( p-lchild=unll ) (1) ;if ( P-RCHILD=NULL)
5、p-rtag=1;if (2) if (3) pre-rchild=p;if ( p-1tag=1 ) (4) ;INTHREAD ( P-RCHILD );(5) ;(分数:15.00)填空项 1:_四、试题四(总题数:1,分数:15.00)4.说明如图所示的一圆圈上分布 6 个环,请在每个环中填一个数字,使得从任一环开始按顺时针所得的六位数与按逆时针所得的 6 位数都为素数。(分数:15.00)填空项 1:_五、试题五(总题数:1,分数:15.00)5.说明本程序求 3100 之间的所有素数(质数)并统计个数;同时将这些素数从小到大依次写入顺序文件 E: /dataout.txt;素数的个
6、数显示在窗体 Form1 上。Visual Basic 代码Private Sub Command1_ Click ( )Dim count as integer, flag as BooleanDim t1 as Integer, t2 as Integer(1) Count=0For t1=3 to 100Flag=TreeFor t2=2 to Int( Sqr ( t1 ) )If (2) Then flag=FalseNext t2(3) count= (4) write #1, t1End ifNext t1(5) Close #1End Sub(分数:15.00)填空项 1:_六
7、、试题六(总题数:1,分数:15.00)6.说明用输入/输出写一个程序,让用户输入一些姓名和电话号码。每一个姓名和号码将加在文件里。用户通过点“Done”按钮来告诉系统整个列表已输入完毕。 如果用户输入完整的列表,程序将创建一个输出文件并显示或打印出来。格式如:555,1212,Tom 123-456-7890,Peggy L.234-5678,Marc 234-5678,Ron 876-4321,Bethbyte name=new byte lineLength;int i;tryfos= new FileOutputStream (“phone. numbers“);catch (File
8、NotFoundException e)while (true)(1) (“Enter a name (enter done to quit)“);(2) (name);if (“done“. equalsIgnoteCase (new String (name,0,0,4)break;System.err.println (“Enter the phone number“);readLine (phone);for (int i=0;phone i!=0;i+)(3) ;fos.write (,);for (int i=0 (4) ;i+)fos. write (name i);fos. w
9、rite (/n);fos. close();private static void readLine (byte line ) throws IOExceptionint i=0,b=0;while (i (5) )linei= ( byte ) 0;(分数:15.00)填空项 1:_七、试题七(总题数:1,分数:15.00)7.说明以下是一账号和密码输入的检验程序。对输入的账号和密码规定如下所述。(1)账号为不超过 6 位的数字,密码为 4 位字符,在本题中,密码假定为“Pass”。(2)密码输入时在屏幕上不显示输入的字符,而以“*”代替。(3)当输入不正确,如账号为非数字字符或密码不正确
10、时,显示有关信息。(4)当输入正确时,关闭密码窗口,显示记事本窗口。按要求完成有关控件的其他属性的设置,编写确定按钮的单击事件过程。相关界面如下:(分数:15.00)填空项 1:_八、试题八(总题数:1,分数:15.00)8.说明设计一程序,输入 10 个整数到一个数组中,调整这 10 个数在数组中的位置,使得其中最小的一个数成为数组的首元素,最大的一个数成为数组的末元素。C+程序#include iostream.h#define SIZE 10void main ( )int data SIZE;int m;cout“请输入“SIZE“个整数:“;for ( m=0;mSIZE; m+ )
11、 (1) ;int j=0,k=0;for ( int i=1;iSIZE; i+ )if ( (2) ) j=i;else if ( dataidatak ) (3) ;if (j0 ) int d=data0;(4) ;datak=d;if ( kSIZE-1 )int d=data SIZE- 1 ;dataSIZE- 1 =dataj;(5) ;coutend1“ 排序后: “;for ( m=0;mSIZE; m+ ) coutdatam“ “ ;(分数:15.00)填空项 1:_初级程序员下午试题-42 答案解析(总分:120.00,做题时间:90 分钟)一、试题一(总题数:1,分
12、数:15.00)1.说明已知递推数列:a(1)=1,a (2s)= a (s),a(2s+1)=a (s)+a (s+1)(s 为正整数)。试求该数列的第 n 项与前 n 项中哪些项最大?最大值为多少?算法分析:该数列序号分为奇数或偶数两种情况做不同递推,所得数列呈大小有规律的摆动。设置 a 数组,赋初值 a (1)=1。根据递推式,在循环中分项序号 s (2n)为奇数或偶数作不同递推:每得一项 a (s),即与最大值 max 作比较,如果 a (s)max,则 max=a(i)。最后,在所有项中搜索最大项(因最大项可能多于一项),并打印最大值 max。问题将流程图中的(1)(5)处补充完整。
13、注:流程图中(1)循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。流程图(分数:15.00)填空项 1:_ (正确答案:(1)for s=2 to n (2) mod(s,2)=0(3) a(s)=a(s/2) (4) a(s)=a(s+1)/2+a(s-1)/2)(5) max=a(s))解析:二、试题二(总题数:1,分数:15.00)2.函数 2.1 说明将一个正整数分解质因数。例如:输入 90,打印出 90=2335。函数 2.1fun 1 ( int n )int i;for ( i=2;i=n; i+)while ( (1) )if (n %i=0 )printf
14、 ( “%d*“,i );(2) elsebreak;printf ( “%d“,n ) ;函数 2.2 说明下面程序的功能是:海滩上有一堆桃子,5 只猴子来分。第 1 只猴子把这堆桃子平均分为 5 份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第 2 只猴子把剩下的桃子又平均分成 5 份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第 3、第 4、第 5 只猴子都是这样做的,问海滩上原来最少有多少个桃子?函数 2.2main ( )int i, m, j, k, count;for ( i=4;i10000;i+=4 )count=0;(3) ;for ( k=0;k5;k+
15、)(4) ;i=j;if ( j%4=0 )(5) ;elsebreak;i=m;if ( count=4 )printf ( “%d/n“, count) ;break;(分数:15.00)填空项 1:_ (正确答案:(1) n!=i (2) n=n/i(3) m=i (4) j=i/4*5+1(5) count+)解析:三、试题三(总题数:1,分数:15.00)3.说明完成以下中序线索化二叉树的算法。函数Typedef int datatype;Typedef struct node Int ltag, rtag;Datatype data;*lchild,* rchild;bithptr
16、;bithptr pre;void inthread ( p );ifinthread ( p-lchild );if ( p-lchild=unll ) (1) ;if ( P-RCHILD=NULL) p-rtag=1;if (2) if (3) pre-rchild=p;if ( p-1tag=1 ) (4) ;INTHREAD ( P-RCHILD );(5) ;(分数:15.00)填空项 1:_ (正确答案:(1) P-LTAG=0 (2) (PRE)(3) (PRE-RTAG=1) (4) P-LCHILD=PRE (5) PRE=P)解析:四、试题四(总题数:1,分数:15.00
17、)4.说明如图所示的一圆圈上分布 6 个环,请在每个环中填一个数字,使得从任一环开始按顺时针所得的六位数与按逆时针所得的 6 位数都为素数。(分数:15.00)填空项 1:_ (正确答案:(1)m=n (2) u=m %100000(3) m1=t*100000+m1 (4) m1% j=0(5) m=u*10+t)解析:五、试题五(总题数:1,分数:15.00)5.说明本程序求 3100 之间的所有素数(质数)并统计个数;同时将这些素数从小到大依次写入顺序文件 E: /dataout.txt;素数的个数显示在窗体 Form1 上。Visual Basic 代码Private Sub Comm
18、and1_ Click ( )Dim count as integer, flag as BooleanDim t1 as Integer, t2 as Integer(1) Count=0For t1=3 to 100Flag=TreeFor t2=2 to Int( Sqr ( t1 ) )If (2) Then flag=FalseNext t2(3) count= (4) write #1, t1End ifNext t1(5) Close #1End Sub(分数:15.00)填空项 1:_ (正确答案:(1) Open “e:/dataout.txt“ For Output as
19、#1 (2) t1 mod t2=0(3) If t2Int (sqr(t1)Then (4) count +1(5) Form1.Print “素数个数“; count)解析:六、试题六(总题数:1,分数:15.00)6.说明用输入/输出写一个程序,让用户输入一些姓名和电话号码。每一个姓名和号码将加在文件里。用户通过点“Done”按钮来告诉系统整个列表已输入完毕。 如果用户输入完整的列表,程序将创建一个输出文件并显示或打印出来。格式如:555,1212,Tom 123-456-7890,Peggy L.234-5678,Marc 234-5678,Ron 876-4321,Bethbyte
20、name=new byte lineLength;int i;tryfos= new FileOutputStream (“phone. numbers“);catch (FileNotFoundException e)while (true)(1) (“Enter a name (enter done to quit)“);(2) (name);if (“done“. equalsIgnoteCase (new String (name,0,0,4)break;System.err.println (“Enter the phone number“);readLine (phone);for
21、 (int i=0;phone i!=0;i+)(3) ;fos.write (,);for (int i=0 (4) ;i+)fos. write (name i);fos. write (/n);fos. close();private static void readLine (byte line ) throws IOExceptionint i=0,b=0;while (i (5) )linei= ( byte ) 0;(分数:15.00)填空项 1:_ (正确答案:(1)System. err. println (2) readLine(3) fos. write(phonei)
22、(4) namei!=0(5) lineLength-1)解析:七、试题七(总题数:1,分数:15.00)7.说明以下是一账号和密码输入的检验程序。对输入的账号和密码规定如下所述。(1)账号为不超过 6 位的数字,密码为 4 位字符,在本题中,密码假定为“Pass”。(2)密码输入时在屏幕上不显示输入的字符,而以“*”代替。(3)当输入不正确,如账号为非数字字符或密码不正确时,显示有关信息。(4)当输入正确时,关闭密码窗口,显示记事本窗口。按要求完成有关控件的其他属性的设置,编写确定按钮的单击事件过程。相关界面如下:(分数:15.00)填空项 1:_ (正确答案:(1) End If (2)
23、en (txt No. Text)(3) Asc(s) Asc(“0“) (4) Asc(s) Asc(“9“)(5) txtNo. Text= “ /)解析:八、试题八(总题数:1,分数:15.00)8.说明设计一程序,输入 10 个整数到一个数组中,调整这 10 个数在数组中的位置,使得其中最小的一个数成为数组的首元素,最大的一个数成为数组的末元素。C+程序#include iostream.h#define SIZE 10void main ( )int data SIZE;int m;cout“请输入“SIZE“个整数:“;for ( m=0;mSIZE; m+ ) (1) ;int
24、j=0,k=0;for ( int i=1;iSIZE; i+ )if ( (2) ) j=i;else if ( dataidatak ) (3) ;if (j0 ) int d=data0;(4) ;datak=d;if ( kSIZE-1 )int d=data SIZE- 1 ;dataSIZE- 1 =dataj;(5) ;coutend1“ 排序后: “;for ( m=0;mSIZE; m+ ) coutdatam“ “ ;(分数:15.00)填空项 1:_ (正确答案:(1)ndata m (2) dataidataj(3) k=i (4) data0=datak(5) dataj=d)解析: