嵌入式软件开发人员笔试题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四川九洲电器集团有限责任公司成都技术中心

嵌入式软件开发人员笔试试题

本笔试试题分为C语言基础、算法、思维能力三部份。总分100分,描述思路和最后结果都很重要。

一、C语言基础

1. 语句实现x是否为2的若干次幂的判断。(5分)

2. 宏定义写出swap(x,y)。(5分)

3. 用变量a给出下面的定义。(16分,各两分)

a) 一个整型数(An integer)

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

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

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 )

4. 定义int **a[3][4],占有的内存空间为多少。(4分)

5. 写一段程序判断大小端(endian)的问题。(10分)

6. 写一段程序判断大小端(endian)的问题。(10分)

二、算法

7. 给出一个函数来输出一个字符串的所有排列。(25分)

三、思维能力

8. 在一个国家,人们只想要男孩儿。每一个家庭持续生育直到他们有了一个男孩儿为止。如果生的是女孩儿,则继续生育。如果生的是男孩儿,则停止生育。那么这个国家里男孩和女孩的比例是多少?(12分)

9. 你有8个同等大小的球。7个质量相等,其中一个轻一些。你可以使用天平并且仅能使用两次,怎么做才能找到那个轻的?(13分)

答案

1.答案:

1)提出:x&(x-1),得5分。

2)提出:提出利用100000000(二进制)特性的得3分。

3)提出:提出2的若干次幂的二进制为1的左移位得2分。

2.答案:

#define swap(x, y)\

x = x + y;\

y = x - y;\

x = x - y;

3.答案:

a) int a; // An integer

b) int *a; // A pointer to an integer

c) int **a; // A pointer to a pointer to an integer

d) int a[10]; // An array of 10 integers

e) int *a[10]; // An array of 10 pointers to integers

f) int (*a)[10]; // A pointer to an array of 10 integers

g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer

h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

4.答案:

16位系统24,32位编译系统中是48。

公式:3 * 4 * sizeof(int **)

5.答案:

#include

#include

int main(void)

{

short int a = 0x1234;

char *p = (char *)&a;

printf("p=%#hhx\n",*p);

if(*p == 0x34)

printf("Little endian \n");

else if(*p == 0x12)

printf("Big endian \n");

printf("Unknow endian \n");

return 0;

}

6.答案:

#include

#include

typedef unsigned int u32;

typedef unsigned short u16;

#if 0

//simple: not check varible types

#define BSWAP_16(x) \

( (((x) & 0x00ff) << 8 ) | \

(((x) & 0xff00) >> 8 ) \

)

//complex:check varible types

#else

#define BSWAP_16(x) \

(u16) ( ((((u16)(x)) & 0x00ff) << 8 ) | \

((((u16)(x)) & 0xff00) >> 8 ) \

)

#endif

#define BSWAP_32(x) \

(u32) ( (( ((u32)(x)) & 0xff000000 ) >> 24) | \

(( ((u32)(x)) & 0x00ff0000 ) >> 8 ) | \ (( ((u32)(x)) & 0x0000ff00 ) << 8 ) | \

(( ((u32)(x)) & 0x000000ff ) << 24) \

)

u16 bswap16(u16 x)

{

return (x & 0x00ff) << 8 |

(x & 0xff00) >> 8

;

}

u32 bswap32(u32 x)

{

return ( x & 0xff000000 ) >>24 |

( x & 0x00ff0000 ) >>8 |

( x & 0x0000ff00 ) <<8 |

( x & 0x000000ff ) << 24

;

}

相关文档
最新文档