当前位置:文档之家› 2012华为校园招聘上机试题大全(软件)

2012华为校园招聘上机试题大全(软件)

2012华为校园招聘上机试题大全(软件)
2012华为校园招聘上机试题大全(软件)

1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。

#include

#include

#include

#include

int delete_sub_str(const char *str,const char *sub_str,char *result)

{

assert(str != NULL && sub_str != NULL);

const char *p,*q;

char *t,*temp;

p = str;

q = sub_str;

t = result;

int n,count = 0;

n = strlen(q);

tmep = (char *)malloc(n+1);

memset(temp,0x00,n+1);

while(*p)

{

memcpy(temp,p,n);

if(strcmp(temp,q) == 0 )

{

count++;

memset(temp;0x00,n+1);

p = p + n;

}

else

{

*t = *p;

p++;

t++;

memset(temp,0x00,n+1);

}

}

free(temp);

return count;

}

int main()

{

char s[100] = {‘\0’};

int num =

delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s);

printf(“The number of sub_str is %d\r\n”,num);

printf(“The result string is %s\r\n”,s);

}

2、约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,

3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

#include

#include

typedef struct Node

{

int num;

struct Node *next;

}LinkList;

LinkList *creat(int n)

{

LinkList *p,*q,*head;

int i=1;

p=(LinkList *)malloc(sizeof(LinkList));

p->num=i;

head=p;

for(i=2;i<=n;i++)

{ q=(LinkList *)malloc(sizeof(LinkList));

q->num=i;

p->next=q;

p=q;

}

p->next=head; /*使链表尾指向链表头形成循环链表*/

return head;

}

void fun(LinkList *L,int m)

{

int i;

LinkList *p,*s,*q;

p=L;

printf("出列顺序为:");

while(p->next!=p)

{

for(i=1;i

{ q=p;

p=p->next;

}

printf("%5d",p->num);

s=p;

q->next=p->next;

p=p->next;

free(s);

}

printf("%5d\n",p->num);

}

int main()

{

LinkList *L;

int n, m;

n=9;

m=5;

L=creat(n);

fun(L,m);

return 0;

}

3、比较一个数组的元素是否为回文数组

#include

#include

int huiwen(char str[])

{

int i,len,k=1;

len=strlen(str);

for(i=0;i

{

if(str[i]!=str[len-i-1])

{

k=1;

break;

}

}

if(k==0)

printf("%s 不是一个回文数\n",str);

else

printf("%s 是一个回文数\n",str);

}

void main()

{

char str[100] = {0};

int i;

int len;

printf("Input a string:"); /*提示输入Input a string:*/

scanf("%s", str); /*scan()函数输入一个字符串:*/

huiwen(str);

}

4、数组比较(20分)

? 问题描述:

比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数

比如:

数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0

数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3

? 要求实现函数:

int array_compare(int len1, int array1[], int len2, int a rray2[])

【输入】 int len1:输入被比较数组1的元素个数;

int array1[]:输入被比较数组1;

int len2:输入被比较数组2的元素个数;

int array2[]:输入被比较数组2;

【输出】无

【返回】不相等元素的个数,类型为int

? 示例

1)输入:int array1[] = {1,3,5},int len1 = 3,

int array2[] = {77,21,1,3,5},int len2 = 5

函数返回:0

2)输入:int array1[] = {1,3,5},int len1 = 3,

int array2[] = {77,21,1,3,5,7},int len2 = 6

函数返回:3

#include

#include

#include

int array_compare(int len1, int array1[], int len2, int array2[])

{

int count=0;

for( ;len1>=0&&len2>=0 ;len1--,len2--)

{

if(array1[len1-1]==array2[len2-1])

{

count++;

}

}

return count;

}

int main()

{

int result=0;

int array1[]={1,3,5};

int len1=3;

int array2[]={77,12,1,3,5};

int len2=5;

result=array_compare( len1, array1, len2, array2); ///result=array_compare( len1, array1[], len2, array2[]);不能这样

// 函数形参中永远只是传得首地址,不能传数组

切记切记!!!!!!

printf("the result is %d", result);

}

5、约瑟夫问题

? 问题描述:

输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m 后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序

比如:输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)

第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数

第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数

第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数

最后一轮计数出列数字为4,计数过程完成。

输出数值出列顺序为:2,3,1,4。

? 要求实现函数:

void array_iterate(int len, int input_array[], int m, int output_array[])

【输入】 int len:输入数列的长度;

int intput_array[]:输入的初始数列

int m:初始计数值

【输出】 int output_array[]:输出的数值出列顺序

【返回】无

? 示例

输入:int input_array[] = {3,1,2,4},int len = 4, m=7

输出:output_array[] = {2,3,1,4}

////////////循环链表实现//////////////////////

#include

#include

#include

typedef struct Node

{

int num;

struct node *next;

} node;

node *creat(int len , int input_array[])

{

node *h,*s,*p;

int i;

h=(node*)malloc(sizeof(node));

h->num=input_array[0];

p=h;

for(i=1;i

{

s=(node*)malloc(sizeof(node));

s->num=input_array[i];

p->next=s;

p=s;

}

p->next=h;

return (h);

}

void array_iterate(int len, int input_array[], int m)

{

node *q,*p,*s;

int i=0,j=0,k;

int output_array[4];

p=creat(len,input_array);

while(p->next!=p)

{

for(i=1;i

{

q=p;

p=p->next;

}

m=p->num;

printf("%5d",m);

output_array[j++]=m;

s=p;

q->next=p->next;

p=p->next;

free(s);

s=NULL;

}

m=p->num;

printf("%5d\n",m);

output_array[j]=p->num;

k=j;

for(j=0 ; j<=k; j++)

{

printf("%5d",output_array[j]);

}

}

int main()

{

int input_array[]={3,1,2,4};

int len=4;

int m=7;

int output_array[4];

array_iterate(len, input_array, m, output_array);

}

6、手机号码合法性判断(20分)

●问题描述:

我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:

1、长度13位;

2、以86的国家码打头;

3、手机号码的每一位都是数字。

请实现手机号码合法性判断的函数要求:

1)如果手机号码合法,返回0;

2)如果手机号码长度不合法,返回1

3)如果手机号码中包含非数字的字符,返回2;

4)如果手机号码不是以86打头的,返回3;

【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。

●要求实现函数:

int verifyMsisdn(char* inMsisdn)

【输入】 char* inMsisdn,表示输入的手机号码字符串。

【输出】无

【返回】判断的结果,类型为int。

●示例

输入: inMsisdn = “869123456789“

输出:无

返回: 1

输入: inMsisdn = “88139123456789“

输出:无

返回: 3

输入: inMsisdn = “86139123456789“

输出:无

返回: 0

#include

#include

#include

#include #define LENGTH 13

int verifyMsisdn(char *inMsisdn)

{

char *pchar=NULL;

assert(inMsisdn!=NULL);

if(LENGTH==strlen(inMsisdn))

{

if(('8'==*inMsisdn)&&(*(inMsisdn+1)=='6'))

{

while(*inMsisdn!='\0')

{

if((*inMsisdn>='0')&&(*inMsisdn<='9'))

inMsisdn++;

else

return 2 ;

}

}

else

return 3;

}

else

return 1;

return 0;

}

int main()

{

char *pchar=NULL;

unsigned char ichar=0;

int result;

switch(ichar)

{

case 0:

pchar="8612345363789";break;

case 1:

pchar="861111111111111";break;

case 2:

pchar="86s1234536366"; break;

default:

break;

}

result =verifyMsisdn(pchar);

printf("result is %d\n",result);

}

7、数组比较(20分)

? 问题描述:

比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数

比如:

数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0

数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3

? 要求实现函数:

int array_compare(int len1, int array1[], int len2, int a rray2[])

【输入】 int len1:输入被比较数组1的元素个数;

int array1[]:输入被比较数组1;

int len2:输入被比较数组2的元素个数;

int array2[]:输入被比较数组2;

