初级程序员下午试题65真题含答案与解析交互Word下载.docx
《初级程序员下午试题65真题含答案与解析交互Word下载.docx》由会员分享,可在线阅读,更多相关《初级程序员下午试题65真题含答案与解析交互Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
(5)空应当是求多项式下一项的值,根据多项式连续两项的关系可知,当前一项为t时,后一项的值为(-1)*t*x*x/(s*(s-1))。
但这样的话,每次循环都需要计算一次x*x,计算效率受到影响,联想到变量x2还没用,这时就可以判断x2就是用来存储x*x的值,使得每次循环者少进行一次乘法运算。
因此
(1)空处应填入“x*x”,(5)空处应填入“(-1)*t*x2/(s*(s-1))”。
试题二
阅读下列函数说明和C代码,将应填入
处的字句写在对应栏内。
【说明2.1】
以下C语言函数用二分插入法实现对整型数组a中n个数的排序功能。
【函数2.1】
voidfun1(inta[])
inti,j,k,r,x,m;
for(i=2;
i<=n;
i++)
(1)
;
k=1;
r=i-1;
while(k<=r)
m=(k+r)/2;
if(x<a[m])r=m-1;
else
(2)
for(j=i-1;
j>=k;
j--)
a[j+l]=a[j];
(3)
【说明2.2】
以下程序可以把从键盘上输入的十进制数(long型)以二~十六进制形式输出。
【程序2.2】
#include<stdio.h>
main()
charb[16]='
0'
'
l'
2'
3,4,'
5'
6'
7'
8'
9'
A'
B'
C'
D'
E'
F'
intc[64],d,i=0,base;
longn;
printf("
enteranumber:
\n"
);
scanf("
%1d"
&
n);
enternewbasc:
%d"
&
base);
do
c[i]=
(4)
i++;
n=n/base;
while(n!
=0);
transmitenewbase:
for(--i;
i>=0;
--i)
d=c[i];
printf("
%c"
(5)
x=a[i]
(2)a[k]=x
(3)k=m+1
(4)n%base
(5)b[d]
[解析]函数3.1的思想是依次将数组中的每一个元素插入到有序段中,使有序段的长度不断地扩大。
对于待插入元素,先用二分查找法找出应该插入的位置。
然后将元素插入。
对数组来说,就是将该位置以后的元素依次后移,然后将待插入元素放到移出来的空位中。
程序3.2用的思想是除base(base在二~十六进制之间)取余法求得相应进制数,然后再转换输出。
试题三
阅读下列说明和C代码,将应填入
本题给出四个函数,它们的功能分别是:
1.intpush(PNODE*top,inte)是进栈函数,形参top是栈顶指针的指针,形参e是入栈元素。
2.intpop(PNODE*top,int*e)是出栈函数,形参top是栈顶指针的指针,形参e作为返回出栈元素使用。
3.intenQueue(PNODE*tail,inte)是入队函数,形参tail是队尾指针的指针,形参e是入队元素。
4.intdeQueue(PNODE*tail,int*e)是出队函数,形参tail是队尾指针的指针,形参e作为返回出队元素使用。
以上四个函数中,返回值为。
表示操作成功,返回值为-1表示操作失败。
栈是用链表实现的;
队是用带有辅助结点(头结点)的单向循环链表实现的。
两种链表的结点类型均为:
typedefstructnode
intvalue;
structnode*next;
NODE,*PNODE;
【函数1】
intpush(PNOOE*top,inte)
PNODEp=(PNODE)malloc(sizeof(NODE));
if(!
p)return-1;
p->value=e;
.
*top=p;
return0;
【函数2】
intpop(PNODE*top,int*e)
PNODEp=*top;
if(p==NULL)return-1;
*e=p->value;
free(p);
【函数3】
intenQueue(PNODE*tail,inte)
PNODEp,t;
t=*tail;
p=(PNODE)malloc(sizeof(NODE));
if(!
p)return-1;
p->value=e;
p->next=t->next;
*tail=p;
return0;
【函数4】
intdeQueue(PNODE*tail,int*e)
PNODEp,q;
if((*tail)->next==*tail)return-1;
p=(*tail)->next;
q=p->next;
*e=q->value;
=q->next;
if(,tail==q)
free(q);
p->next=*top
(2)*top=p->next或*top=(*top)->next
(3)t->next=p或(*tail)->next=p
(4)p->next或(*tail)->next->next
(5)*tail=p或*tail=(*tail)->next
[解析]
(1)插入结点p后,p应当指向插入前头结点,所以填入p->next=*top。
(2)出栈后,头指针应指向它的下一结点,所以填入*top=p->next或*top=(*top)->next。
(3)入队时,需要将结点插入队尾,所以应当填入(*tail)->next=p或t->next=p(t也指向尾结点)。
(4)出队时,需要删除队头结点,通过(*tail)->next可以得到对队头结点的引用。
(4)处是正常删除队头结点的情况,空格处应填入头结点指向下一结点的指针,即p->next或(*tail)->next->next。
(5)处是需要考虑的特殊情况,即队列中最后一个元素出队后,要更新队尾指针,即填入*tail=p或*tail=(*tail)->next。
试题四
下面程序的功能是:
在含有10个元素的数组中查找最大数,及最大数所在位置(即下标值),最大数可能不止一个。
例如:
若输入
2
8
5
7
4
3
8
则应输出
Themax:
Total:
//最大数出现次数
Thepositions:
1
6
9
【函数】
#defineM10
intfun(int*a,int*n,intpos[])
inti,kmax=-32767;
for(i=0;
i<M;
if(
)max=a[i];
)pos[k++]=i;
*n=k;
returnmax;
inta[M],pos[M],i=0j,n;
Enter10umber:
"
)
for(i=0,i<M;
i++)scanf("
j=fun(
Themax:
%d\n"
j);
Total:
%d"
n);
Theposition:
for(i=0;
i<n;
i++)printf("
%4d"
pos[i]);
k=0
(2)a[i]>max
(3)a[i]=max
(4)a+i或&
a[i]
(5)a,&
n,pos
[解析]先分析(4)、(5)空。
(4)空所在语句是从键盘中读入数据并存放在数组a[]之中,循环变量为I。
(4)空处应填写存放地址,循环变量有两种表示方法,一种是“a+i”,另一种是“&
a[i]”。
(5)空处需要填写调用函数fun()的实参,从函数fun()的形参可以看出,第1个参数是要处理的数组a[],第2个参数要返回的最大元素的个数n,第3个参数最大元素的下标数组pos[]。
因此(5)空处应填写“a,&
n,pos”。
再来分析
(1)-(3)空。
(1)、(3)空所在函数是找最大数,并将其下标存放在数组pos[]中,其实现的思路是先遍历一次数组,从数组中找出最大数max,再将遍历一次数组,依次将这些最大数的下标存放在数组pos[]中。
(2)空所在的循环就是找最大数max,因此
(2)空处应填写“a[i]>max”。
(3)空所在的循环是将这些最大数的下标存放在数组pos[]中,因此(3)空处应填写“a[i]=max”。
(1)空应填写什么呢?
从语句“pos[k++)=i”和“*n=k”可知,变量k是用来指出当前要存放在数组pos[]中的位置,但这个变量要进行初始化,因此
(1)空处应填写“k=0”。
试题五
以下是与VisualBasic开发应用有关的5个问题。
对每一个问题,请将解答填入对应栏内。
在VisualBasic中,工程文件、窗体文件和标准模块文件的扩展名是什么?
请从下列选项中选择:
prg、prj、exe、vbp、form、frm、win、fra、std、bas、vbs、vbm
2.设某窗体上有一个命令按钮,其名称为CmdSave,运行时该按钮上显示有“保存(S(下划线))”字样的信息。
为使热键Alt+S与该命令按钮相关联,应该对按钮CmdSave的Caption属性设置什么样的属性值?
3.设某窗口内有一个图像框Imagel,以及两个命令按钮“放大”和“缩小”。
单击“放大”按钮就会使该图像框的长和宽都放大10%;
单击“缩小”按钮就会使该图像框的长和宽都缩小10%(该图像框的左上角不动)。
请分别写出这两个命令按钮的单击事件过程中的程序代码。
4.为使某个单选按钮初始时默认被选中,在开发时应怎样做?
5.若有语句Tmpval=MsgBox(“非法操作!
”,vbOKCancel+vbCritical,“提示”),请简要描述程序运行时弹出的消息框的主要特征。
工程文件的扩展名是vbp,窗体文件的扩展名是frm,
标准模块文件的扩展名是bas。
(2)按钮的Caption属性设置为“保存(&
S)”。
(3)“放大”按钮单击事件过程中的程序代码:
Imagel.Width=Imagel.Width*1.1
Imagel.Height=Imagel.Height*1.1
“缩小”按钮单击事件过程中的程序代码:
Imagel.Width=Imagel.Width*0.9
Imagel.Height=Imagel.Height*0.9
(4)将该单选按钮的Value属性值设置成True
(5)消息框的标题栏显示“提示”;
消息框中有一个出错标记以及两个命令按钮,分别显示“确定”和“取消”;
消息框中显示的信息为“非法操作!
”。
试题六
阅读以下应用说明及VisualBasic部分程序代码,将应填入
本应用程序是一个小写数字转换成大写格式的转换器,其运行窗口如图5所示。
窗口中有两个标签(lblNumber和lblChinese)、两个文本框(txtNnmber和txtChinese)和一个命令按钮(cmdChange)。
当单击按钮cmdChange时,将文本框txtNumber中数字转换成中文大写,并显示在文本框txtChinese中。
例如,在文本框txtNumber输入0076845,单击cmdChange按钮,将在文本框txtChinese中显示“柒万陆仟捌佰肆拾伍”。
程序中调用的函数CChinse(StrdigitAsString)的功能是先删除字符串的所有前导0,再调用函数Change(StrdigitAsString),将数字字符串Strdigit转换成中文大写格式。
为了防止用户在文本框txtNumber输入非数字形式的字符,程序将以空字符代替所输入的非数字有形字符。
【程序】
PrivateFunctionTransfer(StrdigitAsString)AsString
′完成小写向大写的转换,这段代码省略
EndFunction
PrivateFunctionCChinese(StrdigitAsString)AsString
DimintLen,intCounterAsInteger
intLen=Len(Strdigit)
IfintLen>0Then
intcounter=0
Do
'
过滤数字串Strdigit的前导0
intcounter=intcounter+1
LoopUntilMid(Strdigit,
intLen=
Strdigit=
(Strdigit,intLen)
CChinese=Transfer(Strdigit)
EndIf
PrivateSubcmdChange_Click()
txtChinese.Text=CChinese(
)
'
调用Cchinese函数
EndSub
PrivateSubtxtNumber_KeyPress(KeyAsciiAsInteger)
SelectCaseKeyAscii
根据输入字符的ASCII码的值进行判断
CaseKeyAscii<32
保留输入的控制字符
Case48To57
保留输入的数字字符
CaseElse
其他情况以空字符代替
=0
EndSelect
intcounter,1
(2)intLen-intCounter+1或Len(Strdigit)-intCounter+1
(3)Right或Right$
(4)txtNumber.Text
(5)KeyAscii
[解析]
(1)~(3)空所在语句块的功能是删除过滤数字串Strdigit的前导0。
(1)空所在Do……Loop循环是找到第一个非0的位置,循环变量为intcounter,即要判断第intcounter个字符是不是0,因此
(1)空处应填写“intcounter,1”。
从(3)空所在语句可以判断
(2)空所在语句是求出过滤数字串Strdigit的前导0后的数字长度,因此
(2)空处应当填写“intLen-intCounter+1”或“Len(Strdigit)-intCounter+1”。
(3)空所在语句是取出过滤数字串Strdigit的前导。
后的数字,需要填写这一操作的函数,因此(3)空处应当填写“Right”或“Right$”。
(4)空处需要填写调用Cchinese函数的参数,程序要对小写数字进行转换,其内容存放在文本框txtNumber中,因此(4)空处应当填写“txtNumber.Text”。
(5)空所在语句是处理当前输入若不是数字或控制字符时,则将具ASCII码值设置为0。
因此(5)空处应当填写“KeyAscII”。
试题七
阅读以下说明和C++程序,将应填入
设计一个评选优秀教师和学生的程序,其类结构如图6所示。
当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出来。
【程序】
#include<iostream.h>
enumbooleanFalse,True
classbase
protected:
charname[8];
public:
voidgetname()cout<<"
姓名:
;
cin>>name;
voidprintname()cout<<"
<<name<<endU3
virtualbooleanisgood()=0;
classstudent:
intnum;
voidgetnum()
cout<<"
考试成绩:
cin>>num;
booleanisgood()return
classteacher:
publicbase
每年发表论文数:
cin>>num;
voidmain()
base*p[50];
student*pstud;
teacher*ptech;
charch;
intcount=0;
输入教师(t)或学生(s):
cin>>ch;
if(ch=='
s'
pstud=newstudent;
pstud->getname();
pstud->getnum();
p[count++]=pstud;
elseif(ch=='
t'
ptech=newteacher;
ptech->getname()
ptech->getnum();
p[count++]=ptech;
else