sokaoti.com
全省阿里巴巴校园招聘阿里云C笔试试题考试专题训练

以下程序的输出结果是 【 17 】 。

int fun(int *x,int n)

{ if(n==0) return x[0];

else return x[0]+fun(x+1,n-1);

}

main( )

{ int a[]={1,2,3,4,5,6,7}; printf("%d\n",fun(a,3));}


正确答案:


在虚拟存储系统中,若进程在内存中占3块(开始时为空),采用先进先出页面淘汰算法,当执行访问页号序列为1、2、3、4、1、2、 5、1、 2、 3、 4、5、6时,将产生()次缺页中断。

A.7

B.8

C.9

D.10


参考答案:D


以下程序的输出结果是______

nt fun(int*x,int n)

{if(n==0)

return x[0];

else return x[0]+fun(x+1,n-1);

}

main()

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

printf(“%d\n”,fun(a,3));

}


正确答案:

10


● 函数fun1()、fun2()的定义如下所示,已知调用fun1 时传递给形参x的值是-5,若以引用调用(call by reference)的方式调用fun2,则函数fun1的返回值为 (33) ;若以值调用(call by value)的方式调用fun2,则函数fun1的返回值为 (34) 。

fun1(int x) fun2(int x) int a=x-1;

x = fun2(a);

return a-x; x=x+10;

return 3*x;

(33)A. -18 B. -11 C. -8 D. 0

(34)A. -18 B. -11 C. -8 D. 0


答案:A、C

值调用时,原传递参数值不会被修改!

如果是值传递:那么对于fun1中:a=x-1=-6;x=fun2(a)=fun2(-6);那么在fun2中,x=x+10=-6+10=4,返回3*x=12;这时原参数a=-6并不会被修改,也就是说a的值还是-6;这时,a-x=-6-12=-18;

对于引用调用,在fun2中执行语句x=x+10=-6+10=4时,这时a的值也被修改,变为4,所以返回到fun1中执行a-x时应该为a-x=4-12=-8。

 


(21)在一个虚拟存储系统中,分配给某个进程3 页内存,开始时这3 页内存为空。页面访问序列是 l、2、

3、4、2、1、5、6、2、1、2、3、7、6、3。若采用最近最久未使用(LRU)页面淘汰算法,缺页次数为( )。

A)10

B)12

C)14

D)16


正确答案:B

(21)【答案】B)
【解析】最近最久使用页面淘汰算法(LRU):离当前时间最近一段时间内最久没有使用过的页面先淘汰。这种算法其实是照顾循环多的程序,其他程序则不能提高效率,且实现时不太容易。


2012年阿里巴巴校园招聘阿里云C+笔试试题1、(2分)1)请列出两个线程(或进程)死锁的三个必要条件2)当异常(Exception)发生的时候,智能指针(SmartPointer)的析构函数是被谁调用的?3)一般的台式机硬盘一次随机读写大约需要多少毫秒(0.1ms、1ms、10ms、100ms)?4)除了应用程序的系统调用之外,LinuxKernel中的代码在什么情况下还有机会运行?2、(1分)求下面函数的返回值。输入x的值为2012。int func(int x)int countx=0;while(x)+countx;x=x&(x-1);return countx;3、(1分)一进程在执行时,如果按下列页号访问:1、2、3、4、2、1、5、6、2、1、2、3、7、6、3。进程占用4页物理内存,采用FIFO淘汰算法和LRU淘汰算法时,各产生多少次缺页中断?分别写出使用两种方法时,依次被淘汰的页面号以及最后内存空间中剩余的页面。4、(1分)写出下列程序的输出结果:#includeusing name space std;int main() char *a=”Aliyun”; char *b=&a; *b=”programming test”; char *c=+a; a=”talents.”; return printf(“%cn,*+c); 5、(1分)连接A、B两地的公路长240km,现各有一列汽车分别从两地出发相向而行,各自保持匀速50km/h和30km/h。有一鸟儿也和A地的汽车一起从A地出发,以65km/h的速度沿公路朝B地飞行;当它遇到B地的汽车的时候,折返往A飞;再遇到A地汽车的时候,折返往B飞;如此往返。请问当A、B两地出发的汽车相遇的时候,鸟儿飞行了多少km?6、(1分)一个骰子有6个面,分别是1个1、2个2、3个3。请问平均需要抛多少次骰子才能使1、2、3这三面都至少出现一次。7、(1分)请实现一个递归函数将一个字符串反转(字符串最大长度为100)。例如:如果char *str=”abcdef”,反转后的字符串str为“fedcba”。8(2分)请编写测试用例,来判断某一个文件系统中的一个函数实现是否符合规范定义。该函数名为:bool VailidataPath(char* path),其作用是检测用户输入路径是否合法。 系统合法的路径名称规范要求必须同时满足以下四个规则:a) 字符串长度最短为1,最长为2048。b) 只允许出现大小写字母、数字、下划线(_)和斜杠(/)中的一种或多种字符;c) 斜杠(/)禁止连续出现;d) 路径中禁止包含字符串“/delete/”。注意:本题不要求实现ValidataPath()函数,只要求写出测试用例。9、(2分)下面的代码定义一个value为int的节点组成的二叉树的数据结构: struct Node Node * left, right; int value; ;已知二叉树最大深度为10,请实现一函数宽度优先遍历该二叉树并打印所有节点的值。以下深度为4的二叉树遍历宽度优先历结果为:8、5、12、3、6、10、15、1、4、9、11、13、20。851236101514911132010、(3分)给出26个小写字母(az)在一份文档里面的绝对位置信息列表(位置按从小到大顺序,以整数vector形式存在)。例如:字母a出现在4、29、40个字符位置,字母b出现在第10、38、74个字符位置。文档本身可能包含非英语字母字符。请编写一个程序判断给定小写英文单词是否在文档中出现。bool find(vector pos26, char* word);

