㈠ 华为c语言上机试题

#include <stdio.h>
#include <assert.h>

void take_num(const char *strIn, int *n, unsigned int *outArray)
{
const char * p = strIn;
int next = 0;

*n = 0;
outArray[0] = 0;
assert(p && n && outArray);

for (p = strIn;*p;p++) {
(('0'<=*p)&&(*p<='9')) {
outArray[*n] = (outArray[*n] * 10)+((*p) - '0');
next = 1; /*后面还有*/
} else {
if (next == 1) {
(*n)++;
}
next = 0;
}
}
}

void max_prefix_match(const char *ip_addr, const char *net_addr_array[], int *n)
{
int ip,tar_net,tar_mask;/*ip地址*/
int ip_it[4],net_it[4],mask_it[4];
char * p;
int index,max_index,cur_bits,max_bits = 0,bit;

*n = -1;
sscanf(ip_addr,"%d.%d.%d.%d",&ip_it[0],&ip_it[1],&ip_it[2],&ip_it[3]);

ip = ((ip_it[0]<<24)+(ip_it[1]<<16)+(ip_it[2]<< 8)+ip_it[3]);
for (index = 0;net_addr_array[index][0] != '\0';index++) {
/*获取网络号和掩码*/
p = net_addr_array[index];

sscanf(p,"%d.%d.%d.%d/%d.%d.%d.%d",
&net_it[0],&net_it[1],&net_it[2],&net_it[3],
&mask_it[0],&mask_it[1],&mask_it[2],&mask_it[3]);

tar_mask = ((mask_it[0]<<24)+(mask_it[1]<<16)+(mask_it[2]<< 8)+mask_it[3]);
tar_net = ((net_it[0]<<24)+(net_it[1]<<16)+(net_it[2]<< 8)+net_it[3]);

if (((tar_mask) & (ip)) == (tar_net)) {
cur_bits = 0;
/*计算1的个数*/
for (bit = 0;bit < sizeof(tar_mask) * 8;bit++) {
cur_bits += tar_mask&1;
tar_mask >>= 1;
}

if (cur_bits > max_bits) {
max_bits = cur_bits;
max_index = index;
}
}
}
if (max_bits != 0) {
*n = max_index;
}
}

int main()
{
int i, n,arrayOut[100] = {0};
char *strIn = "ab00cd+123fght456-25 3.005fgh";
char *ip_addr = "192.168.1.100 ";
char *net_addr_array[1024] = {
"192.168.1.128/255.255.255.192",
"192.168.1.0/255.255.255.0",
"192.168.1.64/255.255.255.192",
"0.0.0.0/0.0.0.0",
""
};

take_num(strIn,&n,arrayOut);
printf("<1>:input:%s\noutput: [%d]\n",strIn,n);
for (i = 0;i < n;i++) {
printf("%d\n",arrayOut[i]);
}

max_prefix_match(ip_addr,net_addr_array,&n);

if (n != -1) {
printf("<2>max:[%d] %s",n,net_addr_array[n]);
}

return 0;
}

㈡ 华为面试c语言一般都是哪些方面

具体看来你的职位了
不同职位 面试源C语言上 肯定不一样。
如果是做上层的 那么 QT MFC 或者C++相关的 问的会多一些
如果是做底层的 那么与硬件相关的 会问的多

不管什么职位,数据结构 基本算法什么的 必须有
难易程度 一样是根据职位来的。

㈢ 华为C语言字符串试题

1、在c语言中存储一个字符串,一般有两种方法,一种是字符指针,一种是使用字符数组。2、例如:
const char *str = "hello"; //使用字符串指针
const char str[] = "hello"; //使用字符数组
3、如果保存的字符串,需要修改。一般使用字符数组。
例如:
char path[256] = "c:\\windows\\";
strcat(path, "system32");

㈣ 高分跪求 华为 C语言面试题

华为面试流程、题目及工资水平- -
Tag: 华为
华为面试流程一共5轮
首先资格考试和面试(相应职位的资深工程师主持);
其次应聘职位的部门付经理面试
再次应聘职位的部门付经理面试
再次人事面试
最后是付总级的面试。

常问问题:

Q1:请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图?

Q2:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用? TCP与UDP呢?

Q3:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?

Q4:请问C++的类和C里面的struct有什么区别?

Q5:请讲一讲析构函数和虚函数的用法和作用?

Q6:全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?

Q7:一些寄存器的题目,主要是寻址和内存管理等一些知识。

Q8:8086是多少位的系统?在数据总线上是怎么实现的?

测试题:

1、由于你是新员工,没有公配手机时,当你在现场遇到紧急事故时,你会()向公司求助
A、打用户机房内的电话
B、借用户手机
C、拔110
D、拔200或300
E、立即打车回办事处

(答案:D,答CE者立即辞退,按照公司规定,不能随便使用用户的电话,以提高公司形象)

2、工程师A某周日晚正在家里看电视,突然手机响了,电信局运维员工突然
打电话过来,小A接起电话,用户声音很急迫,说:“不好了,瘫了,你快来处理”。
请问这里“瘫了”最有可能是什么意思()
A、设备漏电将维护人员电瘫了
B、设备支架不够结实,被压瘫了
C、设备坏了,将维护人员吓瘫了
D、设备坏了,大面积业务中断了

(答案:D,答错者,按不合格处理)

