C/C++面试题

C/C++嵌入式面试题 1、描述⼀下gcc的编译过程?gcc编译过程分为4个阶段:预处理、编译、汇编、链接。预处理:头⽂件包含、宏替换、条件编译、删除注释编译:主要进⾏词法、语法、语义分析等,检查⽆误后将预处理好的⽂件编译成汇编⽂件。汇编:将汇编⽂件转换成 ⼆进制⽬标⽂件链接:将项⽬中的各个⼆进制⽂件+所需的库+启动代码链接成可执⾏⽂件2、内存的最⼩存储单位以及内存的最⼩计量单位分别是?内存的最⼩存储单位为 ⼆进制位, 内存的最⼩计量单位 字节3、#include 与#include ""的区别? 阅读详情

 

1.介绍一下STL,详细说明STL如何实现vector.

    Answer:

    STL (标准模版库,Standard Template Library.它由容器算法迭代器组成。

    STL有以下的一些优点:可以方便容易地实现搜索数据或对数据排序等一系列的算法;调试程序时更加安全 和方便;即使是人们用STL在UNIX平台下写的代码你也可以很容易地理解(因为STL是跨平台的)。

    vector实质上就是一个动态数组,会根据数据的增加,动态的增加数组空间。

2.如果用VC开发程序,常见这么几个错误,C2001,c2005,c2011,这些错误的原因是什么。

    Answer:

    在学习VC++ 的过程中,遇到的LNK2001错误的错误消息主要为:unresolved external symbol “symbol”(不确定的外部“符号”)。

    如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。

    一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。

    编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。

3.继承和委派有什么分别,在决定使用继承或者委派的时候需要考虑什么。

    在OOD,OOP中,组合优于继承。

    当然多态的基础是继承,没有继承多态无从谈起。

    当对象的类型不影响类中函数的行为时,就要使用模板来生成这样一组类。

    当对象的类型影响类中函数的行为时,就要使用继承来得到这样一组类。

4.指针和引用有什么分别;如果传引用比传指针安全 ,为什么?如果我使用常量指针难道不行吗?

    (1) 引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值。

    (2) 不存在NULL引用,引用必须与合法的存储 单元关联;而指针则可以是NULL.(3) 引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用;而指针在任何时候都可以改变为指向另一个对象。给引用赋值并不是改变它和原始对象的绑定关系。

    (4) 引用的创建和销毁并不会调用类的拷贝构造函数(5) 语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的,只不过编译器帮我们完成了转换。

    不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,显得很安全。

    const 指针仍然存在空指针,并且有可能产生野指针。

    总的来说:引用既具有指针的效率,又具有变量使用的方便性和直观性。

5.参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什么;传值,传指针或者引用

6.结合一个项目说明你怎样应用设计模式的理念。

    设计模式更多考虑是扩展和重用,而这两方面很多情况下,往往会被忽略。

    不过,我不建议滥用设计模式,以为它有可能使得简单问题复杂化。

7.介绍一下你对设计模式的理解。(这个过程中有很多很细节的问题随机问的)

    设计模式概念是由建筑设计师Christopher Alexander提出:"每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。"上述定义是对设计模式的广义定义。将其应用到面向对象软件的领域内,就形成了对设计模式的狭义定义。

    可以简单的认为:设计模式就是解决某个特定的面向对象软件问题的特定方法, 并且已经上升到理论程度。

    框架与设计模式的区别:1,设计模式和框架针对的问题域不同。设计模式针对面向对象的问题域;框架针对特定业务的问题域2,设计模式比框架更为抽象。设计模式在碰到具体问题后,才能产生代码;框架已经可以用代码表示3,设计模式是比框架更小的体系结构元素。框架中可以包括多个设计模式设计模式就像武术中基本的招式。将这些招式合理地纵组合起来,就形成套路(框架),框架是一种半成品。

8.C++ 和C定义结构的分别是什么。

    C language 的结构仅仅是数据的结合C plus plus的struct 和 class 其实具备几乎一样的功能,只是默认的访问属性不一样而已。

9.构造函数可否是虚汗数,为什么?析构函数呢,可否是纯虚的呢?

    构造函数不能为虚函数,要构造一个对象,必须清楚地知道要构造什么,否则无法构造一个对象。

    析构函数可以为纯虚函数。

10,拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等。

    深拷贝意味着拷贝了资源和指针,而浅拷贝只是拷贝了指针,没有拷贝资源这样使得两个指针指向同一份资源,造成对同一份析构两次,程序崩溃。

    临时对象的开销比局部对象小些。

11.结合1个你认为比较能体现OOP思想的项目,用UML来描述。(最好这个项目继承,多态,虚函数都有体现)这个问题大概会占面试时间的一半,并且会问很多问题,一不小心可能会被问住)。

    ……

12.基类的有1个虚函数,子类还需要申明为virtual吗?为什么。

    不申明没有关系的。

    不过,我总是喜欢显式申明,使得代码更加清晰。

13.C也可以通过精心封装某些函数功能实现重用,那C++的类有什么优点吗,难道仅仅是为实现重用。

    并不仅仅是这样的。

    OOD,OOP从根本上改变了程序设计模式和设计思想,具备重大和深远的意义。

    类的三大最基本的特征:封装,继承,多态。

14.C++特点是什么,如何实现多态?画出基类和子类在内存中的相互关系。

    多态的基础是继承,需要虚函数的支持,简单的多态是很简单的。

    子类继承父类大部分的资源,不能继承的有构造函数,析构函数,拷贝构造函数,operator=函数,友元函数等等

15.为什么要引入抽象基类和纯虚函数?

    主要目的是为了实现一种接口的效果。

16.介绍一下模板和容器。如何实现?(也许会让你当场举例实现)

    模板可以说比较古老了,但是当前的泛型编程实质上就是模板编程。

    它体现了一种通用和泛化的思想。

    STL有7种主要容器:vector,list,deque,map,multimap,set,multiset.

17.你如何理解MVC.简单举例来说明其应用。

    MVC模式是observer 模式的一个特例,典型的有MFC里面的文档视图架构。

18,多重继承如何消除向上继承的二义性。

    使用虚拟继承即可。

 

1. 以下三条输出语句分别输出什么? [C 易 ]

char str1[]       = "abc";

char str2[]       = "abc";

const char str3[] = "abc";

const char str4[] = "abc";

const char* str5  = "abc";

const char* str6  = "abc";

cout << boolalpha << ( str1==str2 ) << endl; // 输出什么?

Cout << boolalpha << ( str3==str4 ) << endl; // 输出什么?

Cout << boolalpha << ( str5==str6 ) << endl; // 输出什么?

 

13. 非 C++ 内建型别 A 和 B ,在哪几种情况下 B 能隐式转化为 A ? [C++ 中等 ]

答:

a. class B : public A { …… } // B 公有继承自 A ,可以是间接继承的

b. class B { operator A( ); } // B 实现了隐式转化为 A 的转化

c. class A { A( const B& ); } // A 实现了 non-explicit 的参数为 B (可以有其他带默认值的参数)构造函数

d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个

 

12. 以下代码中的两个 sizeof 用法有问题吗? [C 易 ]

void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母

{

    for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++I )

        if( 'a'<=str[i] && str[i]<='z' )

            str[i] -= ('a'-'A' );

}

char str[] = "aBcDe";

cout << "str 字符长度为 : " << sizeof(str)/sizeof(str[0]) << endl;

UpperCase( str );

cout << str << endl;

 

7. 以下代码有什么问题? [C 难 ]

void char2Hex( char c ) // 将字符以 16 进制表示

{

    char ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);

    char cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);

    cout << ch << cl << ' ';

}

char str[] = "I love 中国 ";

for( size_t i=0; i<strlen(str); ++I )

    char2Hex( str[i] );

cout << endl;

 

4. 以下代码有什么问题? [C++ 易 ]

struct Test

{

    Test( int ) {}

    Test() {}

    void fun() {}

};

void main( void )

{

    Test a(1);

    a.fun();

    Test b();

    b.fun();

}

 

5. 以下代码有什么问题? [C++ 易 ]

cout << (true?1:"1") << endl;

 

8. 以下代码能够编译通过吗,为什么? [C++ 易 ]

unsigned int const size1 = 2;

char str1[ size1 ];

unsigned int temp = 0;

cin >> temp;

unsigned int const size2 = temp;

char str2[ size2 ];

 

9. 以下代码中的输出语句输出 0 吗,为什么? [C++ 易 ]

struct CLS

{

    int m_i;

    CLS( int I ) : m_i(i) {}

    CLS()

    {

        CLS(0);

    }

};

CLS obj;

cout << obj.m_i << endl;

 

10. C++ 中的空类,默认产生哪些类成员函数? [C++ 易 ]

答:

class Empty

{

public:

    Empty();                          // 缺省构造函数

    Empty( const Empty& );            // 拷贝构造函数

    ~Empty();                         // 析构函数

    Empty& operator=( const Empty& ); // 赋值运算符

    Empty* operator&();               // 取址运算符

    const Empty* operator&() const;   // 取址运算符 const

};

 

3. 以下两条输出语句分别输出什么? [C++ 难 ]

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; // 输出什么?

 

2. 以下反向遍历 array 数组的方法有什么错误? [STL 易 ]

vector array;

array.push_back( 1 );

array.push_back( 2 );

array.push_back( 3 );

 

for( vector::size_type i=array.size()-1; i>=0; --I ) // 反向遍历 array 数组

{

    cout << array[i] << endl;

}

 

6. 以下代码有什么问题? [STL 易 ]

typedef vector IntArray;

IntArray array;

array.push_back( 1 );

array.push_back( 2 );

array.push_back( 2 );

array.push_back( 3 );

// 删除 array 数组中所有的 2

for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )

{

    if( 2 == *itor ) array.erase( itor );

}

 

11. 写一个函数,完成内存之间的拷贝。 [ 考虑问题是否全面 ]

答:

  程序代码

void* mymemcpy( void *dest, const void *src, size_t count )

