1、一语句实现x是否为2的若干次幂的判断

       1)int i = 512;

       cout << boolalpha << ((i & (i - 1)) ? false : true) << endl; //位与为0,则表示是2的若干次幂

       2)return  (x>>N==1);

2、请问以下代码有什么问题?

char* s="AAA";

printf("%s",s);

s[0]='B';

printf("%s",s);

"AAA"是字符串常量。s是指针,指向这个字符串常量,

又因为是常量区,所以对于s[0]的赋值操作是不合法的

3、写一个“标准”宏,这个宏输入两个参数并返回较小的一个。

       #define Min(X, Y) ((X)>(Y)?(Y):(X)) //结尾没有;

4、交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3; 0

       有两种解法, 一种用算术算法, 一种用^(异或)

a = a + b;

b = a - b;

a = a - b;

       或者

a = a^b;// 只能对int,char..

b = a^b;

a = a^b;

5、下面程序有问题吗?

#include <stdio.h>

#include <stdlib.h>

void getmemory(char *p){

       p=(char *) malloc(100);

}

int main( ){

       char *str=NULL;

            getmemory(str);

       strcpy(p,"hello world");

       printf("%s/n",str);

       free(str);

       return 0;

}

6、进程之间通信的途径

共享存储系统

消息传递系统

管道:以文件系统为基础

7、下面这个程序执行后会有什么错误或者效果。

#define MAX 255

int main(){

              unsigned char A[MAX],i;

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

              A[i] = i;

}

       MAX=255,数组A的下标范围为:0…MAX-1,这是其一,其二i循环到255时,又循环内执行。

       因为A[255]=255;这句本身没有问题,但是返回for (i=0;i<=MAX;i++)语句时,由于unsigned char的取值范围在(0~255)i++以后i又为0了,无限循环下去。

8ASSERT()是干什么用的

ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0),

程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n在程序中不应该为0,如果为0可能导致错误,你可以这样写程序:

......

ASSERT( n != 0);

k = 10/ n;

......

ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。assert()的功能类似,它是ANSI C标准中规定的函数,它与ASSERT的一个重要区别是可以用在Release版本中。

9system"pause");作用?

系统的暂停程序,按任意键继续,屏幕会打印“按任意键继续……”

10、请讲一讲析构函数和虚函数的用法和作用?

析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载。只是在类对象生命期结束的时候,由系统自动调用释放在构造函数中分配的资源。这种在运行时,能依据其类型确认调用那个函数的能力称为多态性,或称迟后联编。另:析构函数一般在对象撤消前做收尾工作,比如回收内存等工作。

虚拟函数的功能是使子类可以用同名的函数对父类函数进行覆盖,并且在调用时自动调用子类覆盖函数,如果是纯虚函数,则纯粹是为了在子类覆盖时有个统一的命名而已。

注意:子类重新定义父类的虚函数的做法叫覆盖,override,而不是overload(重载),重载的概念不属于面向对象编程,重载指的是存在多个同名函数,这些函数的参数表不同..重载是在编译期间就决定了的,是静态的,因此,重载与多态无关.与面向对象编程无关.

11、为什么标准头文件都有类似以下的结构?
       #ifndef __INCvxWorksh
       #define __INCvxWorksh
              ……
       #endif

       防止被重复引用。

12编写一个标准strcpy函数,原型为

char* strcpy( char *strDest, const char *strSrc )

       char*  strcpy( char *strDest, const char *strSrc ){

              assert( (strDest != NULL) && (strSrc != NULL) );

              char *address = strDest;

              while( (*strDest++ = * strSrc++) != ‘\0’ );

           return address;

       }

http://blog.csdn.net/littlestream9527/article/details/8257630

 

13、分别给出BOOLintfloat,指针变量与“零值”比较的 if 语句(假设变量名为var)并能清晰表达程序的意思。

http://www.cnblogs.com/zhangdongsheng/archive/2010/11/08/1871405.html

BOOL型变量:if(!var)

int型变量: if(var==0)

