华为上机笔试题

华为上机笔试题
华为上机笔试题

1.给定一个字符串,把字符串内的字母转换成该字

母的下一个字母,a换成b,z换成a,Z换成A,

如aBf转换成bCg,字符串内的其他字符不改变,

给定函数,编写函数

void Stringchang(const char*inpu,char*output)

其中input是输入字符串,output是输出字符串

#include

#include

void Stringchang(const char*input,char*output)

{

const char *p=input;

/*if(input==NULL)

{

printf("ERROR"); //用这种表示方式可否?

return; //用return 好不好?

} */

assert(input!=NULL);

while(*p!='\0')

{

if((*p>='a')&&(*p<='y')||(*p>='A')&&(*p<='Y') )

*output=*p+1;

else if(*p=='z'||*p=='Z')

*output=*p+1-26;

else

*output=*p;

output++;

p++;

}

*output=0;

}

void main()

{

char a[11]={"abc"}; //如何模拟空指针的情况

char b[11];

Stringchang(a,b);

printf("%s",b);

}

2.求一个整型数字中有没有相同的部分,例如

12389756123这个整型数字中相同的部分是123,

相同的部分至少应该是2位数,如果有相同部分返

回1,如果没有则返回0。函数为int same(int num)其中num是输入的整型数字

#include

using namespace std;

int same(int num) //整数值的范围:long int为-2(共

10位)到正2开头共10位;

unsigned //long int 为从0到4

的共10位数

