一些笔试题

来源:互联网 发布:iphone怎么传文件到mac 编辑:程序博客网 时间:2024/04/19 19:36

我没有参加过腾讯的笔试题,以下笔试题都是从网上找来,但都加上了我个人的解法与心得。
001.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
解:(C)中a++,左则不是一个有效变量,不能赋值,可改为:(++a) += a;
以下是用于测试的程序:结果为(A):9, (B):10,(C):11
#include<iostream>
using namespace std;

int main(int argc, char* argv[])
{
   int a = 4;
   a += (a++);
   cout<<a<<endl;
   a = 4;
   a += (++a);
   cout<<a<<endl;
   a = 4;
   //(a++) += a;如果没注释,将会有:error C2106: '+=' : left operand must be l-value
   cout<<a<<endl;
   a = 4;
   (++a)+=(a++);
   cout<<a<<endl;
   return 0;
}

002. 回答下面的问题.。(4分)
(1).头文件中的 ifndef/define/endif 干什么用?预处理
答:防止头文件被重复引用
(2). #include <filename.h> 和 #include "filename.h" 有什么区别?
答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。
(3).在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?
答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变
量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调
用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
(4). switch()中不允许的数据类型是?
答:实型(就是float,浮点数,说白了就是有小数点的数)。

007.C++中为什么用模板类.。
解:(1)可用来创建动态增长和减小的的数据结构。
  (2)它是类型无关的,因此具有很高的可复用性.
        (3)它在编译时而不是运行时检查数据类型,保证了类型安全。
        (4)它是平台无关的,可移植性。
        (5)可用于基本数据类型。

008.函数模板与类模板有什么区别?
解:函数模板的实例化是编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。

009.库若出现日志满了,会出现什么情况,是否还能使用?
解:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。也就是说基本上处于不能使用的状态。

010.关于内存对齐的问题以及sizof()的输出?
解:编译器自动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问公需要一次访问。

011.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现?
解:将操作多个表的操作放入到事务中进行处理.

012.写出下列代码的输出内容
#include "stdio.h"
int inc(int a)
{
return(++a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);

013.请写出下列代码的输出内容
#include "stdio.h"
main()
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:%d,%d,%d",b,c,d);
return 0;
}

解: 10,12,120

014.触发器怎样工作的?
解:触发器主要是通过事件进行触发而被执行的,当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,数据库就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。

 

 


 

 

 

void show(FUNC2 fun,int arg1, int*arg2)
{
INCp=&inc;
int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf("%d/n",*arg2);
}

main()
{
int a;
show(multi,10,&a);
return 0;
}