嵌入式C语言面试3(附有自己做的答案)

雪柳 分享 2020-06-28 下载文档

39 A,B从一堆玻璃球(共100个)里向外拿球,规则如下: (1)A先拿,然后一人一次交替着拿; (2)每次只能拿1个或2个或4个;

(3)谁拿最后一个球,谁就是最后的失败者; 问A,B谁将是失败者?写出你的判断步骤。 我们倒着分析,当此时轮到你拿球: 剩下1个时,你输了

剩下2个时,你拿掉1个,我输了 剩下3个时,你拿掉2个,我输了

剩下4个时,此时你可拿1、2个,不论你拿几个,我都能使剩下的为1个

剩下7个时,此时你可拿1、2、4个,不论你拿几个,我都能使剩下的为4或1个 剩下10个时,此时你可以拿1、2、4个,不论你拿几个,我都能使剩下的为7或4个 ……

依次类推,总结发现:谁能使拿完后剩下的球是3*n+1个,谁就赢

剩下100个,不论你拿几个,我都能使剩下的为3*n+1个,即97或94个 所以,根据本题,也就是谁先拿谁输,也就是A输 (仅供参考by zjh 2011-11-9)

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

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

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

41.统计一个字符串中字符出现的次数 C方法://自己写的方法见test24.cpp

int findStr(char *str, char *substr) /*这边的两个形参有没有给指针赋值?*/ {

int n;

char *p, *r; n = 0;

while (*str) /*“当*str值为真的时候?如果是,什么情况下为真呢”*/ {

p = str; r = substr; while (*r)

if (*r == *p) {

r++; p++; } else {

break; }

if (*r == '\\0') n++;

str++; }

return n; }

Java方法:

public static int GetCount(String strA, String strB)//此方法计算出现的次数 {

int i, counter = 0;

i = strA.IndexOf(strB);//strB在strA中首次出现的位置

while (i >= 0) {

counter++;

i = strA.IndexOf(strB,i+1); }

return counter; }

42.100位以上的超大整数的加法(主要考虑数据结构和加法的实现)。 43.对如下电文:\给出Huffman编码。 44.int (* (*f)(int, int))(int)表示什么含义? 它首先申明f为一个函数指针

它所指向的函数接受两个参数(int,int)

它所指向的函数返回一个函数的指针,类型为:int (*) (int)

45.x=x+1,x+=1,x++,为这三个语句的效率排序。并说明为什么。 x=x+1最低,因为它的执行过程如下: 1. 读取右x的地址;

2. x+1;

3. 读取左x的地址;

4. 将右值传给左边的x(编译器并不认为左右x的地址相同). x=+1其次,它的执行过程如下: 1. 读取右x的地址;

2. x+1;

3. 将得到的值传给x(因为x的地址已经读出). x++最高,它的执行如下: 1. 读取右x的地址;

2. x自增1.

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

char c; int i;

};

sizeof(S1) = ? 4+4=8

class X{ public: X();

virtual ~X(); //4

void myMemberFunc(); static void myStaticFunc();

virtual void myVirtualFunc(); //4 private: int i; //4

char * pstr; char a; //4 }

sizeof(X) = ? 16

48.找出两个字符串中最大子字符串,如\的最大子串为\

string MaxSameStr(string str1,string str2) 10 {

11 string result; 12 int max=0,first;

13 int len=0;//相同字符串的长度

14 int k,q; 15

16 //穷举 17 18 19 20 21 22

for(unsigned int i=0;i

for(unsigned int j=0;j

unsigned int k=i; unsigned int q=j;

if (str1[k]==str2[q])//发现相同的字母

23 {

24 first=k; //标记起始位置

25

while(str1[k]==str2[q]&&q

26 27 28 29 30

{

k++;q++; }

len=k-first;

if(len>max)//是否为目前最长字符串

31 {

32 33 34 35 36 37 38 39 max=len;

string temp(str1,first,len); result=temp; } } }

return result; }

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 )应该是b吧 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; };


嵌入式C语言面试3(附有自己做的答案) .doc 将本文的Word文档下载到电脑

下一篇:大学生零食消费报告

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx