读书人

中科院计算所烟台市分所笔试(2012-9-

发布时间: 2012-09-28 00:03:35 作者: rapoo

中科院计算所烟台分所笔试(2012-9-17,共90分钟)

2012-9-17 中科院计算所烟台分所笔试,个人感觉题目出的还可以。包括:软件工程、C/C++基础、数据结构、Linux基础、数据库。题型分为:选择、读程序解释程序、程序纠错、解释Linux命令、写程序。

分享下个人感觉平时见得较少或有一点点难度的题目:

1)如何在C/C++中显示当前程序所在的文件名及行号。

——这个当时没答上来,见过没记住。今天查了下MSDN如下:

__FILE__, //用于显示文件名的宏 %s, 格式如【F:\NeuSoftDemo\NeuSoftDemo.cpp】;__LINE__, //用于显示行号的宏 %d,格式如【12】;

扩展》》__DATE__, //用于显示当前日期,格式如【Sep 18 2012】 %s; __TIME__, //用于显示当前时间,格式如【09:45:01】 %s;

__TIMESTAMP__,//用于显示当前日期和时间,格式如【Tue Sep 18 09:48:07 2012】 %s。

2)程序纠错原题大致如下:

int main(int argc, char* argv[]){char str[5][] = {"First","Second","Thrid","Four","Five"};char* p[] = {str[4],str[3],str[2],str[1],str[0]};for(int i = 0; i < 5; i++){printf("%c\n",*(p+i));}return 0;}
个人感觉如下:

错误1: char str[5][] 定义出错,需要指定第一维的个数,改为char str[][5]吗?但后面的字符串如"Second"6个字符,还有'\0'。改为:char* str[5]比较稳妥;

错误2: printf("%c\n",*(p+i)); 显然*(p+i) 等价于p[i]存储的是字符串,所以%c应该改为%s。(%c打印的是单个字符,%s打印的是字符串)。

修正后如下:

int main(int argc, char* argv[]){char *str[5] = {"First","Second","Thrid","Four","Five"};char* p[] = {str[4],str[3],str[2],str[1],str[0]};for(int i = 0; i < 5; i++){printf("%s\n",*(p+i));}return 0;}
考场上自己在这犹豫了几分钟,基础不扎实、牢固呀!

3)程序大题最后一题:递归与非递归实现二分查找。

//非递归实现-

void binarySearchUncycle(int nArr[], int nSize, int nSearchVal){int nLow = 0;int nHigh = nSize-1;int nMid = 0;bool bFound = false;while(nLow <= nHigh){nMid = (nLow + nHigh)/2;  cout << "nMid =" << nMid << endl;if(nArr[nMid] == nSearchVal){bFound = true;break;}else if(nArr[nMid] > nSearchVal){nHigh = nMid-1;}else{nLow = nMid+1;}}//end whileif(bFound){   cout << "The Elem " << nSearchVal << " is Exist in the array!" << endl;}else{    cout << "The Elem " << nSearchVal << " is Not Exist in the array!" << endl;}}
//递归实现二分查找void  binarySearchCycle(int nArr[], int low, int high, int nSearchVal){int nLow = low;int nHigh = high;int nMid = 0;bool bFound = false;nMid = (nLow + nHigh)/2;  if(nArr[nMid] == nSearchVal){bFound = true;cout << "The Elem " << nSearchVal << " is Exist in the array!" << endl;return;}else if(nArr[nMid] > nSearchVal){nHigh = nMid-1;binarySearchCycle(nArr,nLow,nHigh,nSearchVal);}else{nLow = nMid+1;binarySearchCycle(nArr,nLow,nHigh,nSearchVal);}}
自己在写递归实现的时候,忘了去掉While循环,调试后才发现,这个点以后需要注意啦!

该所非常看重烟台生源,至少山东生源,听了HR主任的宣讲,是个相对有潜力的事业单位,初始时聘任制,以后可能解决编制,但是估计得看发展了,并且明确说了先解决博士的编制。

革命尚未成功,同志仍需努力!

读书人网 >编程

热点推荐