{

    char* pdest = static_cast<char*>( dest );

    const char* psrc = static_cast<const char*>( src );

    if( pdest>psrc && pdest<psrc+cout ) 能考虑到这种情况就行了

    {

        for( size_t i=count-1; i!=-1; --I )

                pdest[i] = psrc[i];

    }

    else

    {

        for( size_t i=0; i<count; ++I )

            pdest[i] = psrc[i];

    }

    return dest;

}

int main( void )

{

    char str[] = "0123456789";

    mymemcpy( str+1, str+0, 9 );

    cout << str << endl;

 

    system( "Pause" );

    return 0;

}

 

29. 编写一个函数,函数接收一个字符串 , 是由十六进制数组成的一组字符串 , 函数的功能是把接到的这组字符串转换成十进制数字 . 并将十进制数字返回 .

30. 编写一个函数将一条字符串分成两部分,将前半部分按 ASCII 码升序排序,后半部分不变,(如果字符串是奇数则中间的字符不变,)最后再将前后两部分交换,然后将该字符串输出,

测试字符串“ ADZDDJKJFIEJHGI ”

31. 找错

Void test1()

{

    char string[10];

    char* str1="0123456789";

strcpy(string, str1);

}

 

 

Void test2()

{

    char string[10], str1[10];

for(I=0; I<10;I++)

{

        str1[i] ='a';

}

strcpy(string, str1);

}

 

Void test3(char* str1)

{

    char string[10];

    if(strlen(str1)<=10)

{

    strcpy(string, str1);

}

}

 

32.    找错

#define MAX_SRM 256

 

DSN get_SRM_no()