【输出】无

【返回】不相等元素的个数,类型为int

? 示例

1)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5

函数返回:0

2)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6

函数返回:3

#include

#include

#include

int array_compare(int len1, int array1[], int len2, int array2[])

{

int count=0;

for( ;len1>=0&&len2>=0 ;len1--,len2--)

{

if(array1[len1-1]==array2[len2-1])

{

count++;

}

}

return count;

}

int main()

{

int result=0;

int array1[]={1,3,5};

int len1=3;

int array2[]={77,12,1,3,5};

int len2=5;

result=array_compare(len1, array1, len2, array2); ///result=array_compare( len1, array1[], len2, array2[]);不能这样

// 函数形参中永远只是传得首地址,不能传数组切记切记!!!!!!

printf("the result is %d", result);

}

8、简单四则运算

? 问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值

注: 1、表达式只含 +, -, *, / 四则运算符,不含括号

2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况

3、要考虑加减乘除按通常四则运算规定的计算优先级

4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生

5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况

? 要求实现函数:

int calculate(int len,char *expStr)

【输入】 int len: 字符串长度;

char *expStr: 表达式字符串;

【输出】无

【返回】计算结果

? 示例1)输入:char *expStr = “1+4*5-8/3”

函数返回:19

2)输入:char *expStr = “8/3*3”

函数返回:6

#include

/*

* author by wanww

* time: 2011-09-07

*/

using namespace std;

int array_compare(int len1, int array1[], int len2, int array2[])

