类别导航:
通知:目前网站正常哦!
你的位置:首页 >> 编程技术 >> IT求职知识:基础知识1(c++代码篇)

IT求职知识:基础知识1(c++代码篇)

发表日期:2011-07-05 作者:DH分类:编程技术 标签: c++

又是一个暑假的到来了,虽然现在工作了,已经体验不要暑假的味道了,但是过了这个暑假,很多同学就要准备找工作了。

找工作既是一个自己努力的过程,又是一个考验自己的经历,还有一些不懂得运气。

对于一个it的求职者来说,现在的这个阶段,大家应该在看基础的计算机理论知识。

前段时间有个兄弟问我,你找工作时候的资料,我叫他到墨鱼的博客找,他说很难找,那我就帮他整理一下,希望他能看到,并找到称心的工作。一来可以把一些觉得还有些意思的题分享给大家,同时也给自己做个备忘。

1.宏定义

#define product(x) (x*x)
int main()
{
int i=3, j, k;
j=product(i++);
k=product(++i);
printf("j=%d,k=%d",j,k);
return 0;
}
Answer: 9, 49 Explanation: 注意此处使用的是宏定义,宏定义的展开是简单的替换,所以每次i都会增2. 2. 类型转换
char foo(void)
{
  unsigned int a = 6;
  int  b= -20;
  char c;
  (a+b>6)?(c=1):(c=0);
  return c;
}
Answer: 1 Explanation: 类型转换在int遇到unsigned int是转换为unsigned int。 3. 不适用中间变量的a,b值交换
a=a+b;b=a-b;a=a-b; 
a=a^b;b=a^b;a=a^b;
第一种解法不需要解释,但要说明的是有一个缺点就是当a,b很大时会溢出。 关于第二个解法首先要了解异或运算满足交换律和结合律,从这个角度来看解法二可以这么理解: b = (a^b)^b = a^(b^b) = a^0=a; a=(a^b)^a = a^(b^a)=a^(a^b)=(a^a)^b = 0^b = b; 4. atexit函数
void fn(void);
int main(void)
{
   atexit(fn);
   printf("Hi,");
}

void fun(void)
{
   printf("Jack!\n");
}
Answer: 输出 Hi, Jack! Explanation:这个函数可以再main函数执行结束的时候执行指定的过程。很想消息注册的机制。下面给出个简单例子。 注:这是程序员面试宝典37页的例子,dev c++中测试失败。 5. sizeof
char ss2[] = "0123456789";
char ss3[100]="0123456789";
int  ss4[100]=;
printf("%d,%d,%d\n",sizeof(ss2),sizeof(ss3),sizeof(ss4));
Answer: 11,100,400 Explanation: 11,100,4*100=400(int的大小是4个字节) 6. 关于虚继承
class A
{
	int x;
	......
}
class B: public A;
class C: public A;
class D: public B, public C;
对于上述代码类D将拥有两个x成员,B::x和C::x。在很多情况下我们需要把两个x合并成一个,这时候就需要虚基类的帮忙。 class A; class B:virtual public A; class C:virtual public A; class D:public B, public C; 这而有个二义性和优先级的问题需要考虑: a. 如果在继承路径中最终的子类继承的是同一虚基类的成员,则无二义性 b. 如果在继承路径中某条路径中是虚基类的成员,另一条路径中是派生类的同名成员,则派生类的优先级高于虚基类。 c. 如果每条继承路径中出现非虚基类的同名成员,则有二义性。 例子:
#include  
class B
{ 
   public: 
   void print()
  { 
     std::cout << "B" << std::endl; 
   } 
}; 

class D1: public virtual B
{
}; 

class D2: public virtual B
{ 
   public: 
   void print()
  { 
    std::cout << "D2" << std::endl; 
   } 
}; 

class DD: public D1, public D2
{
}; 

int main ()
{ 
   DD d; 
   d.print();// 注意此处:ok: call D2::print,这是上面分析的第二种情况 
   return 0; 
}
7.从M进制转换为N进制(宝典中的例子有严重错误) 先从简单的例子着手: (1) M进制转换到十进制 a1a2a3…ak(M) = a1*M^(k-1)+a2*M^(k-2) + … ak*M^0 = a1a2…a(k-1)(M)*M + ak = f(k-1)*M + ak(这一步是递归表达) (2)十进制转换M进制 仿照上述转换,同样得到 f(Num/M)*10 + Num%M(递归表示) (3)泛化:任意进制数转换N进制,假设Num/N结果是10进制,Num用自身的进制表示当然对于大于10的进制需要要引入其他符号表示 f(Num/N)*10 + Num%N 简单的例子:
int ToRadix(int num, int toRadix) 
{ 
    if(num/toRadix==0) 
       return num; 
    else 
       return ToRadix(num/toRadix, toRadix)*10 + num%toRadix; 
}
int main(void) 
{ 
    printf("%d\n",ToRadix(0x12,4)); //注意此处的参数表示 
    return 0; 
}
8.地址的类型
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl;
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl;
Answer: false true Explanation: (int&)a 和 *((int*)&a)是一样的,把&a这个地址上32位数看作int型

除非注明,文章均为灯火部落原创,转载请注明出处:IT求职知识:基础知识1(c++代码篇)-灯火部落
相关文章:
  • IT求职知识:基础知识2(c++理论篇)
  • wordpress安全:处理垃圾评论
  • wordperss和zblog的一个区别,求解
  • wordpress安全:被垃圾评论搞的很烦
  • wordpress主题:增加帅哥认证标识
  • wordpress提高速度之六:主题中数据库定时优化(WP_Cron篇)
  • ∧回到顶部∧