{

        static int SRM_no;

        int I;

        for(I=0;I{

SRM_no %= MAX_SRM;

if(MY_SRM.state==IDLE)

{

    break;

}

}

if(I>=MAX_SRM)

return (NULL_SRM);

else

return SRM_no;

}

33.    写出程序运行结果

 

int sum(int a)

{

        auto int c=0;

        static int b=3;

c+=1;

b+=2;

return(a+b+C);

}

   

void main()

{

        int I;

int a=2;

for(I=0;I<5;I++)

{

    printf("%d,", sum(a));

}

}

34.   

 

int func(int a)

{

    int b;

    switch(a)

    {

        case 1: 30;

        case 2: 20;

        case 3: 16;

        default: 0

}

return b;

}

则 func(1)=?

35:

int a[3];

a[0]=0; a[1]=1; a[2]=2;

int *p, *q;

p=a;

q=&a[2];

则 a[q-p]=?

 

36.

定义 int **a[3][4], 则变量占有的内存空间为: _____

37.

编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入 2004 年 12 月 31 日 23 时 59 分 59 秒,则输出 2005 年 1 月 1 日 0 时 0 分 0 秒。

38. 写一个函数,判断一个 int 型的整数是否是 2 的幂,即是否可以表示成 2^X 的形式(不可以用循环)

我只知道是用递推,大概写了一下,如下:

int IsTwoPow(int s)

{

  if(s==1)return FALSE;

  s=s>>1;

  if(s>1)IsTwoPow(s);

  return (s==1)?TRUE:FALSE;// 大概是这个意思,但是这一句似乎不该这么返回!

}

 

39 A , B 从一堆玻璃球(共 100 个)里向外拿球,规则如下:

  (1)A 先拿,然后一人一次交替着拿;

( 2 )每次只能拿 1 个或 2 个或 4 个;

( 3 )谁拿最后一个球,谁就是最后的失败者;

  问 A , B 谁将是失败者?写出你的判断步骤。

40. 已知:无序数组,折半查找,各元素值唯一。

函数原型是: Binary_Seach(int array[], int iValue, int iCount)

array 是数组,在里面用折半查找的方法找等于 iValue 的值,找到返回 1 否则 0 , iCount 是元素个数

41. 统计一个字符串中字符出现的次数

42.100 位以上的超大整数的加法(主要考虑数据结构和加法的实现)。

43. 对如下电文: "CASTCASTSATATATASA" 给出 Huffman 编码。

44.int (* (*f)(int, int))(int) 表示什么含义?

45.x=x+1 , x+=1 , x++ ,为这三个语句的效率排序。并说明为什么。

46. 中缀表达式 A-(B+C/D)*E 的后缀形式是什么?

47.struct S1

{

char c;

int i;

};

sizeof(S1) = ?

class X{

public:

X();

virtual ~X();

void myMemberFunc();

static void myStaticFunc();

virtual void myVirtualFunc();

private:

int i;

char * pstr;

char a;

}

sizeof(X) = ?

48. 找出两个字符串中最大子字符串 , 如 "abractyeyt","dgdsaeactyey" 的最大子串为 "actyet"

49. 有一百个整数 , 其中有负数 , 找出连续三个数之和最大的部分 .

50. 写一程序实现快速排序 . 假设数据输入为一文件

快速算法描述如下

Algorithm Partition

Input: sequence a0, ..., an-1 with n elements

Output: permutation of the sequence such that all elements a0, ..., aj are less than or equal to all

elements ai, ..., an-1 (i > j)

Method:

choose the element in the middle of the sequence as comparison element x

let i = 0 and j = n-1

while ij

 

    search the first element ai which is greater than or equal to x

    search the last element aj which is less than or equal to x

    if ij

 

    exchange ai and aj

    let i = i+1 and j = j-1

After partitioning the sequence, Quicksort treats the two parts recursively by the same procedure.

The recursion ends whenever a part consists of one element only.

51. 写一算法检测单向链表中是否存在环 (whether there is a loop in a link list),

要求算法复杂度 (Algorithm's complexity 是 O(n)) 并只使用常数空间 (space is O(c)).

注意,你只知道一个指向单向链表头的指针。链表的长度是不定的,而且环出现的地方也是不定的,环有可能在头,有可能在中间。而且要求是检测 , 不能破坏环的结构 .

52. 设下列函数已经通过了调试

bool Sort_Array(ArrayType * Pinputarray, ArrayType * Poutarray);

该函数在内存中排序,能把字节数最大为 100M 字节的 ArrayType 类型的数组排序。其中 ArrayType 是一个

预定义的数组类型(细节无关紧要), Pinputarray , Poutarray 分别为排序前的指针和排序后的指针。

请用 c 语言的伪码风格设计一个算法,他调用上面给出的函数完成下列从输入到输出的任务:

输入:排序前的大文件,名称为 char * pinoutfilename ,其内容为用分号分隔的 ArrayType 类型的数组元素,可装满 4 个 100M 字节的数组。

输出:排序后的大文件 char * poutoutfilename 。

53. 用最有效率的方法算出 2 乘以 8 等於几?

54.

1. 错误的转义字符是 ( c )

A.'/091' B.'//'

C.'/0' D.'/''

2. 若数组名作实参而指针变量作形参,函数调用实参传给形参的是 ( d )

A. 数组的长度 B. 数组第一个元素的值

C. 数组所有元素的值 D. 数组第一个元素的地址

3. 变量的指针含意是指变量的 ( b )

A. 值 B. 地址

C. 存储 D. 名字

5. 某文件中定义的静态全局变量 ( 或称静态外部变量 ) 其作用域是 ( d )

A. 只限某个函数 B. 本文件

C. 跨文件 D. 不限制作用域

55.

1. 解二次方程 :a*x*x+b*x+c

int Quadratic( double a,double b,double c,double& x1,double& x2);

返回值:解的个数

2. 最大公约数

DWORD Divisor( DWORD dwFirst, DWORD dwSecond );

返回值:最大公约数

3. 根据蒙特卡洛算法计算圆周率

double PI( DOWRD dwCount/* 测试次数 */ ) ;

返回值: PI

4. 无符号整数乘法,乘数为 32bit ,结果为 64bit

提示: 32bit 整数分解为 16bit 相乘

void Multiply( DWORD dwFirst, DWORD dwSecond, DWORD& dwHigh, DWORD& dwLower );

5. 链表排序 ( 从小到大 )

节点定义为:

struct Node{

  int nValue;

  struct Node* pNext;

};

最后一个节点的 pNext = NULL.

Node* SortChain( Node* pHead );

返回值:链表头

 

24.Assignment 2: Picture Processing

Use C++, Java, or similar languages or/and any middleware such as EJB and J2EE to process a  picture with a high resolution (3 Mega Pixels for example). Use some methodologies to degrade  the resolution of the picture to make it quicker for browsing. Then divide the degraded  picture into 9 sectors equally. Click any of the 9 sectors will result a detailed picture for  this sector with the same resolution as that of the original picture. This assignment is  designed for you to demonstrate your ability to handle pictures.

25. 用 <<,>>,|,& 实现一个 WORD(2 个字节 ) 的高低位交换 !!

26. 要开辟 P1,P2,P3,P4 内存来做缓冲 , 大小自定 , 但这四个缓冲的大小要一样 , 并且是连续的 !

27. 有一浮点型数组 A, 用 C 语言写一函数实现对浮点数组 A 进行降序排序 , 并输出结果 , 要求要以数组 A 作为函数的入口 .( 建议用冒泡排序法 )

28. 找错:

#include <string.h>

#include <stdio.h>

class Base

{

private:

char * name;

public:

Base(char * className)

{

name = new char[strlen(className)];

strcpy(name, className);

}

~Base()

{

delete name;

}

char * copyName()

{

char newname [256];

strcpy(newname, name);

return newname;

}

char * getName()

{

return name;

}

static void print(Base base)

{

printf("name: %s/n" , base.name);

}

};

class Subclass : public Base

{

public:

Subclass(char * className) : Base(className)

{

}

};

int main()

{

Base * pBase = new Subclass("test");

Base::print(*pBase);

printf("name: %s/n", pBase->getName());

printf("new name: %s/n", pBase->copyName());

return 0;

}

21. 有双向循环链表结点:

typedef struct node

{

  int date;

  struct node *front,*next;

}_Node;

有两个双向循环链表 A , B ,知道其头指针为: pHeadA,pHeadB ,请写一函数将两上链表中 date 值相同的结点删除

 

22.

char * GetStr()

{

char *tmp;

tmp = "123"

return tmp;

}

void main()

{

printf("%s", GetStr());

}

会输出 123 吗? 123 创建在堆上还是栈上呢? 123 的空间是什么时候释放的?

23.

字符指针、浮点数指针、以及函数指针这三种类型的变量哪个占用的内存最大?为什么?

类 ClassB 从 ClassA 派生,那么 ClassA *a = new ClassB( … ); 试问该表达是否合法?为什么?

如果 ClassA 中定义并实现虚函数 int func(void) , ClassB 中也实现该函数,那么上述变量 a->func() 将调用哪个类里面的函数?如果 int func(void) 不是虚函数,情况又如何?为什么?

char **p, a[16][8];  问: p=a 是否会导致程序在以后出现问题?为什么?

如下所述的 if else 和 switch 语句哪个的效率高?为什么?

在同一个进程中,一个模块是否可以通过指针操作破坏其它模块的内存,为什么?

应用程序在运行时的内存包括代码区和数据区,其中数据区又包括哪些部分?

NetFetch [2006-07-06 09:20 AM]

c/c++ 面试题集锦 2006-7-6 更新

18.Consider the following code:

 

#include <stdio.h>

#include <string.h>

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

int i = 1;

char buf[4];

strcpy(buf, "AAAA");

printf("%d/n", i);

return 0;

}

a) When compiled and executed on x86, why does this program usually not

