初级程序员下午试题-78
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
初级程序员下午试题-78
(总分:120.00,做题时间:90分钟)
一、试题一(总题数:1,分数:15.00)
1.[说明]
设学生某次考试的成绩按学号顺序逐行存放于某文件中,文件以单行句点“.”为结束符。
下面的流程图读取该文件,统计出全部成绩中的最高分max和最低分min。
(分数:15.00)
__________________________________________________________________________________________ 正确答案:((1) max←a (2) min←a (3) a="."
(4) a>max或a≥max或max<a或max≤a
(5) a<min或a≤min或min>a或min≥a)
解析:[解析] 本题用到的三个变量及其作用分别为:a,存放读入的一行数据;max存放最高分;min存放最低分。
算法首先读入文件的第一行数据a,若a为文件结束符“.”,则算法提前结束;否则为max和min 赋初值a,循环读入文件其余部分,直至文件末尾。
循环过程中,当某行数据a大于max时,更新max的值;当某行数据a小于min时,更新min的值。
二、试题二(总题数:1,分数:15.00)
2.[函数2.1说明]
Fibonacci数列中头两个数均为1,从第三个数开始,每个数等于前两个数之和。
下述程序计算Fibonacci 数列中前15个数,并以每行5个数的格式输出。
[函数2.1]
#include <stdio.h>
main()
int i,f,f1=1,f2=1;
printf("%5d%5d",f1,f2);
for(i=3;i<=15;i++)
f= (1) ;
printf("%5d",f);
if( (2) = =0) printf("/n");
f1=12;
(3) ;
[试题一流程图]
[函数2.2说明]
函数fun(char *str1,char *str2)的功能是将字符串str2拼接到str1之后。
[函数2.2]
fun(char *str1,char *str2)
int i,j;
for(i=0;str1[i]!='/0';i++);
for(j=0;str2[j]!='/0';j++) (4) ;
(5) ;
(分数:15.00)
__________________________________________________________________________________________ 正确答案:((1) f1+f2 (2) i%5 (3) f2=f
(4) str1[i++]=str2[j] (5) str1[i]='/0')
解析:[解析] (1)根据Fibonacci数列的性质,f等于前两数f1与f2之和;
(2)每输出5个数以后应当换行,此条件即:i除以5余 0;
(3)计算一个数值前,f1与f2都应更新,其中f2应为刚计算出的f;
(4)此循环的功能是将str2的字符添加到str1末尾;
(5)函数结束前应在str1末尾添加结束符。
三、试题三(总题数:1,分数:15.00)
3.[说明]
链式存储的队列称为链队。
根据队列的FIFO原则,为了操作上的方便,可以使用带头指针front和尾指针rear的单链表来实现链队。
若链队元素的数据类型为datatype,则链队结构描述如下:
typedef struct node
datatypedata;
structnode *next;
QNode; /*链队结点的类型*/
typedef struct
QNnode *front,*rear;
LQueue; /*将头尾指针封装在一起的链队*/
以下这种链队的几个例子:
设q是一个指向链队的指针,即LQueue *q。
下面各函数的功能说明如下:
(1) LQueue *Init_LQueue():创建并返回一个带头尾结点的空链队;
(2) intEmpty_LQueue( LQueue *q):判断链队q是否空;
(3) void In_LQueue(LQueue *q, datatypex):将数据x压入链队q;
(4) int Out_LQueue(LQuere *q, datatype *x):弹出链队q的第一个元素x,若成功则返回返回1否则返回0。
[函数]
LQueae *Init_LQueue()
LQueue *q, *p;
q=malloc(sizeof(LQueue)); /*申请链队指针*/
P=malloc(sized(QNode));/*申请头尾指针结点*/
p->next=NULL;
(1) =p;
return q;
int Empty_LQueue(LQueue *q)
if(q->front (2) q>rear) return 0;
else return 1;
void In_LQueue(LQueue *q, datatype x)
QNoda *p;
p=malloc(sizeof(QNnode));/*申请新接点*/
p->data=x;
p->next=NULL;
(3) =p;
q->rear=p;
int Out_LQueue(LQueue *q, datatype *x)
QNnode *p;
if(Empty_LQueue(q)) return 0; /*队空,操作失败*/
else
p=q->front->next;
*x= (4) ;
(5) =p->next;
free(p);
if (q->front->next= =NULL)q->rear=q->front;
return 1;
(分数:15.00)
__________________________________________________________________________________________ 正确答案:((1) q->front=q->rear (2) = = (3)q->rear->next (4) p->data (5) q->front->next) 解析:[解析] (1)初始化链队q时,需要初始化其头尾指针,空链队的头尾指针相等;
(2)链队头尾指针重合当且仅当链队为空;
(3)向链队插入新元素的操作是在链队末尾进行的,需要将新元素结点接在原链队队尾,再让新的尾指针指向这一新结点;
(4)~(5):链队q的第一个元素存放在其头结点之后的第一个结点(即p=q->front->next)中。
*x= p->data表示将这个元素取出,以参数*x的形式返回:q->front->next=p->next表示将结点p从链队中取出。
四、试题四(总题数:1,分数:15.00)
4.[说明]
函数encode()和decode()分别通过参数传递实现对字符串的变换和复原,返回值均为处理以后的字符串长度。
变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:
(1)若已知字符串的当前字符不是数字字符,则复制该字符于新字符串中;
(2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中;
(3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字值为n,则将其后继字符重复复制n+1次到新字符串中;
(4)以上述一次变换为一组,在不同组之间另插入一个下划线‘_’用于分隔。
例如:encode()函数对字符中26a3t2的变换结果为666_a_tttt_2。
函数decode()用于经函数encode()处理的字符中,即复制不连续相同的单个字符,而将一组连续相同的字符(不超过10个)变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中掠过变换函数为不同组之间添加的一个下划线字符。
注:假定调用变换函数encode()时的原始字符串中不包含下划线字符。
[函数]
int encode(char *instr,char *outstr)
char *ip, *op,c;
int k,n;
ip=instr;
op=outstr;
while ( * ip)
if(*ip>='0'&&*ip<='9'&&*(ip+l))
n=*ip-'0'+1;
c= (1) ;
for (k=0;k<n;k++) *op++=c;
else *op++=*ip;
(2) ;
ip++;
if (op>outstr) (3) ;
*op='/0';
(4) ;
int decode(char *instr,char *outstr)
char *ip,*op,c;
int n;
ip=instr; op=outstr;
while ( *ip)
c=*ip;
n=0;
while( *ip==c&&n<10) (5) ; n++;
if(n>1) *op+ + ='0'+n-1;
* op++=c;
if(*ip=='_') ip++;
*op='/0';
(4) ;
(分数:15.00)
__________________________________________________________________________________________ 正确答案:((1) *++ip (2) *op++=‘_’
(3) op- -或- -op (4) return op - outstr (5) ip++)
解析:[解析] 在encode和decode函数中,参数ip和op分别指向输入字符串和输出字符串。
(1)读到一个非零数字n时,读取其后一个字符放入c,将其循环写入输出字符串n遍;
(2)完成一组变换后,应向输出字符中中添加一个下划线字符;
(3)如果输出字符串不空,应删除其末尾多余的下划线字符;
(4)根据程序说明,此处应返回输出字符串的长度,这里用尾、首位置指针的差表示;
(5)此处while循环的作用是读取连续相同的若干字符,输入字符串的位置指针应后移。
五、试题五(总题数:1,分数:15.00)
5.[说明]
某银行新近开通外汇定期存款业务。
为方便用户查询不同存款方式下的日利率、计算本利,特开发了日利率查询及本利计算程序,其运行窗口如下图所示。
用户只要在界面上选择相应的存款方式(包括外汇币种、存期等),便可单击按钮一查询存款日利率。
若输入一定数量的本金。
程序还会根据所选择的存期计算并输出本利和。
在开发过程中,选择币种和存期的组合框(ComboBox)名分别为Combo1和Combo2,单旋钮(CommandButton)“个人单位”和“金融机构”分别名为Option1和Option2,用于输入本金的文本框
(TextBox)名为Price,“输出日利率”和“计算本利和”按钮(CommandButton)分别名为Command1和Command2。
且已知,第i类币种、第j类存期之下,个人单位与金融机构的存款日利率分别存放于数组元素interestRate(i,j,0)和interestRate(i,j,1)中,其中i,j从0开始计数。
[Visual Basic代码]
Dim interestBate(50,10,2) As Single ’通用声明
Private Sub Form_Load()
…… ’为数组interestRate赋初值
End Sub
’根据所选择的币种、存期等信息确定日利率
Function getInterestRate()
Dim strCurrency, strTime As String, i, j, k, intDays As Integer
strCurrency = Combo1.Text
strTime = Combo2.Text
For i = 0 To Combol. ListCount - 1
If Combol.List(i) = strCurrency Then (1)
Next
For j = 0 To Combo2.ListCount - 1
IfCombo2.List(j) = strTime Then (1)
Next
If (2) =True Then
k=0
Else: k=1
End If
(3) = interestRate(i, j, k)
End Function
’输出日利率
Private Sub Commund1_Click()
MsgBox "日利率为" & getInterestRate()
End Sub
’输出本利和
Private Sub Command2_Click()
Dim strTime As String, intDays As Integer, sngCorpus, sngResult As Single
strTime = Combo2. Text
sngCorpus = CSng(Text1.Text)
(4) ’计算存款天数(以每月30天计)
Case "一个月" :intDays = 30
Case "三个月" :intDays = 90
Case "六个月" :intDays = 120
End Select
’计算并输出本利和
sngResult = sngCorpus + (5)
MsgBox "本利之和为:" & sngResult
End Sub
(分数:15.00)
__________________________________________________________________________________________ 正确答案:((1) Exit For (2) Option1.Value (3) getInterestRate (4) Select Case strTime
(5) sngCorpus * intDays * getInterestRate())
解析:[解析] (1)此处需要查询interestRate中数组元素的下标,即组合框中所选择项的编号。
因此循环遍历组合框的各项,当某项与所选项匹配时,应即刻退出循环;
(2)由于数组元素interestRate(i,j,0)对应于个人单位,即单选钮Option1被选中,其Value属性为真;
(3)函数最后需要返回日利率的值,其形式为:函数名=表达式;
(4)“Select Case表达式……End Case”是VB提供的多分支选择结构,这里需要根据用户选择的存期strTime来确定天数;
(5)此处应填入计算利息的表达式。
六、试题六(总题数:1,分数:15.00)
6.[说明]
当用户启动html浏览器并首次打开下面的html文档时,Java Applet小程序在第一个显示面板上显示字符串"HelloWorld";在第二个显示面板上画一条直线。
[Java代码]
import java.awt. *;
import javax.swing. *;
public class HelloWorldApplet extends JApplet
pubhc void (1)
(2) str="HetloWorld";
JLabel label = new JLabel(str);
this. getContentPane().add(label);
import java.applet.Applet;
import java.awt.Graphics;
public class AppletPaint extends (3)
public void paint( (4) )
g.drawLine(0,0,300,200);
[HTML文档]
<html>
<head>
<title> HTML Test Page </title>
</head>
<body>
<applet code=" (5) " width="300" height="100">
</applet>
<applet code=" AppletPaint.class" width="300" height="100">
</applet>
</body>
</html>
(分数:15.00)
__________________________________________________________________________________________ 正确答案:((1) init() (2) String (3) Applet (4) Graphics g (5) HelloWorldApplet.class)
解析:[解析] (1)applet初始化的时候要调用该方法,它仅被调用一次。
初始化的代码经常放到这里。
(2)程序在标签JLabe1在构造过程中赋予其显示的文本,它的构造函数的输入参数是String类型的,这个在 str的定义中也可以看出。
(3)AppletPaint继承自Applet类。
(4)很明显,这里需要一个Graphics类来画直线。
(5)这是Applet的html标记的使用方法,code属性给出特定的类文件名,并且必须包括扩展名.class。
width和height属性定义了该Applet的窗口大小。
七、试题七(总题数:1,分数:15.00)
7.[说明]
下图是一个简易文本编辑器程序的运行界面:
用户打开磁盘上的某个文件后,可以直接对文本进行编辑,也可以利用界面提供的按钮完成相应操作。
主要操作介绍如下:
(1)打开文件:打开文件对话框,其中仅显示“*.txt”类型的文件。
用户选中某一文件后,其内容将呈现于界面文本框内;
(2)查找:提示用户输入要查找的内容,将首次出现的查找内容以蓝色高亮标记;
(3)替换:若文本框中已选中某段文本,则提示用户输入要替换的内容,在文本框中完成替换。
在开发过程中,文本框名为Text1,“打开文件”、“保存文件”、“查找”、“替换”、“退出”按钮分别命名为Command1至Command5。
[Visual Basic代码]
Dim fileName As String
Dim fso As New (1) , ts As Object
’打开文本文件
Private Sub Command1_Click()
CommonDialog1.Filter = "*.txt"
CommonDialog1.ShowOpen
fileName = (2) ’保存所打开的文件名
Set fso=CreateObjeet("Scripting.FileSystemObject")
Set ts=fso.OpenTextFile(fileName, ForReading)
If Not ts.AtEndOfStream Then
Text1.Text = (3)
End If
ts. Close
End Sub
’保存文本文件
Private Sub Command2_Click()
Set ts = fso.OpenTextFile(fileName, ForWriting)
(4)
ts.Close
End Sub
’查找字符串
Private Sub Command3_Cliek()
Dim search As String, position As Integer
search = InputBox("输入要查找的字符串:")
position = InStr(Text1.Text, search) ’在文本中查找字符串
If position >0 Then ’若找到指定的字符串
Text1.SelStart = position - 1 ’设置选定文本的起始位置
Text1.SelLength = Len(search) ’设置选定文本的长度
Else
MsgBox "没有发现要查找的字符串"
End If
End Sub
’替换选中的字符串
Private Sub Command4_Click()
Dim object As String
If (5) >0 Then ’若已经选中了要替换的文本
object = InputBox("输入要替换的字符串:")
Text1.SelText = object ’替换文本
Else
MsgBox "请先选中要替换的文本!"
End If
End Sub
’退出程序
Private Sub Command5_Click()
End
End Sub
(分数:15.00)
__________________________________________________________________________________________ 正确答案:((1) FileSystemObject (2) CommonDialog1.filename (3) ts.ReadAll (4) ts. Write Text1.Text
(5) Text1.SelLength)
解析:[解析] (1)FSO对象的声明格式是:Dim对象名 As New FileSystemObject;
(2)文件对话框中选中的文件名称(含磁盘路径)包含在filename属性中;
(3)此处要获取文件的全部内容,因此需用ReadAll方法读取整个文件;
(4)此处要将文本框内容Text1.Text更新至文件,应使用Write方法一次性写入;
(5)文本框中是否选定了内容可以根据属性SelLength (选定长度)是否为零来判断。
八、试题八(总题数:1,分数:15.00)
8.[说明]
本程序中预设了若干个用户名和口令。
用户输入正确的用户名后,可以查找对应的口令,一旦输入结束标记“end”,程序结束。
[C++程序]
#include <iostream. h>
#include <string. h>
class User
protected:
char user[10];
char pass[7];
public:
User(char[ ],char[]);
(1) return user;
(2) return pass;
;
User::User(char u[],char p[])
strcpy(user,u);
strcpy(pass,p);
void main()
User ua[]=User("Li","123456"),User("wang","654321"),User("Song","666666")
char name[10];
while(1)
cout<< "输入用户名:";
cin>>name;
if( (3) = =0) break;
for(int i=0;i<3;i+ +)
if(strcmp(name,ua[i].getuser()) = =0)
cout<<"密码:" << ua[i].getpass() <<endl;
(4) ;
if( (5) )cout<<"该用户不存在!" <<endl;
(分数:15.00)
__________________________________________________________________________________________ 正确答案:((1) char *getuser() (2) char *getpass()
(3) strcmp(name, "end") (4) break
(5) i= =3或i>=3或i>2或其他等效形式)
解析:[解析] 由上下文可知,User类中包括数据成员User和pass,分别存储用户名和口令,另有一个构造函数和getuser()、getpass()两个成员函数,分别用于获取用户名和口令。
main()中包含一个User类型的数组ua,当用户输入一个用户名后,在ua中查找,若找得到则输出对应的口令,否则输出相应的提示信息。
(1)~(2)由于user和pass属性都是字符串类型,这里的返回值类型为char *;
(3)此处给出了退出程序的判断条件,即输入的用户名等于“end”;
(4)此处的for循环用于查找用户名,若找到了可即刻退出循环;
(5)当输入的用户名不正确时,for循环一直执行直到i等于3。