工资水平:
本科3500+500+1000 有经验再加500
硕士4000+500+1000 有经验再加500

㈤ 华为面试c语言一般都是哪些方面

华为工作压力大了。。。

㈥ 华为C语言面试题求解

第一行,定来义数组arr,元素共八个
第二行源,定义指针p指向arr数组
此时的*p还是等于arr数组的第0个元素,也就是1
第三行,p++里的++是最后才运算,所以先执行*p+=123,也就是arr的第0个元素被赋值为123
此时arr变成{123,2,3,4,5,6,7,8} ,然后是p++,此时*p已经是等于arr的第1个元素了,也就是2
第四行,在执行printf时,括号里的参数是从右往左的顺序进行读取的,也就是说先执行 *(++p),也就是p先加一再指针,指向的是arr第2个元素3,然后在执行*p,还是3
最后显示的内容就是
3,3
press any key to continue

㈦ 求华为笔试题答案:写一个c语言程序使系统崩溃。

办得到 但是要在visual C++6.0下
目前很多地方都转载着利用9行代码史windows崩溃的文章,不过我发现没有关于为什么会使windows崩溃的分析。我先把原文给大家看看。然后把具体的细节说一下。
微软一直声称Windows XP多么多么稳定可靠,但日前一位名为Masaru Tsuchiyama的外国编程爱好者刊出了一小段C语言代码。这一只有9行的小程序如果在Windows XP/2000下运行,则可导致系统完全崩溃,并重新启动。但此程序对其他版本的Windows没有任何影响。这一产生无限循环输出的小程序的代码如下:
#include
int main( void )
{
for(;{
printf( "hung up\t\t\b\b\b\b\b\b" );
print("hung up\t\t\b\b\b\b\b\b";
}
return 0;
}
如果去掉Print语句,此程序还会导致NT 4.0系统出现蓝屏错误。
但愿微软赶快修补这一漏洞。同时提醒大家,此代码只可用于研究,不得用于任何非法勾当。
如果去掉Print语句,此程序还会导致NT 4.0系统出现蓝屏错误。以上遍上网上纷纷转载的原文。

关于为什么会导致错误,就在看下面的分析吧。
\b是退格
代码是用退格符把console里的光标退成null,
然后显示任一字符(除\t),即崩溃.
但是一般情况\b是不能退出规定的区域的,
而如\b的前一个字符是\t则可以退出规定的区域(bug?).
双击运行时,系统将新建一个console,所以我们的显示在console
的左上角,我们只需两个\b就可退出屏幕(第一个吃掉\t).
原因是win32子系统意外中止导致系统崩溃.smss是windows系统建立的第一个用户进程,他的工作之一是建立csrss和winlogon进程,然后一直等待这两个进程的句柄,如果这两个进程意外中止,
smss 将导致系统崩溃.csrss进程就是专门负责所有win32进程和系统进行通信的进程.所有win32进程的系统调用都会由csrss帮你完成,但是这样做因为需要进程切换所以效率太低.所以在windowsNT从3.51升级到4.0时将许多部分从用户态移入内核态,win32进程的系统调用将直接进行以减少进程切换时间.但是仍有少量系统调用需要csrss进程完成,据我所知createprocess
是这样的函数,所有console上的显示是这样的函数(还有其他的).
当我们调用printf("\t\b\ba")最终将调用WriteFile API.
WriteFile((HANDLE)7,"\t\b\ba",NULL,NULL)等同于
printf("\t\b\ba"),7是console标准输入的句柄.
WriteFile判断句柄类型,如是文件句柄将调用ntdll.dll中的
NtWriteFile函数.如是console句柄将调用WriteConsoleA函数.
WriteConsoleA函数将调用ntdll.dll中的csrClientCallServer
函数通知csrss进程,然后调用NtRequestWaitReplyPort等待结果.
估计是csrss进程在处理这个请求过程中出错了.

㈧ 用c语言实现排列组合问题(华为软件面试试题之一)

/* 算法 */
// 从剩余的nM个篮子里空出nX = m*n - x;个球
int GetBall(int nX, int nM, int n) {
  int nA;
  int nS = 0;
/* 如果这次情况里确定从一个篮子里空出球 */
  // 如果nM等于1 返回 1;
  if (nX <= n) {
/* 最少从一个篮子里拿走,最多必须从 nM 与 n 中 较少个数的篮子里拿走 */
    // 当nA从 1 增加到 nX,循环执行下行语句
      nS += GetBall(nA,1,n) + GetBall(nX-nA,nM-1,n);
    // 返回 nS;
  } else if (nX > n) {
/* 1. 知道剩下的篮子数目nM,2. 可以保证nX-nA <= nM*n */
    // 当nA从 n 减少到 nX-n*nM,循环执行下行语句
      nS += GetBall(nA,1,n) + GetBall(nX-nA,nM-1,n);
    // 返回 nS;
  }
}

int main() {
  int m,n,x;
  m = 5; n = 6; x = 22;
  printf("%d\n",GetBall(m*n-x, m, n));
  return 0;
}

㈨ C语言面试题

关注一下

㈩ 请教华为的C语言笔试题:int (*ptr) (),则一维数组的名字是ptr

不存在一般的问题。ptr就是一个函数指针。
它可以指向任意类似如下的函数;
int fname(//任意参数)//fname任意。