初级程序员下午试题.docx
《初级程序员下午试题.docx》由会员分享,可在线阅读,更多相关《初级程序员下午试题.docx(15页珍藏版)》请在冰豆网上搜索。
![初级程序员下午试题.docx](https://file1.bdocx.com/fileroot1/2022-11/29/8b9610b4-09c4-4de6-a2f3-8dfce393d938/8b9610b4-09c4-4de6-a2f3-8dfce393d9381.gif)
初级程序员下午试题
初级程序员下午试题-96
(总分:
105.00,做题时间:
90分钟)
、试题一(总题数:
1,分数:
15.00)
阅读以下说明和算法,完善算法并回答问题,将解答写在对应栏内。
[说明]
假设以二维数组G[1..m,1..n]表示一幅图像各像素的颜色,则G[i,j]表示区域中点(i,j]处的颜色,颜色
值为0到k的整数。
下面的算法将指定点(i0,j0)所在的同色邻接区域的颜色置换为给定的颜色值。
约定所有与点(i0,j0)同色的
上、下、左、右可连通的点组成同色邻接区域。
例如,一幅8X9像素的图像如图1-1所示。
设用户指定点(3,5),其颜色值为0,此时其上方(2,5)、下方(4,5)、右方(3,6)邻接点的颜色值都为0,因此这些点属于点(3,5)所在的同色邻接区域,再从上、下、左、右四个方向进行扩展,可得岀该同色邻接区域的其他点(见图1-1中的阴影部分)。
将上述同色区域的颜色
替换为颜色值7所得的新图像如图1-2所示。
(分数:
15.00)
填空项1:
解析:
填空项1:
解析:
填空项1:
解析:
填空项1:
解析:
填空项1:
解析:
二、试题二(总题数:
1,
[算法]
输入:
矩阵G,点的坐标(i0,j0),新颜色值newcolor。
输出:
点(i0,j0)所在同色邻接区域的颜色置换为newcolor之后的矩阵G
算法步骤(为规范算法,规定该算法只在第七步后结束):
第一步:
若点(i0,j0)的颜色值与新颜色值newcolor相同,则
(1);
第二步:
点(i0,j0)的颜色值toldcolor;创建栈S,并将点坐标(i°,j0)入栈;
第三步:
若⑵,则转第七步;
第四步:
栈顶元素出栈t(x,y),并⑶;
第五步:
1)
若点(x,y-1)
在图像中且
G[x,y-1]等于oldcolor,
_则(x,y-1)
入栈S
2)
若点(x,y+1)
在图像中且
G[x,y+1]
等于
oldcolor,
则(x,y+1)
入栈
S
3)
若点(x-1,y)
在图像中且
G[x-1,y]
等于
oldcolor,
则(x-1,y)
入栈
S
4)
若点(x+1,y)
在图像中且
G[x+1,y)
等于
oldcolor,
则(x+1,y)
入栈
S
第六步:
转⑷
第七步:
算法结束。
[问题]
是否可以将算法中的栈换成队列?
回答:
(5)
(正确答案:
转第七步)
(正确答案:
栈为空)
(正确答案:
newcolorTG[x,y])
(正确答案:
转第三步)
(正确答案:
可以)
分数:
15.00)
阅读以下说明和C程序,将应填入(n)处的字句写在答题纸的对应栏内
[说明]
下面的程序按照以下规则输岀给定名词的复数形式:
•a.若名词以“y”结尾,则删除y并添加“ies”;
«b.若名词以“s”、“ch”或“sh”结尾,则添加“es”;
・C.其他所有情况,直接添加“s”。
[C语言程序]
#include
#include
char*plural(char*word)
intn;
char*pstr;
n=strlen(word);/*求给定单词的长度*/
pstr=(char*)malloc(n+3);/*申请给定单词的复数形式存储空间*/
if(!
pstr||n<2)
returnNULL;
strcpy(pstr,word);/*复制给定单词*/
if(
(1))pstr[n-1]='i-';pstr[n]='e';pstr[n+1]='s';
(2);
elseif(pstr[n-1]=='s'||pstr[n-1]=='h'&&((3))
pstr[n]='e';pstr[n+1]='s';pstr[n+2]='\O';
else
pstr[n]='s';pstr[n+1]='\0';
⑷;
main()
inti;char*ps;
charwc[9][10]="chair","dairy","boss","circus","fly","dog","church","clue","dish");
for(i=0;i<9;i++)
ps=(5);
printf("%s:
%s\n",wc[i],ps);/*free(ps);/*释放空间*/
输岀单词及其复数形式*/
system("pause");
(分数:
15.00)
填空项1:
(正确答案:
pstr[n_1]=='y'
)
解析:
填空项1:
(正确答案:
pstr[n+2]='/0'
)
解析:
填空项1:
解析:
(正确答案:
pstr[n-2]
='c'||pstr[n-2]=='s'
)
填空项1:
(正确答案:
returnpstr
)
解析:
填空项1:
(正确答案:
plufal(wc[i])
)
解析:
三、试题三(总题数:
1分数:
15.00)
阅读以下说明和C函数,将应填入(n)处的字句写在对应栏内。
[说明]
若一个矩阵中的非零元素数目很少且分布没有规律,则称之为稀疏矩阵。
对m行n列的稀疏矩阵M进行
转置运算后得到n行m列的矩阵MT,如图3-1所示
为了压缩稀疏矩阵的存储空间,用三元组(即元素所在的行号、列号和元素值、表示稀疏矩阵中的一个非零元素,再用一维数组逐行存储稀疏矩阵中的所有非零元素也称为三元组顺序表)。
例如,图3-1所示的矩阵
M相应的三元组顺序表如表3-1所示。
其转置矩阵MT的三元组顺序表如表3-2所示。
函数TransposeMatrix(MatrixM)的功能是对用三元组顺序表表示的稀疏矩阵M进行转置运算。
对M实施转置运算时,为了将M中的每个非零元素直接存入其转置矩阵MT三元组顺序表的相应位置,需先
计算M中每一列非零元素的数目(即MT中每一行非零元素的数目),并记录在向量num中;然后根据以下关系,计算出矩阵M中每列的第一个非零元素在转置矩阵MT三元组顺序表中的位置:
cpot[0]=0
cpot[j]=cpot[j-1]+num[j-1])/*j为列号*/
类型ElemType,Triple和Matrix定义如下:
typedefintElemType;
typedefstruct/*三元组类型*/
intr,c;/*矩阵元素的行号、列号*/
ElemTypee;/*矩阵元素的值*/
Triple;
typedefstruct/*矩阵的元组三元组顺序表存储结构*/
introws,cols,elements;/*矩阵的行数、列数和非零元素数目*/
Tripledata[MAXSIZE];
Matrix;
[C语言函数]
intTransposeMatrix(MatrixM)
intj,q,t;
int*num,*cpot;
MatrixMT;/*MT是M的转置矩阵*/
num=(int*)malloc(M.cols*sizeof(int));
cpot=(int*)malloc(M.cols*sizeof(int));
if(!
num||cpot)
returnERROR;
MT.rows=
(1);/*设置转置矩阵MT行数、列数和非零元素数目*/
MT.cols=
(2);
MT.elements=M.elements;
if(M.elements>0)
for(q=0;qnum[q]=0;
for(t=0;t/*计算矩阵M中每列第一个非零元素在其转置矩阵三元组顺序表中的位置*/
(3);
for(j=1;jcpot[j]=(4
/*以下代码完成转置矩阵MT三元组顺序表元素的设置*/
for(t=0;tj=(5);/*取矩阵M的一个非零元素的列号存入j*/
/*q为该非零元素在转置矩阵MT三元组顺序表中的位置(下标)*/
q=cpot[j];
MT.data[q].r=M.data[t].c;
MT.data[q].c=M.data[t].r;
MT.data[q].e=M.data[t].e;
++cpot[j];/*计算M中第j列的下一个非零元素的目的位置*/
/*for*/
/*if*/
free(num);free(cpot);
/*此处输岀矩阵元素,代码省略*/
returnOK;
/*TransposeMatrix*/
场中的座位,a[i][j]等于0表示第i排第j列(0wi,j
函数intFind(inta[][N],intR,int*row,int*col)
的R*R个空座位,要求这些座位的排列形成一个正方形。
并算出该正方形左上角的行、列号;若未找到,则返回例如,一个7X7个座位的剧场如下图
•(a)所示,已售出部分座位的剧场如下图
*(b)所示,图中阴影部分表示已售出的座位,从图
WN-1)的票尚未售出。
的功能是:
在部分票已售岀的情况下,找岀剧场中
若找到满足要求的一个座位排列,则函数返回1,
0。
(b)中找出的3X3正方形空座位如图
(分数:
15.00)
填空项1:
(正确答案:
M.cols)
解析:
填空项1:
(正确答案:
M.rows)
解析:
填空项1:
(正确答案:
cpot[0]=0)
解析:
填空项1:
(正确答案:
cpot[j-1]+num[j-1]
解析:
填空项1:
(正确答案:
M.data[t].c)
解析:
四、试题四(总题数:
1,分数:
15.00)
阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。
[说明]
假设一个剧场有N*N个座位,顾客买票时可以提出任意有效的座号请求。
下面用二维数组a[N][N]模拟剧
[C语言函数]
intFind(inta[][N],intR,int*row,int*col)
inti,j,k,c,t;intFOUND=0;
for(i=0;!
FOUND&&ivN-R+1;i++)/*从第0排开始查找*/
⑴;
while(jvN-R+1&&!
FOUND)
for(k=0;⑵&&a[i][j+k]==0;k++);/*查找第i排连续的R个座位*/
if(k>=R)/*找到第i排连续的R个空座位*/
for(c=0;cvR;c++)/*查找其余的R*(R-1)个座位*/
for(t=1;tvR;t++)
if(a[(3)][j+c]!
=0)break;
if(tvR)break;
/*for*/
if((4))FOUND=1;
/*if*/
(5);
/*while*/
/*fori*/
if(FOUND)
*row=i-1;*col=j-1;/*计算正方形区域的左上角坐标*/
return1;
return0;
填空项1:
(正确答案:
j=0)
解析:
填空项1:
(正确答案:
kvR)
解析:
填空项1:
(正确答案:
i+t)
解析:
填空项1:
(正确答案:
c>=R)
解析:
填空项1:
(正确答案:
j++或j+=1)
解析:
五、试题五(总题数:
1,分数:
15.00)
(分数:
15.00)
阅读以下说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。
[说明]
某班级有N名学生,他们可根据自己的情况选修名称和数量不尽相同的课程。
设选课程及成绩用链表结构存储,如图5-1所示。
N等于6,学生信息、所
程序中相应的类型定义如下:
#defineN6
structnode
charcname[5];/*课程名*/
intgrade;/*成绩*/
structnode*next;/*指针,指示某学生选修的下一门课程及成绩*/
>
structstudent
charxh[5];/*学号*/
charname[20];/*姓名*/
structnode*link;/*指针,指示出选修的课程及成绩链表*/
stud_info[n];
Stud」nfo[]为一个全局数组。
函数func(charkc[],int*num)的功能是统计选修了课程名为kc的学生的人数,并返回该课程的平均成
绩(若无人选修该课程,则平均成绩为0),参数num带回选修课程kc的学生人数。
[C语言函数]
doublefunc(charkc[],int*num)
inti,count=0,sum=0;/*count用于记录选修课程名为kc的学生的人数*/
doubleavg=0.0;
structnode*p;
for(i=0;ivN;i++)
p=
(1);/*取第土个学生所修课程链表的头指针*/
while(p)
if(
(2))
sum=(3);
count++;
break;;
/*if*/
p=p->next;
/*while*/
⑷;
if((5))
avg=(double)sum/count;/*计算平均成绩*/
returnavg;
/*func*/
从下列的2道试题(试题六至试题七)中任选1道解答。
如果解答的试题数超过1道,则题号小的1道解答
有效。
(分数:
15.00)
填空项1:
(正确答案:
stud_info[i].link)
解析:
填空项1:
(正确答案:
!
strcmp(p->cname,kc))
解析:
填空项1:
(正确答案:
sum+p->grade)
解析:
填空项1:
(正确答案:
*num=count)
解析:
填空项1:
(正确答案:
count!
=0)
解析:
六、试题六(总题数:
1分数:
15.00)
阅读以下说明和C++程序代码,将应填入(n)处的字句写在答题纸的对应栏内。
[说明]
在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDecorator与FootDecorator
分别完成打印票据的抬头和脚注的功能。
已知该程序运行后的输岀结果如下所示,请填补该程序代码中的空缺。
这是票据的抬头!
这是票据正文!
这是票据的脚注!
这是票据的抬头!
这是票据的脚注!
[C++程序代码]
#include
usingnamespacestd;
classSalesTicket
public;
(1)printTicket()cout<<"这是票据正文!
"<>
classDecorator:
publicSalesTicket
SalesTicket*ticket;
public:
Decorator(SalesTicke*t)ticket=t;
voidprintTicket()
if(ticket!
=NULL)
ticket->printTicket();
classHeadDecorator:
publicDecorator
public:
HeadDecorator(SalesTicket*t):
(2)
voidprintTicket()
cout<<"这是票据的抬头!
"<Decorator:
:
printTicket();
>
classFootDecorator:
publicDecorator
public:
FootDecorator(SalesTicket*t):
(3)
voidprintTicket()
Decorator:
:
printTicket();
cout<<"这是票据的脚注!
"<>
voidmain(void)
SalesTickett;
FootDecoratorf(&t);
HeadDecoratorh((4));
h.printTicket();
cout<<""<FootDecoratora(NULL);
HeadDecoratorb((5));
b.printTicket();
(分数:
15.00)
填空项1:
(正确答案:
virtualvoid
)
解析:
填空项1:
(正确答案:
Decorator(t)
)
解析:
填空项1:
(正确答案:
Decorator(t)
)
解析:
填空项1:
(正确答案:
&f)
解析:
填空项1:
(正确答案:
&a)
解析:
七、试题七(总题数:
1,分数:
15.00)
阅读以下说明和Java程序代码,将应填入(n)处的字句写在答题纸的对应栏内。
[说明]
在下面的Java程序代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDecorator与
FootDecorator分别完成打印票据的抬头和脚注的功能。
己知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。
这是票据的抬头!
这是票据正文!
这是票据的脚注!
这是票据的抬头!
这是票据的脚注!
[Java程序代码]
publicclassSalesTicket
publicvoidprintTicket()
System.out.println(”这是票据正文!
");
publicclassDecoratorextendsSalesTicketSalesTicketticket;
publicDecorator(SalesTickett)
ticket=t;
publicvoidprintTicket()if(ticket!
=null)
ticket.printTicket();
publicclassHeadDecoratorextendsDecorator
publicHeadDecorator(SalesTickett)publicvoidprintTicket()
System.out.rintln(”这是票据的抬头!
");
Super.printTicket();
publicclassFootDecoratorextendsDecoratorpublicFootDecorator(SalesTickett)
⑵;
publicvoidprintTicket()super.printTicket();
System.out.println(”这是票据的脚注r‘);
publicclassMain
publicstaticvoidmain(String[]args)
DecoratorT=
newHeadDecorator((3));
T.(4);
System.out.println("");
T=newFootDecorator((5));T.printTicket();
(分数:
15.00)
填空项1:
(正确答案:
super(t))
解析:
填空项1:
(正确答案:
super(t))
解析:
填空项1:
(正确答案:
newFootDecoratro(newSalesTicke())
)
解析:
填空项1:
(正确答案:
printTicket())
解析:
填空项1:
(正确答案:
newHeadDecorator(null))
解析: