华为机试题
【2011】
1、
(stdlib.h里面定义了五种类型、一些宏和通用工具函数。 类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit())
#include<stdio.h>
#include<stdlib.h>
#include<asrt.h>
眼干症#include<string.h>
#define LENGTH 13
int verifyMsisdn(char *inMsisdn)
{
char *pchar=NULL;
asrt(inMsisdn!=NULL);
if(LENGTH==strlen(inMsisdn))
{
if(('8'==*inMsisdn)&&(*(inMsisdn+1)=='6'))
{
while(*inMsisdn!='\0')
{
if((*inMsisdn>='0')&&(*inMsisdn<='9'))
inMsisdn++;
el
return 2 ;
}
}
el
return 3;
}
el
return 1;
return 0;
}
int main()
{
char *pchar=NULL;
unsigned char ichar=0;
int result;
switch(ichar)崔颢的《黄鹤楼》
{
ca 0:
pchar="8612345363789";break;
ca 1:
pchar="861111111111111";break;
ca 2:
pchar="86s1234536366"; break;
default:
break;
}
result =verifyMsisdn(pchar);
printf("result is %d\n",result);
}
华赛面试:
1.
char m[]={"I", "LOVE", "CHINA"}
char* p=m;
printf("%s", *p++);
printf("%c", **p);
int main()
{
double x=1;
double y;
y=x+3/2;
printf("%f\n",y);
return 0;
} ////// 结果为2.000000
3.
4.找错
unsigned int f()
{
unsigned char a=123;
unsigned char res;
while(a-->=0)
{
res+=a;
}
return res;
}//res没有初始化
5.
struct node
{
int data;
node* pre;
node* next;
}
结构体数组转双向循环链表
1. 数组比较(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 的元素个数;
军训心得体会500int 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<stdlib.h>
#include<stdio.h>
#include<string.h>
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++;
}
} //蓝色字体部分也可以换成如下的代码 if(array1[len1-1]==array2[len2-1]) break; el 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);
}
2. 约瑟夫问题
• 问题描述:
输入一个由随机数组成的数列(数列中每个数均是大于 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_arra
y[])
【输入】 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<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node
{
int num;
struct Node *next;
}node;
node *creat(int len,int input_array[])
{
node *h,*p,*s;
int i;
h=(node*)malloc(sizeof(node));
h->num=input_array[0];
p=h;
for(i=1;i<len;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, int output_array[])
{
node *p,*q,*s;
int i=0,j=0,k;
p=creat(len,input_array);
while(p->next!=p)
{
for(i=1;i<m;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]=m;
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);
}
3. 简单四则运算
• 问题描述:
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注: 1、表达式只含 +, -, *, / 四则运算符,不含括号
2、表达式数值只包含个位整数(0-9),且不会出现 0 作为除数的情况
3、要考虑加减乘除按通常四则运算规定的计算优先级
4、除法用整数除法,即仅保留除法运算结果的整数部分。比如 8/3=2。输入表