C++经典笔试题

1.C++有malloc/free,为什么还需要new/delete

2.用变量a给出下面的定义

a) 一个指向指针的的指针,它指向的指针是指向一个整数

b) 一个有10个指针的数组,该指针是指向一个整数

c) 一个指向有10个整数数组的指针

d) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整数

3.下面程序的测试结果是什么

#include <iostream>
using namespace std;
void AllocMemory(char *p,int num)
{
    p = (char *)malloc(sizeof(char)*num);
}

int main() {
    char *p = NULL;
    AllocMemory(p, 512);
    strcpy(p,"nd");
    return 0;
}

4.下面编译会在哪行出错

struct TT
{
   TT(int) { }
   TT(){}
   void fun(){}
};

int main ()
{
   TT a(1);//语句1
   a.fun();//语句2
   TT b();//语句3
   b.fun();//语句4
   return 0;
}

5.(void *)ptr 和 (*(void**))ptr的结果是否相同?(其中ptr为同一个指针)

6.线程与进程的区别和联系? 线程是否具有相同的堆栈? dll是否有独立的堆栈?

7.有一分数序列:1/2,1/4,1/6,1/8……,用函数调用的方法,求此数列前20项的和

8.给定一个整型变量a,写两段代码,第一个设置a的bit3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。

9.简述MVC设计模式

10.你是怎样理解文件描述符和文件指针的?

11.用C实现查看一个文件的大小?

12.如何理解float型和double型?

13.用if实现判断一个float型数据是大于0或小于0?

14.谈谈对函数指针的理解?

15.说说c与c++的区别

16.引用和指针的区别

17.编写一段strcpy的实现

18.头文件中的 ifndef/define/endif 干什么用

19.数据类型判断

typedef int (*test) ( float * , float*)
test tmp;

tmp 的类型是:___C___。

(a) 函数的指针,该函数以 两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型指针

(b) 整型指针

(c) 函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型

(d) 以上都不是

20.C++的类和C里面的struct有什么区别

21.阅读并作答

下面的代码输出是什么,为什么?

void test(void)
{
    unsigned int a = 6;
    int b = -20;
    (a+b > 6) ? puts("> 6") : puts("<= 6");
}

22.阅读并作答

int counter (int i)

{

static int count =0;

count = count +i;

return (count );

}

main()

{

int i , j;

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

j = counter(i);

}

本程序执行到最后,j的值是:__B___。

(a) 10

(b) 15

(c) 6

(d) 7

23.阅读并作答

main()
{
int a[][3] = { 1,2,3 ,4,5,6};
int (*ptr)[3] =a;
printf("%d %d " ,(*ptr)[1], (*ptr)[2] );
++ptr;
printf("%d %d" ,(*ptr)[1], (*ptr)[2] );
}

这段程序的输出是: __A___。

(a) 2 3 5 6
(b) 2 3 4 5
(c) 4 5 0 0
(d) 以上均不对

24.以下表达式符合规范

的是___D__。
a. while (p && *p)      // p为指针变量
b. if (1 == flag)      // flag为布尔变量
c. if (0.0 == x)       // x为浮点变量
d. if (strlen(strName) != 0)  // strName为字符串变量

25.给定一个4字节整型变量a,以bit0~bit31标识二进制位,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变

26.编码实现以下几个小功能

  (1) 编写两个宏实现一个字节无符号整数的16进制与压缩bcd码进行互相转换。假设数值大小不超过99

例如:“0x12”是16进制表示法,10进制数为“18”,记为“0x18”

#define BYT_HEX2BCD(x)  ( (x/10 )<<4) + (x%10) 

#define BYT_BCD2HEX(x)  ( (x>>4)*10 ) + (x&0x0f)

  (2) 写个函数实现将ASCII码串转换为16进制数组

     例:ASCII串为“8e349bcd45”转换为

         0x8e,0x34,0x9b,0xcd,0x45

27.阅读并作答

阅读题。

(1)void GetMemory(char *p)

{

p = (char *)malloc(100);

}

void Test(void)

{

char *str = NULL;

GetMemory(str);  

strcpy(str, "hello world");

printf(str);

}

请问运行Test函数会有什么样的结果?为什么?

程序出错。

因为GetMemory并不能传递动态内存,

