全省阿里巴巴校园招聘笔试题目考试专题训练

阅读下面程序: include void main() { int i,j,row=0,column=0,m; static int a[3]

阅读下面程序:

include <iostream.h>

void main()

{

int i,j,row=0,column=0,m;

static int a[3][3]={ 100,28,72,-30,2,-100};

m=a[0][0];

for (i=0;i<3;i++)

for (j=0;j<3;j++)

if (a[i][j]<m)

{

m=a[i][j];

row=i;

column=j;

}

cout<<m<<","<<row<<","<<column<<endl;

}

该程序的功能是【 】,其执行结果为上丝【 】。


正确答案:找到数组a中的最小元素并输出其数值及行列值 -10012
找到数组a中的最小元素并输出其数值及行列值 -100,1,2


有如下程序includevoid main(){char ch[2][5]=={"6937","8254"},*p[2];int i,j,s=0

有如下程序 #include<iostream.h> void main() {char ch[2][5]=={"6937","8254"},*p[2]; int i,j,s=0; for(i=0;i(2;i++)p[i]=ch[i]; for(i=0;i(2;i++) for(j=0;p[i][j]>'\0,j+=2) s=10*s+p[i][j]-'0'; cout<<s;} 该程序的输出结果是( )。

A.69825

B.63825

C.6385

D.693825


正确答案:C
解析: 该题主要要搞清楚以下几点:①定义了一个指针数组char *p[2]后,程序中第一个循环{or(i=o;i2,i++)p[i]=ch[i];的作用是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,井使指针数组的p[1]元素指向了二维数组ch的第二行字符串,这样,就使指针数组p和二维数蛆ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式;ch[i][j]或P[i][j]。②对二维数组ch的初始化,使其第一行ch[0]中存入了字符串"6937",第二


有以下程序: include using namespace std; class sample {int x; public:void setx(

有以下程序:

include <iostream>

using namespace std;

class sample

{

int x;

public:

void setx(int i)

{

x=i;

}

int putx ()

{

return x;

}

};

int main ( )

{

sample *p;

sample A[3];

A[0] .set>:(5);

A[1] .setx(6);

A[2] .setx(7);

for (int j=0;j<3;j++)

{

p=&A[j];

cout<<p->putx () <<", ";

}

cout<<end1;

return 0;

}

执行后的输出结果是【 】。


正确答案:567
5,6,7 解析:本题考核对象指针与对象数组的应用。主函数中定义对象数组A,然后调用各自的setx()函数赋值,最后通过for循环输出各自内部变量,所以程序最后输出5,6,7。


该程序运行的结果是( )。

#include

#include

#define M 100

void fun(int m, int *a, int *n)

{ int i,j=0;

for(i=1;i<=m;i++)

if(i%7==0||i==0)

a[j++]=i;

*n=j;}

main()

{ int aa[M],n,k;

clrscr();

fun(10,aa,&n);

for(k=0;k

if((k+1) ==0)printf("\n");

else printf("M",aa[k]);

printf("\n");}


正确答案:
7


下列程序的输出结果是 #include"stdio.h" #define N 3 #define M 3 void fun(int a[M][N]) { printf("%d\n",*(a[1]+2));} main() { int a[M][N]; int i,j; for(i=0;i<M;i++) for(j=0;j<N;j++) a[i][j]=i+j-(i-j); fun(a);}

A.3

B.4

C.5

D.6


正确答案:B
解析:若有以下定义:inta[3][4],i,j;且当0=i3,0=j4,则可以有以下几种方式来引用数组中的第i行,第j列的元素:a[i][j],*(a[i]+j),*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。


2014年9月22号阿里巴巴校园招聘笔试题目1. 现在计算机中整数采用的编码方式:A. 原码 B. 反码 C. Unicode 码 D. 补码2. 下面程序的运行结果:#include using namespace std; void test(char c, char *d) +c; +*d; cout c *d;int main() char a=A, b = a; test(b, &a); cout a b; return 0;A. . B. . C. bBBa D. .3. 下面的说法那个正确:#define NUMA 10000000#define NUMB 1000int aNUMA, bNUMB; void pa() int i, j; for(i = 0; i NUMB; +i) for(j = 0; j NUMA; +j) +aj; void pb() int i, j; for(i = 0; i NUMA; +i) for(j = 0; j NUMB; +j) +bj;A. pa 和 pb 运行的一样快 B. pa 比 pb 快 C. pb 比 pa 快 D. 无法判断4. 10 个小球中只有一个红球,现在有放回地抽取一个小球,问至到第 n 次才取到 k 个红球 (k n) 的概率是多少 ?A. B. C. D.5. 某指令流水线由 5 段组成,各段所需要的时间分别是:t、3t、t、2t 和 t 。问如果连续执行 10 条指令,则吞吐率是多少 ?A. 0.1428/t B. 0.2041/t C. 0.2857/t D. 0.3333/t6. 现有两道四个选项的火星文单选题,你已经至少答对一题了,那么你两题都对的概率是多少 ?A. 1/3 B. 1/4 C. 1/7 D. 1/87. 以下是一个 tree 的遍历算法,queue 是一个 FIFO 队列。参考下面的 tree ,程序输出结果是神马。queue.push(tree.root);while(true) node = queue.pop(); output(node.value); / 输出结点对应的数字 if(null = node) break; for(child_node in node.children) queue.push(child_node); 1 _|_ | | 2 3 _|_ _|_ | | | |4 5 6 7A. 1234567 B. 1245367 C. 1376254 D. 13276548. 堆排序的时间复杂度是多少 ? 堆排序建堆的时间复杂度是多少 ?A. O(n2) O(n logn) B. O(n) O(nlogn) C. O(nlogn) O(n) D. O(nlogn) O(nlogn)9. 字符串 alibaba 的二进制哈夫曼编码有多少位 ?A. 11 B.12 C. 13 D. 1410. 结点按中序遍历为 xyz 的二叉树有多少种可能 ?A. 1 B.2 C.3 D.4 E. 511. 500 张纸牌整齐排成一排,按顺序编号 1、2、3、4、.、499、500,第一次拿走所有奇数位置上的纸牌,第二次再拿走剩下纸牌中的所有奇数位置上的纸牌,以此类推操作下去,问最后剩下的纸牌的编号是多少 ?A. 128 B. 250 C. 256 D. 50012. 一直矩阵 Ak = (aij)rk rk+1,k = 1, 2, 3, 4, 5, 6 ;r1 = 5,r2 = 10,r3 = 3,r4 = 8,r5 = 5,r6 = 20,r7 = 6,问矩阵链乘 A1 A2 A3 A4 A5 A6 的最佳求积次数是多少 ?A. 2010 B. 2100 C. 2500 D. 252513. 有多少个 2012 位的数,这些数的任意两个相邻数位依序构成的两位数均能被 17 或 23 整除 ?A. 3 B. 5. C. 7 D. 914. 关于 linux 的进程,下面说法不正确的是:A. 僵尸进程会被 init 进程接管,不会造成资源浪费;B. 孤儿进程的父进程在它之前退出,会被 init 进程接管,不会造成资源浪费;C. 进程是资源管理的最小单位,而线程是程序执行的最小单位。Linux 下的线程本质上用进程实现;D. 子进程如果对资源只是进行读操作,那么完全和父进程共享物理地址空间。15. 一个数据表有 10000 个元素,如果仅要求求出其中最大的 10 个元素,采用什么算法比较节省时间 ?A. 堆排序 B. 希尔排序 C. 快速排序 D. 直接选择排序16. 一棵二叉树具有 8 个度为 2 的结点,5 个度为 1 的结点,则度为 0 的结点个数有多少个 ?A. . B. 9 C. 11. D. 不确定17. 被除数是二进制数 110110,除数是二进制数 111,则余数是多少 ?A. . B. 101 C. 110 D. .18. 对于下面的问题,不能使用栈 stack 来解决的是 ?A. 数学表达式转换为后缀形式B. 实现递归算法C. 编程语言的递归调用D. 操作系统分配资源(如 CPU)19. 甲盒中有 200 个螺杆,其中有 160 个 A 型螺杆;乙盒中有 240 个螺母,其中有 180 个 A 型的。现从甲乙两盒中各任取一个,则能配成 A 型螺栓的概率为多少?A. 1/20 B. 15/16 C. 3/5 D. 19/2020. 有 A 和 B 两路公交车,平均发车时间间隔为 5 分钟和 10 分钟。某乘客在站点 S 可以任意选择两者之一乘坐,假定 A 和 B 到达 S 的时刻无法确定,那么该乘客的平均等待时间是多少 ?A 1 分钟 20 秒 B. 1 分钟 40 秒 C. 2 分钟 30 秒 D. 3 分钟 20 秒21. 下面不是引起进程调度原因的是 ?A. 进程执行完毕 B. 进程 I/O 请求队列 C. 进程死循环 D. 进程调用阻塞原语进入睡眠状态22. 用于解决 CPU 指令乱序、编译器重排、多 CPU 内存同步等带来的问题的机制是 ?A. 内存屏障 B. 信号量 C. 自旋锁 D. volatile 关键字23. 下面使用贪心算法的是:A. 单元最短路径 Dijkstra 算法B. 最小生成树 Prim 算法C. 最小生成树 Kruskal 算法D. 计算每对顶点最短路径的 Floyd-Warshall 算法E. 字符串匹配中的 KMP 算法24. 关于 ACID 说法正确的是:A. A 可用性。.B. C 一致性。在食物开始之前和结束后,数据库的约束保持不变。C. I 隔离性。两个同时运行的事务的执行是互不影响,中间结果不可交叉访问。D. D 持久性。在事务提交之后,该事务所作的更改持久保存在存储介质之中,不会被回滚。25. 现有一个循环队列,其队头指针为 fron

以下程序的输出结果是includevoid main( ){int i,j,x=0;for(i=0;i<2;i++){x++;for(

以下程序的输出结果是 #include<iostream.h> void main( ) {int i,j,x=0; for(i=0;i<2;i++) { x++; for(j=0;j<3;j++) { if(j%2)continue; x++;} x++;} cout<< "x="<<x;}

A.x=4

B.x=8

C.x=6

D.x=12


正确答案:B
解析:该题是一个for循环嵌套语句。第一层for循环循环2次,第二层循环3次,但当j等于 0和1时,将执行continue语句,不执行x++运算,所以每次执行完内循环后,x的增量为1。最后一个x++运算将每次累加起来就是x的值。


下列程序的输出结果是 include void main( ) {int a[3],i,j,k=2; for(i=

下列程序的输出结果是 #include<iostream.h> void main( ) { int a[3],i,j,k=2; for(i=0;i<3;i++)a[i]=i; for(i=0;i<k;i++) for(j=0;j<k;j++) a[j]=a[i]; cout<<a[2];}

A.2

B.3

C.1

D.0


正确答案:A
解析:本题里有三个for循环,但要分清楚,第一个是单独的给三个元素赋值,赋完值后三个a[0]=0,a[1]=1,a[2]=2;后面的两个for是嵌套循环,对数组元素的赋值,但由于k=2,初值已定for里的条件是小于k,所以不管怎么处理都影响不到a[2],故答案为2。


下列程序用来判断数组中特定元素的位置所在,则输出结果为()。includeinclude

下列程序用来判断数组中特定元素的位置所在,则输出结果为( )。 #include<conio.h> #include<iostream.h> int fun(int*p,int n,int*j) {int i; *j=0; for(i=0;i<n;i++) if(p[*j]<p[i])*j=i; return p[*j];} void main() {int a[10]={1,3,9,0,8,7,6,5,4,2)j;int j; fun(a,10,&j); cout<<j<<','<<a[j];}

A.2,9

B.3

C.9

D.3,9


正确答案:A
解析:由程序中的主函数main入手,调用fun函数。其中第一个实参为数组a的名字,数组名作为实参,传递的是数组的起始地址。所以在fun函数中指针D指向了数组的第一个元素a[0]。另外实参整型j传递的是引用,也就是j的地址。在fun函数中在for循环中,依次将当前元素p[i]与j指针值为标识的p[*j]进行比较,取较大的。最后循环后的结果就是p[*j]存放数组中的最大值,并且指针j为该值的标识位。可以看出数组的最大值是9标识位为2。


有以下程序:include void fun(iht * a,int i,int j){int t;if(i < j) {t=a[i];a[i] =

有以下程序:#include <stdio, h>void fun(iht * a,int i,int j){ int t; if(i < j) { t=a[i];a[i] =a[j] ;a[j]=t; i++;j--; fun(a,i,j);main ( ) int x[ ]: {2,6,1,8} ,i; fun(x,0,3); for( i=0;i <4;i ++ ) printf( "%2d" ,x[i] ); printf(" \n");

A.1268

B.8621

C.8162

D.8612


正确答案:C
解析:语句fun(x,0、3);中将数组名x作为实参,即把数组x的首地址传送给形参(指针a),使数组x与形参指针s共占同一段内存单元,在调用函数期间,如果形参数组x的值发生了改变,实参指针a的值也就改变了。程序中fun函数是递归调用函数,其运行过程是:第1次调用fun时,a=x,i=0,j=3,ij成立,a[0]与a[3]交换,a数组中的数变为{8,6,1,2},执行i++;j--;继续调用fun,此时i,j分别为1,2,ij成立,a[1]与a[2]交换,a数组中的数变为{8,1,6,2},执行i++j--;继续调用fun,此时i,j分别为2,1,ij不成立,递归调用结束。当返回主函数时,x数组中的数据就为{8,1,6,2}。


阅读以下程序: include void main() { static int a[][3]={9,7,5,3,1,2,4,6,8}; int

阅读以下程序:

include<iostream.h>

void main()

{

static int a[][3]={9,7,5,3,1,2,4,6,8};

int i,j,s1=0,s2=0;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

{

if(i==j)s1=sl+a[i][j];

if(i+j==2)s2=s2+a[i][j];

}

cout<<s1<<","<<s2<<endl;

}

则该程序的输出结果为【 】。


正确答案:1810
18,10

更多 “全省阿里巴巴校园招聘笔试题目考试专题训练” 相关考题
考题 下列程序的输出结果是#include "stdio.h"#define N 3#define M 3void fun(int a[M][N]){printf("%d\n",*(a[1]+2));}main(){int a[M][N];int i,j;for(i=0;i<M;i++)for(j=0;j<N;j++)a[i][j]=i+j-(i-j);fun(a);}A.3B.4C.5D.6正确答案:B

考题 有如下程序includevoid main(){charch [2][5]={"6937","8254"},*p[2]; int i,j,s=0有如下程序 #include<iostream.h> void main() { charch [2][5]={"6937","8254"},*p[2]; int i,j,s=0; for(i=0;i<2;i++)p[i]=ch[i]; for(i=0;<2;i++) for(j=0;p[i][j]>‘\0’;j+=2) s=10*s+p[i][j]-’0’; cout<<s;} 该程序的输出结果是A.69825B.63825C.6385D.693825正确答案:C解析:该题主要要搞清楚以下几点:①定义了一个指针数组char*P[2]后,程序中第一个循环for(i=0;i2;i++)P[i]=ch[i];的作用是使指针数组的P[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,并使指引数组的P[1]元素指向了二维数组汕的第二行字符中。这样,就使指针数组p和二维数组ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i][j]或p[i][j]。②对二维数组ch的初始化,使其第一行ch[0]中存入了字符串"6937’’,第二行ch[1]中的内容为字符串“8254”。③程序中第二个循环中的循环体s=s*10+p[i][j]-’0’;的功能是这样的,每执行一次,将s中的值乘以10(也即,将s中的数值整体向左移动一位,并在空出来的个位上添一个0),再将当前P[i][j]中的字符量转换为相应的数字,然后把这个数字加到s的个位上④注意到内层循环的循环条件P[i][j]>’\0’,是指p[i][j]中的字符只要不是字符串结束标志’\0’就继续循环,语句。j+2;是使下标.j每次增加2,也即一个隔一个地从p[i]所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从P[0]所指向的字符申“6937’’中一个隔一个地取出字符,分别是“6”和“3”,然后从p[1]所指向的字符串“8254’’中一个隔一个地取出字符,分别是“8”和“5”,同时经过转换和相加运算后,结果s中的值应该是6385。

考题 阅读下面程序:includevoid main(){int i,j,row=0,column=0,min;static int a[3][3]阅读下面程序: #include<iostream.h> void main() { int i,j,row=0,column=0,min; static int a[3][3]={100,28,72,-30,2,-100}; min=a[0][0]; for(i=0;i<3;i++) for(j=0;j<3;j++) if(a[i][jl<min) { min=a[i][j]; row=i; column=j; } cout<<min<<","<<row<<","<<column<<endl; } 该程序的执行结果为( )。A.-100,2,3B.-100,1,2C.100,1,1D.100,0,0正确答案:B解析:该程序是找到数组a中的最小值,然后输出其数值及行、列。首先将min的值赋值为a中的第一行第一列的数值。然后在for两层循环中利用if语句进行大小比较,求出数组最小值,即-100。它的位置为第二行;第三列。标识由0开始计数,所以是1,2。

考题 下面程序的输出结果是()。include using namespace std;void main( )int i,j,m=0,n=0;下面程序的输出结果是( )。 #include <iostream> using namespace std; void main( ) int i,j,m=0,n=0; for(i=0;i<2;i++) for(j=0;j<2;j++) if(j> =i) m=1;n++; cout<<m<<endl; cout<<n;A.1 1B.1 4C.1 6D.0 2正确答案:A解析:注意整个二重循环作用的语句为:if(j=i)m=1;,而n++语句并不为二重循环控制。其实不论循环多少次,m、n的值总为1。

考题 有以下程序void fun(int* a, int i, int j){ int t; if(i<j); { t =a[i] ;a[i]= a[j] ;a[i]= t; fun(a, ++i, --j);}}main(){ int a[i]={1,2,3,4,5,6}, i; fun(a,0,5); for(i=0;i<6; i++) cout<<a[i];}执行后输出结果是A.654321B.432156C.456123D.123456正确答案:A解析:本题采用递归函数的方式将数组中的元素进行倒置,只要能够看出函数fun的功能,即可以得出正确答案为A。

考题 以下程序的输出结果为( )。 public class Main { public static void main(String[] args) { int i=0, j=0, a=6; if((++i>0)||(++j>0)) a++; System.out.println( "i=" +i+", j ="+j+", a="+A; } }A.i=0, j=0, a=6B.i=1, j=1, a=7C.i=1, j=0, a=7D.i=0, j=1, a=7正确答案:C解析:因为表达式(++i>0)先进行了i自增1的运算,所以i的值不可能为0。因此答案 A和D都不对。因为表达式(++i>0)的值为“真”,对于“或”运算来说只要运算符“||”左边的值为“真”,已确定了整个表达式的值为“真”,因而不再去做“||”运算符右边的运算,所以++j的运算并未进行。因此,答案C是正确的输出结果。

考题 有以下程序:include using namespace std;class B{private: int a,b;public: B(){} B有以下程序: #include <iostream> using namespace std; class B { private: int a,b; public: B(){} B(int i,int j); void printb(); }; class A { B C; public: A(){} A(int i,int j); void printa(); }; A::A(int i,int j) :c(i,j) {} void A::printa() { c.printb (); } B::B(int i, int j) { a=i; b=j; } void B: :printb() { cout<<a<<", "<<b<<end1; } int main () { A m(7,8); m.printa(); return 0; } 该程序运行后的输出结果是( )。A.5,6B.7,8C.8,9D.9,10正确答案:B解析:本题考核类的定义和应用。程序首先定义了两个类A和B。在类A中,其私有数据成员c为类B的对象。类A的成员函数printa()中,调用私有成员对象c的成员函数printb()输出类B私有数据成员a和b的值。

考题 下列程序的输出结果是 #include"stdio.h" #define N3 #define M3 void fun(int a[M][N]) { printf("%d\n",*(a[1]+2));} main() { int a[M][N]; int i,j; for(i=0;i<M;i++) for(j=0;j<N;j++) a[i][j]=i+j-(i-j); fun(a);}A.3B.4C.5D.6正确答案:B解析: 若有以下定义:int a[3][4],i,j;且当 0=i3,0=j4,则可以有以下几种方式来引用数组中的第i行,第j列的元素:a[a][j],*(a[i]+j),*(*(a+i)+j),(*(a+i)[j],*(&a [0][0]+4*i+j)”。

考题 若有以下程序:includeusing namespace std;class A{public:A(int i,int j){a=i;b=j;}若有以下程序: #include<iostream> using namespace std; class A { public: A(int i,int j) { a=i; b=j; } void move(int x,int y) { a+=x; b+=y; } void show() { cout<<a<<","<<b<<endl; } private: int a,b; }; class B:private A { public: B(int i,int j):A(i,j){} void fun() { move(3,5); } void fl() { A::show(); } }; int main() { B d(3,4); d.fun(); d.fl(); return 0; } 程序执行后的输出结果是( )。A.3,4B.6,8C.6,9D.4,3正确答案:C

考题 有以下程序:include using namespace std;void fun(int i,int j){ cout有以下程序: #include <iostream> using namespace std; void fun(int i,int j) { cout<<(i+j)<<end1; } void fun(int i) { cout<<i++<<end1; } int main() { int a=1; fun(A) ; return 0; } 该程序执行后的输出结果是( )。A.1B.2C.3D.4正确答案:A解析:本题考核函数重载这个知识点。函数fun有两种实现:第1种实现中,有两个int型形参,第2个实现中,是1个int型形参。由于这两种实现方式中形参的个数不同,形成了函数的重载。在主函数中,由于传递给函数fun()的实参为1个整型变量a,所以调用函数fun()的第2中实现,输出1。