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 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 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 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 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; 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"); } 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,sizeof(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]; 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",lastscore); 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]); 笔试题 选择题 1、以下程序的输出结果是: #include 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 [华为笔试]2006年华为研发类笔试编程题(2006年10月29日晚,成都电子科技大学考试题目) 题目:网球中心共有100个网球场,每个单位可以来申请1到100的场地,申请的场地编号必须是连续的,如果场地已经被其他单位占用,就不能再次使用,而且单位在使用完场地后必须归还。请设计一个完整的系统(c语言)。(限时5分钟)Tennis.h struct TennisGround { int num; char *agentName; }; typedef struct TennisGround TG; void mallocTG(TG *total); void freeTG(TG *total); Tennis.c #include scanf("%s", agentName); printf("Please input the size of the TennisGround:"); scanf("%d", &size); printf("Please input the TennisGround number you want to start:"); scanf("%d", &start); if((total+start)->agentName != " ") { printf("malloc failed!\n"); exit(-1); } else { while(count < size) { (total+start+count)->agentName = agentName; count++; } } } 精品文档 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。 面试题参考 1.js动态增加行 function addRow(tableId,trId){ var tableObj = document.getElementById(tableId); var trObj = document.getElementById(trId); //var trIndex = trObj.rowIndex+1; var rows = tableObj.rows.length; var cell = ""; var tr = tableObj.insertRow(rows); for(i=0;i 华为笔试试题大全 (陈远跃/整理) 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< 最全的华为校园招聘笔试题 华为笔试 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 一选择 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 本题库是华为集团工程师面试 -内部真实评分标准, -内部真实面试案例,后面有工程师考试试卷和答 案。物超所值,学会本文面试通过率提高80% 华为集团面试经验总结: 华为集团是4轮 一面组长,会问到一些这样问题,为什么会离职,为什么来华为集团婚姻状况,与此同时有没有想问面试官的问题。 二面经理,偏向于部门业务服务。有业务上的试卷需要考试。 三面经理,这一轮会谈到一些业务目标和工作中可能出现的一些问题。大概聊一下工作的想 法,部门的价值和目标,对这个岗位的期望等等以及华为集团和行业的情况。聊天的内容与面试者个人有关,可多可少。(二三是交叉面试防止作弊), 四面职业通道委员会,这一轮的面试非常专业,为技术专家面,目的是定级。确定你面试者的水平大概在什么位置。直接影响后面的收入。各个击中要害。不要想着有简单跳过的部分。在介绍工作内容的过程中,要先介绍自己在组织团队所处的位置,发挥的作用,工作绩效等,条例要清楚。这一轮的面试专业性最强。最后是HR谈薪资的部分,因为行业都有规则,所以时间不会太长。 5面背景调查,主要是面试者在填写简历时提供的名字和联系方式,其中包含领导。HR最后offer。 步骤四、五、六每个一个星期,比如三面完后得到职业通道委员会的面试的通知约一周,四面完后,得到通过与否的消息是一个星期。如果某一步一个星期多没消息,那就是没戏了。 面试的重点分享: 面试的气氛需要注意的: 1面试不能一脸严肃,显得很紧张,要适当微笑。给面试官的印象好。 2面试官提问的问题,不能对抗反驳提问。即使面试官的问题比较苛刻。 细节决定成败,面试如同相亲,面试官会注意到每个细节,身上有没有烟味,头发是不是整齐,说话条例要清晰,一定要集中精神,面试等待的时候也不能看手机。自我介绍的时候要强调身体健康可以加班。可以在最后自己介绍的时候,表示出强烈的来工作,一展抱负的意思。让面试官感受你的积极一面。 面试最重要的3点 1要高度认同面试公司的工作文化和理念。 2要强调自己不断学习。不断成长,能承受压力。 3千万不能说因为自己考试,希望的工作是轻松的,清闲的。 最重要的2点要高度认同面试公司的工作文化和理念。面试前要上公司网站查看下这个公司的文化理念,如果在面试过程把这个点说出来,是要加分非常多的。 收尾阶段 面试官一般会问:“你还有什么问题想问我们?”这个时候千万别不问,有啥没啥的都一定要问两个问题,一个问题可以涉及技术层面,另一个可以涉及应聘职位的发展问题. 前公司的离职原因是必问的问题,不能说前公司太多的不好,可以说因为其他原因, 离职原因:优秀回答: A:原来公司亏损,减员,所以申请离职。 B:原来的公司,更换股东,战略有调整,人员调整。 C 原来的公司,因为搬家,搬家到很远的地方,过去不方便。 D 原来的公司,调整作息时间,周二放假,周日上班。 E 自己想要成长,希望可以更换岗位,挑战新的岗位,新的工作。 自我介绍: 是被面试者在纸面之外最能够呈现能力的一个地方。一般情况下,也是被面试者在整个面试过程中惟一一次主动展示自我的机会 第一,考察自我介绍内容和递交简历内容是否相冲突?如果简历是真实的,口述自我介绍就不会有明显出入。如果简历有假,自我介绍阶段一般就会漏马脚。如被面试者反问:“我的经历在简历里都写了”,面试官会认为这人得瑟,印象分一下子降为负数。 第二,考察被面试者基本的逻辑思维能力、语言表达能力,总结提炼概括能力。 第三,考察被面试者是否聚焦,是否简练和精干,现场的感知能力与把控能力。 第四,考察被面试者初步的自我认知能力和价值取向。因为被面试者要叙述职业切换关键节 华为 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地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 华为软件测试工程师笔试题目 1、怎么来设计测试方案 根据测试需求(包括功能需求和非功能性需求),识别测试要点,识别测试环境要求,安排测试轮次,根据项目计划和开发计划做整体的测试安排。 被测试的特性:通过对需求规格说明书进行分析,列出本次测试需要进行测试的各部分特性(如要测试的功能需求、性能需求、安全性需求等等); 不被测试的特性:由于资源、进度等方面原因,本次测试不列入测试范围的特性; 测试组网图:进行本次系统测试所需要的软硬件设备、配置数据已及相互间的逻辑、物理连接。今后测试执行时需要依据这个组网图来进行环境的搭建。 2、如果给你一个B/S系统你怎么来进行测试 此题答案还可用于回答测试流程,测试流程题亦可参考15题。 阅读系统需求,充分理解需求,记录问题,并与项目需求人员充分沟通。 编写测试需求,包括系统功能和非功能测试要点、测试类型、测试进度质量要求等。 制定测试计划,包括熟悉测试业务、设计测试用例、执行测试用例、进行测试小结、编写测试报告,任务颗粒度一般应小于5人天 编写测试用例,根据测试方案设计用例,即便没有明确的性能和安全测试要求,也应识别进行此两项测试。 执行软件测试, 进行测试小结,如果测试持续时间较长,每个版本间隙总结本轮测试。 编写测试报告,总结测试过程,汇总度量数据。 3、怎么进行工作流的测试 把握需求,找准结点,理清流程,画出流转图,弄清节点间的数据流转,设计测试用例的时候必须覆盖所有可能的流程。 工作流: 如果问到有没有做过,根据对工作流的了解情况回答,如果比较了解,可以把参与的某个项目中说上一些有工作流的,如果不是很了解就说没有做过,但是学习过相关知识。 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; 华为软件研发岗笔试题 总结 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT 操作系统(OperatingSystem,简称OS)是管理计算机系统的全部硬件资源包括软件资源及数据资源;控制程序运行;改善人机界面;为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,为用户提供方便的、有效的、友善的服务界面。 操作系统通常是最靠近硬件的一层系统软件,它把硬件裸机改造成为功能完善的一台虚拟机,使得计算机系统的使用和管理更加方便,计算机资源的利用效率更高,上层的应用程序可以获得比硬件提供的功能更多的支持。 操作系统是一个庞大的管理控制程序,大致包括5个方面的管理功能:进程与处理机管理、作业管理、存储管理、设备管理、文件管理。目前微机上常见的操作系统有DOS、OS/2、UNIX、XENIX、LINUX、Windows2000、Netware等。 华为软件笔试题 一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分) 1、有数组定义inta[2][2]={{1},{2,3}};则a[0][1]的值为0。(正确) 2、int(*ptr)(),则ptr是一维数组的名字。(错误) 3、指针在任何情况下都可进行>,<,>=,<=,==运算。(正确) 4、switch(c)语句中c可以是int,long,char,float,unsignedint类型。(错误) 5、#defineprint(x)printf("theno,"#x",is")(正确) 二、填空题(共30分) 1、在windows下,写出运行结果,每空2分,共10分。 charstr[]="Hello"; char*p=str; intn=10; sizeof(str)=(6) sizeof(p)=(4) sizeof(n)=(4) voidfunc(charstr[100]) {} sizeof(str)=(4) 华为2014笔试算法题汇总 1.通过键盘输入一串小写字母(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打印输出 当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。 一定要保证编译运行不受影响 [cpp] view plaincopy ////////////////////////////////////////////////////////////////////////// #include using namespace std; bool g_flag[26]; void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr) { assert(pInputStr != NULL); int i = 0; if (pInputStr == NULL || lInputLen <= 1) { return; } const char *p = pInputStr; while(*p != '\0') { if (g_flag[(*p - 'a')]) { p++; }else{ pOutputStr[i++] = *p; g_flag[*p - 'a'] = 1; p++; } } 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 试题 选择题 1、以下程序的输出结果是: 2 0 \r\n 正确值2 0 \r转义符:回车,\n转义符:换行 #include 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; 则下列程序段的输出结果为—— 操作系统(Operating System,简称OS)是管理计算机系统的全部硬件资源包括软件资源及数据资源;控制程序运行;改善人机界面;为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,为用户提供方便的、有效的、友善的服务界面。 操作系统通常是最靠近硬件的一层系统软件,它把硬件裸机改造成为功能完善的一台虚拟机,使得计算机系统的使用和管理更加方便,计算机资源的利用效率更高,上层的应用程序可以获得比硬件提供的功能更多的支持。 操作系统是一个庞大的管理控制程序,大致包括5个方面的管理功能:进程与处理机管理、作业管理、存储管理、设备管理、文件管理。目前微机上常见的操作系统有DOS、OS/2、UNIX、XENIX、LINUX、Windows2000、Netware等。 华为软件笔试题 一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分) 1、有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。(正确) 2、int (*ptr) (),则ptr是一维数组的名字。(错误) 3、指针在任何情况下都可进行>, <, >=, <=, = =运算。(正确) 4、switch(c) 语句中c可以是int, long, char, float, unsigned int 类型。(错误) 5、#define print(x) printf("the no, "#x",is ") (正确) 二、填空题(共30分) 1、在windows下,写出运行结果,每空2分,共10分。 char str[ ]= "Hello"; char *p=str; int n=10; sizeof(str)=(6) sizeof(p)=( 4) sizeof(n)=(4 ) void func(char str[100]) { } sizeof(str)=(4 ) 2、void setmemory(char **p, int num) { *p=(char *) malloc(num);} void test(void) { char *str=NULL; getmemory(&str,100); strcpy(str,"hello"); printf(str); } 运行test函数有什么结果?(hello)10分 3、设int arr[]={6,7,8,9,10}; int *ptr=arr; (ptr++)+=123; printf("%d,%d",*ptr,*(++ptr)); (8,8 ) 10分 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华为笔试题(答案)
华为笔试题大全史上最齐全
华为校招·硬件技术工程师机考试题及答案
华为面试题汇总与答案_1
华为笔试试题大全
最全的华为校园招聘笔试题
华为硬件笔试题(最新版)
华为工程师面试题总结(有答案) 80%参考
华为笔试题大全(史上最齐全)
华为软件测试工程师笔试题目
2020华为校园招聘笔试真题题库精选答案解析(南研所)
华为软件研发岗笔试题总结
2014华为校园招聘笔试算法题汇总
华为2012校园招聘软件上机笔试题+准确答案
华为笔试题done
(整理)华为笔试题.
华为软件研发岗笔试题总结
届华为校园招聘上机考试题