{

if(len1 == len2) {

int count = 0;

for (int i=0;i

{

if(array1[i]!=array2[i]) count++;

}

return count;

} else if(len1

return array_compare(len1, array1,len1,array2+len2-len1);

} else {

return

array_compare(len2,array1+len1-len2,len2,array2);

}

}

void array_iterate(int len, int input_array[], int m,int output_array[])

{

int * flag = new int[len];

memset(flag,0,len*4);

int hasout=0; //已经出列的数字个数

int start = 0; //开始的下标号

int j=0; //当前以报到的数字

while(true)

{

if(flag[start] == 0) //当前元素还没出列

{

j++;

if(j==m) //已经计数到m,当前start下标的元素出列

{

output_array[hasout] = input_array[start];

flag[start] = 1; //标记当前元素已经出列

hasout ++;

if(hasout == len) break; //所有的元素都已经出列,结束程序

//初始化下一轮的数字

j = 0;

m = input_array[start];

}

}

start ++;

if(start==len) start = 0;

}

delete [] flag;

}

int calculate(int len,char *expStr)

{

struct {

char opdata[200];

int top;

}opstack;

//定义操作符栈

opstack.top = -1;

int i=0;//遍历字符串的下标

int t=0;//当前后缀表达式的长度

char ch = expStr[i];

while (ch!='\0')

{

switch (ch)

{

case '+':

case '-':

while (opstack.top != -1)

{

expStr[t] = opstack.opdata[opstack.top];

opstack.top--;

t++;

}

opstack.top++;

opstack.opdata[opstack.top] = ch;

break;

case '*':

case '/':

while (opstack.top != -1 && (opstack.opdata[opstack.top] =='*' || opstack.opdata[opstack.top] =='/') )

{

expStr[t] = opstack.opdata[opstack.top];

opstack.top--;

t++;

}

opstack.top++;

opstack.opdata[opstack.top] = ch;

break;

default:

expStr[t] = ch;

t++;

break;

}

i++;

ch = expStr[i];

}

while (opstack.top != -1)//将栈中所有的剩余的运算符出栈

{

expStr[t] = opstack.opdata[opstack.top];

opstack.top--;

t++;

}

expStr[t]='\0';

struct {

int numeric[200];

int top;

}data;

data.top = -1;

i=0;

ch = expStr[i];

while (ch!='\0')

{

if (ch>='0' && ch <= '9' )

{

data.top++;

data.numeric[data.top] = ch-'0';

}

else if('+' == ch)

{

int tmp = data.numeric[data.top-1] + data.numeric[data.top];

data.top--;

data.numeric[data.top] = tmp;

}

else if('-' == ch)

{

int tmp = data.numeric[data.top-1] - data.numeric[data.top];

data.top--;

data.numeric[data.top] = tmp;

}

else if('*' == ch)

{

int tmp = data.numeric[data.top-1] * data.numeric[data.top];

data.top--;

data.numeric[data.top] = tmp;

}

else if('/' == ch)

{

if(data.numeric[data.top] == 0)

{

printf("cannot be zero of the divide\n");

exit(1);

}

int tmp = data.numeric[data.top-1] / data.numeric[data.top];

data.top--;

data.numeric[data.top] = tmp;

}

i++;

ch = expStr[i];

}

return data.numeric[data.top];

}

void main()

{

int array1[] = {1,3,5};

int len1 = 3;

int array2[] = {77,21,1,3,5,7};

int len2 = 6;

int count = array_compare(sizeof(array1)/sizeof(int),array1,size of(array2)/sizeof(int),array2);

printf("%d\n",count);

printf("************************************************* ****\n");

int input_array[] = {3,1,2,4};

int len = 4;

int m=7;

int * output_array = new int[sizeof(input_array)/sizeof(int)];

array_iterate(4,input_array,7,output_array);

for (int i=0;i

{

printf("%d ",output_array[i]);

}

delete [] output_array;

printf("\n****************************************** ***********\n");

char expStr[] = "8/3*3";

int result = calculate(strlen(expStr),expStr);

printf("%s\n",expStr);

printf("%d\n",result);

}

9、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分 * 0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则总分 = 专家评委平均分,总分取整。函数最终返回选手得分。

函数接口 int cal_score(int score[], int judge_type[], int n)

#include

#include

#include

#include

#define N 5

int cal_score(int score[], int judge_type[], int n)

{

int expert=0;

int dazhong=0;

int zongfen=0;

int i;

int number=0;

for(i=0;i

{

if(judge_type[i]==1)

{

expert=expert+score[i];

number++;

}

else dazhong=dazhong+score[i];

}

if(number==N)

{

zongfen=(int)(expert/N);

}

else

{

expert=(int)(expert/number);

dazhong=(int)(dazhong/(N-number));

zongfen=int(0.6*expert+0.4*dazhong);

}

return zongfen;

}

int main()

{

int score[N];

int judge_type[N];

int numberlast=0;

int i;

printf("please input the %d score:\n",N);

for(i=0;i

scanf("%d",&score[i]);

printf("please input the

level(1:expert,2:dazhong)\n");

for(i=0;i

scanf("%d",&judge_type[i]);

numberlast=cal_score(score,judge_type,N);

printf("the last score is %d\n",numberlast);

return 0;

}

10、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n 为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6, 1}; input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7, 3}

#include

#include

#include

void sort(int input[], int n, int output[])

{

int i,j;

int k=1;

int temp;

int med;

for(i=0;i

for(j=0;j

if(input[j]>input[j+1])

{temp=input[j];input[j]=input[j+1];input[j+1]=temp;}

if(n%2!=0)

{

for(i=0;i

printf("%2d",input[i]);

printf("\n");

med=(n-1)/2;

output[med]=input[n-1];

for(i=1;i<=med;i++)

{

output[med-i]=input[n-1-k];

output[med+i]=input[n-2-k];

k=k+2;

}

}

else

{

for(i=0;i

printf("%2d",input[i]);

printf("\n");

med=n/2;

output[med]=input[n-1];

for(i=1;i<=med-1;i++)

{

output[med-i]=input[n-1-k];

output[med+i]=input[n-2-k];

k=k+2;

}

output[0]=input[0];

}

for(i=0;i

printf("%2d",output[i]);

printf("\n");

}

int main()

{

int a[6]={3,6,1,9,7,8};

int b[6]={0};

for(int i=0;i<6;i++)

printf("%2d",a[i]);

printf("\n");

sort(a,6,b);

return 0;

}

11、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。

例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2, 6, -1}

函数接口 void scheduler(int task[], int n, int

system_task[], int user_task[])

#include

#include

#include

#include

void scheduler1(int task[], int n, int system_task[], int user_task[])

{

int i;

int j=0;

int *p,*pp,*p_user,*pp_user;

int index=0;

int count,count2;

int min=0;

int k=0;

p=(int*)malloc(sizeof(int)*n);

for(i=0;i

p[i]=0;

pp=(int*)malloc(sizeof(int)*n);

for(i=0;i

pp[i]=0;

p_user=(int*)malloc(sizeof(int)*n);

for(i=0;i

p_user[i]=0;

pp_user=(int*)malloc(sizeof(int)*n);

for(i=0;i

pp_user[i]=0;

for(i=0;i

{

if(task[i]<50)

{

{

system_task[j]=task[i];

pp[j]=i;

j++;

}

count=j;

}

else if(task[i]<=255)

{

{

user_task[k]=task[i];

pp_user[k]=i;

k++;

}

count2=k;

}

else task[i]=task[i];

}

for(i=0;i

printf("%3d",system_task[i]);

printf("\n");

for(i=0;i

{

min=system_task[0];

for(j=1;j

{

if(system_task[j]

{

min=system_task[j];

p[i]=j;

}

}

system_task[p[i]]=51;

}

pp[count]=-1;

for(i=0;i

printf("%3d",pp[p[i]]);

printf("%3d\n",pp[count]);

/*************************************************** ********/

for(i=0;i

printf("%4d",user_task[i]);

printf("\n");

for(i=0;i

{

min=user_task[0];

for(j=1;j

{

if(user_task[j]

{

min=user_task[j];

p_user[i]=j;

}

}

user_task[p_user[i]]=256;

}

pp_user[count2]=-1;

for(i=0;i

printf("%4d",pp_user[p_user[i]]);

printf("%3d\n",pp_user[count2]);

}

int main()

{

int task[9]={0, 30, 155, 1, 80, 300,170, 40, 99};

int system_task[9]={0};

int user_task[9]={0};

scheduler1(task,9,system_task,user_task);

return 0;

}

12、从两个数组的最后一个元素比较两个数组中不同元素的个数,如有array1[5]={77,21,1,3,5}, array2[3]={1,3,5},从array1[4]与array2[2]比较开始,到array1[2]与array[0]比较结束。这样得出它们不同的元素个数为0,若array1[6]={77,21,1,3,5,7},那么他们不同的元素为3。

函数原型为 int compare_array( int len1, int array1[], int len2, int array2[] );

其中,len1与len2分别为数组array1[]和array2[]的长度,函数返回值为两个数组不同元素的个数。

以下是上题的函数完整实现:

//diff_num.cpp

#include

int compare_array(int len1,int array1[],int len2,int

array2[])

{

int i,t,small,num=0;

//把两数组倒置

for(i=0;i

{

t=array1[i];

array1[i]=array1[len1-i-1];

array1[len1-i-1]=t;

}

for(i=0;i

{

t=array2[i];

array2[i]=array2[len2-i-1];

array2[len2-i-1]=t;

}

//输出倒置后的两数组

/* for(i=0;i

printf("%d ",array1[i]);

printf("\n");

for(i=0;i

printf("%d ",array2[i]);

*/ printf("\n");

if(len1>len2)

small=len2;

else

small=len1;

num=small;

for(i=0;i

{

if(array1[i]==array2[i])

num--;

}

printf("num=%d\n",num);

return num;

}

void main()

{

int array1[5]={77,21,1,3,5},array2[3]={1,3,5};

int len1=5,len2=3;

compare_array(len1,array1,len2,array2);

}

13、输入一个字符串,用指针求出字符串的长度。

答案:

#include

int main()

{

char str[20], *p;

int length=0;

printf(“Please input a string: ”);

gets(str);

p=str;

while(*p++)

{

length++;

}

printf(“The length of string is %d\n”, length);

return 0;

}

14、使用C语言实现字符串中子字符串的替换

描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind, char* strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。

举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:ABCDEFGHIJKLMNOPQgggUVWXYZ

答案一:

#include

#include

void StrReplace(char* strSrc, char* strFind, char* strReplace);

#define M 100;

void main()

{char s[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

char s1[]="RST";

char s2[]="ggg";

StrReplace(s,s1,s2);

printf("%s\n",s);

}

void StrReplace(char* strSrc, char* strFind, char* strReplace)

{

int i=0;

int j;

int n=strlen(strSrc);

int k=strlen(strFind);

for(i=0;i

{

if(*(strSrc+i)==*strFind)

{

for(j=0;j

{

if(*(strSrc+i+j)==*(strFind+j))

{

*(strSrc+i+j)=*(strReplace+j);

}

else continue;

}

}

}

}

答案二:

#include

#define MAX 100

StrReplace(char *s, char *s1, char *s2) {

char *p;

for(; *s; s++) {

for(p = s1; *p && *p != *s; p++);

if(*p) *s = *(p - s1 + s2);

}

}

int main()

{

char s[MAX]; //s是原字符串

char s1[MAX], s2[MAX]; //s1是要替换的

//s2是替换字符串

puts("Please input the string for s:");

scanf("%s", s);

puts("Please input the string for s1:");

scanf("%s", s1);

puts("Please input the string for s2:");

scanf("%s", s2);

StrReplace(s, s1, s2);

puts("The string of s after displace is:");

printf("%s\n", s);

return 0;

}

答案三:

#include

#include

#include

#define M 100

void StrReplace(char* strSrc, char* strFind, char* strReplace);

int main()

{

char s[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

char s1[]="RST";

char s2[]="gggg";

StrReplace(s,s1,s2);

printf("%s\n",s);

return 0;

}

void StrReplace(char* strSrc, char* strFind, char* strReplace)

{

while(*strSrc != '\0')

{

if(*strSrc == *strFind)

{

if(strncmp(strSrc,strFind,strlen(strFind)) == 0 )

{

int i = strlen(strFind);

int j = strlen(strReplace);

printf("i = %d,j = %d\n",i,j);

char *q = strSrc + i;

printf("*q = %s\n",q);

while((*strSrc++ = *strReplace++) != '\0');

printf("strSrc - 1 = %s\n",strSrc - 1);

printf("*q = %s\n",q);

while((*strSrc++ = *q++) != '\0');

}

else

{

strSrc++;

}

}

else

{

strSrc++;

}

}

}

15、编写一个程序实现功能:将字符串”Computer Secience”赋给一个字符数组,然后从第一个字母开始间隔的输出该串,用指针完成。

答案:

#include

#include

int main() {

char str[]=”Computer Science”;

int flag=1;

char *p=str;

while(*p)

{

if ( flag )

{

printf(“%c”,*p);

}

flag = (flag + 1) % 2;

p++;

}

printf(“\n”);

return 0;

}

16、使用C语言实现字符串中子字符串的替换

描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind, char* strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。

举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:ABCDEFGHIJKLMNOPQgggUVWXYZ

答案一:

#include

#include

void StrReplace(char* strSrc, char* strFind, char* strReplace);

#define M 100;

void main()

{char s[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

char s1[]="RST";

char s2[]="ggg";

StrReplace(s,s1,s2);

printf("%s\n",s);

}

void StrReplace(char* strSrc, char* strFind, char* strReplace)

{

int i=0;

int j;

int n=strlen(strSrc);

int k=strlen(strFind);

for(i=0;i

{

if(*(strSrc+i)==*strFind)

{

for(j=0;j

{

if(*(strSrc+i+j)==*(strFind+j))

{

*(strSrc+i+j)=*(strReplace+j);

}

else continue;

}

}

}

}

答案二:

#include

#define MAX 100

StrReplace(char *s, char *s1, char *s2) {

char *p;

for(; *s; s++) {

for(p = s1; *p && *p != *s; p++);

if(*p) *s = *(p - s1 + s2);

}

}

int main()

{

char s[MAX]; //s是原字符串

char s1[MAX], s2[MAX]; //s1是要替换的

//s2是替换字符串

puts("Please input the string for s:");

scanf("%s", s);

puts("Please input the string for s1:");

scanf("%s", s1);

puts("Please input the string for s2:");

scanf("%s", s2);

StrReplace(s, s1, s2);

puts("The string of s after displace is:");

printf("%s\n", s);

return 0;

}

答案三:

#include

#include

#include

#define M 100

void StrReplace(char* strSrc, char* strFind, char* strReplace);

int main()

{

char s[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

char s1[]="RST";

char s2[]="gggg";

StrReplace(s,s1,s2);

printf("%s\n",s);

return 0;

}

void StrReplace(char* strSrc, char* strFind, char* strReplace)

{

while(*strSrc != '\0')

{

if(*strSrc == *strFind)

{

if(strncmp(strSrc,strFind,strlen(strFind)) == 0 )

{

int i = strlen(strFind);

int j = strlen(strReplace);

printf("i = %d,j = %d\n",i,j);

char *q = strSrc + i;

printf("*q = %s\n",q);

while((*strSrc++ = *strReplace++) != '\0');

printf("strSrc - 1 = %s\n",strSrc - 1);

printf("*q = %s\n",q);

while((*strSrc++ = *q++) != '\0');

}

else

{

strSrc++;

}

}

else

{

strSrc++;

}

}

}

17、编写一个程序实现功能:将两个字符串合并为一个字符串并且输出,用指针实现。

char str1[20]={“Hello ”}, str2[20]={“World ”}; 答案:

#include

int main()

{

char str1[20]={“Hello ”}, str2[20]={“World ”};

char *p=str1, *q=str2;

while( *p ) p++;

while( *q )

{

*p = *q;

p++;

q++;

}

*p = ‘\0’;

printf(“%s\n”, str1);

return 0;

}

18、算分数的问题,去掉一个最高分一个最低分,求平均分

1.#include

2.float avescore(float score[],int n)

3.{

4.float min=0;

5.float max=0;

6.int minindex=0;

7.int maxindex=0;

8.float sum=0;

9. min=score[0];

10. for(int i=0;i

11. if(score[i]

12. {

13. min=score[i];

14. minindex=i;

15. }

16. score[minindex]=0;

17. max=score[0];

18. for(i=0;i

19. if(score[i]>max)

20. {

21. max=score[i];

22. maxindex=i;

23. }

24. score[maxindex]=0;

25. for(i=0;i

26. sum+=score[i];

27. sum=sum/(n-2);

28. return sum;

29.}

30.void main()

31.{

32.float score[6]={70,80,90,98,87,86};

33.float lastscore;

34. lastscore=avescore(score,6);

35. printf("the last score is :%5.2f\n",lastsc

ore);

36.

37.}

运行结果:

the last score is :85.75

19、对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数若奇数和偶数不

等长,则把剩下的直接放到数组中。

思路:先进行奇偶判断,得到奇数和偶数数组。然后对两数组排序,进行长度判断,最后组织数据。

#include

1.#include

2.

3.void jiou(int a[],int n)

4.{

5.int *p1;

6.int *p2;

7.int i,j;

8.int k=0;

9.int kk=0;

10.int count1=0;

11.int count2=0;

12.int temp;

13.int temp2;

14.int m=0;

15. p1=(int*)malloc(sizeof(int)*n);

16. p2=(int*)malloc(sizeof(int)*n);

17. for(i=0;i

18. {

19. p1[i]=0;

20. p2[i]=0;

21. }

22.

23. for(i=0;i

24. {

25.

26. if((a[i]%2)!=0)

27. {p2[kk++]=a[i];}

28. else

29. {p1[k++]=a[i];}

30. }

31. count1=k;

32. count2=kk;

33.

34. for(i=0;i

35. printf("%3d",p2[i]);

36. printf("\n");

37.

38. for(i=0;i

39. for(j=0;j

40. if(p2[j]>p2[j+1])

41. {temp2=p2[j];p2[j]=p2[j+1];p2[j+1]

=temp2;}

42. for(i=0;i

43. printf("%3d",p2[i]);

44. printf("\n");

45.

46. for(i=0;i

47. printf("%3d",p1[i]);

48. printf("\n");

49.

50.

51. for(i=0;i

52. for(j=0;j

53. if(p1[j]

54. {temp=p1[j];p1[j]=p1[j+1];

p1[j+1]=temp;}

55. for(i=0;i

56. printf("%3d",p1[i]);

57. printf("\n");

58.

59.

60.

61. if(count1>count2)

62.

63. {

64. for(i=0;i

65. {

66. a[i+m]=p2[i];

67. a[i+1+m]=p1[i];

68. m=m+1;

69. }

70. for(i=0;i

2;i++)

71. a[2*count2+i]=p1[i

+count2];

72.

73. }

74. else

75. {

76. for(i=0;i

77. {

78. a[i+m]=p2[i];

79. a[i+1+m]=p1[i];

80. m=m+1;

81.

82. }

83. for(i=0;i

1;i++)

84. a[2*count1+i]=p2[i

+count1];

85.

86. }

87. for(i=0;i

88. printf("%3d",a[i]);

89. printf("%\n");

90.

91.}

92.void main()

93.{

94.int a[10]={2,3,14,6,2,15,12,14,4,11};

95. jiou(a,10);

96.

97.}

运行结果:

3 15 11

3 11 15

2 14 6 2 12 14 4

14 14 12 6 4 2 2

3 1

4 11 14 1

5 12

6 4 2 2

001-华为公司应届生试题-研发软件类(第1套)

说明:本份试题满分100分,完成时间为90分钟。请将答案写在答题纸上,不要写在试卷上,答题完毕将试卷、答题纸和草稿纸一起上交。 一、单选题(共20题计40分) 1、输入序列为ABC,可以变为CBA时,经过的栈操作为() A. push,pop,push,pop,push,pop B. push,push,push,pop,pop,pop C. push,push,pop,pop,push,pop D. push,pop,push,push,pop,pop 2.线程和进程最主要的区别在于 A. 进程是UNIX下的概念,线程是Windows下的概念 B. 进程的效率比线程低 C. 在进程中可以创造线程,但线程中不能生成进程 D. 进程由自己独立的运行空间,线程的运行空间是共享的 3. IP路由发生在TCP/IP体系结构中的哪一层 A. 物理层 B. 数据链路层 C. 网络层 D. 传输层 4. 假设一个IP主机地址为而子网掩码为那么该主机的网络号为_________ 5.120 C 、遍历是树形结构的一种重要运算。若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列必是______。供选择的答案 A) E F G H B C D B) F E G H D C B C) B C D E F G H D) E F G C H D B 6、五层完全二叉树有___个节点。 A. 16 B. 32 C. 31 D. 33 7、用链接方式存储的非循环单向队列,在进行删除运算时,_____。 A) 头、尾指针可能都要修改 B) 仅修改头指针 C) 仅修改尾指针 D) 头、尾指针都要修改 8、如果在排序过程中,每次均将一个待排序的记录按关键字大小加入到前面已经有序的子表中的适当位置,则该排序方法称为() A.插入排序B.归并排序 C.冒泡排序D.堆排序 9、对下列关键字序列用快速排序法进行排序时,速度最快的情形是:( ) (A){25、23、30、17、21、5、9} (B){21、9、17、30、25、23、5} (C){21、25、5、17、9、23、30} (D){5、9、17、21、23、25、30}

华为笔试题(答案)

笔试题 选择题 1、以下程序的输出结果是: #include int main() { int n =4; while (n--) { printf("%d ", --n); } printf("\r\n"); return0; } 答案:2 0 2、设有以下宏定义: #define N 4 #define Y(n) ((N+1)*n) 则执行语句:Y(5+1)为: 答案:26 3、 enum ENUM_A { x1, y1, z1 =5, a1, b1 }; enum ENUM_A enumA = y1; enum ENUM_A enumB = b1; 请问enumA和enumB的值是多少?答案:1,7

4、若有函数max(a,b),并且函数指针变量p已经指向函数,当调用该函数时正确的调用方法是: 答案:(*p)(a,b)或者p(a,b) 5、对栈S进行下列操作:push(1), push(5), pop(), push(2), pop(), pop(), 则此时栈顶元素是: 答案:没有元素,栈空。 6、在一个32位的操作系统中,设void *p = malloc(100),请问sizeof(p)的结果是: 答案:32位操作系统的寻址大小是32位,即4字节。 7、若已定义: int a[9], *p = a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是: A)p+1 B)a+1 C) a++ D) ++p 答案:C 8、设有如下定义: unsigned long pulArray[] = {6,7,8,9,10}; unsigned long *pulPtr; 则下列程序段的输出结果是什么? pulPtr = pulArray; *(pulPtr + 2) += 2; printf("%d, %d\r\n", *pulPtr, *(pulPtr + 2)); A) 8, 10 B) 6, 8 C) 7, 9 D) 6, 10 答案:D 9、以下程序运行后,输出结果是什么? void main() { char *szStr = "abcde"; szStr += 2; printf("%1u\r\n", szStr); return; } A) cde B) 字符c的ASCII码值C) 字符c的地址D) 出错 答案:C

最全的华为校园招聘笔试题

最全的华为校园招聘笔试题 华为笔试 1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用 “::“ 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2.如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 3.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

4.语句for( ;1 ;)有什么问题?它是什么意思? 答:无限循环,和while (1)相同。 5.do……while和while……do有什么区别? 答:前一个循环一遍再判断,后一个判断以后再循环。 6.请写出下列代码的输出内容#i nclude main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf(“b,c,d:%d,%d,%d“,b,c,d); return 0; } 答:10,12,120 一.判断题(对的写T,错的写F并说明原因,每小题4分,共20分) 1.有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。() 2.int (*ptr) (),则ptr是一维数组的名字。() 3.指针在任何情况下都可进行>, =, =MAX_SRM) return (NULL_SRM); else return SRM_no; } 3. 写出程序运行结果 int sum(int a) { auto int c=0; static int b=3; c+=1; b+=2; return(a+b+C); } void main() { int I; int a=2; for(I=0;Inext = NULL; p=h; for(i=0;inext = s; printf(“Please input the information

华为校招·硬件技术工程师机考试题及答案

精品文档 1.(判断题)DRAM上电时存储单元的内容是全0,而Flash上电时存储单元的内容是全1。(4分) A.正确 B.错误 FLASH可保存 2.(判断题)眼图可以用来分析高速信号的码间干扰、抖动、噪声和衰减。(4分) A.正确 B.错误 3.(判断题)以太网交换机将冲突域限制在每个端口,提高了网络性能。(4分) A.正确 B.错误 4.(判断题)放大电路的输出信号产生非线性失真是由于电路中晶体管的非线性引起的。(4分) A.正确 B.错误 5.(判断题)1的8位二进制补码是0000_0001,-1的8位二进制补码是1111_1111。(4分) A.正确 B.错误 6.(判断题)洗衣机,电冰箱等家用电器都使用三孔插座,是因为如果不接地,家用电器是不能工作的。(4分) A.正确 B.错误 7.(判断题)十进制数据0x5a与0xa5的同或运算结果为:0x00。(4分) A.正确 B.错误 8.(判断题)硅二极管的正向导通压降比锗二极管的大(4分) A.正确 B.错误 9.(单选题)一空气平行板电容器,两级间距为d,充电后板间电压为u。然后将电源断开,在平板间平行插入一厚度为d/3的金属板。此时电容器原板间电压变为(4分) A.U/3 B.2U/3 C.3U/4 D.不变但电容的大小不是由 Q(带电量)或U(电压)决定的,即: C=εS/4πkd。其中,ε是一个常数, S为电容极板的正对面积, d为电容极板的距离, k则是静电力常量。而常见的平行板电容器 电容为C=εS/d.(ε为极板间介质的介电常数, S 为极板面积, d为极板间的距离。) 3电容器的电势能计算公式: E=CU^2/2=QU/2 10.(单选题)8086CPU内部包括哪些单元(4分) A.ALU,EU B.ALU,BIU C.EU,BIU D.ALU,EU,BIU 80x86从功能上分执行单元EU(Execution Unit),和总线接口单元BIU(Bus Interface Unit),执行单元由8个16位通用寄存器,1个16位标志寄存器,1个16位暂存寄存器,1个16位算术逻辑单元ALU及EU控制电路组成。 总线接口单元由4个16位段寄存器(CS,DS,SS,ES),1个16位的指令指针寄存器,1个与EU通信的内部暂存器,1个指令队列,1个计算20位物理地址的加法器∑及总线控制电路构成。 11.(单选题)为了避免50Hz的电网电压干扰放大器,应该用那种滤波器:(4分) A.带阻滤波器 B.带通滤波器 C.低通滤波器 D.高通滤波器 12.(单选题)关于SRAM和DRAM,下面说话正确的是:(4分) A.SRAM需要定时刷新,否则数据会丢失 B.DRAM使用内部电容来保存信息 C.SRAM的集成度高于DRAM D.只要不掉点,DRAM内的数据不会丢失 【解析】SRAM和DRAM都是随机存储器,机器掉电后,两者的信息都将丢失。它们的最大区别就是:DRAM是用电容有无电荷来表示信息0和1,为防止电容漏电而导致读取信息出错,需要周期性地给电容充电,即刷新;而SRAM是利用触发器的两个稳态来表示信息0和1,所以不需要刷新。另外,SRAM 的存取速度比DRAM更高,常用作高速缓冲存储器Cache。

华为硬件笔试题(最新版)

一选择 13 个题目,没有全部抄下来,涉及的课程有电路,模拟电路,数字电路,信号与系统,微机原理 ,网络,数字信号处理 有关于 1.微分电路 2.CISC,RISC 3.数据链路层 二填空 10 个题目,没有全部抄下来,涉及的课程有电路,模拟电路,数字电路,信号与系统,微机原理 ,网络,数字信号处理 有关于 1.TIC6000 DSP 2.二极管 3.RISC 4.IIR 三简答 1.x(t)的傅立叶变换为 X(jw)=$(w)+$(w-PI)+$(w-5) h(t)=u(t)-u(t-2) 问: (1),x(t)是周期的吗?

(2),x(t)*h(t)是周期的吗? (3),两个非周期的信号卷积后可周期吗? 2.简述分组交换的特点和不足 四分析设计 1.波形变换题目 从正弦波->方波->锯齿波->方波,设计电路 2.74161 计数器组成计数电路,分析几进制的 3.用 D 触发器构成 2 分频电路 4.判断 MCS-51 单片机的指令正确还是错误,并指出错误原因 (1) MUL R0,R1 (2) MOV A,@R7 (3) MOV A,#3000H (4) MOVC @A+DPTR,A (5) LJMP #1000H () 5.MCS-51 单片机中,采用 12Mhz 时钟,定时器 T0 采用模式 1(16 位计数器),请问在下面程序中, p1.0 的输出频率 MOV TMOD,#01H SETB TR0 LOOP:MOV TH0,#0B1H MOV TL0,#0E0H

LOOP1:JNB TF0,LOOP1 CLR TR0 CPL P1.0 SJMP LOOP

华为校招问题回答汇总--6.22修订版

华为校招问题汇总 6月22日 注:有任何问题可以在群内@当日值班管理员。请不要私信管理员,私信一律不回复;同时,没有修改备注的同学无权提问。 一、实习相关 1.华为今年的暑期实习还可以补录吗? ANS:华为实习生招聘已结束,不能再补录。 2.实习的时候招硬件非常少,这次呢? ANS:软硬件都是主流招聘岗位。 3.已经通过面试被录为暑期实习生,由于特殊情况而去不了,会不会影响9月 份的正式应聘呢? ANS:不会影响到9月的校招 4.想请问您一下华为秋季有没有计划招聘现在研一的的实习生?就是研二出 去实习的。 ANS:没有计划了,实习生是统一在5月份面试的。 5.四月底参加了华为暑期实习生招聘上机考试并通过,接着做完性格测,说到 5月6号左右会通知面试,我们几个同学都没有收到面试通知,难道都是性格测试出问题了吗? ANS:有可能性格测试没过,请耐心等通知。 6.已拿到实习岗位,还能参加7月份的机试吗? ANS:不用参加,除非你想证明实力,为特殊起薪 7.实习后会有秋季招聘的绿色通道吗?实习生留到华为的比例有多大呢? ANS:实习是实习,会有实习成绩,根据实习成绩来决定是否有绿色通道。 二、机试相关 1.希望了解一些软件考试方面的信息 ANS:7月上旬机试,你们等艾庆兴,他会来西工大讲的。 (ps.给刚才提到的艾庆兴同学做个简介,该同志人送外号“艾神”,做过14届所有的华为机试题,曾经获得某编程大赛全国冠军,认真听他的讲座可以提高机试通过率哦~) 2.7月份的机试是提前批还是正式秋招的机试?是软件类还是硬件 类? ANS:7月份是正式的秋招机试,软件类招聘第一个环节,希望有意向的同学可以安排好时间。时间定在7月中上旬。 3.7月机试要是没过之后的还可以参加吗? ANS:7月份的肯定比9月份的简单,有可能没有9月的软件机试了。 4.请问7月机试时间具体是几号? ANS: 7月的机试,有7月上旬1次,中旬1次 5.人在杭州能不能申请在杭州的机试面试?

2020华为校园招聘笔试真题题库精选答案解析(南研所)

2020华为校园招聘笔试真题题库精选答案解析(南研所) 1 局部变量能否和全局变量重名 2 如何引用一个已经定义过的全局变量 3 全局变量可不可以定义在可被多个.C文件包含的头文件中为什么 4 语句for( ;1 ;)有什么问题它是什么意思 5 do……while和while……do有什么区别 6 请写出下列代码的输出内容 以下是引用片段: #include main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 7 static全局变量与普通的全局变量有什么区别static局部变量和普通局部变量有什么区别static函数与普通函数有什么区别? 8 程序的局部变量存在于()中,全局变量存在于()中,动态申请数据存在于()中。 9 设有以下说明和定义:

typedef union {long i;int k[5]; char c;} DATE; struct data { int cat;DATE cow; double dog;} too; DATE max; 则语句printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:_______ 10 队列和栈有什么区别? 写出下列代码的输出内容 以下是引用片段: #include int inc(int a) { return(++a); } int multi(int*a,int*b,int*c) { return(*c=*a**b); } typedef int(FUNC1)(int in); typedef int(FUNC2) (int*,int*,int*); void show(FUNC2 fun,int arg1, int*arg2) { INCp=&inc;

华为笔试试题大全

华为笔试试题大全 (陈远跃/整理) 1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。 3.描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性。 4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈。 5.什么是平衡二叉树? 左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。 6.堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源。 7.什么函数不能声明为虚函数? constructor函数不能声明为虚函数。 8.冒泡排序算法的时间复杂度是什么? 时间复杂度是O(n^2)。 9.写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001) 10.Internet采用哪种网络协议?该协议的主要层次结构? Tcp/Ip协议 主要层次结构为:应用层/传输层/网络层/数据链路层/物理层。 11.Internet物理地址和IP地址转换采用什么协议?

ARP (Address Resolution Protocol)(地址解析協議) 12.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 13.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。 循环链表,用取余操作做 14.不能做switch()的参数类型是: switch的参数不能为实型。 上海华为的一道关于指针方面的编程题 int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路) 华为笔试题含答案 [软件工程题] 写一个程序, 要求功能:求出用1,2,5这三个数不同个数组合的和为100的组合个数。 如:100个1是一个组合,5个1加19个5是一个组合。。。。请用C++语言写。 答案:最容易想到的算法是: 设x是1的个数,y是2的个数,z是5的个数,number是组合数 注意到0<=x<=100,0<=y<=50,0<=z=20,所以可以编程为: number=0; for (x=0; x<=100; x++) for (y=0; y<=50; y++) for (z=0; z<=20; z++) if ((x+2*y+5*z)==100) number++; cout<

华为2012校园招聘软件上机笔试题+准确答案

2012华为校园招聘上机试题+准确答案 1.给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a, Z换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数void Stringchang(const char*inpu,char*output) 其中input是输入字符串,output是输出字符串 答案: void Stringchang (char *input,char *output) { int len=strlen(input); for(int i=0;i='A')||(input[i]<='z'&&input[i]>='a')) output[i]=input[i]+1; else output[i]=input[i]; } } 2.求一个整型数字中有没有相同的部分,例如12389756123这个整型数字中相同的部分是 123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。 函数为int same(int num) 其中num是输入的整型数字 答案:参考第三题很容易写出代码! 3.求两个字符串的乘积,结果存到字符串中,例如字符串一中存的“657891”,字符串二 中存的“521”,分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来 函数为void mul(char *input1,int n,char *input2, int m,char *output) 其中input1和input2是输入,n是input1的长度,n2是input2的长度。Output是输出答案: void mul(char *input1,int n,char *input2, int m,char *output) { int num1=StrToNum(input1,n); int num2=StrToNum(input2,m); int muti=num1*num2; NumToStr(muti,output); cout<=0;i--) {num+=(input[i]-delta)*pow(10.0,len-i-1);} return num; } void NumToStr(int num,char *output) //int型变量转为字符串 { int len=0; while(1)

华为笔试题done

试题 选择题 1、以下程序的输出结果是: 2 0 \r\n 正确值2 0 \r转义符:回车,\n转义符:换行 #include int main() { int n = 4; while (n--) { printf("%d ", --n); } printf("\r\n"); return 0; } 2、设有以下宏定义: #define N 4 #define Y(n) ((N+1)*n) 则执行语句:Y(5+1)为:26 如果#define Y(n) ((N+1)*(n)) 则Y(5+1) 为30 3、

enum ENUM_A { x1, y1, z1 = 5, a1, b1 }; enum ENUM_A enumA = y1; enum ENUM_A enumB = b1; 请问enumA和enumB的值是多少?1 7 x1=0,y1=1,a1=6,b1=7 4、若有函数max(a,b),并且函数指针变量p已经指向函数,当调用该函数时正确的调用方法是:(*p)(,) 5、对栈S进行下列操作:push(1), push(5), pop(), push(2), pop(), pop(), 则此时栈顶元素是: NULL 6、在一个32位的操作系统中,设void *p = malloc(100),请问sizeof(p)的结果是:4

7、若已定义: int a[9], *p = a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是: C a的值不能改变 A)p+1 B)a+1 C) a++ D) ++p 8、设有如下定义: unsigned long plArray[] = {6,7,8,9,10}; unsigned long *pulPtr; 则下列程序段的输出结果是什么?D pulPtr = plArray; *(pulPtr + 2) += 2; printf("%d, %d\r\n", *pulPtr, *(pulPtr + 2)); A) 8, 10 B) 6, 8 C) 7, 9 D) 6, 10 9、以下程序运行后,输出结果是什么? C void main() { char *szStr = "abcde"; szStr += 2; printf("%1u\r\n", szStr); return; } A) cde B) 字符c的ASCII码值C) 字符c的地址D) 出错

(整理)华为笔试题.

华为2011第一次笔试题目总结:单选20,多选10,改错3,编程2 有数据结构、网络、操作系统、数据库 一、单项选择题(4选1) 1.如果有N个节点用二叉树结构来存储,那么二叉树的最小深度是: 解析:深度为k的二叉树,最多有2^k-1个节点,这时的二叉树成为满二叉树。 Log2(N+1) 2.形结构的一种重要运算。若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则后序序列是:FEGHDCB 3.下列算法的功能是: /*L是无头节点单链表*/ LinkList Demo(LinkList L){ ListNode *Q,*P; If(L&&L->next){ Q=L; L=L->next; P=L; While(p->next) P=p->next; p->next=Q; Q->next=NULL; } return L; } 解析:将单链表转变为循环链表 4、循环单向链表指:最后一个节点的指针总是指向链表头。 5、折半查找算法的算法复杂度:O(log2N) 6、void example(char acWelcome[]){ Printf(“%d”,sizeof(acWelcome)); return; } Void main(){ Char acWelcome[]=”Welcome to Huawei Test”; Example(acWelcome); return; } 的输出是—— A 4 B 5 C 22 D 23 解析:23 7、设有如下定义: Unsigned long pulArray[]={6,7,8,9,10}; Unsigned long *pulPtr; 则下列程序段的输出结果为——

届华为校园招聘上机考试题

2012届华为校园招聘上机考试题目(9月6日下午1点场) 分类:华为准备2011-09-08 15:10 281人阅读评论(0) 收藏举报 在网上看到华为在有的地方已经开始机试了,于是决定自己先编着试试。下面是题目和自己写的代码。 1、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分= 专家评委平均分* 0.6 + 大众评委* 0.4,总分取整。如果没有大众评委,则总分= 专家评委平均分,总分取整。函数最终返回选手得分。 函数接口int cal_score(int score[], int judge_type[], int n) view plaincopy to clipboardprint? 1. #include 2. #include 3. #include 4. #include 5. #define N 5 6. 7. i nt cal_score(int score[], int judge_type[], int n) 8. 9. { 10. int expert=0; 11. int dazhong=0; 12. int zongfen=0; 13. int i; 14. int number=0; 15. 16. for(i=0;i

华为笔试经验及题目

华为笔试经验及题目 华为认证,基于ICT产业链人才个人职业发展生命周期,以层次化的职业技术认证为指引,以下是CN人才网小编整理的华为笔试经验及题目,欢迎阅读参考! H12-211 HCNA-HNTD考试大纲 2.1 考试内容 IP网络基础 1. 路由交换(数通)基础知识 2. 网络基本概念、IP网络构架、标准化组织与协议 3. OSI、TCP/IP协议模型结构、各个层次的功能以及报文封装 4. IPv4子网划分 5. ARP原理 6. TCP/UDP原理 7. 数据转发过程 8. 常用应用层协议FTP、DHCP的工作原理

9. Ping,Tracert,Telnet等常用工具原理与应用 局域网技术 1. 以太网技术、交换机基本原理 2. STP、RSTP、VLAN、GARP&GVRP以及WLAN基本原理以及在VRP中的实现 3. 如何使用STP、RSTP、VLAN、GARP&GVRP以及WLAN 等技术以及华为交换机构建小型交换网络 广域网技术 1.HDLC、PPP、Frame Relay以及在华为产品中的实现 路由技术 1.静态路由协议原理、RIP协议基本原理、OSPF协议基本原理以及在VRP中的实现 2.如何使用路由技术以及华为路由器构建小型路由网络 网络安全 1. AAA工作原理

2. ACL原理以及在华为路由设备中的配置 3. IPsec VPN、GRE原理以及在华为路由设备中的配置 4. 如何利用网络安全技术保证网络安全性 产品知识 1.VRP特点、基本操作与维护 2.华为路由器、交换机产品特点以及在IP网络中的应用 网络管理 1. SNMP原理与配置 2. e-Sight的基础知识以及简单应用 IPv6技术 1. IPv6基础 2. RIPng、OSPFv3协议原理以及在华为路由设备中的配置 3. DHCPv6协议原理以及在IP网络中的应用 题目练习: 1. 找错 void test1()

华为校园招聘电子科大上机题目

华为校园招聘电子科大上机题目 一.题目描述(60分):通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个 相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”。 要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr:输入字符串 lInputLen:输入字符串长度 【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串 等长;【注意】 只需要完成该函数功能算法,中间不需要有任何IO的输入输 出示例输入:“deefd” 输出:“def” 输入:“afafafaf” 输出:“af” 输入:“pppppppp” 输出:“p” main函数已经 隐藏,这里保留给用户的测试入口,在这里测试你的实现函数, 可以调用printf打印输出当前你可以使用其他方法测试,只要 保证最终程序能正确执行即可,该函数实现可以任意修改,但是 不要改变函数原型。一定要保证编译运行不受影响。 二.题目描述(40分):通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席 的重复字母进行压缩,并输出压缩后的字符串。

压缩规则: 1.仅压缩连续重复出现的字符。比如字符串“abcbc“由于无连续重复字符,压缩后的字符串还是“abcbc“。 2.压缩字段的格式为“字符重复的次数+字符“。例如:字符串“xxxyyyyyyz“压缩后就成为“3x6yz“。 要求实现函数: void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr:输入字符串 lInputLen:输入字符串长度 【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】 只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“cccddecc” 输出:“3c2de2c” 输入:“adef” 输出:“adef” 输入:“pppppppp” 输出:“8p” 三.题目描述(50分):通过键盘输入100以内正整数的加.减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。 补充说明: 1.操作数为正整数,不需要考虑计算结果溢出的情况。 2.若输入算式格式错误,输出结果为“0”。

华为笔试题a

【第一部分:基本知识篇】 1、华为公司的全称为() A、深圳市华为技术有限公司 B、华为技术有限公司 C、华为公司 D、我司 (答案:B,答A、C者酌情给分,答D者立即辞退,我司三令五申禁止使用该华为内部土语,屡禁不止,老员工不可教也,只好从新员工抓起,格杀勿论) 2、华为公司的企业性质是() A、民营 B、私营 C、国营 D、上市公司 (答案:A,本题主要让考生了解公司的性质) 3、华为公司的商标象征() A、红太阳 B、菊花 C、扇贝 (答案:B,答A者酌情给分,答C者立即辞退,天天就想着吃) 4、从下列选项中选择出公司的常务副总裁() A、任正非 B、孙亚芳 C、李一男 D、郑宝用 E、张燕燕 (答案:BD,答C者立即辞退,让他到李一男的公司去报到吧) 5、华为公司的年中奖一般是在每年的什么时候发() A、元旦后 B、春节前 C、7月下旬或8月上旬 D、劳动节前 E、国庆节前 (答案:C,切记,因为是年中奖,而不是年终奖) 6、华为公司的配给你的股票是() A、发的 B、用自己的奖金去买 (答案:B) 7、老板常说的土八路,是指() A、老板自己的革命年代的光辉历史 B、本地化的用服兄弟 C、季度考核为 D的兄弟 (答案:B) 【第二部分:部门篇】 1、你所在的一级部门为() A、技术支援部

B、国际技术支援部 C、国际技术支援部国内分部 D、用服 (答案:B,答A、C者酌情给分,答D者作不合格处理,为了提高技术支援部形象,公司早就取消用服这个字眼,而且于2001年春节后悄悄地将技术支援部前加“国际”二字) 2、你所在的二级部门为() A、传输产品技术支援管理部 B、传输工程部 C、传输用服工程中心 D、光网络产品技术支援管理部 (答案:A,首先得把自己的部门搞清楚,答D者,有远见,有潜力,可以酌情给分,很可能在2001年未就改成这个名字,因为市场中研已经改了,就差技术支援部了) 3、传输的商标为() A、SBS B、SDH C、OptiX D、Metro (答案:C,答A者酌情给分,最起码还知道老商标) 4、技术支援部与国际技术支援部的关系() A、国际技术支援部是技术支援部下面的一个部门,负责海外 B、技术支援部是国际技术支援部下面的一个部门,负责国内 C、技术支援部是国际技术支援部的前身 D、国际技术支援部是技术支援部的前身 (答案:C) 【第三部分:业务篇】 1、SBS是() A、传输产品的老商标 B、同步骨干系统 C、傻不傻的拼音缩写 D、帅不帅的拼音缩写 (答案:AB,答CD者立即辞退) 2、SDH是() A、传输产品商标 B、同步数字序列

华为校招硬件技术工程师机考试卷试题包括答案.docx

1.(判断题 )DRAM 上电时存储单元的内容是全 0,而 Flash 上电时存储单元的内容是全1。 (4分) A.正确 B.错误 FLASH可保存 2.(判断题 )眼图可以用来分析高速信号的码间 干扰、抖动、噪声和衰减。(4 分 ) A.正确 B.错误 3.(判断题 )以太网交换机将冲突域限制在每个 端口,提高了网络性能。 (4 分 ) A.正确 B.错误 4.(判断题 )放大电路的输出信号产生非线性失 真是由于电路中晶体管的非线性引起的。(4分) A.正确 B.错误 5.(判断题 )1 的 8 位二进制补码是0000_0001,-1的 8 位二进制补码是1111_1111 。 (4 分 ) A.正确 B.错误 6.(判断题 )洗衣机,电冰箱等家用电器都使用 三孔插座,是因为如果不接地,家用电器是不 能工作的。 (4 分 ) A.正确 B.错误 7.(判断题 )十进制数据 0x5a 与 0xa5 的同或运算 结果为: 0x00 。 (4 分 ) A.正确 B.错误 8.(判断题 )硅二极管的正向导通压降比锗二极 管的大 (4 分 ) A.正确 B.错误 9.(单选题 )一空气平行板电容器,两级间距为 d,充电后板间电压为u。然后将电源断开, 在平板间平行插入一厚度为d/3 的金属板。此时电容器原板间电压变为(4 分 ) A.U/3 B.2U/3 C.3U/4 D.不变 精品文档 但电容的大小不是由 Q(带电量)或U(电压)决定的,即: C=εS/4πkd。其中,ε是一个常数, S 为电容极板 的正对面积, d 为电容极板的距离, k 则是静 电力常量。而常见的平行板电容器 电容为 C=εS/d. (ε 为极板间介质的介电常数,S 为极板面积, d 为极板间的距离。) 3 电容器的电势能计算公式:E=CU^2/2=QU/2 10.(单选题 )8086CPU 内部包括哪些单元(4 分 ) A.ALU,EU B.ALU,BIU C.EU,BIU D.ALU,EU,BIU 80x86 从功能上分执行单元EU(Execution Unit),和总线接口单元BIU(Bus Interface Unit),执行单元由 8 个 16位通用寄存器, 1 个 16位标志寄存器, 1 个 16 位暂存寄存器,1个 16 位算术逻辑单元 ALU及 EU控制电路组 成。 总线接口单元由4个16位段寄存器(CS,DS,SS,ES),1 个 16 位的指令指针寄存器, 1个与 EU通信的内部暂存器, 1 个指令队列, 1 个计算20 位物理地址的加法器∑及总线控制电路构成。 11.(单选题 )为了避免 50Hz 的电网电压干扰放大器,应该用那种滤波器: (4 分 ) A.带阻滤波器 B.带通滤波器 C.低通滤波器 D.高通滤波器 12.(单选题 )关于 SRAM 和 DRAM,下面说话正 确的是: (4 分 ) A.SRAM 需要定时刷新,否则数据会丢失 B.DRAM 使用内部电容来保存信息 C.SRAM 的集成度高于DRAM D.只要不掉点,DRAM 内的数据不会丢失 【解析】 SRAM和 DRAM都是随机存储器,机器掉电后,两者的信息都将丢失。它们的最大区别就是:DRAM是用电容有无电荷来表示信息0 和 1,为防止电容漏电而导致读取信息出错,需要周期性地给电 容充电,即刷新;而SRAM是利用触发器的两个稳态来表示信息 0 和 1,所以不需要刷新。另外,SRAM的存取速度比 DRAM更高,常用作高速缓冲存储器Cache。

华为2015校园招聘上机考试题

华为2015校园招聘上机考试题 第一题(60分): 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8,“abc”,“123456789”,则输出为“abc00000”,“12345678“,”90000000” 1.转载请标明出处,原文地址: https://www.doczj.com/doc/a313230153.html,/hackbuteer1/article/details/39253767 2.#include 3.#include https://www.doczj.com/doc/a313230153.html,ing namespace std; 5. 6.void solve(char *str , int n , int len) 7.{ 8.int i , j , k , quotient , remainder; 9.quotient = len / n; //原字符串被分解的个数 10. remainder = len - n * quotient; //剩余的字 符串的个数 11. 12. for(i = 0 ; i < len ; i += n) 13. { 14. if(len - i < n) 15. { 16. k = n - len + i; 17. for(j = i ; j < len ; ++j) 18. printf("%c" , str[j]); 19. for(j = 0 ; j < k ; ++j) 20. putchar('0'); 21. } 22. else 23. { 24. for(j = i ; j < i + n ; ++j) 25. printf("%c" , str[j]); 26. } 27. putchar(' '); 28. } 29. printf("\n"); 30.} 31. 32.int main(void)

华为硬件笔试题目

一选择 1.微分电路 222 2.CISC,RISC 答:CISC(复杂指令集计算机)和RISC(精简指令集计算机)是前CPU 的两种架构。早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。CISC(Complex Instruction Set Computer)结构有其固有的缺点,CISC 指令集的各种指令中,其使用频率却相差悬殊,大约有20%的指令会被反复使用,占整个程序代码的80%。而余下的80%的指令却不经常使用,在程序设计中只占20%,显然,这种结构是不太合理的。RISC 并非只是简单地去减少指令,而是把着眼点放在了如何使计算机的结构更加简单合理地提高运算速度上。RISC 结构优先选取使用频最高的简单指令,避免复杂指令;将指令长度固定,指令格式和寻地方式种类减少;以控制逻辑为主,不用或少用微码控制等措施来达到上述目的。 到目前为止,RISC体系结构也还没有严格的定义,一般认为,RISC 体系结构应具有如下特点: 采用固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种。 使用单周期指令,便于流水线操作执行。 大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/ 存储指令可以访问存储器,以提高指令的执行效率。当然,和CISC 架构相比较,尽管RISC 架构有上述的优点,但决不能认为RISC 架构就可以取代CISC 架构,事实上,RISC 和CISC 各有优势,而且界限并不那么明显。现代的CPU 往往采CISC 的外围,内部加入了RISC 的特性,如超长指令集CPU 就是融合了RISC 和CISC 的优势,成为未来的CPU 发展方向之一 3.数据链路层 答:数据链路可以粗略地理解为数据通道。物理层要为终端设备间的数据通信提供传输媒体及其连接,.媒体是长期的,连接是有生存期的。在连接生存期内,收发两端可以进行不等的一次或多次数据通信.每次通信都要经过建立通信联络和拆除通信联络两过程.这种建起 来的数据收发关系就叫作数据链路. 二填空 1.IIR滤波器 答:IIR滤波器有以下几个特点: ①IIR数字滤波器的系统函数可以写成封闭函数的形式。 ②IIR数字滤波器采用递归型结构,即结构上带有反馈环路。 ③IIR数字滤波器在设计上借助了成熟的模拟滤波器的成果 ④IIR数字滤波器的相位特性不好控制,对相位要求较高时,需加相位校准网络。 2.简述分组交换的特点和不足 答:分组交换也称为包交换。分组交换机将用户要传送的数据按一定长度分割成若干个数据段,这些数据段叫做“分组”(或称包)。传输过程中,需在每个分组前加上控制信息和地址标识(即分组头),然后在网络中以“存储——转发”的方式进行传送。到了目的地,交换机将分组头去掉,将分割的数据段按顺序装好,还原成发端的文件交给收端用户,这一过程称为分组交换。 分组交换的特点有: ①分组交换方式具有很强的差错控制功能,信息传输质量高。 ②网络可靠性强。

相关主题
文本预览
相关文档 最新文档