{

char a[11];

int i=0,m=0,j=0;

while(num)

{

num=num/10;

i++;

j++;

}

i=0;

int k=j;

while(i

{

char temp=a[i];

a[i]=a[j-1];

a[j-1]=temp;

i++;

j--;

}

for(i=0;i

{

for(j=i+1;j

{

if(a[i]==a[j]&&a[i+1]==a[j+1])

return 1;

}

}

return 0;}

int main() //是不是用int 会好一点?

{

int a,b;

cin>>a;

b=same(a);

cout<

return 0;

}

3.求两个字符串的乘积,结果存到字符串中,例

如字符串一中存的“657891”,字符串二中存的

“521”,分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来.

函数为void mul(char *input1,int n,char *input2, int m,char *output)

其中input1和input2是输入,n是input1的长度,

m是input2的长度。Output是输出

#include

#include

#include

using namespace std;

void mul(char *input1,int n,char *input2,int m,char *output)

{

long int num1=0,num2=0,num3=0; //char *p1=input1;char *p2=input2;

int i=0,j=0,temp;

int sign1=0,sign2=0;

assert(input1!=NULL&&input2!=NULL);

//以下程序是将input1字符串转换为数字,考虑到

了字符串中第一个字符为‘+’或者‘-’号的情况,//同时考虑到了非法输入时的处理情况。

if(*input1=='-')

{

input1++;

sign1=1;

}

if(*input1=='+')

input1++;

while(*input1!='\0')

{

assert(*input1<='9'&&*input1>='0');

num1=num1*10+(*input1-'0');

input1++;

}

if(sign1==1)

num1=-num1;

//以下程序是将input2字符串转换为数字,考虑到了字符串中第一个字符为‘+’或者‘-’号的情况,//同时考虑到了非法输入时的处理情况。

if(*input2=='-')

{

input2++;

sign2=1;

}

if(*input2=='+')

input2++;

while(*input2!='\0')

{

assert(*input2<='9'&&*input2>='0');

num2=num2*10+(*input2-'0');

input2++;

}

if(sign2==1)

num2=-num2;

//将两个数相乘

num3=num1*num2;

//考虑到结果为负数的情况,将整数转换为字符串,并且将字符串倒序

if(num3<0)

{

output[i]='-';

i++;

j++;

num3=-num3;

}

while(num3)

{

output[i]=num3%10+'0';

i++;

num3=num3/10;

}

output[i]=0;

//将字符串倒序

i--;

while(j

{

temp=output[j];

output[j]=output[i];

j++;

i--;

}

}

int main()

{

char a[10],b[10],c[10];

int anum,bnum;

cin>>a;

cin>>b;

anum=strlen(a);

bnum=strlen(b);

mul(a,anum,b,bnum,c);

cout<

return 0;

}

//用纯指针实现程序如下:

#include

#include

void mul(char *input1,int n,char *input2,int m,char *output)

{

int sum1=0,sum2=0,sum=0;

int i=0;

int sign1,sign2;

char *p=input1,*q=input2,*s=output,*r=output;

assert(input1!=NULL&&input2!=NULL);

if(*p=='+')

{

p++;

sign1=1;

}

else if(*p=='-')

{

p++;

sign1=0;

}

while(*p)

{

assert(*p<='9'&&*p>='0');

sum1=sum1*10+(*p-'0');

p++;

}

if(sign1==0)

{

sum1=-sum1;

}

//input2de chuli

if(*q=='+')

{q++;sign2=1;}

else if(*q=='-')

{q++;sign2=0;}

while(*q)

{

assert(*q<='9'&&*q>='0');

sum2=sum2*10+(*q-'0');

q++;

if(sign2==0) {sum2=-sum2;}

//两数相乘

sum=sum1*sum2;

// printf("%d",sum);

if(sum<0)

{

sum=-sum;

*s='-';

s++;

r++; //因为返回的指针开始地址是output,所以这里output不能变,只能是另外用一个指针代替他

}

while(sum)

{

*s=sum%10+'0';

sum=sum/10;

s++;

}

*s=0;

s--; //忘记s- - 了

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

while(r

{

char temp=*r;

*r=*s;

*s=temp;

s--;

r++;

}

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

}

void main()

{

char a[3]="12";

char b[3]="34";

char c[11];

mul(a,3,b,3,c);

printf("%s",c);

}

两个大数相乘:

#include

#include

#include

#define N 100

void GetDigits(int *a,char *s);

void multiply(int *a,int *b,int *c);

main()

{

char s1[N],s2[N];

int i,j,a[N],b[N],c[N*2];

printf("\n input number a: ");

scanf("%s",s1);

printf("\n input number b: ");

//把输入的字符串,按位存放到数组

GetDigits(a,s1);

GetDigits(b,s2);

multiply(a,b,c);

//找到最高位

j=N*2-1;

while(c[j]==0)

j--;

//打印计算结果

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

for(i=j;i>=0;i--)

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

}

/*把字符串形式的数字按位存放到数组*/

void GetDigits(int *a, char *s)

{

int i;

char digit;

int len=strlen(s);

for(i=0;i

*(a+i)=0;

for(i=0;i

{

digit=*(s+i);

*(a+len-1-i) = digit - '0';

}

}

/*把a*b的结果存储到数组c中,按位表示*/ void multiply(int *a,int *b,int *c)

{

int i,j;

//先把结果数组设置为0

for(i=0;i

*(c+i)=0;

for(i=0;i

for(j=0;j

{

*(c+i+j)+=*(a+i) * *(b+j);

printf("%d",*(c+i+j));

}

// 处理进位

for(i=0;i

{

*(c+i+1)+=*(c+i)/10; //进位累加到高位

*(c+i)=*(c+i)%10; //该位的最后结果

}

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

#include

#include

#include

#include

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

{

const char *p,*q; //注意最刚开始就要加const

p=str;

q=sub_str;

int count=0;

int num=strlen(sub_str);

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

while(*p!='\0') //没有想法

{

if(*p==*q)

{

for(int i=1;i

{

if(*(p+i)!=*(q+i))

break;

}

if(i==num)

{

count++;

p+=num;

}

}

else if(*p!=*q)

{

*result=*p;

p++; //这里自己写错了

result++; //这里自己写错了

}

}

*result=0;

return count;

}

void 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);

}

//用指针实现

#include

#include

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

{

char *r;

p=str;

q=sub_str;

r=result;

int num=0,i=0,k=0;

while(*(p+i))

{

if(*(p+i)==*(q))

{

for(int j=0;*(q+j)!='\0';j++)

{

if(*(p+i+j)!=*(q+j))

break;

}

if(*(q+j)=='\0')

{

num++;

i+=j;

}

}

else

{

*(r+k)=*(p+i);

k++;

i++;

}

}

*(r+k)=0;

return num;

}

void main()

{

char s[100] = {'\0'};

int num = delete_sub_str("a123abc123de","123",s);

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

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

}

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

#include

#include

#include

int huiwen(char str[])

{

char *p=str;

int i=0;

int j=strlen(str);

assert(str!=NULL);

j--;

while(i

{

if(*(p+i)!=*(p+j))

{

return 0;

}

j--;

}

return 1;

}

/*或者是用下面的方法原理是一样的

int i=0,j=0;

assert(str!=NULL);

while(str[j])

{

j++;

}

j--;

while(i

{

if(str[i]!=str[j])

return 0;

i++;

j--;

}

return 1;

*/

void main()

{

char str[100] = {0};

int i;

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

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

i=huiwen(str);

if(i==0)

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

else if(i==1)

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

}

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 array2[])

【输入】 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

#include

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

array2[])

{

int count=0;

assert(array1!=NULL&&array2!=NULL); //如何对传输的数组判空?

while(len1!=0&&len2!=0) //做错了,写成了(len1!=-1&&len2!=-1),注意这里的len1与len2分别

是数组的长度,不是下标编号!!!

{

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

count++;

len1--;

len2--;

}

return count;

}

void main()

{

int array1[7]={1,2,3,4,5,6,7};

int array2[3]={4,5,6};

int num;

num=array_compare(7,array1,3,array2);

printf("%d",num); }

8、手机号码合法性判断(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

int verifyMsisdn(char* inMsisdn) //记住:此处比较的是和字符‘0’比较,而不是和数字0比较

{

char *p = inMsisdn;

assert(p!=NULL);

int num=strlen(p);

if(num!=13) //在面试的时候最好用宏定义表达:#define LENGTH 13

return 1;

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

if(*(p+i)<'0'||*(p+i)>'9')

return 2;

if((*p!='8')||(*(p+1)!='6'))

return 3;

return 0;

}

void main()

{

char number[15]="8613312345678";

int sign=verifyMsisdn(number);

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

char number1[15]="86133123456789"; //老是忘记:不能对数组直接赋值

sign=verifyMsisdn(number1);

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

char number2[15]="861331234567@";

sign=verifyMsisdn(number2);

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

char number3[15]="8113312345679";

sign=verifyMsisdn(number3);

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

}

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

//总数:total 平均数:average 记住要强制类型转换为(int),记住不要忘记判断当大众评委//为0时的情况,自己还额外加了当专家评委为零的情况。#include

#include

#include

#include

#define N 5

int cal_score(int score[], int judge_type[], int n) //该如何判断数组为空时的情况

{

int

total1=0,total2=0,average1=0,average2=0,num1=0,nu m2=0;

int sum;

for(int i=0;i

{

if(judge_type[i]==1)

{

total1+=score[i];

num1++;

}

else if(judge_type[i]==2)

{

total2+=score[i];

num2++;

}

}

if(num1==n)

sum=(int)(total1/n); //加强制类型转换符是个好习惯!

else if(num2==n)

sum=(int)(total2/num2);

else

{

average1=(int)(total1/num1);

average2=(int)(total2/num2);

sum=(int)(0.6*average1+0.4*average2);

}

return sum;

}

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

#include

//注意这里输出数组显示,是用for循环printf,显示,而不能用cout<<数组名

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

{

int temp;

for(int i=0;i

for(int j=i;j

{

if(input[i]

{

temp=input[i];

input[i]=input[j];

input[j]=temp;

}

}

for(i=0;i

{

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

}

printf("\n");

if(n%2==1)

{

int mid=(n-1)/2;

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

{

output[mid-i]=input[2*i-1];

output[mid+i]=input[2*i];

}

}

else

{

int mid=n/2;

output[mid]=input[0];

for(i=1;i

{

output[mid-i]=input[2*i-1];

output[mid+i]=input[2*i];

}

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

}

for(i=0;i

{

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

}

}

void main()

{

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

int output[6];

int n=6;

sort(input,n,output);

}

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

例如:task[] =

{5,4,3,2,1,100,50} system_task[] = {1,2,3,4,5,-1} user_task[] =

{50,100,-1}

(方法一:边插入边用直接插入排序的方法进行排序,不完善,此处只做了排序,并没有存入想对位置)

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

{

int label1=0,label2=0,i,j=0,k=0;

for(i=0;i

{

if(task[i]<50)

{

if(label1==0)

system_task[0]=task[i];

label1=1;

j++;

}

else

{

int m=task[i];

int x=j;

if(task[i]

{

while(m0)

{

system_task[x]=system_task[x-1];

x--;

}

system_task[x]=m;

}

else

system_task[j]=m;

j++;

}

}

else if(task[i]<=255)

{

if(label2==0)

{

user_task[0]=task[i];

label2=1;

k++;

}

else

{

int n=task[i];

int y=k;

if(task[i]

{

while(n0)

{

user_task[y]=user_task[y-1];

y--;

}

user_task[y]=n;

}

else

user_task[k]=n;

k++;

}

}

else if(task[i]>255)

{

}

}

user_task[k]=-1;

}

void main()

{

int task[]={5,4,3,2,1,100,50};

int n=7;

int system_task[6]; //需要预留-1的位置,这里为6,不能为5,否则结果有问题

int user_task[3]; //需要预留-1的位置,这里为3,不能为2,否则结果有问题

scheduler1(task,n,system_task, user_task);

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

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

printf("\n");

for(i=0;i<3;i++)

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

}

(方法二:先分别放在对应的数组中,再排序)#include

#include

#include

#include

void scheduler1(int task[], int n, int system_task1[], int user_task1[])

{

int i,j=0,k=0,num1=0,num2=0,m;

char a[256]={'\0'};

char system_task[256]={'\0'};

char user_task[256]={'\0'};

for(i=0;i

{

if(task[i]<50)

{

system_task[j]=task[i];

m=task[i];

a[m]=i;

j++;

num1++;

}

else if(task[i]<=255)

{

user_task[k]=task[i];

m=task[i];

a[m]=i;

k++;

num2++;

}

else if(task[i]>255)

{ }

}

//下边的代码是显示分完组后的情况

printf("未排序前system_task[]为:");

for(i=0;i<5;i++)

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

printf("\n");

printf("未排序前user_task[]为:");

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

printf("\n");

//对system_task[]中的数进行排序,冒泡法

printf("排序中system_task数的变化情况");

for(i=0;i

{

for(int m=0;m

{

if(system_task[m]>system_task[m+1])

{

int temp=system_task[m];

system_task[m]=system_task[m+1];

system_task[m+1]=temp;

}

//每调换一次显示其排序结果

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

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

printf("\n");

}

}

for(i=0;i

{

m=system_task[i];

system_task1[i]=a[m];

}

//对user_task[]中的数进行排序,冒泡法

printf("排序中user_task数的变化情况");

for(i=0;i

{

for(int n=0;n

{

if(user_task[n]>user_task[n+1])

{

int temp=user_task[n];

user_task[n]=user_task[n+1];

user_task[n+1]=temp;

}

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

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

printf("\n");

}

}

for(i=0;i

{

m=user_task[i];

user_task1[i]=a[m];

}

system_task1[j]=-1;

user_task1[k]=-1;

}

void main()

{

int task[]={5,4,3,2,1,100,50};

int n=7;

int system_task[6];

scheduler1(task,n,system_task, user_task);

printf("系统相对位置");

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

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

printf("\n");

printf("用户相对位置");

for(i=0;i<3;i++)

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

}

12、输入一个字符串,用指针求出字符串的长度。//不要忘记P++!

#include

#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;

}

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

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

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

目前程序有两个问题:第一:运行结果中老是多一个1,第二:不知道如何把改变了的字符串传回去。#include

#include

#include

#include

#include

#include

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

{

char *p;

p=(char*)malloc(sizeof(100));

int n=strlen(strSrc);

int m=strlen(strFind);

int k=strlen(strReplace);

int sign=0,num=0;

for(int i=0;i+m*num

{

if(sign==1)

{

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

{

for(int j=0;j

{

if(*(strSrc+i+num*m+j)!=*(strFind+j))

break;

}

if(j==m)

{

for(int z=0;z

*(p+i+num*k+z)=*(strReplace+z);

num++;

i--;

}

}

else

{

*(p+i+k*num)=*(strSrc+i+m*num);

}

}

else if(sign==0)

{

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

{

for(int j=0;j

{

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

break;

}

if(j==m)

{

for(int z=0;z

*(p+i+z)=*(strReplace+z);

sign=1;

i--;

num++;

}

}

else

{

*(p+i)=*(strSrc+i);

}

}

}

*(p+i+k*num+1)='\0';

strSrc=p;

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

printf("\n");

while(*p)

{

*strSrc=*p;

strSrc++;

p++;

}

}

void main()

{

char s[]="ABCDEFG";

char s1[]="BCD";

char s2[]="gggg";

StrReplace(s,s1,s2);

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

}

//方法二

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

#include

#include

void main()

{

char string[]="Computer Seciece";

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

char *p=string;

while(*p!='\0'&&*(p+1)!='\0') //注意这里的判

断条件,如果不

加*(p+1)!='\0'会

出现不可知的

运算符

{

printf("%c",*p);

p++;

p++;

}

if(*(p+1)=='\0') //此时还要对少的那个运算符补充上

printf("%c",*p);

printf("\n");

}

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

#include

#include

void main()

{

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

char *p,*q;

p=str1;

q=str2;

while(*p)

p++; //注意不要用p=q,然后就结束了,这不是链表!

//p=q;这是我第二次自己加的,注意这里不可以加这个,因为现在就是需要把*q中的内容放在p之后

的下//一个地址中,故万万不可以加,加了之后只

能输出Hello.

while(*q)

{

*p=*q;

p++;

q++;

}

*p=0;

puts(str1);

}

17、将字符串反转,但单词不倒置。//第二次自己没做出来

#include

#include

char* reverse(char *string)

{

char *begin,*end,*pbegin;

begin=end=string;

while(*end)

end++;

end--;

while(begin

{

char temp=*begin;

*begin=*end;

*end=temp;

begin++;

end--;

}

begin=end=string;

while(*begin)

{

if(*begin!=' ')

{

while(*end!=' '&&*end!='\0')

end++;

pbegin=end;

end--;

while(begin

{

char temp=*begin;

*begin=*end;

*end=temp;

begin++;

end--;

}

begin=end=pbegin;

}

else

{

begin++;

end++;

}

}

return string;

} void main()

{

char string[]="abcd ab";

char *ptr;

ptr=reverse(string);

cout<

}

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

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

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

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

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

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

? 要求实现函数:

int calculate(int len,char *expStr)

#include

#include

int cal(int c1, char op, int c2)

{

if (op=='+') return c1+c2;

if (op=='-') return c1-c2;

if (op=='*') return c1*c2;

if (op=='/') return c1/c2;

return 0;

}

int calculate(int len, char *expStr)

{

assert(expStr);

if (len < 3) return -1;

char *p = expStr;

int c1 = p[0]-'0';

char op = p[1];

int c2 = p[2]-'0';

p += 3;

while(*p)

{

if (*p=='*' || *p=='/')

{

c2 = cal(c2, *p, p[1]-'0');

}

else

{

c1 = cal(c1, op, c2);

op = *p;

c2 = p[1]-'0';

}

p += 2;

}

return cal(c1, op, c2);

}

int main(void) {

int ret1 = calculate(3, "1+2");

int ret2 = calculate(11, "1+2*3/5-6*7"); int ret3 = calculate(11, "1+2-3/5-6*7"); printf ("values: %d, %d, %d", ret1, ret2, ret3);

return 0;

}

带有括号的:https://www.360docs.net/doc/ca12008751.html,/view/bc24dcc06137ee0 6eff91834.html

19、算分数的问题,去掉一个最高分一个最低分,求平均分(2012华为成都试题1)

方法一:先排序,再去掉一个数组的首尾元素,最后求平均分。时间复杂度为O(n^2)

#include

float avescore(float score[],int n)

{

float sum=0,aver;

for(int i=0;i

{

for(int j=0;j

{

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

{

float temp=score[j];

score[j]=score[j+1];

score[j+1]=temp;

}

}

}

for(i=1;i

{

sum+=score[i];

}

aver=sum/(n-2);

return aver;

}

void main()

{

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

float average;

average=avescore(score,6);

printf("%5.2f\n",average);

}

方法二:直接挑选出最大值和最小值,并将原来的最大值最小值改变为0,最后求平均值,注意求平均值得时候除以的n-2,因为把最大值与最小值其变为0,只是为了方便累加和,其实他们的值并未包含在其中。时间复杂度为O(n). #include

float avescore(float score[],int n) //有函数返回值时要记得有return

{

float sum=0,aver; //注意是float型的,不要习惯性的写int

float min,max;

int m=0,z=0; //记得要初始化为零,因为

存在当min或者max就是第一个元素的情况

min=score[0];

for(int i=1;i

{

if(min>score[i])

{

min=score[i];

m=i;

}

}

score[m]=0;

max=score[0];

for(i=1;i

{

if(max

{

max=score[i];

z=i;

}

}

score[z]=0;

for(i=0;i

{

sum+=score[i];

}

aver=sum/(n-2);

return aver;

}

void main()

{

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

float average;

average=avescore(score,6);

printf("%5.2f\n",average);

}

20、对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数,若奇数和偶数不等长,则把剩下的直接放到数组中。

(2012华为成都试题2)

函数原型:void jiou(int a[],int n)

//对于传递的为数组就不用再在后边加0了,因为这会增加数组//长度,从而产生运行错误。

#include

void jiou(int a[],int n)

{

int p[10];

int q[10];

int j=0,k=0;

for(int i=0;i

{

if(a[i]%2==0)

{

p[j]=a[i];

j++;

}

else

{

q[k]=a[i];

k++;

}

}

printf("提取的偶数序列为:"); for(int l=0;l

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

printf("\n");

printf("提取的奇数序列为:");

for(l=0;l

printf("%3d",q[l]);

printf("\n");

int m=j;

int r=k;

for(i=0;i

{

for(j=0;j

{

if(p[j]

{

int temp=p[j];

p[j]=p[j+1];

p[j+1]=temp;

}

}

}

printf("排序后的偶数序列为:"); for(l=0;l

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

printf("\n");

for(i=0;i

{

for(j=0;j

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

{

int temp=q[j];

q[j]=q[j+1];

q[j+1]=temp;

}

}

printf("排序后的奇数序列为:"); for(l=0;l

printf("%3d",q[l]);

printf("\n");

/*p[m]=-1;

q[r]=-1;

j=0;k=0;

for(i=0;i

{

if(i%2==0&&q[k]!=-1)

{

a[i]=q[k];

k++;

}

else if(i%2==1&&p[j]!=-1)

{

a[i]=p[j];

j++;

}

else if(q[k]==-1&&p[j]!=-1)

{

a[i]=p[j];

j++;

}

else if(p[j]==-1&&q[k]!=-1)

{

a[i]=q[k];

k++;

}

}*/

m=0;n=0;

for(i=0;i

{

if(i%2==0&&n

{

a[i]=c[n];

n++;

}

else if(i%2==1&&m

{

a[i]=b[m];

m++;

}

else if(n==k)

{

a[i]=b[m];

m++;

}

else if(m==j)

{

a[i]=c[n];

n++;

}

}

// a[i]=0;

printf("排序后的数组为:");

for(i=0;i

{

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

}

}

void main()

{

int a[10]={2,3,14,6,2,15,12,14,4,11}; jiou(a,10);

}

21、通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。

比如字符串“abacacde”过滤结果为“abcde”。

#include

#include

#include

void stringFilter(const char *pInputStr,char *pOutputStr)

{

const char *p=pInputStr;

char *q=pOutputStr,*r;

int sign=0;

int i=0;

assert(pInputStr!=NULL&&pOutputStr!=NU LL);

int a[27]={0};

while(*p)

{

assert(*p<='z'&&*p>='a');

/*if(sign==0)

{

*q=*p;

// printf("%c",*q);

q++;

p++;

sign=1;

*q='\0';

}

else

{

r=pOutputStr;

while(*r)

{

if(*r==*p)

{

p++;

break;

}

r++;

}

if(*r=='\0')

{

*q=*p;

q++;

p++;

*q='\0';

// printf("%c",*q);

}

}*/

if(a[*p-'a']==1)

{

p++;

}

else if(a[*p-'a']==0)

{

a[*p-'a']=1;

q[i]=*p;

i++;

p++;

}

}

q[i]=0;

}

void main()

{

char a[]="abcdefabc";

char b[10];

// int n=strlen(a);

stringFilter(a,b);

printf("%s",b);

}

22、通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

压缩规则:

1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".

2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz" void stringZip(const char *pInputStr, long InputLen, char *pOutputStr)

{

const char *p=pInputStr;

char *q=pOutputStr;

int i,j=0;

for(i=0;i

{

if(*(p+i)==*(p+i+1))

{

int k=1;

int num=2;

while(*(p+i+k)==*(p+i+k+1))

{

num++;

k++;

}

*(q+j)=num+'0';

*(q+j+1)=*(p+i);

j++;

i+=num;

}

else if(*(p+i)!=*(p+i+1))

{

*(q+j)=*(p+i);

j++;

i++;

}

}

*(q+j)=0;

}

void main()

{

char a[]="aabbbcde";

char b[10];

int n=strlen(a);

stringZip(a,n,b);

printf("%s",b);

}

23、通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。

输入字符串的格式为:“操作数1 运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。

#include

#include

#include

void arithmetic(const char *pInputStr, long InputLen, char *pOutputStr)

{

const char *p=pInputStr;

char *q=pOutputStr;

int i,j=0,k;

int a=0,b=0,c;

for(i=0;i

{

if(*(p+i)<='9'&&*(p+i)>='0')

{

while(*(p+i)!=' ')

{

a=a*10+*(p+i)-'0';

i++;

}

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

printf("\n");

if(*(p+i)==' ')

{

i++;

if(*(p+i)=='+'||*(p+i)=='-')

{

k=i;

i++;

if(*(p+i)==' ')

{

i++;

if(*(p+i)<='9'&&*(p+i)>='0')

{

while(*(p+i)!='\0')

{

b=b*10+*(p+i)-'0';

i++;

}

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

printf("\n");

}

}

}

}

}

else

printf("格式错误");

return ;

}

if(*(p+k)=='+')

c=a+b;

else if(*(p+k)=='-')

c=a-b;

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

printf("\n");

int num=0,begin=0,sign;

if(c>0)

{

while(c)

{

*q=c%10+'0';

c=c/10;

q++;

num++;

}

sign=num;

num--;

q=pOutputStr;

while(begin

{

int temp=*(q+begin);

*(q+begin)=*(q+num);

*(q+num)=temp;

begin++;

num--;

}

*(q+sign)=0;

}

if(c<0)

{

c=-c;

begin++;num=1;

*q='-';

while(c)

{

*(q+1)=c%10+'0';

c=c/10;

q++;

num++;

}

sign=num;

num--;

q=pOutputStr;

while(begin

{

int temp=*(q+begin);

*(q+begin)=*(q+num);

*(q+num)=temp;

begin++;

num--;

}

*(q+sign)=0;

}

}

void main()

{

char a[]="11 - 23";

char b[10];

int n=strlen(a);

arithmetic(a,n,b);

printf("%s",b);

}

24、一个字符串里面包含了一些位置不定的空格符,把里面所有的非空格字符找出来,把空格用…,?替换。

替换后的句子末尾必须有一个…,?存在。

例如“this is an demo”替换后应该为:

"this,is,an,demo,"

#include

#include

#include

void ReplaceString(const char *pInString,long llnput,char *pOutString) {

const char *p=pInString;

int n=llnput;

char *q=pOutString;

int j=0,i=0;

while(*(p+j))

{

if(*(p+j)!=' ')

{

*(q+i)=*(p+j);

i++;

j++;

}

else if(*(p+j)==' ')

{

*(q+i)=',';

i++;

j++;

while(*(p+j)==' ')

{

}

}

}

*(q+i)=',';

*(q+i+1)=0;

}

void main()

{

char a[]="abc def gh";

char b[20]={'\0'};

ReplaceString(a,strlen(a),b);

printf("%s",b);

}

25、字符串逆序

typedef struct tagListNode

{

int value;

struct tagListNode *next;

}ListNode;

ListNode *converse(ListNode *head)

{

ListNode *p,*q,*s;

p=head;

assert(head!=NULL&&head->next!=NULL);

q=p->next;

while(q!=NULL)

{

s=q->next;

q->next=p;

p=q;

q=s;

}

head->next=NULL;

head=p;

return head;

}

void main()

{

ListNode *head,*p,*q;

head=(ListNode

*)malloc(sizeof(ListNode));

head->value=0;

q=head;

for(int i=1;i<10;i++)

{

p=(ListNode

*)malloc(sizeof(ListNode));

p->value=i;

q->next=p;

q=p;

}

p->next=NULL;

p=head;

for(i=0;i<10;i++)

{

printf("%d",p->value);

p=p->next;

}

head=converse(head);

p=head;

for(i=0;i<10;i++)

{

printf("%d",p->value);

p=p->next;

}

}

题目一:子串分离

题目描述:

通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一

个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子

串存储。

如果输入“abc def gh i d”,结果将是abc,def,gh,i,d,

要求实现函数:

void DivideString(const char *pInputStr, long lInputLen, char *pOutputStr);

【输入】pInputStr:输入字符串

lInputLen:输入字符串长度

【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;

【注意】只需要完成该函数功能算法,中间不需要有任何IO 的输入输出

示例

输入:“abc def gh i d”

输出:“abc,def,gh,i,d,”#include

void DivideString(const char *pInputStr, long lInputLen, char *pOutputStr)

{

/* int cnt = 0;

for(int i=0;i

{

if(pInputStr[i]!=' ')

{ cnt = 0;

*pOutputStr++ = pInputStr[i];

}

else

{ cnt++;

if(cnt==1)

*pOutputStr++ = ',';

}

}

*pOutputStr++ = ',';

*pOutputStr = '\0';

*/

int cnt;

while(*pInputStr)

{

if(*pInputStr!=' ')

{ cnt = 0;

*pOutputStr++ = *pInputStr++;

}

else

{ cnt++;

pInputStr++;

if(cnt==1)

*pOutputStr++ = ',';

}

}

*pOutputStr++ = ',';

*pOutputStr = '\0';

}

void main()

{

char *str = "abc def gh i d";

int len = strlen(str);

char *outstr = (char*)malloc(len));//sizeof(std)=4 sizeof (*str)=18

//char outstr[100];

DivideString(str,len,outstr);

printf("%s",outstr);

printf("\n");

}

题目二:逆序链表输出。

题目描述:

将输入的一个单向链表,逆序后输出链表中的值。链表定义如下:

typedef struct tagListNode

{

int value;

struct tagListNode *next;

}ListNode;

要求实现函数:

void converse(ListNode **head);

【输入】head:链表头节点,空间已经开辟好

【输出】head:逆序后的链表头节点

【返回】无struct node *Reverse (struct node *head) {

struct node *p; //临时存储

struct node *p1; //存储返回结果

struct node *p2; //源结果节点一个一个取

p1 = NULL; //开始颠倒时,已颠倒的部分为空

p2 = head; //p2指向链表的头节点

while(p2 != NULL)

{

p = p2->next;

p2->next = p1;

p1 = p2;

p2 = p;

}

head = p1;

return head;

}

/*

题目描述(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 打印输出*/

/* 当前你可以使用其他方法测试,只要保证最终程序能正确执行即可 */

/* 该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响*/

/* #include

void stringFilter(const char *p_str, long len, char *p_outstr)

{

int array[256]={0};

const char *tmp = p_str;

for(int j=0;j

{

if(array[tmp[j]]==0)

*p_outstr++= tmp[j];

array[tmp[j]]++;

}

*p_outstr = '\0';

}

void main()

{

char *str = "cccddecc";

int len = strlen(str);

char * outstr = (char *)malloc(len*sizeof(char));

stringFilter(str,len,outstr);

printf("%s",outstr);

free(outstr);

outstr = NULL;

}

题目描述(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”

*/ #include

void stringZip(const char *p_str, long len, char *p_outstr)

{

int count=0;

for(int i=0;i

{

if(p_str[i]==p_str[i+1])

{

count++;

}

else

{

count++;

if(count>1)

{

*p_outstr++ = count +'0';

*p_outstr++ =p_str[i];

}

else

{

*p_outstr++ =p_str[i];

}

count = 0;

}

}

*p_outstr = '\0';

}

void main()

{

char *str = "cccddecc";

int len = strlen(str);

char * outstr = (char*)malloc(len*sizeof(char));

// char outstr[100];

stringZip(str,len,outstr);

printf("%s",outstr);

free(outstr);

outstr = NULL;

}

华为硬件笔试题

华为各类工程师通信基础面试题库以及答案周凝2010-10-21 14:43:06 比较基础的题目,希望大家看了有所帮助 牛人权当复习了吧 1、语音信号数字化过程中,采用的是的量化方法是非均匀量化。 2、PCM30/32路系统中,每个码的时间间隔是488ns。 3、PCM30/32路系统中,TS0用于传送帧同步信号,TS16用于传送话路信令。 4、PCM30/32路系统中,复帧的重复频率为500HZ,周期为2ms。 5、程控交换机的硬件可分为话路系统和中央控制系统两部分,整个交换机的控制软件都放在控制系统的存储器中。 6、一般二氧化硅光纤的零色散波长在1310nm左右,而损耗最小点在1550nm波长左右。 7、G.652光纤是零色散波长在1310nm的单模光纤。 8、光缆的基本结构由缆芯、加强元件和护套组成。 9、常用的光缆结构形式有层绞式光缆、束管式光缆、骨架式光缆和带状式光缆。 10、在网状网的拓扑结构中,N个节点完全互连需要N(N-1)/2条传输线路。 11、在星型网的拓扑结构中,N个节点完全互连需要N-1条传输线路。 12、ATM技术是电路交换技术和分组交换技术的结合。 13、根据98年发布的《自动交换电话(数字)网技术体制》,我国电话网分为三级。

14、根据新的电话网体制,我国长途电话网分为二级。 15、当电话网全网为三级时,两端局之间最大的串接电路段数为5段,串接交换中心最多为6个。16、新体制中一级长途交换中心(DC1)为省(自治区、直辖市)长途交换中心,其职能主要是汇接所在省(自治区、直辖市)的省际长途来去话务和一级交换中心所在地的长途终端话务。 17、一级长途交换中心(DC1)之间以基干路由网状相连。 18、根据话务流量流向,二级长途交换中心(DC2)也可与非从属的一级长途交换中心DC1建立直达电路群。 19、一级长途交换中心DC1可以具有二级长途交换中心的职能。 20、本地网路由的选择顺序为:直达路由、迂回路由、最终路由。 21、数字本地网中,原则上端至端的最大串接电路数不超过3段。 22、根据CCITT的建议,国内有效号码的长度不超过12位,国际有效号码长度不超过15位。 23、我国电话网目前采用的编号方式为不等位编号。 24、No.7信令中,消息传递部分由低到高依次包括信令数据链路、信令链路功能和信令网功能三个功能级。 25、国内No.7信令网采用由HSTP、LSTP和SP组成的三级信令网。 26、常见的同步基准信号有2048Kbits/s和2048KHz。 27、我国的No.7信令网为三级网络结构。 28、我国No.7信令网中,第一级HSTP间采用A、B平面连接方式,A、B 平面内部各个HSTP网状相连,A和B平面成对的HSTP相连。 29、每个LSTP通过信令链至少要分别连接至A、B平面内成对的HSTP。

华为公司应聘硬件笔试题

华为公司应聘硬件笔试题 一填空 10小题 单相整流的方式,全波,半波 ,_桥式_ fir数字滤波器的名称正弦波电流的有效值 ram的数据线的条数 10进制和16进制的换算绝对可积和频谱存(好像是)在的关系 二单选 大概包括数电模电的一些知识,跟填空题考的内容差不多 记得的有放大器电路中Rb的作用构成线与逻辑的门电路 risc 的处理器三极管开关模式的开关分别工作在哪个模式下随着温度的降低三极管里面的电流怎么样子变化地址数据总线等等 三多选 这部分要难一些,

记得的题目很少,等我记起了之后再补充,只记得一个金属壳电阻容易发生的问题是什么,不懂做还有pll的组成负反馈的作用检波电路的组成竞争冒险的处理几种总线的问题 i2c pci rs323 rs485 吧,题目考什么记不得了~ 四分析题 1 一个时序逻辑电路,先由2选一数据选择器选择信号输入,然后进入d触发器,输出结果再反向进入d触发器,输出结果为y,然后根据二选一的几个输入和cp脉冲的波形画出y的波形。 2 一个集成运放,正端输入vin和电阻,并在正端接稳压管,负端两个等值电阻,一个接地一个反馈,电阻大小等值,求输出电压v0 填空题 1、电阻、电容、电感组成的是分立元件电路。 2、集总电路中电容只存储能量,电感只能量。 3、给补码求原码。

4、差模和共模。 5、x86中内存地址求物理地址。 6、信号分析中分析连续非周期信号用方法,频域的连续性和周期性。 7、信号分析中分析连续周期信号用方法,频域的.连续性和周期性。 8、串口传输方向有哪三种。 9、VHDL赋值语句有哪两种。 选择题 1、互感; 2、三极管工作状态; 3、误码率; 4、网络的几层结构的功能; 5、三极管工作电压; 6、共集、共基和共射; 7、微分方程求传送函数; 8、z的传递函数; 计算题

华为硬件笔试题、面试题

一简答 1.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 发展方向之一 2.数据链路层 答:数据链路可以粗略地理解为数据通道。物理层要为终端设备间的数据通信提供传输媒体及其连接,.媒体是长期的,连接是有生存期的。在连接生存期内,收发两端可以进行不等的一次或多次数据通信.每次通信都要经过建立通信联络和拆除通信联络两过程.这种建起 来的数据收发关系就叫作数据链路. 二填空 1.IIR滤波器 答:IIR滤波器有以下几个特点: ①IIR数字滤波器的系统函数可以写成封闭函数的形式。 ②IIR数字滤波器采用递归型结构,即结构上带有反馈环路。 ③IIR数字滤波器在设计上借助了成熟的模拟滤波器的成果 ④IIR数字滤波器的相位特性不好控制,对相位要求较高时,需加相位校准网络。 2.简述分组交换的特点和不足 答:分组交换也称为包交换。分组交换机将用户要传送的数据按一定长度分割成若干个数据段,这些数据段叫做“分组”(或称包)。传输过程中,需在每个分组前加上控制信息和地址标识(即分组头),然后在网络中以“存储——转发”的方式进行传送。到了目的地,交换机将分组头去掉,将分割的数据段按顺序装好,还原成发端的文件交给收端用户,这一过程称为分组交换。 分组交换的特点有: ①分组交换方式具有很强的差错控制功能,信息传输质量高。 ②网络可靠性强。 ③分组交换网对传送的数据能够进行存储转发,使不同速率、不同类型终端之间可以

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

一选择 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

嵌入式软件工程师笔试题_华为课件【新版】

(一) 1什么是预编译,何时需要预编译: 答案: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 2 char * const p char const * p const char *p 上述三个有什么区别? 答案: char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改const char *p;//和char const *p 3 char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "abc"; cout < < ( str1 == str2 ) < < endl; cout < < ( str3 == str4 ) < < endl; cout < < ( str5 == str6 ) < < endl; out < < ( str7 == str8 ) < < endl; 结果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。 4以下代码中的两个sizeof用法有问题吗? [C易] void UpperCase( char str[] ) // 将str 中的小写字母转换成大写字母 { for( size_t i=0; i

华为硬件笔试题.doc

华为各类工程师通信基础面试题库以及答案 周凝2010-10-21 14:43:06 比较基础的题目,希望大家看了有所帮助 牛人权当复习了吧 1、语音信号数字化过程中,采用的是的量化方法是非均匀量化。 2、PCM30/32路系统中,每个码的时间间隔是488ns 。 3、PCM30/32路系统中,TS0用于传送帧同步信号,TS16用于传送话路信令。 4、PCM30/32路系统中,复帧的重复频率为500HZ,周期为2ms。 5、程控交换机的硬件可分为话路系统和中央控制系统两部分,整个交换机的控制软件都放在控制系统的存储器中。 6、一般二氧化硅光纤的零色散波长在1310nm左右,而损耗最小点在1550nm波长左右。 7、G.652光纤是零色散波长在1310nm的单模光纤。 8、光缆的基本结构由缆芯、加强元件和护套组成。 9、常用的光缆结构形式有层绞式光缆、束管式光缆、骨架式光缆和带状式光缆。 10、在网状网的拓扑结构中,N个节点完全互连需要N(N-1)/2 条传输线路。 11、在星型网的拓扑结构中,N个节点完全互连需要N-1 条传输线路。 12、ATM技术是电路交换技术和分组交换技术的结合。 13、根据98年发布的《自动交换电话(数字)网技术体制》,我国电话网分为三级。 14、根据新的电话网体制,我国长途电话网分为二级。 15、当电话网全网为三级时,两端局之间最大的串接电路段数为5段,串接交换中心最多为6个。

16、新体制中一级长途交换中心(DC1)为省(自治区、直辖市)长途交换中心,其职能主要是汇接所在省(自治区、直辖市)的省际长途来去话务和一级交换中心所在地的长途终端话务。 17、一级长途交换中心(DC1)之间以基干路由网状相连。 18、根据话务流量流向,二级长途交换中心(DC2)也可与非从属的一级长途交换中心DC1建立直达电路群。 19、一级长途交换中心DC1可以具有二级长途交换中心的职能。 20、本地网路由的选择顺序为:直达路由、迂回路由、最终路由。 21、数字本地网中,原则上端至端的最大串接电路数不超过3段。 22、根据CCITT的建议,国内有效号码的长度不超过12位,国际有效号码长度不超过15位。 23、我国电话网目前采用的编号方式为不等位编号。 24、No.7信令中,消息传递部分由低到高依次包括信令数据链路、信令链路功能和信令网功能三个功能级。 25、国内No.7信令网采用由HSTP、LSTP和SP组成的三级信令网。 26、常见的同步基准信号有2048Kbits/s 和2048KHz。 27、我国的No.7信令网为三级网络结构。 28、我国No.7信令网中,第一级HSTP间采用A、B平面连接方式,A、B平面内部各个HSTP网状相连,A和B平面成对的HSTP相连。 29、每个LSTP通过信令链至少要分别连接至A、B平面内成对的HSTP。 30、LSTP至A、B平面两个HSTP的信令链路组之间采用负荷分担方式工作。 31、每个SP至少连至两个STP。 32、SP至两个STP的信令链路应采用负荷分担方式工作。

华为硬件笔试题-真实有效

华为公司硬件研収类笔试试题 一.填空题(共10题,共计20分) 1、从通信系统的一般模型上看,通信系统中的编码有信源编码和_______两种方式。 2、为使三极管处于饱和工作状态,必须保证基极电流大于________ 3、可以将逻辑函数Y=AB+~AC优化成Y=________,从而消除由A造成的竞争冒险。 4、用卡诺图将逻辑函数Y=ABC+ABD+A~CD+~C~D+A~BC为________ 5、采用单片机进行点对多点的主从通信时,通过______来区分数据信息和地址信息。 6、MCS-8051单片机有_______个外部中断管脚。 7、将1k*8位的RAM扩展为2k*16位的RAM,需用________片1k*8位的RAM。 8、如果器件中的管脚为OC/OD门结构,在电路设计中应该对输出进行 _______处理 9、已知同步五进制计数器输入时钟频率为200kHz,则第一能触収器的输出等于____ 10、MCS-51访问外部数据存储器用______指令。 二.单选择题(共12题,共计24分) 1、反向门X驱动反向门Y,当X输出为低电平时,反相门X() A、输出源电流 B、吸收源电流 C、输出灌电流 D、吸收灌电流 2、设某函数的表达式F=AB,若用4选1多路选择器(数据选择器)来设计,则数据端口D0D1D2D3的状态是()。(设A为权值高位) A、0001 B、1110 C、0101 D、1010

3、PCM30/32路系统中,1帧中含有的比特数为() A、256 B、512 C、160 D、240 4、电容器的等效电路图() A、电感+电阻串联模型 B、电感+电阻并联模型 C、电容+电感+电阻并联模型 D、电容+电感+电阻串联模型 5、下列功率放大器类型哪一类的晶体管工作半个周期?() A、甲类功率放大器 B、乙类功率放大器 C、甲乙类功率放大器 D、丙类功率放大器 6、下列各进制数中,数值最大的是() A、[1000011]2 B、[53]16 C、[64]10 D、[01100011]8421BCD 7、8421码10010111表示的十进制数是() A、97 B、151 C、227 D、98 8、当TTL非门的输入端对地接一个10k欧电阻时,门电路工作在()A、饱和区B、线性区C、转折区D、截止区 9、锁相环回路中的滤波电路为() A、高通 B、低通 C、带通 D、全通 10、若两个输入变量A,B取值相同时,输出F=1,则其输出与输入的关系是()A、同或运算B、异或运算C、或运算D、与运算 11.当MCS-51的时钟频率f=6M时,一个机器周期T=( )微秒。 A.1 B 2 C.1/3 D.1/6 12.一个512选一的数据选择器,其地址输入端有()个

面试题目(华为硬件题目)

一选择 1.微分电路 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.简述分组交换的特点和不足 答:分组交换也称为包交换。分组交换机将用户要传送的数据按一定长度分割成若干个数据段,这些数据段叫做“分组”(或称包)。传输过程中,需在每个分组前加上控制信息和地址标识(即分组头),然后在网络中以“存储——转发”的方式进行传送。到了目的地,交换机将分组头去掉,将分割的数据段按顺序装好,还原成发端的文件交给收端用户,这一过程称为分组交换。 分组交换的特点有: ①分组交换方式具有很强的差错控制功能,信息传输质量高。 ②网络可靠性强。 ③分组交换网对传送的数据能够进行存储转发,使不同速率、不同类型终端之间可以

华为笔试题大全史上最齐全

华为 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地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。

华为硬件工程师面试题

DSP、嵌入式、软件等 1、请用方框图描述一个你熟悉的实用数字信号处理系统,并做简要的分析;如果没有,也可以自己设计一个简单的数字信号处理系统,并描述其功能及用途。(仕兰微面试题目) 2、数字滤波器的分类和结构特点。(仕兰微面试题目) 3、IIR,FIR滤波器的异同。(新太硬件面题) 4、拉氏变换与Z变换公式等类似东西,随便翻翻书把如.h(n)=-a*h(n-1)+b*δ(n) a.求h(n)的z变换; b.问该系统是否为稳定系统; c.写出FIR数字滤波器的差分方程;(未知) 5、DSP和通用处理器在结构上有什么不同,请简要画出你熟悉的一种DSP结构图。(信威dsp软件面试题) 6、说说定点DSP和浮点DSP的定义(或者说出他们的区别)(信威dsp软件面试题) 7、说说你对循环寻址和位反序寻址的理解.(信威dsp软件面试题) 8、请写出【-8,7】的二进制补码,和二进制偏置码。用Q15表示出0.5和-0.5.(信威dsp软件面试题) 9、DSP的结构(哈佛结构);(未知) 10、嵌入式处理器类型(如ARM),操作系统种类(Vxworks,ucos,winCE,linux),操作系统方面偏CS方向了,在CS篇里面讲了;(未知) 11、有一个LDO芯片将用于对手机供电,需要你对他进行评估,你将如何设计你的测试项目? 12、某程序在一个嵌入式系统(200M CPU,50M SDRAM)中已经最优化了,换到零一个系统(300M CPU,50M SDRAM)中是否还需要优化?(Intel) 13、请简要描述HUFFMAN编码的基本原理及其基本的实现方法。(仕兰微面试题目) 14、说出OSI七层网络协议中的四层(任意四层)。(仕兰微面试题目) 15、A)(仕兰微面试题目) #i nclude void testf(int*p) { *p+=1; } main() { int *n,m[2]; n=m; m[0]=1; m[1]=8; testf(n); printf("Data value is %d ",*n); } ------------------------------ B) #i nclude void testf(int**p) {

华为新员工转正笔试题附答案.doc

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

C、国际技术支援部国内分部 D、用服

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

华为c 笔试题答案

华为c 笔试题2017答案 以下就是小编整理的华为c 笔试题2017答案,一起来看看吧! 1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。 3.描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性。 4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈。 5.什么是平衡二叉树?

左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。 6.堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源。 7.什么函数不能声明为虚函数? constructor函数不能声明为虚函数。 8.冒泡排序算法的时间复杂度是什么? 时间复杂度是O(n)。 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程序。 循环链表,用取余操作做

华为应聘笔试题硬件

【华为硬件笔试题1】 一选择 13个题目,没有全部抄下来,涉及的课程有电路,模拟电路,数字电路,信号与系统,微机原理,网络,数字信号处理 1.微分电路 ,RISC 3.数据链路层 二填空 10个题目,没有全部抄下来,涉及的课程有电路,模拟电路,数字电路,信号与系统,微机原理,网络,数字信号处理有关于 DSP 2.二极管 三简答 (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.波形变换题目从正弦波->方波->锯齿波->方波,设计电路 计数器组成计数电路,分析几进制的 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 () 单片机中,采用12Mhz时钟,定时器T0采用模式1(16位计数器),请问在下面程序中,的输出频率 MOV TMOD,#01H SETB TR0 LOOP:MOV TH0,#0B1H MOV TL0,#0E0H LOOP1:JNB TF0,LOOP1 CLR TR0 CPL SJMP LOOP 【华为硬件笔试题2】 全都是几本模电数电信号单片机题目 1.用与非门等设计全加法器 2.给出两个门电路让你分析异同 3.名词:sram,ssram,sdram 4.信号与系统:在时域与频域关系 5.信号与系统:和4题差不多

华为硬件笔试题目

一选择 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.简述分组交换的特点和不足 答:分组交换也称为包交换。分组交换机将用户要传送的数据按一定长度分割成若干个数据段,这些数据段叫做“分组”(或称包)。传输过程中,需在每个分组前加上控制信息和地址标识(即分组头),然后在网络中以“存储——转发”的方式进行传送。到了目的地,交换机将分组头去掉,将分割的数据段按顺序装好,还原成发端的文件交给收端用户,这一过程称为分组交换。 分组交换的特点有: ①分组交换方式具有很强的差错控制功能,信息传输质量高。 ②网络可靠性强。

各大公司硬件工程师面试题

硬件工程师面试试题(模拟电路部分) 发布时间:20XX年3月23日 10时12分 模拟电路 1、基尔霍夫定理的内容是什么?(仕兰微电子)已答 2、平板电容公式(C=εS/4πkd)。(未知)已答 3、最基本的如三极管曲线特性。(未知) 4、描述反馈电路的概念,列举他们的应用。(仕兰微电子) 5、负反馈种类(电压并联反馈,电流串联反馈,电压串联反馈和电流并联反馈);负反馈的优点(降低放大器的增益灵敏度,改变输入电阻和输出电阻,改善放大器的线性和非线性失真,有效地扩展放大器的通频带,自动调节作用)(未知)已答 6、放大电路的频率补偿的目的是什么,有哪些方法?(仕兰微电子) 7、频率响应,如:怎么才算是稳定的,如何改变频响曲线的几个方法。(未知) 8、给出一个差分运放,如何相位补偿,并画补偿后的波特图。(凹凸) 9、基本放大电路种类(电压放大器,电流放大器,互导放大器和互阻放大器),优缺点,特别是广泛采用差分结构的原因。(未知) 10、给出一差分电路,告诉其输出电压Y+和Y-,求共模分量和差模分量。(未知) 11、画差放的两个输入管。(凹凸) 12、画出由运放构成加法、减法、微分、积分运算的电路原理图。并画出一个晶体管级的运放电路。(仕兰微电子) 13、用运算放大器组成一个10倍的放大器。(未知) 14、给出一个简单电路,让你分析输出电压的特性(就是个积分电路),并求输出端某点的 rise/fall时间。(Infineon笔试试题) 15、电阻R和电容C串联,输入电压为R和C之间的电压,输出电压分别为C上电压和R 上电压,要求制这两种电路输入电压的频谱,判断这两种电路何为高通滤波器,何为低通滤波器。当RC<16、有源滤波器和无源滤波器的原理及区别?(新太硬件) 17、有一时域信号S=V0sin(2pif0t)+V1cos(2pif1t)+V2sin(2pif3t+90),当其通过低通、带通、高通滤波器后的信号表示方式。(未知) 18、选择电阻时要考虑什么?(东信笔试题) 19、在CMOS电路中,要有一个单管作为开关管精确传递模拟低电平,这个单管你会用P管还是N管,为什么?(仕兰微电子) 20、给出多个mos管组成的电路求5个点的电压。(Infineon笔试试题) 21、电压源、电流源是集成电路中经常用到的模块,请画出你知道的线路结构,简单描述其优缺点。(仕兰微电子) 22、画电流偏置的产生电路,并解释。(凹凸) 23、史密斯特电路,求回差电压。(华为面试题) 24、晶体振荡器,好像是给出振荡频率让你求周期(应该是单片机的,12分之一周期....) (华为面试题) 25、LC正弦波振荡器有哪几种三点式振荡电路,分别画出其原理图。(仕兰微电子) 26、VCO是什么,什么参数(压控振荡器?) (华为面试题) 27、锁相环有哪几部分组成?(仕兰微电子)

华为应聘笔试题-硬件

【华为硬件笔试题1】 一选择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 【华为硬件笔试题2】 全都是几本模电数电信号单片机题目 1.用与非门等设计全加法器 2.给出两个门电路让你分析异同 3.名词:sram,ssram,sdram 4.信号与系统:在时域与频域关系

华为历年笔试题大汇总资料

2010校园招聘笔试题目分享 (1) 应聘华为各类工程师通信基础题库以及答案 (1) 华为资金管理岗笔试 (10) 华为厦门销售融资岗笔试 (12) 华为财经笔试 (12) 华为会计笔试 (12) 华为软件工程师笔试题 (13) 华为硬件笔试题 (17) 研发(软件) (18) 武汉华为笔试归来(财经类资金管理销售融资岗) (19) 2008-2009校园招聘笔试题目分享 (20) 华为笔试 (20) 华为笔试回来 (21) 华为的C语言笔试题 (22) 华为C/C++笔试题 (23) 2010校园招聘笔试题目分享 应聘华为各类工程师通信基础题库以及答案 电信基础知识题库 (以下题目可以按填空、判断或简答方式出题,也可以经过变化成为选择题) 1、语音信号数字化过程中,采用的是的量化方法是非均匀量化。 2、PCM30/32路系统中,每个码的时间间隔是488ns。 3、PCM30/32路系统中,TS0用于传送帧同步信号,TS16用于传送话路信令。 4、PCM30/32路系统中,复帧的重复频率为500HZ,周期为2ms。 5、程控交换机的硬件可分为话路系统和中央控制系统两部分,整个交换机的控制软件都放在控制系统的存储器中。 6、一般二氧化硅光纤的零色散波长在1310nm左右,而损耗最小点在1550nm波长左右。 7、G.652光纤是零色散波长在1310nm的单模光纤。 8、光缆的基本结构由缆芯、加强元件和护套组成。 9、常用的光缆结构形式有层绞式光缆、束管式光缆、骨架式光缆和带状式光缆。 10、在网状网的拓扑结构中,N个节点完全互连需要N(N-1)/2条传输线路。 11、在星型网的拓扑结构中,N个节点完全互连需要N-1条传输线路。 12、ATM技术是电路交换技术和分组交换技术的结合。 13、根据98年发布的《自动交换电话(数字)网技术体制》,我国电话网分为三级。 14、根据新的电话网体制,我国长途电话网分为二级。

华为校园招聘试题总结(硬件)

华为校园招聘试题总结(硬件) 一简答 1.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 发展方向之一2.数据链路层 答:数据链路可以粗略地理解为数据通道。物理层要为终端设备间的数据通信提供传输媒体及其连接,.媒体是长期的,连接是有生存期的。在连接生存期内,收发两端可以进行不等的一次或多次数据通信.每次通信都要经过建立通信联络和拆除通信联络两过程.这种建起来的数据收发关系就叫作数据链路. 二填空 1.IIR滤波器 答:IIR滤波器有以下几个特点: ① IIR数字滤波器的系统函数可以写成封闭函数的形式。 ② IIR数字滤波器采用递归型结构,即结构上带有反馈环路。 ③ IIR数字滤波器在设计上借助了成熟的模拟滤波器的成果 ④ IIR数字滤波器的相位特性不好控制,对相位要求较高时,需加相位校准网络。

相关文档
最新文档