华为C/C++笔试题系列二
1.说出下面这个程序的运行结果,并简要叙述其理由:
char buf1[10]="hello";
char buf2[10]="hello";
if (buf1==buf2)
printf("equal!");
else printf("not equal!");
答:因为buf1,buf2分配了不同的内存块,而比较的是数组名,实际上是两个分别指向数组起始元素地址的指针。
2.指出下面这段程序中存在一些什么问题:
int loop,a[5];
int* p=a;
for (loop=0;loop<5;loop++)< p="">
{ p++;
*p=loop;
}
答:数组a[5]在创建时没有初始化, 在for循环里也没有起到完全初始化数组的作用,而且对一块未知内存赋值。在最后一轮循环结束时p指向了数组a[5]的最后一个元素的下一个地址。
string 系列
char * strcpy( char *strDest, const char *strSrc )
{
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘ ’ );
return address;
}
char* strncpy(char* strdest, const char* strsrc, int n)
{
assert((strdest != NULL) && (strsrc != NULL));
char* address = strdest;
while(n-- > 0)
*strdest++ = *strsrc++;
return address;
}
int strcmp(const char* str1, const char* str2)
{
assert((str1 != NULL) && (str2 != NULL);
int ret = 0;
while (!(ret = (unsigned char*)*str1 - (unsigned char*)*str2) && (*str2))
{
str1++;
str2++;
}
if (ret > 0)
ret = 1;
else if (ret < 0)
ret = -1;
return ret;
}
int strlen(const char* str)
{
assert(str != NULL);
int len = 0;
while ( != *str++)
len++;
return len;
}
类string的构造函数
string::string(const char* str)
{
if(str == NULL)
{
m_data = new char[1];
*m_data = ;
}
else
{
int length = strlen(str);
m_data = new char[str + 1];
strcpy(m_data, str);
}
}
string 的析构函数
string::~string()
{
[] m_data;
}
string 的拷贝构造函数
string ::string(const string& other)
{
int len = strlen(other.m_data);
m_data = new char[len + 1];
strcpy(m_data, other.m_data);
}
string 的赋值函数
string& string::operator=(const string& other)
{
if (this == &other)
return *this;
[] m_data;
int len = strlen(other.m_data);
m_data = new char[len + 1];
strcpy(m_data, other.m_data);
return *this;
}
不用任何局部和全局变量实现int strlen(char *a)
int strlen(char *a) {
if( == *a)
return 0;
else
return 1 + strlen(a + 1);
}
1)sizeof相关系列问题
2)const相关系列问题
3)大量林锐书的习题,以及各种变种
这三个几乎是每次必出现,下面的这些是程序相关题,很多都是以前有讨论过的
1)求出相似度的算法.
2)写出二分查找的`代码.
int binary_search(int* arr, int key, int n)
{
int low = 0;
int high = n - 1;
int mid;
while (low <= high)
{
mid = (high + low) / 2;
if (arr[mid] > k)
high = mid - 1;
else if (arr[mid] < k)
low = mid + 1;
else
return mid;
}
return -1;
}
3)写出在母串中查找子串出现次数的代码.
*4)写出快速排序或者某种排序算法代码
出现次数相当频繁
5)写出查找从一个集合中输出所有子集合的算法.
6)实现strcpy函数
char* strcpy(char* dest, const char* src)
{
assert((dest != NULL) && (src != NULL));
char* address = dest;
while ( != (*dest++ = *src++));
return address;
}
出现次数相当频繁
7)实现strcmp函数
int mystrcmp(const char* str1, const char* str2)
{
assert((str1 != NULL) && (str2 != NULL));
int ret = 0;
while (!(ret = *(unsigned char*)str1 - *(unsigned char*)str2) && *str2)
{
str1++;
str2++;
}
if (ret > 0)
ret = 1;
else if (ret < 0)
ret = -1;
return ret;
}
出现次数相当频繁
8)将一个单链表逆序
struct test
{
int number;
double score;
test* next;
}
void reverse(test*& head)
{
test* pe = head;
test* ps = head->next;
while(ps != NULL)
{
pe->next = ps->next;
ps->next = head;
head = ps;
ps = pe->next;
}
}
9)循环链表的节点对换和删除。
10)将一个数字字符串转换为数字."1234" -->1234
#i nclude
using namespace std;
int f(char* s)
{
int k = 0;
while (*s)
{
k = 10 * k + (*s++)- ;
}
return k;
}
int main()
{
int digit = f("4567");
cout<
();
}
出现次数相当频繁
11)实现任意长度的整数相加或者相乘功能。
12)写函数完成内存的拷贝
一个内存拷贝函数的实现体
void *memcpy(void *pvTo,const void *pvFrom,size_t size)
{
assert((pvTo!=NULL)&&(pvFrom!=NULL));
byte *pbTo=(byte*)pvTo; //防止地址被改变
byte *pbFrom=(byte*)pvFrom;
while (size-- >0)
*pbTo++ = *pbForm++;
return pvTo;
}
出现次数相当频繁(华为笔试)
1)写一个内存拷贝函数,不用任何库函数.就是前些时候本版讨论的那个问题.
void* memcpy(void* pvTo, const void* pvFrom, size_t size)
{
assert((pvTo != NULL) && (pvFrom != NULL));
byte* pbTo = pvTo;
byte* pbFrom = pbFrom;
while (size-- > 0)
{
*pbTo++ = *pbFrom++;
}
return pvTo;
}
2)将一个单链表逆序.(这个问题是个常规的数据结构问题.不过不小心时会损失效率)
3)客房预定的问题.根据客户报的人数,客房等级来从预备的客房中选择出所有符合要求的
客房号.客户没有要求等级时,只考虑人数因素就可以了.要考虑有些客房已经预定的情况.
(写代码是要考虑好彼此的效率)
5)将一个数字字符串转换为数字."1234" -->1234
int convert(char* str)
{
int k = 0;
while (*str != )
{
k = k * 10 + *s++ - ;
}
return k;
}
-
关于吉林高考英语笔试结束直接考听力
根据《吉林省深化普通高校招生考试改革方案》要求,我省普通高等学校招生全国统一考试(以下简称高考)外语科考试由笔试和听力两部分组成,从20**年起听力卷面成绩全部计入考生总分。考试时间为120分钟,笔试和听力考试在同一张答题卡上作答,笔试考试结束后直接进行听...
-
[老男孩笔记系列]-企业运维面试典型笔试题大汇总
问题70:编写一个程序,接收两个参数ID和content(1)如果这ID在文件中有,那么在数据库中插入一条记录。(2)如果ID没有那么把ID和content写入文件中。(来自《北京拓明科技有限公司》一灯同学提供2011-1-7)老男孩解答参考:分析:误区,此题看似简单,其实并不容易,好多学生,在文...
-
2015年上海农村商业银行业培笔试经验
我在上海开放大学的考场,外面在施工,靠窗坐,不过抗噪音能力还好,就正常地做题了。机房挺热的,很容易口渴,自备一下饮用水比较好。。因为怕时间来不及,默默记了个题型,不过好像每年不一样的。因为是速记的`,2个小时150道题,大概是言语类20题,数学类10题,逻辑类20题,资料分析2...
-
多所高校农村专项计划取消笔试面试政策
复旦大学农村学生专项计划“腾飞计划”今年迈出了重大改革步伐,直接取消了笔试、面试,材料审核通过的考生,凭高考成绩择优录取。取消原因令人唏嘘:因为缺路费,不少边远地区农村考生直接放弃了考试资格。记者昨了解到,江苏也有多所高校“农村计划”取消了笔试面试。如...