1. 求职过程
2. 程序设计面试题的解答思路
对面试题不清楚的地方一定要问清楚,在编写代码的过程中应随时向考官解释你正在做的事情,写完程序后应该找例子验证自己写出来的代码,对解决方案的复杂性进行分析
3. 链表
P21头指针的修改,用c语言
//无法正确改变父函数里的指针
Int badinsert(element *head){
element *newelem;
……
head=newelem;
……
}
//正确的代码
Int insert(element **head){
element *newelem;
……
*head=newelem;
……
}
P49编写函数判定链表是否是循环链表
用快慢不同的指针对链表进行遍历,如果快指针到达链表尾则是非循环的,如果快指针超过慢指针,则是循环链表。
4. 树和图
5. 数组与字符串
6. 递归算法
面试例题 电话键单词
请编写一个函数,它以一个
7
位数的电话号码为输入,
把各种可能的
“
单词
”
--也就是能够用来代表给定
号码的字母组合--都打出来。因为电话上的
“0”
“1”
按键上没有字母,所以你只需要把数字
2-9
转换
成字母。
*********************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PHONE_NUMBER_LENGTH 7
int COUNT = 0;
/*********************************************
//
它以一个电话键数字
(0-9)
和一个位置序号
(1 2 3)
为输入参数,返回该数字按键
//
上指定序号相对应的字母。比如说
,getCharKey(3, 2)
将返回字母
"E"--
电话按键
//"3"
上的字母是
"DEF"
,而
"E"
正好是这几个字母当中的第二个
*********************************************/
char getCharKey(int telephoneKey, int place) {
switch(telephoneKey) {
case 0:
return '0';
case 1:
return '1';
case 2:
if (place == 1)
return 'a';
else if (place == 2)
return 'b';
else
return 'c';
case 3:
if (place == 1)
return 'd';
else if (place == 2)
return 'e';
else
return 'f';
case 4:
if (place == 1)
return 'g';
else if (place == 2)
return 'h';
else
return 'i';
case 5:
if (place == 1)
return 'j';
else if (place == 2)
return 'k';
else
return 'l';
case 6:
if (place == 1)
return 'm';
else if (place == 2)
return 'n';
else
return 'o';
case 7:
if (place == 1)
return 'p';
else if (place == 2)
return 'r';
else
return 's';
case 8:
if (place == 1)
return 't';
else if (place == 2)
return 'u';
else
return 'v';
case 9:
if (place == 1)
return 'w';
else if (place == 2)
return 'x';
else
return 'y';
default:
return '#';
}
}
/*****************************************
非递归算法
*****************************************/
int printTelephoneWords1(int phoneNum[]) {
char results[PHONE_NUMBER_LENGTH + 1];
int x[PHONE_NUMBER_LENGTH];
int i;
int level = 0;
int count = 0;
results[PHONE_NUMBER_LENGTH] = '/0';
for (i = 0; i < PHONE_NUMBER_LENGTH; i++)
x[i] = 0;
while (level > -1) {
x[level] += 1;
if (x[level] < 4) {
results[level] = getCharKey(phoneNum[level], x[level]);
if (results[level] == '0' || results[level] == '1') {
x[level] = 3;
}
if (level == PHONE_NUMBER_LENGTH - 1) {
printf("%s/n", results);
count++;
}
else {
level++;
x[level] = 0;
}
} else {
level--;
}
}
return count;
}
int main() {
int str[
PHONE_NUMBER_LENGTH];
str[0] = 4;
str[1] = 9;
str[2] = 7;
str[3] = 1;
str[4] = 9;
str[5] = 2;
str[6] = 7;
//int count = printTelephoneWords1(str);
//printf("count is %d/n", count);
printTelephoneWords(str);
printf("count is %d/n", COUNT);
return 0;
}
7. 其他程序设计问题
面试例题:字节的升序存储和降序存储方式
字节的升序存储方案中最低位字节保存在最低位的地址里
字节的降序存储方案中最高位字节保存在最低位的地址里
以下函数升序返回
1
,降序返回
0
Int endianness(void){
Int testnum=1;
Char *ptr;
Ptr=(char *)&testnum;
Return(*ptr);
}
Int endianness(void){
Union{
Int theinteger;
Char singlebyte;
}endiantest;
Endiantest.theinteger=1;
Return endiantest. singlebyte;
}
例题:请编写一个函数,把一个给定的整数的二进制表示形式的
“1”
的个数统计出来。
int NumOnesInBinary(int number)
{
int numOnes = 0;
while (number)
{
number = number & (number - 1);
numOnes++;
}
return numOnes;
}
8. 与技术、测量、排序有关的智力题
9. 与图形和空间有关的智力题
一只狐狸在追一只鸭子
,
鸭子逃到了一个正圆形池塘的圆心位置
.
狐狸不会游泳
,
鸭子也不能在水面上起飞
(
这是一只有残疾的鸭子
).
狐狸的速度是鸭子的
4
倍
.
假设鸭子和狐狸分别遵循着最优的逃跑和追逐策略
,
请问
:
鸭子能不能安全地游到池塘边并起飞
?
如何能
,
怎么样才能做到
?
设大圆半径为
R
二小圆的半径分别为(
4-
∏)
R/4
和
R/4
,化简后约为
0.21~0.25R
逃生方法:鸭妹在红色区间作圆周运动,狐兄亦在岸上作圆周运动(假设起跑时鸭与狐在同一直径上且距离最近),当鸭看到自已经过圆心与岸上的狐成一直线时,立即改变方向沿着半径的方向向岸上游去。
10. 计算机基础知识
11. 非技术问题
附录.写个人简历的方法