有以下程序:void f(int *x,int *y){ int *t; t=x; x=y ;y=t; *x=*y;}main(){ int a[8]={1,2,3,4,5,6,7,8},i,*p,*q; p=a;q=&a[7]; while(p>q) { f(p,q);p++;q--} for(i=0;i<8;i++)printf("d,",a[i]);}程序运行后的输出结果是( )。A.8,2,3,4,5,6,7,1,B.5,6,7,8,1,2,3,4,C.1,2,3,4,5,6,7,8,D.8,7,6,5,4,3,2,1,


正确答案:C
循环的条件是p>q,而p指向的是数组的首地址,q指向的是数组的最后一个元素,因此p<q,不满足条件,不执行循环,所以结果不变。


有以下程序:includeint f(int x){int y;if(x==0||x==1)return(3);y=x*x-f(x-2);return

有以下程序: #include<stdio.h> int f(int x) {int y; if(x==0||x==1)return(3); y=x*x-f(x-2); return y; } main() {int z; z=f(3);printf("%d\n",z); } 程序的运行结果是( )。

A.0

B.9

C.6

D.8


正确答案:C
解析:本题主要考查函数的递归调用。当x=0或者x=1时返回值为3,即f(0)=3,f(1)=3;否则返回值为x*x-f(x-2)。f(3)=3*3-f(1)=9-3=6。


下列程序的输出结果是( )。 void f(int*x,int*y) {int t; t=*x,*x=*y;*y=t; } main() {int a[8]={1,2,3,4,5,6,7,8},i,*p,*q; p=a;q=&a[7]; while(p<q) {f(p,q);p++;q--;} for(i=0;i<8;i+)printf("%d,",a[i]); }

A.8,2,3,4,5,6,7,1

B.5,6,7,8,1,2,3,4

C.1,2,3,4,5,6,7,8

D.8,7,6,5,4,3,2,1


正确答案:D
解析: 函数f()的功能是对两个数据互换。在主函数中指针变量p和q分别指向数组a[8)的首和尾,在 while循环中实现从首尾开始数组元素的互换操作。


对于局部变量整型切片x的赋值,下面定义正确的是()

A.x := []int{1, 2, 3,4, 5, 6,}

B.x := []int{1, 2, 3,4, 5, 6}

C.x := []int{1, 2, 3,4, 5, 6}

D.x := []int{1, 2, 3, 4, 5, 6,}


参考答案:ACD


以下数组定义中错误的是______。

A.int x[][3]={0};

B.int x[2][3]={{1,2},{3,4},{5,6}};

C.int x[][3]={{1,2,3},{4,5,6}};

D.int x[][3]={1,2,3,4,5,6};


正确答案:B
解析:C语言中,二维数组中元素的排列顺序是:先按行存放,再按列存放,并且要有足够的空间来保证定义的数组长度始终大于等于需要存放的元素的长度。选项B中行数定义为2行,但实际却需要存放3行元素故不正确。

更多 “全省阿里巴巴校园招聘阿里云C笔试试题考试专题训练” 相关考题
考题 下列数组定义中错误的是( )。A.int x[][3]={0};B.int x[2][3]={{1,2},{3,4},{5,6}};C.int x[][3]={{1,2,3},{4,5,6}};D.int x[2][3]={1,2,3,4,5,6};正确答案:B

考题 下列程序的输出结果是( )。 include int fun(int x) {int p;if(x==0‖x==1) return 3;el下列程序的输出结果是( )。 #include<stdio.h> int fun(int x) { int p; if(x==0‖x==1) return 3; else p=x-fun(x-2); return p; } void main() { print f("\n%d", fun(5)); }A.5B.3C.7D.1正确答案:A解析:本题考查函数的递归调用。在函数递归调用时,fun(5):a=5-fun(3)->fun3=a=3-fun(1)->fun(1):a-3,反推回去 fun(3):a=3-3=0->fun(5):a=5-0=5,最后的计算结果为5。

考题 1. class Over{   2. int doIt(long x) { return 3;}   3. }   4.   5. class Under extends Over{   6. //insert code here 7. }   和四个方法:   short doIt(int y) {return 4;}   int doIt(long x,long y){return 4;}   private int doIt(Short y){ return 4;}   protected int doIt(long x){return 4;}   分别插入到第6行,有几个可以通过编译?()  A、2B、3C、4D、0E、1正确答案:C

考题 有以下程序:include void f(int * x,int * y) int t;t= *x; *x= *y; *y=t;main ( ){in有以下程序:#include <stdio.h>void f(int * x,int * y) int t; t= *x; *x= *y; *y=t;main ( ){ int a[8] = { 1,2,3,4,5,6,7,8} ,i, * p, * q; p=a;q =&a[7]; while(p<q) { f(p,q) ;p ++ ;q --; } for(i =0;i<8;i ++ ) printf(" % d," ,a[i]); }程序运行后的输出结果是( )。A.8,2,3,4.,5,6,7,1,B.5,6,7,8,1,2,3,4,C.1,2,3,4,5,6,7,8,D.8,7,6,5,4,3,2,1,正确答案:D解析:程序中函数f的作用是交换指针变量x和y所指向的存储单元的值。在main函数中,通过P=a;q=&a[7];指针变量p指向数组的第一个元素,指针变量q指向数组的最后一个元素。通过调用函数f(p,q)进行前后对称位置上的数组元素的交换。当while循环4次(即p=q)后,a数组中各元素的值分别为8,7,6,5,4,3,2,1,所以程序输出的结果为:8,7,6,5,4,3,2,1,

考题 单选题在一个虚拟存储系统中,分配给某个进程3页内存,开始时这3页内存为空。页面访问序列是l、2、3、4、2、1、5、6、2、1、2、3、7、6、3。若采用最近最久未使用(LRU)页面淘汰算法,缺页次数为()。A 10B 12C 14D 16正确答案:A解析:暂无解析

考题 下列程序的输出结果是()。includeint fun(int x){ int a;if(x==0||x=1)return 3;elsea=下列程序的输出结果是( )。#include<stdio.h>int fun(int x){ int a; if(x==0||x=1) return 3; else a=x-fun(x-2); return a;}void main(){ printf("%d",fun(7));}A.2B.8C.9D.5正确答案:A解析:本题考查函数的递归调用。在函数递归调用时,fun(7):a=7-fun(5)→fun(5):a=5-fun(3)→fun3:a=3-fun(1)→fun(1):a=3,反推回去fun(3):a=3-3→0→fun(5):a=5-0=5→fun(7):a=7-5=2,最后的计算结果为2.

考题 第三题 阅读以下代码和问题,回答问题1至问题3,将解答填入答题纸的对应栏内。 【代码 1】 typedef enum {A,B,C,D} EnumType; EnumType f(int yr) {if(0 == yr%400) {return A;}else if (!(yr%4)) {if(0!=yr%100)return B;elsereturn C;}return D; }【代码2 】 #include int main() { int score;scanf("%d",&score);switch (score){case 5: printf("Excellent!\n");case 4: printf("Good!\n"); break;case 3: printf("Average!\n");case 2:case 1:case 0: printf("Poor!\n");default: printf("Oops,Error\n");}return 0; }【代码3】 #include int main() { int i,j,k;for(i=0; i for(j=0; j for( k=0; k if(i!=j&&j!=k)printf("%d %d %d\n", i,j,k);}ruturn 0; } 问题:3.1 (4分) 对于代码1,写出下面的函数调用后x1 、x2、x3和x4的值。 x1 = f(1997); x2 = f(2000); x3 = f(2100); x4 = f(2020); 问题:3.2 (5分) (1)写出代码2进行时输入为3的输出结果; (2)写出代码2进行时输入为5的输出结果。 问题:3.3 (6分) 写出代码3运行后的输出结果。 答案:解析:x1=3;x2=0;x3=2;x4=1第一个条件 0==yr%400, 2000满足,返回为A;其余都不满足,继续进行判断; 第二个条件 !yr%4, 1997不满足,返回为D;其余满足,继续进行判断; 第三个条件 0!=yr%100,2020满足,返回为B;2100不满足,返回为C。 枚举类型中列出的每一个枚举符都对应着一个整数值,枚举类型实际上是一个整型符号常量的集合。当定义枚举类型时,枚举符都已经被系统隐含地赋予了一个整型值,默认情况下,第一个元素为0,第二个元素为1,依此类推。所以相应的A=0,B=1,C=2,D=3,故返回为:x1=3;x2=0;x3=2;x4=1。 Average! poor! Oops,Error (2)Excellent! Good!控制传递给与开关的值匹配的 case 语句。switch 语句可以包括任意数目的 case 实例,但是任何两个 case 语句都不能具有相同的值。语句体从选定的语句开始执行,直到 break 将控制传递到 case 体以外。case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即"只是开始执行处的入口标号". 因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行,而且执行完一个case后面的语句后,若没遇到break语句,就自动进入 下一个case继续执行,而不在判断是否与之匹配,直到遇到break语句才停止执行,退出break语句.因此,若想执行一个case分之后立即跳出 switch语句,就必须在此分支的最后添加一个break语句。 0 1 0 0 2 0 0 2 1 1 0 1 1 2 0 1 2 1【解析】此题考察多重for循环再加上一个判定条件,i的取值为(0,1),j的取值为(0,1,2),k的取值为(0,1),只要按顺序找到i!=j且j!=k的组合即可。

考题 在虚拟存储系统中,若进程在内存中占3块(开始时为空),采用先进先出页面淘汰算法,当执行访问页号序列为1、2、3、4、1、2、5、1、2、3、4、5、6时,将产生(34)次缺页中断。A.7B.8C.9D.10正确答案:D解析:内存中页面情况和中断情形如下所示内存中的页面所以共产生10次缺页中断。

考题 下列程序的输出结果是()。includeint fun(int x){int p; if(x==0‖x==1)return 3; elsep下列程序的输出结果是( )。 #include<stdio.h> int fun(int x) { int p; if(x==0‖x==1) return 3; else p=x-fun(x-2); return p; } void main() { printf("\n%d",fun(5)); }A.5B.3C.7D.1正确答案:A解析: 本题考查函数的递归调用。在函数递归调用时,fun(5):a=5-fun(3)->fun3:a=3-fun(1)->fun(1):a=3,反推回去fun(3):a=3-3=0->fun(5):a=5-0=5,最后的计算结果为5。

考题 下列程序的输出结果是()。 include int fun(int x) {int a; if(x==0‖x==1) return 3;下列程序的输出结果是( )。#include<stdio.h>int fun(int x){ int a;if(x==0‖x==1)return 3;elsea=x-fun(x-2) ;return a;}void main(){ printf("%d",fun(7) );}A.2B.8C.9D.5正确答案:A解析:本题考查函数的递归调用。在函数递归调用时,fun(7):a=7-fun(5)→fun(5):a=5-fun(3)→ fun3:a=3-fun(1)→fun(1):a=3,反推回去fun(3):a=3-3=0→ fun(5):a=5-0=5→fun(7):a=7-5=2,最后的计算结果为2。