output what the programmer intended?

 

b) Name several ways in which the security problem that causes this

program not to output what the programmer intended can be prevented

WITHOUT changing the code.

 

19.int w=1,x=2,y=3,z=4;

m=(w<x)?w:x;

m=(m<y)?m:y;

m=(m<2)?m:z;

printf("m=%d",m);        说出结果

20. 说出结果

#include <stdio.h>

main()

{

    FILE *fp;

    int i,a[4]={1,2,3,4},b;

    fp=fopen("data.dat","wb");// 这里帮忙解释一下

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

    fwrite(&a[i],sizeof(int),1,fp);// 这里也帮忙看一下

    fclose(fp);

    fp=fopen("data.dat","rb");

    fseek(fp,-2L*sizeof(int),SEEK_END);// 还有这里

    fread(&b,sizeof(int),1,fp);// 这里还有也看一下

    fclose(fp);

    printf("b=%d/n",b);

}

12. 请完成以下题目。注意,请勿直接调用 ANSI C 函数库中的函数实现。

   a) 请编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数,并请

     给出该题的至少一个不同解法。

   b) 请编写一个 C 函数,该函数将给定的一个字符串转换成整数。

   c) 请编写一个 C 函数,该函数将给定的一个整数转换成字符串。

   d) 请编写一个 C 函数,该函数将一个字符串逆序。

   e) 请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回

     该字符所在位置索引值。

   f) 请编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,

     该字符串是由同一字符组成的。

 

给出演示上述函数功能的一个简单程序,并请编写对应的 Makefile 文件

 

13. 我们需要编写一个图形相关的应用程序,需要处理大量图形 (Shape) 信息,

图形有矩形 (Rectangle) ,正方形 (Square) ,圆形 (Circle) 等种类,应用

需要计算这些图形的面积,并且可能需要在某个设备上进行显示 ( 使用在标准

输出上打印信息的方式做为示意 ) 。

 

    a) 请用面向对象的方法对以上应用进行设计,编写可能需要的类

    b) 请给出实现以上应用功能的示例性代码,从某处获取图形信息,

      并且进行计算和绘制

    c) 如果你的 Square 继承自 Rectangle ,请给出理由,如果不是,

      请给出理由,并且请比较两种方式的优劣

    d) 请问你所编写的类,在如下代码中会有何表现,请解释

    void test_rectangle_area(Rectangle& r)

    {

        r.set_width(10);

        r.set_height(15);

        assert(r.area() == 150);

    }

14. 假设现有一个单向的链表,但是只知道只有一个指向该节点的指针 p ,并且假设这个节点不是尾节点,试编程实现删除此节点

15. 写一个程序,把一个 100 以内的自然数分解因数。(自然数分解因数就是将一个自然数分解为几个素数的乘积,提示 , 由于该数不是很大 , 所以可以将质数保存在数组中 , 以加快计算速度 )

16. 编写一个 Identify 的分配、释放的函数,为 1 - 10000 之间的自然数。

17. 分别实现 itoa 和 atoi.

 

NetFetch [2006-07-06 09:18 AM]

c/c++ 面试题集锦 2006-7-6 更新

 

1. 多态类中的虚函数表是 Compile-Time ,还是 Run-Time 时建立的 ?

2. 将一个 1M -10M 的文件,逆序存储到另一个文件,就是前一个文件的最后一个

字符存到新文件的第一个字符,以此类推。

3.main 主函数执行完毕后,是否可能会再执行一段代码 ?

4. 一个父类写了一个 virtual 函数,如果子类覆盖它的函数不加 virtual , 也能实现多态 ?

