2012年先锋商泰笔试题(含答案版)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
p = (char *) malloc(100); strcpy(p, "hello world"); } int main() { char *str = NULL; getmem(str); printf("%s\n",str); free(str); return 0; } (A)NULL (B)hello world (C)程序崩溃 (D)没有输出 20,对“char *p = “pest”;”、“char *q=”pest”;”、“char a[]=”pest”;”这三个语 句评论最合适的是() (A) p指向一字符串常量,编译器有可能把它指向的字符串常量 放在只读区域,所以尽量不要使用p[0]=’1’试图对比字符串 常量作修改。 (B) a使用一个字符串来初始化一个数组,所以可以使用 a[0]=’1’修改数组的内容的。 (C) p和q指向的内容相同,所以编译器有可能将他们指向的字 符串常量存储在相同的位置,即“共用同一个字符串常量” (D) 以上说法都正确 三、C++单选题 1,以下哪个不是C++的关键字() (A)protected (B)inline (C)volatile (D)finalize 2, 下列关于静态成员变量函数的说法中,不正确的是(B) (A)静态成员函数不能利用this指针 (B)在非静态的成员函数中不能操作静态成员变量 (C)静态成员变量必须显式的在cpp文件中定义 (D)静态成员函数不能同时使用virtual关键字修饰 注:静态成员函数不可以调用类的非静态成员,因为静态成员函数不含 this指针;静态成员函数不可以同时声明为virtual/const/volatile 3,有函数重载为void test(int a,int b=7,char *s=”s”);对以下test的调 用,哪个是不正确的() (A) test(5); (B)test(5,8); (C)test(5,“y”); (D)test(5,5,“123”);
} int main() { char a[10]; printf("%d\n",getArrySize(a)); return 0; } (A)1 (B)2 (C)4 (D)10 注:sizeof(char)=1,sizeof(a[10])=1,sizeof(str)=4(32位系统指针4,64位 系统为8),sizeof(a)=10,sizeof(str)/sizeof(str[0])=4/1=4 6, c语言中,字符串“a”在内存中占用的字节数是() (A)1 (B)2 (C)4 (D)5 注: printf("%d\n",sizeof("a"));//2 printf("%d\n",sizeof('a'));//1 7,c语言规定,简单变量做实参时,它和对应形参之间的数据传递方式 是() (A)地址传递 (B)单向值传递 (C)由实参传给形参,再由形参传回实参 (D)由用户指定传递方式 8,对下面两个函数评价正确的是() Void fun1(void) { int a[60][230][1000],i,j,k; for(k=0;k<1000;k++) for(j=0;j<230;j++) for(i=0;i<60;i++) a[i][j][k]=0; } Void fun2(void) { int a[60][230][1000],i,j,k; for(i=0;i<60;i++) for(j=0;j<230;j++) for(k=0;k<1000;k++) a[i][j][k]=0; }
(A) 两个函数效率完全相同 (B)fun1函数效率高 (C)fun2函数 效率高(D)以上说法都不对 9,char类型变量的最大可能值是() (A)127 (B)128 (C)255 (D)256 10,下列运算符中,要求运算数一定为整型的是() (A)/ (B)++ (C) != (D)% 11, 以下正确的描述是() (A)continue语句的作用是结束整个循环的执行 (continue 结束单次 循环,继续下个循环,break结束整个循环) (B)只能在循环体内和switch语句体内使用break语句 (貌似对了) (C)在循环体内使用break语句或continue语句的作用相同 (明显错 了) (D)从多层循环嵌套中退出时,只能用goto语句 (return ,goto, flage也能行吧) 12,下列哪个表达式可以把整数i的最低一个bit清0 ?() (A)i>>1; (B)i|1; (C)i&1; (D)i&~1; 13, 链表问题 14,下面关于枚举类型的说法错误的是() (A) 可以为枚举元素赋值(Y) (B) 枚举元素可以进行比较 (C) 枚举元素的值可以在类型定义时指定 (D) 枚举元素可以作为常量使用 15,在32位系统下,有int *array = (int *)0x80000000,int *array2=&array[4],请问array2的地址是() (A)0x80000000 (B)0x80000004 (C)0x80000008 (D) 0x80000010 注:int 占4字节,0-3 共16个字节,16进制表示为0x00000010 16,下面代码的输出结果是() #define MAN(a,b) a>b?a:b int main() { int a = 2; int b = 2; printf("the max is %d\n",MAN(++a,b)); return 0;
4,下面的函数声明中,哪个可以作为void func(int a, int b)的重载函 数() (A) int func(int a, int b); (B) void func(int a, char b); (C) float func(int a, int b, int c=0); (D) void func(int a, int b=0); 5,有类A,在定义A a;时,以下哪个函数将被调用() (A)无参数的构造函数 (B)有参数的构造函数 (C)复制构造函数 (D)以上都不是 6,类A中有一个私有(private)成员变量member,现有一个新类B需要访 问类A的member,因此需要对类A进行修改,以下的修改不可行的是 () (A)把member变为public (B)为类A增加两个公共成员函数,分别对member进行读和写 (C)把B声明为A的friend (D)让B以public的形式继承A 7,上题中,最值得推荐的方式是() 8,关于const关键字的说法,错误的是() (A) const可以用来修饰对象和成员函数 (B) const对象不能被修改 (C) const成员函数不能修改类数据成员 (D) const可以用于声明类 9,有int i=10;下列表达式,哪个是正确的(假定在函数上下文中) () (A) int &r;//错 必须初始化 (B) int &r = 10;//错 (C) int &r = &i;//错 (D) int &r = i; 10, 在下列哪种情况下,宜使用inline关键字来修饰函数() (A) 函数体内定义了大量的临时变量 (B) 函数体内大量调用了其他的函数 (C) 函数体短小且调用频繁 (D) 函数体较大且调用较少 注:内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,
从而提高函数的 执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较 大,那么效率的收 获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序 的总代码量增大, 消耗更多的内存空间。以下情况不宜使用内联: (1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较 高。 (2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数 调用的开销大。 类的构造函数和析构函数容易让人误解成使用内联更有效。要当心构造 函数和析构 函数可能会隐藏一些行为,如“偷偷地”执行了基类或成员对象的构造函 数和析构函数。 所以不要随便地将构造函数和析构函数的定义体放在类声明中。 一个好的编译器将会根据函数的定义体,自动地取消不值得的内联(这 进一步说明 了inline 不应该出现在函数的声明中)。
1、 判定题 对的写T,错的写F 1,c语言支持定义可变数量参数的函数 。 (对)注:例子:printf 2, 0的补码是0 (错)注:0没有补码,正数的补码是本 身,负数的补码是其(二进制)取反加1 3,switch(c)语句中c可以是int,long,char,float,unsigned int类 型。(错)注:switch后面括号中的表达式只能是整型、字符型或枚举 型表达式。 case后与之匹配。C不能为float 4,数据结构中,栈是பைடு நூலகம்进先出,而队列是先进先出。(T) 5,在运行时,函数参数一般是通过栈来传递的。(T)有待继续学习 2、 单选 1, 下列运算符中,优先级最高的是() (A) ++ (B)&& (C) / (D)* 2,十进制整数65的二进制表示形式为() (A)10000001 (B)1000001 (C)100001 (D)10001 3,通过malloc分配的内存,是占用哪一部分的内存空间?() (A)栈 (B)堆 (C)数据段 (D)以上都不是 4,下面程序执行到最后j的值是() int couter(int i) { static int count = 0; count += i; return (count); } main() { int i,j; for(i = 0;i <= 5;i++) j = couter(i); printf("%d",j); } (A)10 (B)15 (C)5 (D)7 注:去掉static后,j=5 5,在win32平台下,下面程序输出结果是什么() int getArrySize(char str[]) { return sizeof(str)/sizeof(str[0]);
} (A)2 (B)3 (C)4 (D)5 17,下列程序输出() union { unsigned short a; unsigned char b[2]; }a; int main() { a.b[0] = 0x11; a.b[1] = 0x22; printf("0x%x\n",a.a); return 0; } (A)0x2211 (B)0x1122 (C)0x11 (D)0x22 18, 下面的代码输出是什么() void foo() { unsigned int a = 6; int b = -20; //printf("a+b=%d\n",(a+b));//-14 //printf("(a+b>6)=%d\n",(a+b>6));//1 (a+b>6)?puts(">6"):puts("<=6");//>6 } int main() { foo(); return 0; } (A)>6 (B)<=6 (C)程序崩溃 (D)其他 注:若去掉unsigned,(a+b)= -14,(a+b>6) = 0;输出“<=6” 19,下面的代码输出是什么() void getmem(char *p) {