float型变量:

              const float EPSINON = 0.00001;

              if ((x >= - EPSINON) && (x <= EPSINON)

指针变量:  if(var==NULL)

浮点型变量并不精确,所以不可将float变量用“==”=”与数字比较,应该设法转化成“>=”“<=”形式。

14、以下程序的输出结果?

int main()

{

              char a[7]= “ab\0cde\0”;

              int i,j;

              i=sizeof(a);

              j=strlen(a);

              printf(“ddn”i,j);

     }

           c语言中以‘\0’作为字符串的结束符,且strlen()函数计算的是‘\0’字符前的所有字符的个数。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。

15、以下程序的输出结果?     

       int main()

    {

              int  a[3][3]*pi

              p=&a[0][0]

              for(i=0i<9i++)

              p[i]=i+2

              printf(”dn”a[2][1])

       }

输出结果:9

16、写一个函数返回1+2+3+…+n的值(要求代码尽量简单、高效)

       int Sum( int n ){

              long sum = 0;

              for( int i=1; i<=n; i++ ){

                     sum += i;}

              return sum;

       }

       int Sum( int n ){

              return ( (long)1 + n) * n / 2;  //return (1l + n) * n / 2;

       }

       所以程序员们需要敏感地将数学等知识用在程序设计中。

17、请写一个C函数:若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1

       int checkCPU(){

              union w{

                     int a;

                     char b;

              } c;

              c.a = 1;

              return (c.b == 1);

       }

http://blog.csdn.net/rtyytr/article/details/6703580

 

18、看看下面的一段程序有什么错误?
如何修正?

       swap( int* p1,int* p2 )

       {

              int *p;

              *p = *p1;

              *p1 = *p2;

              *p2 = *p;

       }

       swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。

19、分析下面一段程序有什么错误?如何修正?

       int main(int argc, char* argv[])

       {

              char *string = NULL;

              char strdes[10];

              char str[10];

              int i;

              for(i=0; i<10; i++){

                     str[i] = 'a';

              }

              string = strcpy(strdes, str);

              printf("%s\n",string);

              return 0;

       }

20、函数编写

       编写一个函数,作用是把一个char组成的字符串循环右移n

      。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefg”。提示:使用库函数: strcpy()或者memcpy()

        

21、嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?

       while(1)

       {}

       ----------------------------------------------------------

       for(;;)

       {}

      --------------------------------------

       goto

       Loop:

       ...

       goto Loop;

22、#i nclude<filename.h> i nclude “filename.h” 有什么区别?

前者用来包含开发环境提供的库头文件,后者用来包含

自己编写的头文件。

23、在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?

      

       函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调

       C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。

24、函数模板与类模板有什么区别?

       函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。

25、编译器自动对齐的原因?

       为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。

26、引用与指针有什么区别?

       1) 引用必须被初始化,指针不必。

       2) 引用初始化以后不能被改变,指针可以改变所指的对象。

       3) 不存在指向空值的引用,但是存在指向空值的指针。

http://zhidao.baidu.com/question/4616759.html?qbl=relate_question_0&word

27、一个32位的机器,该机器的指针是多少位。

       指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线(冯.诺依曼结构,地址总线和数据总线复用)。所以指针的位数就是4个字节了。

28、设n=10,i=4,则赋值运算
   n%=i+1
执行后n的值为(   
   A
0        B.1         C.2       D.3

29、设a,b为整型数,且a=2,b=4,则表达式(a/b?b+a:b-a)的值为:

       A . 0.5    B. 6    C. 2   D. 此表达式错误

30、在中国东北有这样两个村落,赵村所有的村民都是白天祭祀祖先,而李庄的人都是晚上祭祀祖先,能肯定的没人在白天和晚上都祭祀祖先的。我们也知道赵李明是晚上祭祀祖先的人,那么以下哪个选项是正确的。

      

       A.赵李明是赵村的人。

       B.赵李明不是赵村的人。

       C.赵李明是李庄的人。

       D.赵李明不是李庄的人。

       E.赵李明既不是赵村的人,也不是李庄的人

31、相传在古时候某国的国民都分别居住在两个怪城里,一座“真城”,一座“假城”。凡真城的人个个都说真话,而假城的人个个都说假话。一位知道情况的外国游客来到其中一个城市,他只问了一个问题就知道自己来到是哪个城了。猜猜他问了什么问题?

       你是这个城市的人吗?

32、设“并非无奸不商”为真,则下面哪个选项一定为真。

       A.所有商人都是奸商。

       B.所有商人都不是奸商。

       C.并非所有商人不是奸商。

       D.并非所有商人是奸商。

       E.有的商人不是奸商。

33、有一家人决定搬进城里,于是去找房子。全家三口,夫妻两个和一个5岁的孩子。通过广告找到一家满意的,于是就前去敲门询问。但房东遗憾地说:“我们公寓不招有孩子的住户。丈夫和妻子听了,一时不知如何是好,于是,他们默默地走开了。
   
5岁的孩子,把事情的经过从头至尾都看在眼里,又去敲房东的大门……房东听了之后,高声笑了起来,决定把房子租给他们住。

:这位5岁的小孩子说了什么话,终于说服了房东?