在子类的空间里,有没有父类的这个函数,或者父类的私有变量 ?

5. 给一个字符串、例如 “ ababc ”要求返回“ ab ” . 因为“ ab ”连续重复出现且最长。

  用 C/C ++语言写一函数完成该算法,给出复杂度

6. 对序列 1 、 1 、 2 、 3 、 5 、 8 、 13 。。。。   是 Fab.. 数列

  2 、 3 、 5 、 13... 是 Fab.. 质数数列,因为他们与自己前面的 Fab... 数列都互质

给出 k ,返回第 k 小的 Fab.. 质数

7.101 个硬币 100 真、 1 假,真假区别在于重量。请用无砝码天平称两次给出真币重还是假币重的结论。

8. 完成字符串拷贝可以使用 sprintf 、 strcpy 及 memcpy 函数,请问这些函数有什么区别,你喜欢使用哪个,为什么?

9. 变量的声明和定义有什么区别?

10. 请写出下面代码在 32 位平台上的运行结果,并说明 sizeof 的性质:

#include <stdio.h>

#include <stdlib.h>

 

int main(void)

{

        char a[30];

        char *b = (char *)malloc(20 * sizeof(char));

         printf("%d/n", sizeof(a));

        printf("%d/n", sizeof(b));

        printf("%d/n", sizeof(a[3]));

        printf("%d/n", sizeof(b+3));

        printf("%d/n", sizeof(*(b+4)));

        return 0 ;

}

 

NetFetch [2006-06-20 11:18 AM]

4.

# i nclude "stdafx.h"

#define SQR(X) X*X

 

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

{

int a = 10;

int k = 2;

int m = 1;

 

a /= SQR(k+m)/SQR(k+m);

printf("%d/n",a);

 

return 0;

}

这道题目的结果是什么啊 ?

 

define 只是定义而已,在编择时只是简单代换 X*X 而已,并不经过算术法则的

 

a /= (k+m)*(k+m)/(k+m)*(k+m);

=>a /= (k+m)*1*(k+m);

=>a = a/9;

=>a = 1;

NetFetch [2006-06-20 11:17 AM]

3. 请简单描述 Windows 内存管理的方法。

 

内存管理是操作系统中的重要部分,两三句话恐怕谁也说不清楚吧~~

我先说个大概,希望能够抛砖引玉吧

 

当程序运行时需要从内存中读出这段程序的代码。代码的位置必须在物理内存中才能被运行,由于现在的操作系统中有非常多的程序运行着,内存中不能够完全放下,所以引出了虚拟内存的概念。把哪些不常用的程序片断就放入虚拟内存,当需要用到它的时候在 load 入主存(物理内存)中。这个就是内存管理所要做的事。内存管理还有另外一件事需要做:计算程序片段在主存中的物理位置,以便 CPU 调度。

内存管理有块式管理,页式管理,段式和段页式管理。现在常用段页式管理

块式管理:把主存分为一大块、一大块的,当所需的程序片断不在主存时就分配一块主存空间,把程 序片断 load 入主存,就算所需的程序片度只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了 50 %的内存空间,但时易于管理。

页式管理:把主存分为一页一页的,每一页的空间要比一块一块的空间小很多,显然这种方法的空间利用率要比块式管理高很多。

段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法在空间利用率上又比页式管理高很多,但是也有另外一个缺点。一个程序片断可能会被分为几十段,这样很多时间就会被浪费在计算每一段的物理地址上(计算机最耗时间的大家都知道是 I/O 吧)。

段页式管理:结合了段式管理和页式管理的优点。把主存分为若干页,每一页又分为若干段。好处就很明显,不用我多说了吧。

 

各种内存管理都有它自己的方法来计算出程序片断在主存中的物理地址,其实都很相似。

 

 

static Global variable: 文件作用域:只在声明的文件中有效,其他源文件中不可见;同时有了static 的生命周期
Global variable: 文件作用域:可以加上extern 声明为外部变量,跨文件作用域

static (Global) Function:  有文件作用域,只在本文件中使用
Global Function: 无文件作用域

static Member (in Function) variable: 函数调用完成后,变量保存状态,再次调用函数,不会重新分配空间
Member(in Funcition) variable: 函数内的生命周期

static Member(in Class) variable:  属于类范围,
Member(in Class) variable
: 属于类派生的特定对象,生命周期和对象一致

 