Test函数中的 str一直都是 NULL。

strcpy(str, "hello world");将使程序出错。

同时GetMemory中分配的内存得不到释放,内存泄漏

(2)char *GetMemory(void)

{    

char p[] = "hello world";

return p;

}

void Test(void)

{

char *str = NULL;

str = GetMemory();     

printf(str);

}

请问运行Test函数会有什么样的结果?为什么?

可能是乱码。

因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。

(3)Void GetMemory2(char **p, int num)

{

*p = (char *)malloc(num);

}

void Test(void)

{

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, "hello world");

printf(str);   

}

请问运行Test函数会有什么样的结果?为什么?

能够输出hello,但内存泄漏

void Test(void)

{

char *str = (char *) malloc(100);

       strcpy(str, “hello”);

       free(str);         

       if(str != NULL)

       {

         strcpy(str, “world”);    

printf(str);

}

}

请问运行Test函数会有什么样的结果?为什么?

28.内存对齐

有如下定义:

#pragma pack(8)

struct tagS1

{

       char c;

       int i;

};

#pragma pack()

#pragma pack(2)

struct tagS2

{

       char c;

       int i;

};

#pragma pack()

若编译器支持指定的对齐方式,则计算:

sizeof(tagS1) =  8

 sizeof(tagS2) =  6

29.阅读并作答

指出下列代码运行时可能出错,或者编写不够规范的地方

int func( int par1, char par2)

{

int i;

i ++;

if( i == 1 ){

              ………………..

              par1 = 100 / par1;

              ……………….

              char c = par2 ++;

              ………………

}

return par1;

}

30.什么是大端模式,小端模式,网络字节序?

嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Littleendian模式的CPU对操作数的存放方式是从低字节到高字节,就是低地址放低字节,而Big-endian模式对操作数的存放方式是从高字节到低字节,就是低地址放高字节的拉。

请写一个函数,来判断处理器是大端还是小端模式

31.链表

有如下链表结点定义:

struct Node
{
int data ;
Node *next ;
};
typedef struct Node Node ;

已知链表的头结点head,写一个函数把这个链表逆序 ( Intel)

32.Linux操作系统

(1)解释linux下常用命令:

rm  删除

cp  复制

mount  挂载

chmod  更改权限

ls 输出目录信息

(2)遇到不熟悉的命令,你会?

使用man命令查找帮助

33.什么是段错误?

所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,一旦程序发生了越界访问,CPU就会产生相应的异常保护,于是segmentation fault就出现了。

34.举例说明编程中通常碰到段错误的地方有哪些?

例1

往受到系统保护的内存地址写数据(如内核占用的或者是其他程序正在使用的)

#include <stdio.h>

int main()

{

   int i = 0;

   scanf ("%d", i);  /* should have used &i */

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

   return 0;

    }

例2

内存越界(数组越界,变量类型不一致等)

#include <stdio.h>

int main()

{

   int b = 10;

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

   return 0;

}

如何发现程序中的段错误并处理掉?

35.编写一个Makefile通用模板,要求可以实现以下功能:

make:编译和连接程序。
make objs:仅仅编译程序产生 .o 目标文件,不进行连接。
make clean:删除编译产生的目标文件和依赖文件。
make cleanall:删除目标文件、依赖文件以及可执行文件。
make rebuild:重新编译和连接程序

36.你的项目中是否经常用到多进程和多线程编程?简要举例说明使用多进程和多线程的例子

37.(5分)写一个宏MIN,这个宏输入两个参数并返回较小的一个                                                                                             

38.(5分)常用的51系列单片机的数据线和低地址线是复用的,一般在电路设计中是如何把他们分开的                                        

39.(5分)在中断响应过程中,CPU保护PC等寄存器的主要目是:                                                 

40.(5分)若码值FFH是一个整数的原码表示,则该整数的真值为   :若码值FFH是一个整数的补码表示,则该整数的真值为      。

41.(5分)在C语言中,假设有这样的定义“int a = 6, b = 9, c;”,那么,在执行完如下操作“c = a+++++b;”之后,a =       ,b =       ,c =       

42.MCS-51单片机通常包括哪些功能模块?同时请画图描述一下大致的框图(10分)