(源自http://blog.youkuaiyun.com/duckur/archive/2005/11/05/523545.aspx )

嵌入式面经111道面试题全解析C/C++可参考 该专栏是我校招阶段整理的关于“嵌入式面经”的111道题目,“软件开发岗位”也可以参考下。涵盖了大多数嵌入式/软件开发岗位常见基础面试题,题目来源是牛客网各大大厂的面经,答案是我逐个查阅资料,理解整理出的答案争取让读者尽可能的容易阅读和理解。...... 阅读详情

相关推荐

C/C++面试题(八股文)

宏在预处理阶段完成替换,之后被替换的文本参与编译,相当于直接插入了代码,运行时不存在函数调用,执行起来更快;函数调用在运行时需要跳转到具体调用函数·宏定义属于在结构中插入代码,没有返回值;函数调用具有返回值·宏定义参数没有类型,不进行类型检查;函数参数具有类型,需要检查类型。·宏定义不要在最后加分号·宏主要用于定义常量及书写复杂的内容;typedef主要用于定义类型别名·宏替换发生在编译阶段,属于文本插入替换;typedef是编译的一部分·宏不检查类型;typedef会检查数据类型。

x_xinghua的博客 3343

C字符用16进制表示

程序如下: void char2Hex(unsigned char c ) // 将字符以16进制表示 { char ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1); char cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1); cout } char str[] =

吴宏扬的专栏 3252

C/C++常见面试题(一)

C/C++最全面试题,最全基础,学会这些可以应对市场上几乎所有的面试题

发狂的小花的博客 1904

C++ Hex 转 ASCII (十六进制转字符串)

#include <iostream> using namespace std; // 获取字符串长度 unsigned int strlen(const char *str) { const char *cp = str; while(*cp++); return (cp - str -1); } //十六进制转字符 int hex2char(uint8_t...

逸冰小子 9503

matlab十六进制转十进制代码-char2hex-hex2char:将十进制整数字符串转换为十六进制表示形式并在Matlab中返回

matlab十六进制转十二进制代码char2hex-hex2char 将十进制整数字符串转换为十六进制表示形式,然后再返回到Matlab中。 版本1.2,2016年4月21日 下载资料库: 返回一个二维字符串数组,其中每行是S行中每个十进制整数字符串的十六进制表示形式。 S必须是仅包含十进制数字或前导空格的字符数组。 与Matlab不同,此函数可以返回大于2^52整数的精确表示形式。 返回一个二维字符串数组,其中每一行都是H行中每个十六进制整数字符串的十进制表示形式。 H必须是仅包含十六进制数字的字符数组。 与Matlab不同,此函数可以返回大于2^52整数的精确表示形式。 如果Matlab的Java的JVM不可用, char2hex和hex2char回落到dec2hex和hex2dec分别。 在那种情况下,可能不会返回大于2^52整数的精确表示形式。 Andrew D. Horchler, horchler @ gmail。 com , 创建:1-23-12,修订:1.2,4-21-16 此版本已通过Matlab 9.0.0.341360(R2016a)测试Mac OS X 10.1

hex2ascii_Hex2Char_十六进制转字符串_

在网络通信中经常用到16进制和ASCII码字符数组互相转换的功能

C++面试题 个人整理

以下内容为本人在网上摘抄整理 1.static有什么用途?(请至少说明两种)     1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。     2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。     3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就

qqq4012的专栏 644

博途 V16(TIA portal V16)安装教程

本文提供了西门子TIA Portal V16软件的完整安装指南。内容包括百度网盘下载链接(提取码kv69)、详细安装步骤(关闭安全保护、典型安装设置)、授权破解方法,以及PLCSIM仿真功能的使用说明。重点演示了S7-1200 PLC程序的仿真过程,解析了仿真界面各元素功能,包括状态指示灯(RUN/STOP/ERROR)、操作按钮(RUN/STOP/MRES)和网络接口状态等。通过图文并茂的方式,完整呈现了从软件安装到PLC程序仿真的全流程操作。

lingchen1906的博客 6692

Hex 和string 互转工具类

package com.hisun.merchant.utils; public class HexStringByte {   public static String stringToHex(String bin)   {     char[] digital = "0123456789ABCDEF".toCharArray();     StringBuffer sb =

phpfzh的博客 3494

RK3576平台部署NanoTrack:边缘AI视觉跟踪实战指南

边缘AI部署是将深度学习模型在资源受限的嵌入式设备上高效运行的关键技术,其核心在于模型压缩、硬件适配与软件栈优化。通过INT8量化、算子融合与内存优化等原理,能显著降低模型计算量与内存占用,从而在嵌入式NPU上实现实时推理。这项技术的价值在于为安防监控、无人机视觉、工业检测等场景提供低功耗、高响应的智能感知能力。以瑞芯微RK3576平台部署轻量级视觉跟踪模型NanoTrack为例,其过程涉及模型结构分析、RKNN工具链转换、C++推理程序开发及多线程性能优化,完整展现了从算法到产品的工程化路径,为开发者提供

weixin_31887307的博客 426

视觉辅助RIS波束追踪:用摄像头“看见”用户,实现毫秒级波束对准

在无线通信领域,波束成形技术是提升高频段信号覆盖与质量的核心手段,其原理是通过调整天线阵列的相位,使信号能量在特定方向相干叠加,形成高增益定向波束。这项技术的价值在于能有效克服高频信号路径损耗大、穿透性差的瓶颈,广泛应用于5G/6G、毫米波通信及室内定位等场景。然而,传统波束追踪依赖信道估计或波束扫描,存在训练开销大、实时性差的问题。本文聚焦于一种创新解决方案:将计算机视觉与可重构智能表面(RIS)相结合。通过摄像头直接感知用户位置,并利用RIS快速重构反射波束方向,实现了近乎零开销、毫秒级延迟的波束追踪,

weixin_33552698的博客 620

C/C++ 最常见50道面试题

C/C++经典面试题 面试题 1:变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明, 但是只在一个地方定义。加入 extern 修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间, 如外部变量。 面试题 2:写出 bool 、int、 .........

快乐小半半的博客 23万+

别再手动更新Excel了!用Jira看板管理你的个人项目(附保姆级配置流程)

本文详细介绍了如何利用Jira看板替代Excel进行个人项目管理,提供从注册到配置的保姆级教程。通过极简看板模式、自动化规则和数据分析功能,帮助用户实现任务可视化、协作高效化和提醒自动化,大幅提升个人工作效率。特别适合需要管理复杂个人项目的用户。

weixin_42699679的博客 228

C/C++的面试题汇总

本文主要介绍了C语言和C++的核心知识点,包括: C语言关键概念:预处理指令(#include、#define)、数据类型、内存管理(malloc/free)、指针、结构体/联合体、函数参数传递方式等。 C++特性:面向对象(封装、继承、多态)、智能指针、STL容器与算法、移动语义、Lambda表达式等。 内存与线程:内存模型、多线程同步机制、死锁条件及解决方案。 实用工具与库:标准库函数分类(字符串处理、I/O操作等)以及常用第三方库推荐。 对比分析:C与C++的异同、深浅拷贝、静态/动态链接等。 文章全

m0_73139998的博客 2263

全志平台camera驱动开发(4)NVP6134芯片4路模拟视频BT656输入

前言 1. 调试平台: 全志V5/T7等有BT656或BT1120的并行接口,理论有DVP接口的一般都支持 2. NVP6134可使用多路视频同时输入 硬件连接 模拟camera1 模拟camera2 NVP6134 ------>NVCSI0 ...

jzwjzw19900922的博客 3531

第三章-python基础语法

有C语言基础应该这样学 Python。

qq_46187594的博客 1175

200道C/C++面试题

200道C/C++面试题

gopher9511的博客 3869

Windows 11 安装 JDK 21:下载、安装、配置环境变量、验证

本文详细介绍了在 Windows 11 系统中安装 JDK 21 的完整流程,包括从 Oracle 官网下载压缩包、解压至自定义目录、配置 JAVA_HOME 与 Path 环境变量,并验证安装是否成功。文章推荐使用 ZIP 压缩包而非安装程序,以实现绿色便携、多版本共存等优势,并通过一个包含 Java 21 新特性的示例程序进行功能验证,适合开发者快速上手。

寒水馨 · 轻量级技术文档 · hanshuixin.org 2515

c/c++面试题集锦

c/c++面试题集锦1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?2.将一个 1M -10M 的文件,逆序存储到另一个文件,就是前一个文件的最后一个 字符存到新文件的第一个字符,以此类推。3.main主函数执行完毕后,是否可能会再执行一段代码?4.一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?在子类的空间里,有没有父

8451

Kong API Gateway 配置与深入

Kong是一个开源的、高性能的API网关,提供了一种简单易用的服务间路由、流量管理和安全防护方案,其最初起源于Nginx Inc.,但后迁移至Apache Software Foundation。Kong支持RESTful、GraphQL、TCP/UDP等协议,可与AWS Lambda、Azure Functions、Google Cloud Functions等云函数平台集成。其主要功能包括:服务发现与负载均衡、请求代理、身份认证与授权、缓存、日志记录、监控指标、灰度发布、多种插件等。

AI天才研究院 2282

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【转】最全的C/C++面试题和答案

最全的C/C++面试题集(C/C++试题和部分答案)最全的C/C++面试题集(最全的C/C++试题集和答案)(续)1. 以下三条输出语句分别输出什么?[C易]char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc"; const char str4[] = "abc"; const char* str5 = "abc";co

thimin的专栏 4791

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

常见嵌入式/C/C++面试题100+集合(含参考答案)-更新中

为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于 1。可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C。

虫无涯的博客 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[C++]C/C++常见50道面试题

面试题 1:变量的声明和定义有什么区别为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在一个地方定义。加入 extern 修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。面试题 2:写出 bool 、int、 float、指针变量与“零值”比较的 if 语句//bool 型数据:if( flag )A;elseB;

FL1768317420的博客 5912

→『C/C++面试题大汇总』

→『C/C++面试题大汇总』 最近因为找工作,收集了很多C语言方面方面的面试题以及答案。现在新工作搞定了,决定把这些资料发出来,送给有需要的朋友,免得再象我一样到处搜寻,实在辛苦。 发布之

StoneRain 1094

50个C/C++面试题

面试题1:变量的声明和定义有什么区别  为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。  说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。  面试题2:写出bool 、int、 float、

沙漠中的一粒沙 1万+
上一篇: makefile 的常见错误信息
下一篇: 嵌入式C语言面试题汇总解答(I)--嵌入式程序员必看
鹅鹅
博客等级 码龄19年 70粉丝 53原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值