43.用变量a给出下面的描述在C语言中的定义,如a)示例描述的(10分)

  a) 一个整型数(An integer) (示例: int a;)

  b)一个指向整型数的指针( A pointer to an integer)

  c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r

  d)一个有10个整型数的数组( An array of 10 integers)

  e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to

  integers)

  f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)

  g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function

  that takes an integer as an argument and returns an integer)

   h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )

44.评价一下下面这段ISR程序,指出它有哪些毛病(10分)

__interrupt double compute_area (double radius)

{

  double area = PI * radius * radius;

  printf("\nArea = %f", area);

  return area;

45.搜索一个字符串在另一个字符串中的第一次出现。找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址;如果未找到所搜索的字符串,则返回NULL。

46.如果有一对兔子,从第三个月开始每个月都生下一对小兔,而所生下的每一对小兔在出生后的第三个月也都生下一对小兔。

①问6个月后有多少对兔子

②用递归实现

③不要用递归实现

47.写一个宏,这个宏输入两个参数并返回较大的一个。

48.指出下列表达式各表示什么?

49.数组和链表的区别?

50.const有什么用途?

51.程序的局部变量存在于()中,全局变量存在于()中,动态申请的数据存在于()中。

52.进程之间的通信的途径?进程死锁的原因?死锁的4个必要条件?死锁的处理?

53.请简单介绍下嵌入式操作系统的主要特点?嵌入式操作系统和通用操作系统有什么差别?列举出自己知道的嵌入式操作系统。

54.请列出自己有研究过或有使用过的第三方组件库名称,或列出自己有研究过或使用过的网络上源码名称。

55.请列举出OSI的七层网络结构图中的至少四层?tcp/udp是属于哪一层?tcp/udp有何优缺点?

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

57.以下为Windows NT下的32位C++程序,请计算sizeof的值

58.以下这段代码对x和n完成什么样的功能(操作)?

59.编写strcpy函数

已知strcpy函数的原型是 char *strcpy(char * strDest, const char* strSrc);

其中strDest是目的字符串,strSrc是源字符串。

  1. 不调用C++/C的字符串库函数,请编写函数strcpy
  2. Strcpy能把strSrc的内容赋值到strDest,为什么要char* 类型的。

60.编程实现一个链表逆序 

61.回答下列问题

(1)char*p=“hello wrold\n”;

大小(P)与strlen(P)分别等于多少?

(2)char str[]=“hello wrold\n”;

(Str)与strlen(Str)分别等于多少?

62.翻译以下两段英文(10分)

orial bus that provideso the IIC

The inter-IC bus (IC) is a two-wire, bidirectional seing a two-wire deviceseandefficient method of data exchange between devices. Bertions between devicesibus minimizes the need for large numbers of connections

eliminates the need for an address decoder.ocasional communications over nqThis bus is suitable for applications requiringleo providesflexibility, allowsshort distance between a number of devices.It also PrOr expansion and systemadditional devices to be connected to the bus for further development.

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

64.回答以下问题

(1)char *p="hello wrold\n";sizeof(p)与 strlen(p)分别等于多少? (6分)(2)char str]="hello wrold\n";sizeof(str)与strlen(str)分别等于多少?

65.说明下面程序中[1]和[2]的取值

unsigned char*p1;

unsigned long*p2;

p1=(unsigned char *)0x801000;p2=(unsigned long *)0x810000;

请问: [1] p1+5= ?

[2] p2+5= ?

66.分别给出BOOL, int, float, 指针变量与“零值"比较的if语句(假设变量名为var)

67.请给出a和b的值   

enum IndexOfString

x1,

x2= 19,x3,

x4

}a、b;

a= x1;

b= x4;

请问: [1] a= ?

[2] b= ?

68.关键字static有哪几种作用

69.TCP/IP 协议分为哪几层

70.请表述TCP和UDP协议的异同点

71.线程一般可以分为几种状态,请画出状态转换示意图

72.GCC编译器将C语言从源码转化成可执行文件可以分为几个阶段?每个阶段主要做什么事?

73.编写一个函数实现字符串翻转void rechange (char *str)

74.实现二分查找算法

75.请分析下,用手机拨打某个号码,如果出现呼叫失败,可能在哪些导敦呼叫失败的原因?

猜你喜欢

转载自blog.csdn.net/m0_56051805/article/details/126464085